1*e1eccf28SAndroid Build Coastguard Workertarget datalayout = "e-m:e-i64:64-i128:128-n32:64-S128" 2*e1eccf28SAndroid Build Coastguard Workertarget triple = "aarch64-linux-android" 3*e1eccf28SAndroid Build Coastguard Worker 4*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 5*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;; INTRINSICS ;;;;;;;;;; 6*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 7*e1eccf28SAndroid Build Coastguard Worker 8*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.aarch64.neon.fmax.v2f32(<2 x float>, <2 x float>) nounwind readnone 9*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.aarch64.neon.fmax.v4f32(<4 x float>, <4 x float>) nounwind readnone 10*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.smax.v2i32(<2 x i32>, <2 x i32>) nounwind readnone 11*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32>, <4 x i32>) nounwind readnone 12*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.umax.v2i32(<2 x i32>, <2 x i32>) nounwind readnone 13*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.umax.v4i32(<4 x i32>, <4 x i32>) nounwind readnone 14*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.smax.v4i16(<4 x i16>, <4 x i16>) nounwind readnone 15*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.umax.v4i16(<4 x i16>, <4 x i16>) nounwind readnone 16*e1eccf28SAndroid Build Coastguard Worker 17*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.aarch64.neon.fmin.v2f32(<2 x float>, <2 x float>) nounwind readnone 18*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.aarch64.neon.fmin.v4f32(<4 x float>, <4 x float>) nounwind readnone 19*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.smin.v2i32(<2 x i32>, <2 x i32>) nounwind readnone 20*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32>, <4 x i32>) nounwind readnone 21*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.umin.v2i32(<2 x i32>, <2 x i32>) nounwind readnone 22*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i32> @llvm.aarch64.neon.umin.v4i32(<4 x i32>, <4 x i32>) nounwind readnone 23*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.smin.v4i16(<4 x i16>, <4 x i16>) nounwind readnone 24*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.umin.v4i16(<4 x i16>, <4 x i16>) nounwind readnone 25*e1eccf28SAndroid Build Coastguard Worker 26*e1eccf28SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.aarch64.neon.sqshl.v8i8(<8 x i16>, <8 x i16>) nounwind readnone 27*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.sqshl.v4i16(<4 x i32>, <4 x i32>) nounwind readnone 28*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.sqshl.v2i32(<2 x i64>, <2 x i64>) nounwind readnone 29*e1eccf28SAndroid Build Coastguard Worker 30*e1eccf28SAndroid Build Coastguard Workerdeclare <8 x i8> @llvm.aarch64.neon.sqshrun.v8i8(<8 x i16>, <8 x i16>) nounwind readnone 31*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i16> @llvm.aarch64.neon.sqshrun.v4i16(<4 x i32>, <4 x i32>) nounwind readnone 32*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x i32> @llvm.aarch64.neon.sqshrun.v2i32(<2 x i64>, <2 x i64>) nounwind readnone 33*e1eccf28SAndroid Build Coastguard Worker 34*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.aarch64.neon.frecpe.v2f32(<2 x float>) nounwind readnone 35*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.aarch64.neon.frecpe.v4f32(<4 x float>) nounwind readnone 36*e1eccf28SAndroid Build Coastguard Worker 37*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.aarch64.neon.frsqrte.v2f32(<2 x float>) nounwind readnone 38*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.aarch64.neon.frsqrte.v4f32(<4 x float>) nounwind readnone 39*e1eccf28SAndroid Build Coastguard Worker 40*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.aarch64.neon.frecps.v2f32(<2 x float>, <2 x float>) nounwind readnone 41*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.aarch64.neon.frecps.v4f32(<4 x float>, <4 x float>) nounwind readnone 42*e1eccf28SAndroid Build Coastguard Worker 43*e1eccf28SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.aarch64.neon.frsqrts.v2f32(<2 x float>, <2 x float>) nounwind readnone 44*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.aarch64.neon.frsqrts.v4f32(<4 x float>, <4 x float>) nounwind readnone 45*e1eccf28SAndroid Build Coastguard Worker 46*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 47*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;; HELPERS ;;;;;;;;;; 48*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 49*e1eccf28SAndroid Build Coastguard Worker 50*e1eccf28SAndroid Build Coastguard Workerdefine internal <4 x float> @smear_4f(float %in) nounwind readnone alwaysinline { 51*e1eccf28SAndroid Build Coastguard Worker %1 = insertelement <4 x float> undef, float %in, i32 0 52*e1eccf28SAndroid Build Coastguard Worker %2 = insertelement <4 x float> %1, float %in, i32 1 53*e1eccf28SAndroid Build Coastguard Worker %3 = insertelement <4 x float> %2, float %in, i32 2 54*e1eccf28SAndroid Build Coastguard Worker %4 = insertelement <4 x float> %3, float %in, i32 3 55*e1eccf28SAndroid Build Coastguard Worker ret <4 x float> %4 56*e1eccf28SAndroid Build Coastguard Worker} 57*e1eccf28SAndroid Build Coastguard Worker 58*e1eccf28SAndroid Build Coastguard Workerdefine internal <4 x i32> @smear_4i(i32 %in) nounwind readnone alwaysinline { 59*e1eccf28SAndroid Build Coastguard Worker %1 = insertelement <4 x i32> undef, i32 %in, i32 0 60*e1eccf28SAndroid Build Coastguard Worker %2 = insertelement <4 x i32> %1, i32 %in, i32 1 61*e1eccf28SAndroid Build Coastguard Worker %3 = insertelement <4 x i32> %2, i32 %in, i32 2 62*e1eccf28SAndroid Build Coastguard Worker %4 = insertelement <4 x i32> %3, i32 %in, i32 3 63*e1eccf28SAndroid Build Coastguard Worker ret <4 x i32> %4 64*e1eccf28SAndroid Build Coastguard Worker} 65*e1eccf28SAndroid Build Coastguard Worker 66*e1eccf28SAndroid Build Coastguard Workerdefine internal <4 x i16> @smear_4s(i16 %in) nounwind readnone alwaysinline { 67*e1eccf28SAndroid Build Coastguard Worker %1 = insertelement <4 x i16> undef, i16 %in, i32 0 68*e1eccf28SAndroid Build Coastguard Worker %2 = insertelement <4 x i16> %1, i16 %in, i32 1 69*e1eccf28SAndroid Build Coastguard Worker %3 = insertelement <4 x i16> %2, i16 %in, i32 2 70*e1eccf28SAndroid Build Coastguard Worker %4 = insertelement <4 x i16> %3, i16 %in, i32 3 71*e1eccf28SAndroid Build Coastguard Worker ret <4 x i16> %4 72*e1eccf28SAndroid Build Coastguard Worker} 73*e1eccf28SAndroid Build Coastguard Worker 74*e1eccf28SAndroid Build Coastguard Worker 75*e1eccf28SAndroid Build Coastguard Worker 76*e1eccf28SAndroid Build Coastguard Workerdefine internal <2 x float> @smear_2f(float %in) nounwind readnone alwaysinline { 77*e1eccf28SAndroid Build Coastguard Worker %1 = insertelement <2 x float> undef, float %in, i32 0 78*e1eccf28SAndroid Build Coastguard Worker %2 = insertelement <2 x float> %1, float %in, i32 1 79*e1eccf28SAndroid Build Coastguard Worker ret <2 x float> %2 80*e1eccf28SAndroid Build Coastguard Worker} 81*e1eccf28SAndroid Build Coastguard Worker 82*e1eccf28SAndroid Build Coastguard Workerdefine internal <2 x i32> @smear_2i(i32 %in) nounwind readnone alwaysinline { 83*e1eccf28SAndroid Build Coastguard Worker %1 = insertelement <2 x i32> undef, i32 %in, i32 0 84*e1eccf28SAndroid Build Coastguard Worker %2 = insertelement <2 x i32> %1, i32 %in, i32 1 85*e1eccf28SAndroid Build Coastguard Worker ret <2 x i32> %2 86*e1eccf28SAndroid Build Coastguard Worker} 87*e1eccf28SAndroid Build Coastguard Worker 88*e1eccf28SAndroid Build Coastguard Workerdefine internal <2 x i16> @smear_2s(i16 %in) nounwind readnone alwaysinline { 89*e1eccf28SAndroid Build Coastguard Worker %1 = insertelement <2 x i16> undef, i16 %in, i32 0 90*e1eccf28SAndroid Build Coastguard Worker %2 = insertelement <2 x i16> %1, i16 %in, i32 1 91*e1eccf28SAndroid Build Coastguard Worker ret <2 x i16> %2 92*e1eccf28SAndroid Build Coastguard Worker} 93*e1eccf28SAndroid Build Coastguard Worker 94*e1eccf28SAndroid Build Coastguard Worker 95*e1eccf28SAndroid Build Coastguard Workerdefine internal <4 x i32> @smear_4i32(i32 %in) nounwind readnone alwaysinline { 96*e1eccf28SAndroid Build Coastguard Worker %1 = insertelement <4 x i32> undef, i32 %in, i32 0 97*e1eccf28SAndroid Build Coastguard Worker %2 = insertelement <4 x i32> %1, i32 %in, i32 1 98*e1eccf28SAndroid Build Coastguard Worker %3 = insertelement <4 x i32> %2, i32 %in, i32 2 99*e1eccf28SAndroid Build Coastguard Worker %4 = insertelement <4 x i32> %3, i32 %in, i32 3 100*e1eccf28SAndroid Build Coastguard Worker ret <4 x i32> %4 101*e1eccf28SAndroid Build Coastguard Worker} 102*e1eccf28SAndroid Build Coastguard Worker 103*e1eccf28SAndroid Build Coastguard Worker 104*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 105*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;; CLAMP ;;;;;;;;;; 106*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 107*e1eccf28SAndroid Build Coastguard Worker 108*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z5clampDv4_fS_S_(<4 x float> %value, <4 x float> %low, <4 x float> %high) nounwind readonly { 109*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <4 x float> @llvm.aarch64.neon.fmin.v4f32(<4 x float> %value, <4 x float> %high) nounwind readnone 110*e1eccf28SAndroid Build Coastguard Worker %2 = tail call <4 x float> @llvm.aarch64.neon.fmax.v4f32(<4 x float> %1, <4 x float> %low) nounwind readnone 111*e1eccf28SAndroid Build Coastguard Worker ret <4 x float> %2 112*e1eccf28SAndroid Build Coastguard Worker} 113*e1eccf28SAndroid Build Coastguard Worker 114*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z5clampDv4_fff(<4 x float> %value, float %low, float %high) nounwind readonly { 115*e1eccf28SAndroid Build Coastguard Worker %_high = tail call <4 x float> @smear_4f(float %high) nounwind readnone 116*e1eccf28SAndroid Build Coastguard Worker %_low = tail call <4 x float> @smear_4f(float %low) nounwind readnone 117*e1eccf28SAndroid Build Coastguard Worker %out = tail call <4 x float> @_Z5clampDv4_fS_S_(<4 x float> %value, <4 x float> %_low, <4 x float> %_high) nounwind readonly 118*e1eccf28SAndroid Build Coastguard Worker ret <4 x float> %out 119*e1eccf28SAndroid Build Coastguard Worker} 120*e1eccf28SAndroid Build Coastguard Worker 121*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z5clampDv3_fS_S_(<3 x float> %value, <3 x float> %low, <3 x float> %high) nounwind readonly { 122*e1eccf28SAndroid Build Coastguard Worker %_value = shufflevector <3 x float> %value, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 123*e1eccf28SAndroid Build Coastguard Worker %_low = shufflevector <3 x float> %low, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 124*e1eccf28SAndroid Build Coastguard Worker %_high = shufflevector <3 x float> %high, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 125*e1eccf28SAndroid Build Coastguard Worker %a = tail call <4 x float> @llvm.aarch64.neon.fmin.v4f32(<4 x float> %_value, <4 x float> %_high) nounwind readnone 126*e1eccf28SAndroid Build Coastguard Worker %b = tail call <4 x float> @llvm.aarch64.neon.fmax.v4f32(<4 x float> %a, <4 x float> %_low) nounwind readnone 127*e1eccf28SAndroid Build Coastguard Worker %c = shufflevector <4 x float> %b, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2> 128*e1eccf28SAndroid Build Coastguard Worker ret <3 x float> %c 129*e1eccf28SAndroid Build Coastguard Worker} 130*e1eccf28SAndroid Build Coastguard Worker 131*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z5clampDv3_fff(<3 x float> %value, float %low, float %high) nounwind readonly { 132*e1eccf28SAndroid Build Coastguard Worker %_value = shufflevector <3 x float> %value, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 133*e1eccf28SAndroid Build Coastguard Worker %_high = tail call <4 x float> @smear_4f(float %high) nounwind readnone 134*e1eccf28SAndroid Build Coastguard Worker %_low = tail call <4 x float> @smear_4f(float %low) nounwind readnone 135*e1eccf28SAndroid Build Coastguard Worker %a = tail call <4 x float> @llvm.aarch64.neon.fmin.v4f32(<4 x float> %_value, <4 x float> %_high) nounwind readnone 136*e1eccf28SAndroid Build Coastguard Worker %b = tail call <4 x float> @llvm.aarch64.neon.fmax.v4f32(<4 x float> %a, <4 x float> %_low) nounwind readnone 137*e1eccf28SAndroid Build Coastguard Worker %c = shufflevector <4 x float> %b, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2> 138*e1eccf28SAndroid Build Coastguard Worker ret <3 x float> %c 139*e1eccf28SAndroid Build Coastguard Worker} 140*e1eccf28SAndroid Build Coastguard Worker 141*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z5clampDv2_fS_S_(<2 x float> %value, <2 x float> %low, <2 x float> %high) nounwind readonly { 142*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <2 x float> @llvm.aarch64.neon.fmin.v2f32(<2 x float> %value, <2 x float> %high) nounwind readnone 143*e1eccf28SAndroid Build Coastguard Worker %2 = tail call <2 x float> @llvm.aarch64.neon.fmax.v2f32(<2 x float> %1, <2 x float> %low) nounwind readnone 144*e1eccf28SAndroid Build Coastguard Worker ret <2 x float> %2 145*e1eccf28SAndroid Build Coastguard Worker} 146*e1eccf28SAndroid Build Coastguard Worker 147*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z5clampDv2_fff(<2 x float> %value, float %low, float %high) nounwind readonly { 148*e1eccf28SAndroid Build Coastguard Worker %_high = tail call <2 x float> @smear_2f(float %high) nounwind readnone 149*e1eccf28SAndroid Build Coastguard Worker %_low = tail call <2 x float> @smear_2f(float %low) nounwind readnone 150*e1eccf28SAndroid Build Coastguard Worker %a = tail call <2 x float> @llvm.aarch64.neon.fmin.v2f32(<2 x float> %value, <2 x float> %_high) nounwind readnone 151*e1eccf28SAndroid Build Coastguard Worker %b = tail call <2 x float> @llvm.aarch64.neon.fmax.v2f32(<2 x float> %a, <2 x float> %_low) nounwind readnone 152*e1eccf28SAndroid Build Coastguard Worker ret <2 x float> %b 153*e1eccf28SAndroid Build Coastguard Worker} 154*e1eccf28SAndroid Build Coastguard Worker 155*e1eccf28SAndroid Build Coastguard Workerdefine float @_Z5clampfff(float %value, float %low, float %high) nounwind readonly { 156*e1eccf28SAndroid Build Coastguard Worker %1 = fcmp olt float %value, %high 157*e1eccf28SAndroid Build Coastguard Worker %2 = select i1 %1, float %value, float %high 158*e1eccf28SAndroid Build Coastguard Worker %3 = fcmp ogt float %2, %low 159*e1eccf28SAndroid Build Coastguard Worker %4 = select i1 %3, float %2, float %low 160*e1eccf28SAndroid Build Coastguard Worker ret float %4 161*e1eccf28SAndroid Build Coastguard Worker} 162*e1eccf28SAndroid Build Coastguard Worker 163*e1eccf28SAndroid Build Coastguard Worker 164*e1eccf28SAndroid Build Coastguard Worker 165*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i32> @_Z5clampDv4_iS_S_(<4 x i32> %value, <4 x i32> %low, <4 x i32> %high) nounwind readonly { 166*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32> %value, <4 x i32> %high) nounwind readnone 167*e1eccf28SAndroid Build Coastguard Worker %2 = tail call <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32> %1, <4 x i32> %low) nounwind readnone 168*e1eccf28SAndroid Build Coastguard Worker ret <4 x i32> %2 169*e1eccf28SAndroid Build Coastguard Worker} 170*e1eccf28SAndroid Build Coastguard Worker 171*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i32> @_Z5clampDv4_iii(<4 x i32> %value, i32 %low, i32 %high) nounwind readonly { 172*e1eccf28SAndroid Build Coastguard Worker %_high = tail call <4 x i32> @smear_4i(i32 %high) nounwind readnone 173*e1eccf28SAndroid Build Coastguard Worker %_low = tail call <4 x i32> @smear_4i(i32 %low) nounwind readnone 174*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32> %value, <4 x i32> %_high) nounwind readnone 175*e1eccf28SAndroid Build Coastguard Worker %2 = tail call <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32> %1, <4 x i32> %_low) nounwind readnone 176*e1eccf28SAndroid Build Coastguard Worker ret <4 x i32> %2 177*e1eccf28SAndroid Build Coastguard Worker} 178*e1eccf28SAndroid Build Coastguard Worker 179*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i32> @_Z5clampDv3_iS_S_(<3 x i32> %value, <3 x i32> %low, <3 x i32> %high) nounwind readonly { 180*e1eccf28SAndroid Build Coastguard Worker %_value = shufflevector <3 x i32> %value, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 181*e1eccf28SAndroid Build Coastguard Worker %_low = shufflevector <3 x i32> %low, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 182*e1eccf28SAndroid Build Coastguard Worker %_high = shufflevector <3 x i32> %high, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 183*e1eccf28SAndroid Build Coastguard Worker %a = tail call <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32> %_value, <4 x i32> %_high) nounwind readnone 184*e1eccf28SAndroid Build Coastguard Worker %b = tail call <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32> %a, <4 x i32> %_low) nounwind readnone 185*e1eccf28SAndroid Build Coastguard Worker %c = shufflevector <4 x i32> %b, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2> 186*e1eccf28SAndroid Build Coastguard Worker ret <3 x i32> %c 187*e1eccf28SAndroid Build Coastguard Worker} 188*e1eccf28SAndroid Build Coastguard Worker 189*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i32> @_Z5clampDv3_iii(<3 x i32> %value, i32 %low, i32 %high) nounwind readonly { 190*e1eccf28SAndroid Build Coastguard Worker %_value = shufflevector <3 x i32> %value, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 191*e1eccf28SAndroid Build Coastguard Worker %_high = tail call <4 x i32> @smear_4i(i32 %high) nounwind readnone 192*e1eccf28SAndroid Build Coastguard Worker %_low = tail call <4 x i32> @smear_4i(i32 %low) nounwind readnone 193*e1eccf28SAndroid Build Coastguard Worker %a = tail call <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32> %_value, <4 x i32> %_high) nounwind readnone 194*e1eccf28SAndroid Build Coastguard Worker %b = tail call <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32> %a, <4 x i32> %_low) nounwind readnone 195*e1eccf28SAndroid Build Coastguard Worker %c = shufflevector <4 x i32> %b, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2> 196*e1eccf28SAndroid Build Coastguard Worker ret <3 x i32> %c 197*e1eccf28SAndroid Build Coastguard Worker} 198*e1eccf28SAndroid Build Coastguard Worker 199*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i32> @_Z5clampDv2_iS_S_(<2 x i32> %value, <2 x i32> %low, <2 x i32> %high) nounwind readonly { 200*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <2 x i32> @llvm.aarch64.neon.smin.v2i32(<2 x i32> %value, <2 x i32> %high) nounwind readnone 201*e1eccf28SAndroid Build Coastguard Worker %2 = tail call <2 x i32> @llvm.aarch64.neon.smax.v2i32(<2 x i32> %1, <2 x i32> %low) nounwind readnone 202*e1eccf28SAndroid Build Coastguard Worker ret <2 x i32> %2 203*e1eccf28SAndroid Build Coastguard Worker} 204*e1eccf28SAndroid Build Coastguard Worker 205*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i32> @_Z5clampDv2_iii(<2 x i32> %value, i32 %low, i32 %high) nounwind readonly { 206*e1eccf28SAndroid Build Coastguard Worker %_high = tail call <2 x i32> @smear_2i(i32 %high) nounwind readnone 207*e1eccf28SAndroid Build Coastguard Worker %_low = tail call <2 x i32> @smear_2i(i32 %low) nounwind readnone 208*e1eccf28SAndroid Build Coastguard Worker %a = tail call <2 x i32> @llvm.aarch64.neon.smin.v2i32(<2 x i32> %value, <2 x i32> %_high) nounwind readnone 209*e1eccf28SAndroid Build Coastguard Worker %b = tail call <2 x i32> @llvm.aarch64.neon.smax.v2i32(<2 x i32> %a, <2 x i32> %_low) nounwind readnone 210*e1eccf28SAndroid Build Coastguard Worker ret <2 x i32> %b 211*e1eccf28SAndroid Build Coastguard Worker} 212*e1eccf28SAndroid Build Coastguard Worker 213*e1eccf28SAndroid Build Coastguard Worker 214*e1eccf28SAndroid Build Coastguard Worker 215*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i32> @_Z5clampDv4_jS_S_(<4 x i32> %value, <4 x i32> %low, <4 x i32> %high) nounwind readonly { 216*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <4 x i32> @llvm.aarch64.neon.umin.v4i32(<4 x i32> %value, <4 x i32> %high) nounwind readnone 217*e1eccf28SAndroid Build Coastguard Worker %2 = tail call <4 x i32> @llvm.aarch64.neon.umax.v4i32(<4 x i32> %1, <4 x i32> %low) nounwind readnone 218*e1eccf28SAndroid Build Coastguard Worker ret <4 x i32> %2 219*e1eccf28SAndroid Build Coastguard Worker} 220*e1eccf28SAndroid Build Coastguard Worker 221*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i32> @_Z5clampDv4_jjj(<4 x i32> %value, i32 %low, i32 %high) nounwind readonly { 222*e1eccf28SAndroid Build Coastguard Worker %_high = tail call <4 x i32> @smear_4i(i32 %high) nounwind readnone 223*e1eccf28SAndroid Build Coastguard Worker %_low = tail call <4 x i32> @smear_4i(i32 %low) nounwind readnone 224*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <4 x i32> @llvm.aarch64.neon.umin.v4i32(<4 x i32> %value, <4 x i32> %_high) nounwind readnone 225*e1eccf28SAndroid Build Coastguard Worker %2 = tail call <4 x i32> @llvm.aarch64.neon.umax.v4i32(<4 x i32> %1, <4 x i32> %_low) nounwind readnone 226*e1eccf28SAndroid Build Coastguard Worker ret <4 x i32> %2 227*e1eccf28SAndroid Build Coastguard Worker} 228*e1eccf28SAndroid Build Coastguard Worker 229*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i32> @_Z5clampDv3_jS_S_(<3 x i32> %value, <3 x i32> %low, <3 x i32> %high) nounwind readonly { 230*e1eccf28SAndroid Build Coastguard Worker %_value = shufflevector <3 x i32> %value, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 231*e1eccf28SAndroid Build Coastguard Worker %_low = shufflevector <3 x i32> %low, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 232*e1eccf28SAndroid Build Coastguard Worker %_high = shufflevector <3 x i32> %high, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 233*e1eccf28SAndroid Build Coastguard Worker %a = tail call <4 x i32> @llvm.aarch64.neon.umin.v4i32(<4 x i32> %_value, <4 x i32> %_high) nounwind readnone 234*e1eccf28SAndroid Build Coastguard Worker %b = tail call <4 x i32> @llvm.aarch64.neon.umax.v4i32(<4 x i32> %a, <4 x i32> %_low) nounwind readnone 235*e1eccf28SAndroid Build Coastguard Worker %c = shufflevector <4 x i32> %b, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2> 236*e1eccf28SAndroid Build Coastguard Worker ret <3 x i32> %c 237*e1eccf28SAndroid Build Coastguard Worker} 238*e1eccf28SAndroid Build Coastguard Worker 239*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i32> @_Z5clampDv3_jjj(<3 x i32> %value, i32 %low, i32 %high) nounwind readonly { 240*e1eccf28SAndroid Build Coastguard Worker %_value = shufflevector <3 x i32> %value, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 241*e1eccf28SAndroid Build Coastguard Worker %_high = tail call <4 x i32> @smear_4i(i32 %high) nounwind readnone 242*e1eccf28SAndroid Build Coastguard Worker %_low = tail call <4 x i32> @smear_4i(i32 %low) nounwind readnone 243*e1eccf28SAndroid Build Coastguard Worker %a = tail call <4 x i32> @llvm.aarch64.neon.umin.v4i32(<4 x i32> %_value, <4 x i32> %_high) nounwind readnone 244*e1eccf28SAndroid Build Coastguard Worker %b = tail call <4 x i32> @llvm.aarch64.neon.umax.v4i32(<4 x i32> %a, <4 x i32> %_low) nounwind readnone 245*e1eccf28SAndroid Build Coastguard Worker %c = shufflevector <4 x i32> %b, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2> 246*e1eccf28SAndroid Build Coastguard Worker ret <3 x i32> %c 247*e1eccf28SAndroid Build Coastguard Worker} 248*e1eccf28SAndroid Build Coastguard Worker 249*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i32> @_Z5clampDv2_jS_S_(<2 x i32> %value, <2 x i32> %low, <2 x i32> %high) nounwind readonly { 250*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <2 x i32> @llvm.aarch64.neon.umin.v2i32(<2 x i32> %value, <2 x i32> %high) nounwind readnone 251*e1eccf28SAndroid Build Coastguard Worker %2 = tail call <2 x i32> @llvm.aarch64.neon.umax.v2i32(<2 x i32> %1, <2 x i32> %low) nounwind readnone 252*e1eccf28SAndroid Build Coastguard Worker ret <2 x i32> %2 253*e1eccf28SAndroid Build Coastguard Worker} 254*e1eccf28SAndroid Build Coastguard Worker 255*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i32> @_Z5clampDv2_jjj(<2 x i32> %value, i32 %low, i32 %high) nounwind readonly { 256*e1eccf28SAndroid Build Coastguard Worker %_high = tail call <2 x i32> @smear_2i(i32 %high) nounwind readnone 257*e1eccf28SAndroid Build Coastguard Worker %_low = tail call <2 x i32> @smear_2i(i32 %low) nounwind readnone 258*e1eccf28SAndroid Build Coastguard Worker %a = tail call <2 x i32> @llvm.aarch64.neon.umin.v2i32(<2 x i32> %value, <2 x i32> %_high) nounwind readnone 259*e1eccf28SAndroid Build Coastguard Worker %b = tail call <2 x i32> @llvm.aarch64.neon.umax.v2i32(<2 x i32> %a, <2 x i32> %_low) nounwind readnone 260*e1eccf28SAndroid Build Coastguard Worker ret <2 x i32> %b 261*e1eccf28SAndroid Build Coastguard Worker} 262*e1eccf28SAndroid Build Coastguard Worker 263*e1eccf28SAndroid Build Coastguard Worker 264*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 265*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;; FMAX ;;;;;;;;;; 266*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 267*e1eccf28SAndroid Build Coastguard Worker 268*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z4fmaxDv4_fS_(<4 x float> %v1, <4 x float> %v2) nounwind readonly { 269*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <4 x float> @llvm.aarch64.neon.fmax.v4f32(<4 x float> %v1, <4 x float> %v2) nounwind readnone 270*e1eccf28SAndroid Build Coastguard Worker ret <4 x float> %1 271*e1eccf28SAndroid Build Coastguard Worker} 272*e1eccf28SAndroid Build Coastguard Worker 273*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z4fmaxDv4_ff(<4 x float> %v1, float %v2) nounwind readonly { 274*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <4 x float> @smear_4f(float %v2) nounwind readnone 275*e1eccf28SAndroid Build Coastguard Worker %2 = tail call <4 x float> @llvm.aarch64.neon.fmax.v4f32(<4 x float> %v1, <4 x float> %1) nounwind readnone 276*e1eccf28SAndroid Build Coastguard Worker ret <4 x float> %2 277*e1eccf28SAndroid Build Coastguard Worker} 278*e1eccf28SAndroid Build Coastguard Worker 279*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z4fmaxDv3_fS_(<3 x float> %v1, <3 x float> %v2) nounwind readonly { 280*e1eccf28SAndroid Build Coastguard Worker %1 = shufflevector <3 x float> %v1, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 281*e1eccf28SAndroid Build Coastguard Worker %2 = shufflevector <3 x float> %v2, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 282*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <4 x float> @llvm.aarch64.neon.fmax.v4f32(<4 x float> %1, <4 x float> %2) nounwind readnone 283*e1eccf28SAndroid Build Coastguard Worker %4 = shufflevector <4 x float> %3, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2> 284*e1eccf28SAndroid Build Coastguard Worker ret <3 x float> %4 285*e1eccf28SAndroid Build Coastguard Worker} 286*e1eccf28SAndroid Build Coastguard Worker 287*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z4fmaxDv3_ff(<3 x float> %v1, float %v2) nounwind readonly { 288*e1eccf28SAndroid Build Coastguard Worker %1 = shufflevector <3 x float> %v1, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 289*e1eccf28SAndroid Build Coastguard Worker %2 = tail call <4 x float> @smear_4f(float %v2) nounwind readnone 290*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <4 x float> @llvm.aarch64.neon.fmax.v4f32(<4 x float> %1, <4 x float> %2) nounwind readnone 291*e1eccf28SAndroid Build Coastguard Worker %c = shufflevector <4 x float> %3, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2> 292*e1eccf28SAndroid Build Coastguard Worker ret <3 x float> %c 293*e1eccf28SAndroid Build Coastguard Worker} 294*e1eccf28SAndroid Build Coastguard Worker 295*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z4fmaxDv2_fS_(<2 x float> %v1, <2 x float> %v2) nounwind readonly { 296*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <2 x float> @llvm.aarch64.neon.fmax.v2f32(<2 x float> %v1, <2 x float> %v2) nounwind readnone 297*e1eccf28SAndroid Build Coastguard Worker ret <2 x float> %1 298*e1eccf28SAndroid Build Coastguard Worker} 299*e1eccf28SAndroid Build Coastguard Worker 300*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z4fmaxDv2_ff(<2 x float> %v1, float %v2) nounwind readonly { 301*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <2 x float> @smear_2f(float %v2) nounwind readnone 302*e1eccf28SAndroid Build Coastguard Worker %2 = tail call <2 x float> @llvm.aarch64.neon.fmax.v2f32(<2 x float> %v1, <2 x float> %1) nounwind readnone 303*e1eccf28SAndroid Build Coastguard Worker ret <2 x float> %2 304*e1eccf28SAndroid Build Coastguard Worker} 305*e1eccf28SAndroid Build Coastguard Worker 306*e1eccf28SAndroid Build Coastguard Workerdefine float @_Z4fmaxff(float %v1, float %v2) nounwind readonly { 307*e1eccf28SAndroid Build Coastguard Worker %1 = fcmp ogt float %v1, %v2 308*e1eccf28SAndroid Build Coastguard Worker %2 = select i1 %1, float %v1, float %v2 309*e1eccf28SAndroid Build Coastguard Worker ret float %2 310*e1eccf28SAndroid Build Coastguard Worker} 311*e1eccf28SAndroid Build Coastguard Worker 312*e1eccf28SAndroid Build Coastguard Worker 313*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 314*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;; FMIN ;;;;;;;;;; 315*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 316*e1eccf28SAndroid Build Coastguard Worker 317*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z4fminDv4_fS_(<4 x float> %v1, <4 x float> %v2) nounwind readonly { 318*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <4 x float> @llvm.aarch64.neon.fmin.v4f32(<4 x float> %v1, <4 x float> %v2) nounwind readnone 319*e1eccf28SAndroid Build Coastguard Worker ret <4 x float> %1 320*e1eccf28SAndroid Build Coastguard Worker} 321*e1eccf28SAndroid Build Coastguard Worker 322*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z4fminDv4_ff(<4 x float> %v1, float %v2) nounwind readonly { 323*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <4 x float> @smear_4f(float %v2) nounwind readnone 324*e1eccf28SAndroid Build Coastguard Worker %2 = tail call <4 x float> @llvm.aarch64.neon.fmin.v4f32(<4 x float> %v1, <4 x float> %1) nounwind readnone 325*e1eccf28SAndroid Build Coastguard Worker ret <4 x float> %2 326*e1eccf28SAndroid Build Coastguard Worker} 327*e1eccf28SAndroid Build Coastguard Worker 328*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z4fminDv3_fS_(<3 x float> %v1, <3 x float> %v2) nounwind readonly { 329*e1eccf28SAndroid Build Coastguard Worker %1 = shufflevector <3 x float> %v1, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 330*e1eccf28SAndroid Build Coastguard Worker %2 = shufflevector <3 x float> %v2, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 331*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <4 x float> @llvm.aarch64.neon.fmin.v4f32(<4 x float> %1, <4 x float> %2) nounwind readnone 332*e1eccf28SAndroid Build Coastguard Worker %4 = shufflevector <4 x float> %3, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2> 333*e1eccf28SAndroid Build Coastguard Worker ret <3 x float> %4 334*e1eccf28SAndroid Build Coastguard Worker} 335*e1eccf28SAndroid Build Coastguard Worker 336*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z4fminDv3_ff(<3 x float> %v1, float %v2) nounwind readonly { 337*e1eccf28SAndroid Build Coastguard Worker %1 = shufflevector <3 x float> %v1, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 338*e1eccf28SAndroid Build Coastguard Worker %2 = tail call <4 x float> @smear_4f(float %v2) nounwind readnone 339*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <4 x float> @llvm.aarch64.neon.fmin.v4f32(<4 x float> %1, <4 x float> %2) nounwind readnone 340*e1eccf28SAndroid Build Coastguard Worker %c = shufflevector <4 x float> %3, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2> 341*e1eccf28SAndroid Build Coastguard Worker ret <3 x float> %c 342*e1eccf28SAndroid Build Coastguard Worker} 343*e1eccf28SAndroid Build Coastguard Worker 344*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z4fminDv2_fS_(<2 x float> %v1, <2 x float> %v2) nounwind readonly { 345*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <2 x float> @llvm.aarch64.neon.fmin.v2f32(<2 x float> %v1, <2 x float> %v2) nounwind readnone 346*e1eccf28SAndroid Build Coastguard Worker ret <2 x float> %1 347*e1eccf28SAndroid Build Coastguard Worker} 348*e1eccf28SAndroid Build Coastguard Worker 349*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z4fminDv2_ff(<2 x float> %v1, float %v2) nounwind readonly { 350*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <2 x float> @smear_2f(float %v2) nounwind readnone 351*e1eccf28SAndroid Build Coastguard Worker %2 = tail call <2 x float> @llvm.aarch64.neon.fmin.v2f32(<2 x float> %v1, <2 x float> %1) nounwind readnone 352*e1eccf28SAndroid Build Coastguard Worker ret <2 x float> %2 353*e1eccf28SAndroid Build Coastguard Worker} 354*e1eccf28SAndroid Build Coastguard Worker 355*e1eccf28SAndroid Build Coastguard Workerdefine float @_Z4fminff(float %v1, float %v2) nounwind readnone { 356*e1eccf28SAndroid Build Coastguard Worker %1 = fcmp olt float %v1, %v2 357*e1eccf28SAndroid Build Coastguard Worker %2 = select i1 %1, float %v1, float %v2 358*e1eccf28SAndroid Build Coastguard Worker ret float %2 359*e1eccf28SAndroid Build Coastguard Worker} 360*e1eccf28SAndroid Build Coastguard Worker 361*e1eccf28SAndroid Build Coastguard Worker 362*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 363*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;; MAX ;;;;;;;;;; 364*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 365*e1eccf28SAndroid Build Coastguard Worker 366*e1eccf28SAndroid Build Coastguard Workerdefine signext i8 @_Z3maxcc(i8 signext %v1, i8 signext %v2) nounwind readnone { 367*e1eccf28SAndroid Build Coastguard Worker %1 = icmp sgt i8 %v1, %v2 368*e1eccf28SAndroid Build Coastguard Worker %2 = select i1 %1, i8 %v1, i8 %v2 369*e1eccf28SAndroid Build Coastguard Worker ret i8 %2 370*e1eccf28SAndroid Build Coastguard Worker} 371*e1eccf28SAndroid Build Coastguard Worker 372*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i8> @_Z3maxDv2_cS_(<2 x i8> %v1, <2 x i8> %v2) nounwind readnone { 373*e1eccf28SAndroid Build Coastguard Worker %1 = sext <2 x i8> %v1 to <2 x i32> 374*e1eccf28SAndroid Build Coastguard Worker %2 = sext <2 x i8> %v2 to <2 x i32> 375*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <2 x i32> @llvm.aarch64.neon.smax.v2i32(<2 x i32> %1, <2 x i32> %2) nounwind readnone 376*e1eccf28SAndroid Build Coastguard Worker %4 = trunc <2 x i32> %3 to <2 x i8> 377*e1eccf28SAndroid Build Coastguard Worker ret <2 x i8> %4 378*e1eccf28SAndroid Build Coastguard Worker} 379*e1eccf28SAndroid Build Coastguard Worker 380*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i8> @_Z3maxDv3_cS_(i32 %v1, i32 %v2) nounwind readnone { 381*e1eccf28SAndroid Build Coastguard Worker %1 = bitcast i32 %v1 to <4 x i8> 382*e1eccf28SAndroid Build Coastguard Worker %2 = bitcast i32 %v2 to <4 x i8> 383*e1eccf28SAndroid Build Coastguard Worker %3 = sext <4 x i8> %1 to <4 x i32> 384*e1eccf28SAndroid Build Coastguard Worker %4 = sext <4 x i8> %2 to <4 x i32> 385*e1eccf28SAndroid Build Coastguard Worker %5 = tail call <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32> %3, <4 x i32> %4) nounwind readnone 386*e1eccf28SAndroid Build Coastguard Worker %6 = shufflevector <4 x i32> %5, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2> 387*e1eccf28SAndroid Build Coastguard Worker %7 = trunc <3 x i32> %6 to <3 x i8> 388*e1eccf28SAndroid Build Coastguard Worker ret <3 x i8> %7 389*e1eccf28SAndroid Build Coastguard Worker} 390*e1eccf28SAndroid Build Coastguard Worker 391*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i8> @_Z3maxDv4_cS_(<4 x i8> %v1, <4 x i8> %v2) nounwind readnone { 392*e1eccf28SAndroid Build Coastguard Worker %1 = sext <4 x i8> %v1 to <4 x i32> 393*e1eccf28SAndroid Build Coastguard Worker %2 = sext <4 x i8> %v2 to <4 x i32> 394*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone 395*e1eccf28SAndroid Build Coastguard Worker %4 = trunc <4 x i32> %3 to <4 x i8> 396*e1eccf28SAndroid Build Coastguard Worker ret <4 x i8> %4 397*e1eccf28SAndroid Build Coastguard Worker} 398*e1eccf28SAndroid Build Coastguard Worker 399*e1eccf28SAndroid Build Coastguard Workerdefine signext i16 @_Z3maxss(i16 signext %v1, i16 signext %v2) nounwind readnone { 400*e1eccf28SAndroid Build Coastguard Worker %1 = icmp sgt i16 %v1, %v2 401*e1eccf28SAndroid Build Coastguard Worker %2 = select i1 %1, i16 %v1, i16 %v2 402*e1eccf28SAndroid Build Coastguard Worker ret i16 %2 403*e1eccf28SAndroid Build Coastguard Worker} 404*e1eccf28SAndroid Build Coastguard Worker 405*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i16> @_Z3maxDv2_sS_(<2 x i16> %v1, <2 x i16> %v2) nounwind readnone { 406*e1eccf28SAndroid Build Coastguard Worker %1 = sext <2 x i16> %v1 to <2 x i32> 407*e1eccf28SAndroid Build Coastguard Worker %2 = sext <2 x i16> %v2 to <2 x i32> 408*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <2 x i32> @llvm.aarch64.neon.smax.v2i32(<2 x i32> %1, <2 x i32> %2) nounwind readnone 409*e1eccf28SAndroid Build Coastguard Worker %4 = trunc <2 x i32> %3 to <2 x i16> 410*e1eccf28SAndroid Build Coastguard Worker ret <2 x i16> %4 411*e1eccf28SAndroid Build Coastguard Worker} 412*e1eccf28SAndroid Build Coastguard Worker 413*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i16> @_Z3maxDv3_sS_(<3 x i16> %v1, <3 x i16> %v2) nounwind readnone { 414*e1eccf28SAndroid Build Coastguard Worker %1 = sext <3 x i16> %v1 to <3 x i32> 415*e1eccf28SAndroid Build Coastguard Worker %2 = sext <3 x i16> %v2 to <3 x i32> 416*e1eccf28SAndroid Build Coastguard Worker %3 = shufflevector <3 x i32> %1, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 417*e1eccf28SAndroid Build Coastguard Worker %4 = shufflevector <3 x i32> %2, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 418*e1eccf28SAndroid Build Coastguard Worker %5 = tail call <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32> %3, <4 x i32> %4) nounwind readnone 419*e1eccf28SAndroid Build Coastguard Worker %6 = shufflevector <4 x i32> %5, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2> 420*e1eccf28SAndroid Build Coastguard Worker %7 = trunc <3 x i32> %6 to <3 x i16> 421*e1eccf28SAndroid Build Coastguard Worker ret <3 x i16> %7 422*e1eccf28SAndroid Build Coastguard Worker} 423*e1eccf28SAndroid Build Coastguard Worker 424*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i16> @_Z3maxDv4_sS_(<4 x i16> %v1, <4 x i16> %v2) nounwind readnone { 425*e1eccf28SAndroid Build Coastguard Worker %1 = sext <4 x i16> %v1 to <4 x i32> 426*e1eccf28SAndroid Build Coastguard Worker %2 = sext <4 x i16> %v2 to <4 x i32> 427*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone 428*e1eccf28SAndroid Build Coastguard Worker %4 = trunc <4 x i32> %3 to <4 x i16> 429*e1eccf28SAndroid Build Coastguard Worker ret <4 x i16> %4 430*e1eccf28SAndroid Build Coastguard Worker} 431*e1eccf28SAndroid Build Coastguard Worker 432*e1eccf28SAndroid Build Coastguard Workerdefine i32 @_Z3maxii(i32 %v1, i32 %v2) nounwind readnone { 433*e1eccf28SAndroid Build Coastguard Worker %1 = icmp sgt i32 %v1, %v2 434*e1eccf28SAndroid Build Coastguard Worker %2 = select i1 %1, i32 %v1, i32 %v2 435*e1eccf28SAndroid Build Coastguard Worker ret i32 %2 436*e1eccf28SAndroid Build Coastguard Worker} 437*e1eccf28SAndroid Build Coastguard Worker 438*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i32> @_Z3maxDv2_iS_(<2 x i32> %v1, <2 x i32> %v2) nounwind readnone { 439*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <2 x i32> @llvm.aarch64.neon.smax.v2i32(<2 x i32> %v1, <2 x i32> %v2) nounwind readnone 440*e1eccf28SAndroid Build Coastguard Worker ret <2 x i32> %1 441*e1eccf28SAndroid Build Coastguard Worker} 442*e1eccf28SAndroid Build Coastguard Worker 443*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i32> @_Z3maxDv3_iS_(<3 x i32> %v1, <3 x i32> %v2) nounwind readnone { 444*e1eccf28SAndroid Build Coastguard Worker %1 = shufflevector <3 x i32> %v1, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 445*e1eccf28SAndroid Build Coastguard Worker %2 = shufflevector <3 x i32> %v2, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 446*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <4 x i32 > @llvm.aarch64.neon.smax.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone 447*e1eccf28SAndroid Build Coastguard Worker %4 = shufflevector <4 x i32> %3, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2> 448*e1eccf28SAndroid Build Coastguard Worker ret <3 x i32> %4 449*e1eccf28SAndroid Build Coastguard Worker} 450*e1eccf28SAndroid Build Coastguard Worker 451*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i32> @_Z3maxDv4_iS_(<4 x i32> %v1, <4 x i32> %v2) nounwind readnone { 452*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32> %v1, <4 x i32> %v2) nounwind readnone 453*e1eccf28SAndroid Build Coastguard Worker ret <4 x i32> %1 454*e1eccf28SAndroid Build Coastguard Worker} 455*e1eccf28SAndroid Build Coastguard Worker 456*e1eccf28SAndroid Build Coastguard Workerdefine i64 @_Z3maxxx(i64 %v1, i64 %v2) nounwind readnone { 457*e1eccf28SAndroid Build Coastguard Worker %1 = icmp sgt i64 %v1, %v2 458*e1eccf28SAndroid Build Coastguard Worker %2 = select i1 %1, i64 %v1, i64 %v2 459*e1eccf28SAndroid Build Coastguard Worker ret i64 %2 460*e1eccf28SAndroid Build Coastguard Worker} 461*e1eccf28SAndroid Build Coastguard Worker 462*e1eccf28SAndroid Build Coastguard Worker; TODO: long vector types 463*e1eccf28SAndroid Build Coastguard Worker 464*e1eccf28SAndroid Build Coastguard Workerdefine zeroext i8 @_Z3maxhh(i8 zeroext %v1, i8 zeroext %v2) nounwind readnone { 465*e1eccf28SAndroid Build Coastguard Worker %1 = icmp ugt i8 %v1, %v2 466*e1eccf28SAndroid Build Coastguard Worker %2 = select i1 %1, i8 %v1, i8 %v2 467*e1eccf28SAndroid Build Coastguard Worker ret i8 %2 468*e1eccf28SAndroid Build Coastguard Worker} 469*e1eccf28SAndroid Build Coastguard Worker 470*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i8> @_Z3maxDv2_hS_(<2 x i8> %v1, <2 x i8> %v2) nounwind readnone { 471*e1eccf28SAndroid Build Coastguard Worker %1 = zext <2 x i8> %v1 to <2 x i32> 472*e1eccf28SAndroid Build Coastguard Worker %2 = zext <2 x i8> %v2 to <2 x i32> 473*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <2 x i32> @llvm.aarch64.neon.umax.v2i32(<2 x i32> %1, <2 x i32> %2) nounwind readnone 474*e1eccf28SAndroid Build Coastguard Worker %4 = trunc <2 x i32> %3 to <2 x i8> 475*e1eccf28SAndroid Build Coastguard Worker ret <2 x i8> %4 476*e1eccf28SAndroid Build Coastguard Worker} 477*e1eccf28SAndroid Build Coastguard Worker 478*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i8> @_Z3maxDv3_hS_(i32 %v1, i32 %v2) nounwind readnone { 479*e1eccf28SAndroid Build Coastguard Worker %1 = bitcast i32 %v1 to <4 x i8> 480*e1eccf28SAndroid Build Coastguard Worker %2 = bitcast i32 %v2 to <4 x i8> 481*e1eccf28SAndroid Build Coastguard Worker %3 = zext <4 x i8> %1 to <4 x i32> 482*e1eccf28SAndroid Build Coastguard Worker %4 = zext <4 x i8> %2 to <4 x i32> 483*e1eccf28SAndroid Build Coastguard Worker %5 = tail call <4 x i32> @llvm.aarch64.neon.umax.v4i32(<4 x i32> %3, <4 x i32> %4) nounwind readnone 484*e1eccf28SAndroid Build Coastguard Worker %6 = shufflevector <4 x i32> %5, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2> 485*e1eccf28SAndroid Build Coastguard Worker %7 = trunc <3 x i32> %6 to <3 x i8> 486*e1eccf28SAndroid Build Coastguard Worker ret <3 x i8> %7 487*e1eccf28SAndroid Build Coastguard Worker} 488*e1eccf28SAndroid Build Coastguard Worker 489*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i8> @_Z3maxDv4_hS_(<4 x i8> %v1, <4 x i8> %v2) nounwind readnone { 490*e1eccf28SAndroid Build Coastguard Worker %1 = zext <4 x i8> %v1 to <4 x i32> 491*e1eccf28SAndroid Build Coastguard Worker %2 = zext <4 x i8> %v2 to <4 x i32> 492*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <4 x i32> @llvm.aarch64.neon.umax.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone 493*e1eccf28SAndroid Build Coastguard Worker %4 = trunc <4 x i32> %3 to <4 x i8> 494*e1eccf28SAndroid Build Coastguard Worker ret <4 x i8> %4 495*e1eccf28SAndroid Build Coastguard Worker} 496*e1eccf28SAndroid Build Coastguard Worker 497*e1eccf28SAndroid Build Coastguard Workerdefine zeroext i16 @_Z3maxtt(i16 zeroext %v1, i16 zeroext %v2) nounwind readnone { 498*e1eccf28SAndroid Build Coastguard Worker %1 = icmp ugt i16 %v1, %v2 499*e1eccf28SAndroid Build Coastguard Worker %2 = select i1 %1, i16 %v1, i16 %v2 500*e1eccf28SAndroid Build Coastguard Worker ret i16 %2 501*e1eccf28SAndroid Build Coastguard Worker} 502*e1eccf28SAndroid Build Coastguard Worker 503*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i16> @_Z3maxDv2_tS_(<2 x i16> %v1, <2 x i16> %v2) nounwind readnone { 504*e1eccf28SAndroid Build Coastguard Worker %1 = zext <2 x i16> %v1 to <2 x i32> 505*e1eccf28SAndroid Build Coastguard Worker %2 = zext <2 x i16> %v2 to <2 x i32> 506*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <2 x i32> @llvm.aarch64.neon.umax.v2i32(<2 x i32> %1, <2 x i32> %2) nounwind readnone 507*e1eccf28SAndroid Build Coastguard Worker %4 = trunc <2 x i32> %3 to <2 x i16> 508*e1eccf28SAndroid Build Coastguard Worker ret <2 x i16> %4 509*e1eccf28SAndroid Build Coastguard Worker} 510*e1eccf28SAndroid Build Coastguard Worker 511*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i16> @_Z3maxDv3_tS_(<3 x i16> %v1, <3 x i16> %v2) nounwind readnone { 512*e1eccf28SAndroid Build Coastguard Worker %1 = zext <3 x i16> %v1 to <3 x i32> 513*e1eccf28SAndroid Build Coastguard Worker %2 = zext <3 x i16> %v2 to <3 x i32> 514*e1eccf28SAndroid Build Coastguard Worker %3 = shufflevector <3 x i32> %1, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 515*e1eccf28SAndroid Build Coastguard Worker %4 = shufflevector <3 x i32> %2, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 516*e1eccf28SAndroid Build Coastguard Worker %5 = tail call <4 x i32> @llvm.aarch64.neon.umax.v4i32(<4 x i32> %3, <4 x i32> %4) nounwind readnone 517*e1eccf28SAndroid Build Coastguard Worker %6 = shufflevector <4 x i32> %5, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2> 518*e1eccf28SAndroid Build Coastguard Worker %7 = trunc <3 x i32> %6 to <3 x i16> 519*e1eccf28SAndroid Build Coastguard Worker ret <3 x i16> %7 520*e1eccf28SAndroid Build Coastguard Worker} 521*e1eccf28SAndroid Build Coastguard Worker 522*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i16> @_Z3maxDv4_tS_(<4 x i16> %v1, <4 x i16> %v2) nounwind readnone { 523*e1eccf28SAndroid Build Coastguard Worker %1 = zext <4 x i16> %v1 to <4 x i32> 524*e1eccf28SAndroid Build Coastguard Worker %2 = zext <4 x i16> %v2 to <4 x i32> 525*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <4 x i32> @llvm.aarch64.neon.umax.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone 526*e1eccf28SAndroid Build Coastguard Worker %4 = trunc <4 x i32> %3 to <4 x i16> 527*e1eccf28SAndroid Build Coastguard Worker ret <4 x i16> %4 528*e1eccf28SAndroid Build Coastguard Worker} 529*e1eccf28SAndroid Build Coastguard Worker 530*e1eccf28SAndroid Build Coastguard Workerdefine i32 @_Z3maxjj(i32 %v1, i32 %v2) nounwind readnone { 531*e1eccf28SAndroid Build Coastguard Worker %1 = icmp ugt i32 %v1, %v2 532*e1eccf28SAndroid Build Coastguard Worker %2 = select i1 %1, i32 %v1, i32 %v2 533*e1eccf28SAndroid Build Coastguard Worker ret i32 %2 534*e1eccf28SAndroid Build Coastguard Worker} 535*e1eccf28SAndroid Build Coastguard Worker 536*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i32> @_Z3maxDv2_jS_(<2 x i32> %v1, <2 x i32> %v2) nounwind readnone { 537*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <2 x i32> @llvm.aarch64.neon.umax.v2i32(<2 x i32> %v1, <2 x i32> %v2) nounwind readnone 538*e1eccf28SAndroid Build Coastguard Worker ret <2 x i32> %1 539*e1eccf28SAndroid Build Coastguard Worker} 540*e1eccf28SAndroid Build Coastguard Worker 541*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i32> @_Z3maxDv3_jS_(<3 x i32> %v1, <3 x i32> %v2) nounwind readnone { 542*e1eccf28SAndroid Build Coastguard Worker %1 = shufflevector <3 x i32> %v1, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 543*e1eccf28SAndroid Build Coastguard Worker %2 = shufflevector <3 x i32> %v2, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 544*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <4 x i32 > @llvm.aarch64.neon.umax.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone 545*e1eccf28SAndroid Build Coastguard Worker %4 = shufflevector <4 x i32> %3, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2> 546*e1eccf28SAndroid Build Coastguard Worker ret <3 x i32> %4 547*e1eccf28SAndroid Build Coastguard Worker} 548*e1eccf28SAndroid Build Coastguard Worker 549*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i32> @_Z3maxDv4_jS_(<4 x i32> %v1, <4 x i32> %v2) nounwind readnone { 550*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <4 x i32> @llvm.aarch64.neon.umax.v4i32(<4 x i32> %v1, <4 x i32> %v2) nounwind readnone 551*e1eccf28SAndroid Build Coastguard Worker ret <4 x i32> %1 552*e1eccf28SAndroid Build Coastguard Worker} 553*e1eccf28SAndroid Build Coastguard Worker 554*e1eccf28SAndroid Build Coastguard Worker 555*e1eccf28SAndroid Build Coastguard Worker; TODO: long vector types 556*e1eccf28SAndroid Build Coastguard Worker 557*e1eccf28SAndroid Build Coastguard Workerdefine float @_Z3maxff(float %v1, float %v2) nounwind readnone { 558*e1eccf28SAndroid Build Coastguard Worker %1 = tail call float @_Z4fmaxff(float %v1, float %v2) 559*e1eccf28SAndroid Build Coastguard Worker ret float %1 560*e1eccf28SAndroid Build Coastguard Worker} 561*e1eccf28SAndroid Build Coastguard Worker 562*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z3maxDv2_fS_(<2 x float> %v1, <2 x float> %v2) nounwind readnone { 563*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <2 x float> @_Z4fmaxDv2_fS_(<2 x float> %v1, <2 x float> %v2) 564*e1eccf28SAndroid Build Coastguard Worker ret <2 x float> %1 565*e1eccf28SAndroid Build Coastguard Worker} 566*e1eccf28SAndroid Build Coastguard Worker 567*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z3maxDv2_ff(<2 x float> %v1, float %v2) nounwind readnone { 568*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <2 x float> @_Z4fmaxDv2_ff(<2 x float> %v1, float %v2) 569*e1eccf28SAndroid Build Coastguard Worker ret <2 x float> %1 570*e1eccf28SAndroid Build Coastguard Worker} 571*e1eccf28SAndroid Build Coastguard Worker 572*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z3maxDv3_fS_(<3 x float> %v1, <3 x float> %v2) nounwind readnone { 573*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <3 x float> @_Z4fmaxDv3_fS_(<3 x float> %v1, <3 x float> %v2) 574*e1eccf28SAndroid Build Coastguard Worker ret <3 x float> %1 575*e1eccf28SAndroid Build Coastguard Worker} 576*e1eccf28SAndroid Build Coastguard Worker 577*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z3maxDv3_ff(<3 x float> %v1, float %v2) nounwind readnone { 578*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <3 x float> @_Z4fmaxDv3_ff(<3 x float> %v1, float %v2) 579*e1eccf28SAndroid Build Coastguard Worker ret <3 x float> %1 580*e1eccf28SAndroid Build Coastguard Worker} 581*e1eccf28SAndroid Build Coastguard Worker 582*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z3maxDv4_fS_(<4 x float> %v1, <4 x float> %v2) nounwind readnone { 583*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <4 x float> @_Z4fmaxDv4_fS_(<4 x float> %v1, <4 x float> %v2) 584*e1eccf28SAndroid Build Coastguard Worker ret <4 x float> %1 585*e1eccf28SAndroid Build Coastguard Worker} 586*e1eccf28SAndroid Build Coastguard Worker 587*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z3maxDv4_ff(<4 x float> %v1, float %v2) nounwind readnone { 588*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <4 x float> @_Z4fmaxDv4_ff(<4 x float> %v1, float %v2) 589*e1eccf28SAndroid Build Coastguard Worker ret <4 x float> %1 590*e1eccf28SAndroid Build Coastguard Worker} 591*e1eccf28SAndroid Build Coastguard Worker 592*e1eccf28SAndroid Build Coastguard Worker 593*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 594*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;; MIN ;;;;;;;;;; 595*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 596*e1eccf28SAndroid Build Coastguard Worker 597*e1eccf28SAndroid Build Coastguard Workerdefine signext i8 @_Z3mincc(i8 signext %v1, i8 signext %v2) nounwind readnone { 598*e1eccf28SAndroid Build Coastguard Worker %1 = icmp slt i8 %v1, %v2 599*e1eccf28SAndroid Build Coastguard Worker %2 = select i1 %1, i8 %v1, i8 %v2 600*e1eccf28SAndroid Build Coastguard Worker ret i8 %2 601*e1eccf28SAndroid Build Coastguard Worker} 602*e1eccf28SAndroid Build Coastguard Worker 603*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i8> @_Z3minDv2_cS_(<2 x i8> %v1, <2 x i8> %v2) nounwind readnone { 604*e1eccf28SAndroid Build Coastguard Worker %1 = sext <2 x i8> %v1 to <2 x i32> 605*e1eccf28SAndroid Build Coastguard Worker %2 = sext <2 x i8> %v2 to <2 x i32> 606*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <2 x i32> @llvm.aarch64.neon.smin.v2i32(<2 x i32> %1, <2 x i32> %2) nounwind readnone 607*e1eccf28SAndroid Build Coastguard Worker %4 = trunc <2 x i32> %3 to <2 x i8> 608*e1eccf28SAndroid Build Coastguard Worker ret <2 x i8> %4 609*e1eccf28SAndroid Build Coastguard Worker} 610*e1eccf28SAndroid Build Coastguard Worker 611*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i8> @_Z3minDv3_cS_(i32 %v1, i32 %v2) nounwind readnone { 612*e1eccf28SAndroid Build Coastguard Worker %1 = bitcast i32 %v1 to <4 x i8> 613*e1eccf28SAndroid Build Coastguard Worker %2 = bitcast i32 %v2 to <4 x i8> 614*e1eccf28SAndroid Build Coastguard Worker %3 = sext <4 x i8> %1 to <4 x i32> 615*e1eccf28SAndroid Build Coastguard Worker %4 = sext <4 x i8> %2 to <4 x i32> 616*e1eccf28SAndroid Build Coastguard Worker %5 = tail call <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32> %3, <4 x i32> %4) nounwind readnone 617*e1eccf28SAndroid Build Coastguard Worker %6 = shufflevector <4 x i32> %5, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2> 618*e1eccf28SAndroid Build Coastguard Worker %7 = trunc <3 x i32> %6 to <3 x i8> 619*e1eccf28SAndroid Build Coastguard Worker ret <3 x i8> %7 620*e1eccf28SAndroid Build Coastguard Worker} 621*e1eccf28SAndroid Build Coastguard Worker 622*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i8> @_Z3minDv4_cS_(<4 x i8> %v1, <4 x i8> %v2) nounwind readnone { 623*e1eccf28SAndroid Build Coastguard Worker %1 = sext <4 x i8> %v1 to <4 x i32> 624*e1eccf28SAndroid Build Coastguard Worker %2 = sext <4 x i8> %v2 to <4 x i32> 625*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone 626*e1eccf28SAndroid Build Coastguard Worker %4 = trunc <4 x i32> %3 to <4 x i8> 627*e1eccf28SAndroid Build Coastguard Worker ret <4 x i8> %4 628*e1eccf28SAndroid Build Coastguard Worker} 629*e1eccf28SAndroid Build Coastguard Worker 630*e1eccf28SAndroid Build Coastguard Workerdefine signext i16 @_Z3minss(i16 signext %v1, i16 signext %v2) nounwind readnone { 631*e1eccf28SAndroid Build Coastguard Worker %1 = icmp slt i16 %v1, %v2 632*e1eccf28SAndroid Build Coastguard Worker %2 = select i1 %1, i16 %v1, i16 %v2 633*e1eccf28SAndroid Build Coastguard Worker ret i16 %2 634*e1eccf28SAndroid Build Coastguard Worker} 635*e1eccf28SAndroid Build Coastguard Worker 636*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i16> @_Z3minDv2_sS_(<2 x i16> %v1, <2 x i16> %v2) nounwind readnone { 637*e1eccf28SAndroid Build Coastguard Worker %1 = sext <2 x i16> %v1 to <2 x i32> 638*e1eccf28SAndroid Build Coastguard Worker %2 = sext <2 x i16> %v2 to <2 x i32> 639*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <2 x i32> @llvm.aarch64.neon.smin.v2i32(<2 x i32> %1, <2 x i32> %2) nounwind readnone 640*e1eccf28SAndroid Build Coastguard Worker %4 = trunc <2 x i32> %3 to <2 x i16> 641*e1eccf28SAndroid Build Coastguard Worker ret <2 x i16> %4 642*e1eccf28SAndroid Build Coastguard Worker} 643*e1eccf28SAndroid Build Coastguard Worker 644*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i16> @_Z3minDv3_sS_(<3 x i16> %v1, <3 x i16> %v2) nounwind readnone { 645*e1eccf28SAndroid Build Coastguard Worker %1 = sext <3 x i16> %v1 to <3 x i32> 646*e1eccf28SAndroid Build Coastguard Worker %2 = sext <3 x i16> %v2 to <3 x i32> 647*e1eccf28SAndroid Build Coastguard Worker %3 = shufflevector <3 x i32> %1, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 648*e1eccf28SAndroid Build Coastguard Worker %4 = shufflevector <3 x i32> %2, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 649*e1eccf28SAndroid Build Coastguard Worker %5 = tail call <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32> %3, <4 x i32> %4) nounwind readnone 650*e1eccf28SAndroid Build Coastguard Worker %6 = shufflevector <4 x i32> %5, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2> 651*e1eccf28SAndroid Build Coastguard Worker %7 = trunc <3 x i32> %6 to <3 x i16> 652*e1eccf28SAndroid Build Coastguard Worker ret <3 x i16> %7 653*e1eccf28SAndroid Build Coastguard Worker} 654*e1eccf28SAndroid Build Coastguard Worker 655*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i16> @_Z3minDv4_sS_(<4 x i16> %v1, <4 x i16> %v2) nounwind readnone { 656*e1eccf28SAndroid Build Coastguard Worker %1 = sext <4 x i16> %v1 to <4 x i32> 657*e1eccf28SAndroid Build Coastguard Worker %2 = sext <4 x i16> %v2 to <4 x i32> 658*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone 659*e1eccf28SAndroid Build Coastguard Worker %4 = trunc <4 x i32> %3 to <4 x i16> 660*e1eccf28SAndroid Build Coastguard Worker ret <4 x i16> %4 661*e1eccf28SAndroid Build Coastguard Worker} 662*e1eccf28SAndroid Build Coastguard Worker 663*e1eccf28SAndroid Build Coastguard Workerdefine i32 @_Z3minii(i32 %v1, i32 %v2) nounwind readnone { 664*e1eccf28SAndroid Build Coastguard Worker %1 = icmp slt i32 %v1, %v2 665*e1eccf28SAndroid Build Coastguard Worker %2 = select i1 %1, i32 %v1, i32 %v2 666*e1eccf28SAndroid Build Coastguard Worker ret i32 %2 667*e1eccf28SAndroid Build Coastguard Worker} 668*e1eccf28SAndroid Build Coastguard Worker 669*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i32> @_Z3minDv2_iS_(<2 x i32> %v1, <2 x i32> %v2) nounwind readnone { 670*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <2 x i32> @llvm.aarch64.neon.smin.v2i32(<2 x i32> %v1, <2 x i32> %v2) nounwind readnone 671*e1eccf28SAndroid Build Coastguard Worker ret <2 x i32> %1 672*e1eccf28SAndroid Build Coastguard Worker} 673*e1eccf28SAndroid Build Coastguard Worker 674*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i32> @_Z3minDv3_iS_(<3 x i32> %v1, <3 x i32> %v2) nounwind readnone { 675*e1eccf28SAndroid Build Coastguard Worker %1 = shufflevector <3 x i32> %v1, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 676*e1eccf28SAndroid Build Coastguard Worker %2 = shufflevector <3 x i32> %v2, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 677*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <4 x i32 > @llvm.aarch64.neon.smin.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone 678*e1eccf28SAndroid Build Coastguard Worker %4 = shufflevector <4 x i32> %3, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2> 679*e1eccf28SAndroid Build Coastguard Worker ret <3 x i32> %4 680*e1eccf28SAndroid Build Coastguard Worker} 681*e1eccf28SAndroid Build Coastguard Worker 682*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i32> @_Z3minDv4_iS_(<4 x i32> %v1, <4 x i32> %v2) nounwind readnone { 683*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32> %v1, <4 x i32> %v2) nounwind readnone 684*e1eccf28SAndroid Build Coastguard Worker ret <4 x i32> %1 685*e1eccf28SAndroid Build Coastguard Worker} 686*e1eccf28SAndroid Build Coastguard Worker 687*e1eccf28SAndroid Build Coastguard Workerdefine i64 @_Z3minxx(i64 %v1, i64 %v2) nounwind readnone { 688*e1eccf28SAndroid Build Coastguard Worker %1 = icmp slt i64 %v1, %v2 689*e1eccf28SAndroid Build Coastguard Worker %2 = select i1 %1, i64 %v1, i64 %v2 690*e1eccf28SAndroid Build Coastguard Worker ret i64 %2 691*e1eccf28SAndroid Build Coastguard Worker} 692*e1eccf28SAndroid Build Coastguard Worker 693*e1eccf28SAndroid Build Coastguard Worker; TODO: long vector types 694*e1eccf28SAndroid Build Coastguard Worker 695*e1eccf28SAndroid Build Coastguard Workerdefine zeroext i8 @_Z3minhh(i8 zeroext %v1, i8 zeroext %v2) nounwind readnone { 696*e1eccf28SAndroid Build Coastguard Worker %1 = icmp ult i8 %v1, %v2 697*e1eccf28SAndroid Build Coastguard Worker %2 = select i1 %1, i8 %v1, i8 %v2 698*e1eccf28SAndroid Build Coastguard Worker ret i8 %2 699*e1eccf28SAndroid Build Coastguard Worker} 700*e1eccf28SAndroid Build Coastguard Worker 701*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i8> @_Z3minDv2_hS_(<2 x i8> %v1, <2 x i8> %v2) nounwind readnone { 702*e1eccf28SAndroid Build Coastguard Worker %1 = zext <2 x i8> %v1 to <2 x i32> 703*e1eccf28SAndroid Build Coastguard Worker %2 = zext <2 x i8> %v2 to <2 x i32> 704*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <2 x i32> @llvm.aarch64.neon.umin.v2i32(<2 x i32> %1, <2 x i32> %2) nounwind readnone 705*e1eccf28SAndroid Build Coastguard Worker %4 = trunc <2 x i32> %3 to <2 x i8> 706*e1eccf28SAndroid Build Coastguard Worker ret <2 x i8> %4 707*e1eccf28SAndroid Build Coastguard Worker} 708*e1eccf28SAndroid Build Coastguard Worker 709*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i8> @_Z3minDv3_hS_(i32 %v1, i32 %v2) nounwind readnone { 710*e1eccf28SAndroid Build Coastguard Worker %1 = bitcast i32 %v1 to <4 x i8> 711*e1eccf28SAndroid Build Coastguard Worker %2 = bitcast i32 %v2 to <4 x i8> 712*e1eccf28SAndroid Build Coastguard Worker %3 = zext <4 x i8> %1 to <4 x i32> 713*e1eccf28SAndroid Build Coastguard Worker %4 = zext <4 x i8> %2 to <4 x i32> 714*e1eccf28SAndroid Build Coastguard Worker %5 = tail call <4 x i32> @llvm.aarch64.neon.umin.v4i32(<4 x i32> %3, <4 x i32> %4) nounwind readnone 715*e1eccf28SAndroid Build Coastguard Worker %6 = shufflevector <4 x i32> %5, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2> 716*e1eccf28SAndroid Build Coastguard Worker %7 = trunc <3 x i32> %6 to <3 x i8> 717*e1eccf28SAndroid Build Coastguard Worker ret <3 x i8> %7 718*e1eccf28SAndroid Build Coastguard Worker} 719*e1eccf28SAndroid Build Coastguard Worker 720*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i8> @_Z3minDv4_hS_(<4 x i8> %v1, <4 x i8> %v2) nounwind readnone { 721*e1eccf28SAndroid Build Coastguard Worker %1 = zext <4 x i8> %v1 to <4 x i32> 722*e1eccf28SAndroid Build Coastguard Worker %2 = zext <4 x i8> %v2 to <4 x i32> 723*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <4 x i32> @llvm.aarch64.neon.umin.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone 724*e1eccf28SAndroid Build Coastguard Worker %4 = trunc <4 x i32> %3 to <4 x i8> 725*e1eccf28SAndroid Build Coastguard Worker ret <4 x i8> %4 726*e1eccf28SAndroid Build Coastguard Worker} 727*e1eccf28SAndroid Build Coastguard Worker 728*e1eccf28SAndroid Build Coastguard Workerdefine zeroext i16 @_Z3mintt(i16 zeroext %v1, i16 zeroext %v2) nounwind readnone { 729*e1eccf28SAndroid Build Coastguard Worker %1 = icmp ult i16 %v1, %v2 730*e1eccf28SAndroid Build Coastguard Worker %2 = select i1 %1, i16 %v1, i16 %v2 731*e1eccf28SAndroid Build Coastguard Worker ret i16 %2 732*e1eccf28SAndroid Build Coastguard Worker} 733*e1eccf28SAndroid Build Coastguard Worker 734*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i16> @_Z3minDv2_tS_(<2 x i16> %v1, <2 x i16> %v2) nounwind readnone { 735*e1eccf28SAndroid Build Coastguard Worker %1 = zext <2 x i16> %v1 to <2 x i32> 736*e1eccf28SAndroid Build Coastguard Worker %2 = zext <2 x i16> %v2 to <2 x i32> 737*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <2 x i32> @llvm.aarch64.neon.umin.v2i32(<2 x i32> %1, <2 x i32> %2) nounwind readnone 738*e1eccf28SAndroid Build Coastguard Worker %4 = trunc <2 x i32> %3 to <2 x i16> 739*e1eccf28SAndroid Build Coastguard Worker ret <2 x i16> %4 740*e1eccf28SAndroid Build Coastguard Worker} 741*e1eccf28SAndroid Build Coastguard Worker 742*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i16> @_Z3minDv3_tS_(<3 x i16> %v1, <3 x i16> %v2) nounwind readnone { 743*e1eccf28SAndroid Build Coastguard Worker %1 = zext <3 x i16> %v1 to <3 x i32> 744*e1eccf28SAndroid Build Coastguard Worker %2 = zext <3 x i16> %v2 to <3 x i32> 745*e1eccf28SAndroid Build Coastguard Worker %3 = shufflevector <3 x i32> %1, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 746*e1eccf28SAndroid Build Coastguard Worker %4 = shufflevector <3 x i32> %2, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 747*e1eccf28SAndroid Build Coastguard Worker %5 = tail call <4 x i32> @llvm.aarch64.neon.umin.v4i32(<4 x i32> %3, <4 x i32> %4) nounwind readnone 748*e1eccf28SAndroid Build Coastguard Worker %6 = shufflevector <4 x i32> %5, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2> 749*e1eccf28SAndroid Build Coastguard Worker %7 = trunc <3 x i32> %6 to <3 x i16> 750*e1eccf28SAndroid Build Coastguard Worker ret <3 x i16> %7 751*e1eccf28SAndroid Build Coastguard Worker} 752*e1eccf28SAndroid Build Coastguard Worker 753*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i16> @_Z3minDv4_tS_(<4 x i16> %v1, <4 x i16> %v2) nounwind readnone { 754*e1eccf28SAndroid Build Coastguard Worker %1 = zext <4 x i16> %v1 to <4 x i32> 755*e1eccf28SAndroid Build Coastguard Worker %2 = zext <4 x i16> %v2 to <4 x i32> 756*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <4 x i32> @llvm.aarch64.neon.umin.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone 757*e1eccf28SAndroid Build Coastguard Worker %4 = trunc <4 x i32> %3 to <4 x i16> 758*e1eccf28SAndroid Build Coastguard Worker ret <4 x i16> %4 759*e1eccf28SAndroid Build Coastguard Worker} 760*e1eccf28SAndroid Build Coastguard Worker 761*e1eccf28SAndroid Build Coastguard Workerdefine i32 @_Z3minjj(i32 %v1, i32 %v2) nounwind readnone { 762*e1eccf28SAndroid Build Coastguard Worker %1 = icmp ult i32 %v1, %v2 763*e1eccf28SAndroid Build Coastguard Worker %2 = select i1 %1, i32 %v1, i32 %v2 764*e1eccf28SAndroid Build Coastguard Worker ret i32 %2 765*e1eccf28SAndroid Build Coastguard Worker} 766*e1eccf28SAndroid Build Coastguard Worker 767*e1eccf28SAndroid Build Coastguard Workerdefine <2 x i32> @_Z3minDv2_jS_(<2 x i32> %v1, <2 x i32> %v2) nounwind readnone { 768*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <2 x i32> @llvm.aarch64.neon.umin.v2i32(<2 x i32> %v1, <2 x i32> %v2) nounwind readnone 769*e1eccf28SAndroid Build Coastguard Worker ret <2 x i32> %1 770*e1eccf28SAndroid Build Coastguard Worker} 771*e1eccf28SAndroid Build Coastguard Worker 772*e1eccf28SAndroid Build Coastguard Workerdefine <3 x i32> @_Z3minDv3_jS_(<3 x i32> %v1, <3 x i32> %v2) nounwind readnone { 773*e1eccf28SAndroid Build Coastguard Worker %1 = shufflevector <3 x i32> %v1, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 774*e1eccf28SAndroid Build Coastguard Worker %2 = shufflevector <3 x i32> %v2, <3 x i32> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 775*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <4 x i32 > @llvm.aarch64.neon.umin.v4i32(<4 x i32> %1, <4 x i32> %2) nounwind readnone 776*e1eccf28SAndroid Build Coastguard Worker %4 = shufflevector <4 x i32> %3, <4 x i32> undef, <3 x i32> <i32 0, i32 1, i32 2> 777*e1eccf28SAndroid Build Coastguard Worker ret <3 x i32> %4 778*e1eccf28SAndroid Build Coastguard Worker} 779*e1eccf28SAndroid Build Coastguard Worker 780*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i32> @_Z3minDv4_jS_(<4 x i32> %v1, <4 x i32> %v2) nounwind readnone { 781*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <4 x i32> @llvm.aarch64.neon.umin.v4i32(<4 x i32> %v1, <4 x i32> %v2) nounwind readnone 782*e1eccf28SAndroid Build Coastguard Worker ret <4 x i32> %1 783*e1eccf28SAndroid Build Coastguard Worker} 784*e1eccf28SAndroid Build Coastguard Worker 785*e1eccf28SAndroid Build Coastguard Worker 786*e1eccf28SAndroid Build Coastguard Worker; TODO: long vector types 787*e1eccf28SAndroid Build Coastguard Worker 788*e1eccf28SAndroid Build Coastguard Workerdefine float @_Z3minff(float %v1, float %v2) nounwind readnone { 789*e1eccf28SAndroid Build Coastguard Worker %1 = tail call float @_Z4fminff(float %v1, float %v2) 790*e1eccf28SAndroid Build Coastguard Worker ret float %1 791*e1eccf28SAndroid Build Coastguard Worker} 792*e1eccf28SAndroid Build Coastguard Worker 793*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z3minDv2_fS_(<2 x float> %v1, <2 x float> %v2) nounwind readnone { 794*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <2 x float> @_Z4fminDv2_fS_(<2 x float> %v1, <2 x float> %v2) 795*e1eccf28SAndroid Build Coastguard Worker ret <2 x float> %1 796*e1eccf28SAndroid Build Coastguard Worker} 797*e1eccf28SAndroid Build Coastguard Worker 798*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z3minDv2_ff(<2 x float> %v1, float %v2) nounwind readnone { 799*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <2 x float> @_Z4fminDv2_ff(<2 x float> %v1, float %v2) 800*e1eccf28SAndroid Build Coastguard Worker ret <2 x float> %1 801*e1eccf28SAndroid Build Coastguard Worker} 802*e1eccf28SAndroid Build Coastguard Worker 803*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z3minDv3_fS_(<3 x float> %v1, <3 x float> %v2) nounwind readnone { 804*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <3 x float> @_Z4fminDv3_fS_(<3 x float> %v1, <3 x float> %v2) 805*e1eccf28SAndroid Build Coastguard Worker ret <3 x float> %1 806*e1eccf28SAndroid Build Coastguard Worker} 807*e1eccf28SAndroid Build Coastguard Worker 808*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z3minDv3_ff(<3 x float> %v1, float %v2) nounwind readnone { 809*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <3 x float> @_Z4fminDv3_ff(<3 x float> %v1, float %v2) 810*e1eccf28SAndroid Build Coastguard Worker ret <3 x float> %1 811*e1eccf28SAndroid Build Coastguard Worker} 812*e1eccf28SAndroid Build Coastguard Worker 813*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z3minDv4_fS_(<4 x float> %v1, <4 x float> %v2) nounwind readnone { 814*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <4 x float> @_Z4fminDv4_fS_(<4 x float> %v1, <4 x float> %v2) 815*e1eccf28SAndroid Build Coastguard Worker ret <4 x float> %1 816*e1eccf28SAndroid Build Coastguard Worker} 817*e1eccf28SAndroid Build Coastguard Worker 818*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z3minDv4_ff(<4 x float> %v1, float %v2) nounwind readnone { 819*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <4 x float> @_Z4fminDv4_ff(<4 x float> %v1, float %v2) 820*e1eccf28SAndroid Build Coastguard Worker ret <4 x float> %1 821*e1eccf28SAndroid Build Coastguard Worker} 822*e1eccf28SAndroid Build Coastguard Worker 823*e1eccf28SAndroid Build Coastguard Worker 824*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 825*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;; YUV ;;;;;;;;;; 826*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 827*e1eccf28SAndroid Build Coastguard Worker 828*e1eccf28SAndroid Build Coastguard Worker@yuv_U = internal constant <4 x i32> <i32 0, i32 -100, i32 516, i32 0>, align 16 829*e1eccf28SAndroid Build Coastguard Worker@yuv_V = internal constant <4 x i32> <i32 409, i32 -208, i32 0, i32 0>, align 16 830*e1eccf28SAndroid Build Coastguard Worker@yuv_0 = internal constant <4 x i32> <i32 0, i32 0, i32 0, i32 0>, align 16 831*e1eccf28SAndroid Build Coastguard Worker@yuv_255 = internal constant <4 x i32> <i32 65535, i32 65535, i32 65535, i32 65535>, align 16 832*e1eccf28SAndroid Build Coastguard Worker 833*e1eccf28SAndroid Build Coastguard Worker 834*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i8> @_Z18rsYuvToRGBA_uchar4hhh(i8 %pY, i8 %pU, i8 %pV) nounwind readnone alwaysinline { 835*e1eccf28SAndroid Build Coastguard Worker %_sy = zext i8 %pY to i32 836*e1eccf28SAndroid Build Coastguard Worker %_su = zext i8 %pU to i32 837*e1eccf28SAndroid Build Coastguard Worker %_sv = zext i8 %pV to i32 838*e1eccf28SAndroid Build Coastguard Worker 839*e1eccf28SAndroid Build Coastguard Worker %_sy2 = add i32 -16, %_sy 840*e1eccf28SAndroid Build Coastguard Worker %_sy3 = mul i32 298, %_sy2 841*e1eccf28SAndroid Build Coastguard Worker %_su2 = add i32 -128, %_su 842*e1eccf28SAndroid Build Coastguard Worker %_sv2 = add i32 -128, %_sv 843*e1eccf28SAndroid Build Coastguard Worker %_y = tail call <4 x i32> @smear_4i32(i32 %_sy3) nounwind readnone 844*e1eccf28SAndroid Build Coastguard Worker %_u = tail call <4 x i32> @smear_4i32(i32 %_su2) nounwind readnone 845*e1eccf28SAndroid Build Coastguard Worker %_v = tail call <4 x i32> @smear_4i32(i32 %_sv2) nounwind readnone 846*e1eccf28SAndroid Build Coastguard Worker 847*e1eccf28SAndroid Build Coastguard Worker %mu = load <4 x i32>, <4 x i32>* @yuv_U, align 8 848*e1eccf28SAndroid Build Coastguard Worker %mv = load <4 x i32>, <4 x i32>* @yuv_V, align 8 849*e1eccf28SAndroid Build Coastguard Worker %_u2 = mul <4 x i32> %_u, %mu 850*e1eccf28SAndroid Build Coastguard Worker %_v2 = mul <4 x i32> %_v, %mv 851*e1eccf28SAndroid Build Coastguard Worker %_y2 = add <4 x i32> %_y, %_u2 852*e1eccf28SAndroid Build Coastguard Worker %_y3 = add <4 x i32> %_y2, %_v2 853*e1eccf28SAndroid Build Coastguard Worker 854*e1eccf28SAndroid Build Coastguard Worker ; %r1 = tail call <4 x i16> @llvm.aarch64.neon.sqshrun.v4i16(<4 x i32> %_y3, <4 x i32> <i32 8, i32 8, i32 8, i32 8>) nounwind readnone 855*e1eccf28SAndroid Build Coastguard Worker; %r2 = trunc <4 x i16> %r1 to <4 x i8> 856*e1eccf28SAndroid Build Coastguard Worker; ret <4 x i8> %r2 857*e1eccf28SAndroid Build Coastguard Worker 858*e1eccf28SAndroid Build Coastguard Worker %c0 = load <4 x i32>, <4 x i32>* @yuv_0, align 8 859*e1eccf28SAndroid Build Coastguard Worker %c255 = load <4 x i32>, <4 x i32>* @yuv_255, align 8 860*e1eccf28SAndroid Build Coastguard Worker %r1 = tail call <4 x i32> @llvm.aarch64.neon.smax.v4i32(<4 x i32> %_y3, <4 x i32> %c0) nounwind readnone 861*e1eccf28SAndroid Build Coastguard Worker %r2 = tail call <4 x i32> @llvm.aarch64.neon.smin.v4i32(<4 x i32> %r1, <4 x i32> %c255) nounwind readnone 862*e1eccf28SAndroid Build Coastguard Worker %r3 = lshr <4 x i32> %r2, <i32 8, i32 8, i32 8, i32 8> 863*e1eccf28SAndroid Build Coastguard Worker %r4 = trunc <4 x i32> %r3 to <4 x i8> 864*e1eccf28SAndroid Build Coastguard Worker ret <4 x i8> %r4 865*e1eccf28SAndroid Build Coastguard Worker} 866*e1eccf28SAndroid Build Coastguard Worker 867*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 868*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;; half_RECIP ;;;;;;;;;; 869*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 870*e1eccf28SAndroid Build Coastguard Worker 871*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z10half_recipDv2_f(<2 x float> %v) nounwind readnone { 872*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <2 x float> @llvm.aarch64.neon.frecpe.v2f32(<2 x float> %v) nounwind readnone 873*e1eccf28SAndroid Build Coastguard Worker %2 = tail call <2 x float> @llvm.aarch64.neon.frecps.v2f32(<2 x float> %1, <2 x float> %v) nounwind readnone 874*e1eccf28SAndroid Build Coastguard Worker %3 = fmul <2 x float> %1, %2 875*e1eccf28SAndroid Build Coastguard Worker %4 = tail call <2 x float> @llvm.aarch64.neon.frecps.v2f32(<2 x float> %3, <2 x float> %v) nounwind readnone 876*e1eccf28SAndroid Build Coastguard Worker %5 = fmul <2 x float> %4, %3 877*e1eccf28SAndroid Build Coastguard Worker ret <2 x float> %5 878*e1eccf28SAndroid Build Coastguard Worker} 879*e1eccf28SAndroid Build Coastguard Worker 880*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z10half_recipDv4_f(<4 x float> %v) nounwind readnone { 881*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <4 x float> @llvm.aarch64.neon.frecpe.v4f32(<4 x float> %v) nounwind readnone 882*e1eccf28SAndroid Build Coastguard Worker %2 = tail call <4 x float> @llvm.aarch64.neon.frecps.v4f32(<4 x float> %1, <4 x float> %v) nounwind readnone 883*e1eccf28SAndroid Build Coastguard Worker %3 = fmul <4 x float> %1, %2 884*e1eccf28SAndroid Build Coastguard Worker %4 = tail call <4 x float> @llvm.aarch64.neon.frecps.v4f32(<4 x float> %3, <4 x float> %v) nounwind readnone 885*e1eccf28SAndroid Build Coastguard Worker %5 = fmul <4 x float> %4, %3 886*e1eccf28SAndroid Build Coastguard Worker ret <4 x float> %5 887*e1eccf28SAndroid Build Coastguard Worker} 888*e1eccf28SAndroid Build Coastguard Worker 889*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z10half_recipDv3_f(<3 x float> %v) nounwind readnone { 890*e1eccf28SAndroid Build Coastguard Worker %1 = shufflevector <3 x float> %v, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 891*e1eccf28SAndroid Build Coastguard Worker %2 = tail call <4 x float> @_Z10half_recipDv4_f(<4 x float> %1) nounwind readnone 892*e1eccf28SAndroid Build Coastguard Worker %3 = shufflevector <4 x float> %2, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2> 893*e1eccf28SAndroid Build Coastguard Worker ret <3 x float> %3 894*e1eccf28SAndroid Build Coastguard Worker} 895*e1eccf28SAndroid Build Coastguard Worker 896*e1eccf28SAndroid Build Coastguard Worker 897*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 898*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;; half_RSQRT ;;;;;;;;;; 899*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 900*e1eccf28SAndroid Build Coastguard Worker 901*e1eccf28SAndroid Build Coastguard Workerdefine float @_Z10half_rsqrtf(float %v) { 902*e1eccf28SAndroid Build Coastguard Worker %1 = insertelement <2 x float> undef, float %v, i32 0 903*e1eccf28SAndroid Build Coastguard Worker %2 = tail call <2 x float> @llvm.aarch64.neon.frsqrte.v2f32(<2 x float> %1) nounwind readnone 904*e1eccf28SAndroid Build Coastguard Worker %3 = fmul <2 x float> %2, %2 905*e1eccf28SAndroid Build Coastguard Worker %4 = tail call <2 x float> @llvm.aarch64.neon.frsqrts.v2f32(<2 x float> %1, <2 x float> %3) nounwind readnone 906*e1eccf28SAndroid Build Coastguard Worker %5 = fmul <2 x float> %2, %4 907*e1eccf28SAndroid Build Coastguard Worker %6 = extractelement <2 x float> %5, i32 0 908*e1eccf28SAndroid Build Coastguard Worker ret float %6 909*e1eccf28SAndroid Build Coastguard Worker} 910*e1eccf28SAndroid Build Coastguard Worker 911*e1eccf28SAndroid Build Coastguard Workerdefine <2 x float> @_Z10half_rsqrtDv2_f(<2 x float> %v) nounwind readnone { 912*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <2 x float> @llvm.aarch64.neon.frsqrte.v2f32(<2 x float> %v) nounwind readnone 913*e1eccf28SAndroid Build Coastguard Worker %2 = fmul <2 x float> %1, %1 914*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <2 x float> @llvm.aarch64.neon.frsqrts.v2f32(<2 x float> %v, <2 x float> %2) nounwind readnone 915*e1eccf28SAndroid Build Coastguard Worker %4 = fmul <2 x float> %1, %3 916*e1eccf28SAndroid Build Coastguard Worker ret <2 x float> %4 917*e1eccf28SAndroid Build Coastguard Worker} 918*e1eccf28SAndroid Build Coastguard Worker 919*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z10half_rsqrtDv3_f(<3 x float> %v) nounwind readnone { 920*e1eccf28SAndroid Build Coastguard Worker %1 = shufflevector <3 x float> %v, <3 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 921*e1eccf28SAndroid Build Coastguard Worker %2 = tail call <4 x float> @llvm.aarch64.neon.frsqrte.v4f32(<4 x float> %1) nounwind readnone 922*e1eccf28SAndroid Build Coastguard Worker %3 = fmul <4 x float> %2, %2 923*e1eccf28SAndroid Build Coastguard Worker %4 = tail call <4 x float> @llvm.aarch64.neon.frsqrts.v4f32(<4 x float> %1, <4 x float> %3) nounwind readnone 924*e1eccf28SAndroid Build Coastguard Worker %5 = fmul <4 x float> %2, %4 925*e1eccf28SAndroid Build Coastguard Worker %6 = shufflevector <4 x float> %5, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2> 926*e1eccf28SAndroid Build Coastguard Worker ret <3 x float> %6 927*e1eccf28SAndroid Build Coastguard Worker} 928*e1eccf28SAndroid Build Coastguard Worker 929*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z10half_rsqrtDv4_f(<4 x float> %v) nounwind readnone { 930*e1eccf28SAndroid Build Coastguard Worker %1 = tail call <4 x float> @llvm.aarch64.neon.frsqrte.v4f32(<4 x float> %v) nounwind readnone 931*e1eccf28SAndroid Build Coastguard Worker %2 = fmul <4 x float> %1, %1 932*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <4 x float> @llvm.aarch64.neon.frsqrts.v4f32(<4 x float> %v, <4 x float> %2) nounwind readnone 933*e1eccf28SAndroid Build Coastguard Worker %4 = fmul <4 x float> %1, %3 934*e1eccf28SAndroid Build Coastguard Worker ret <4 x float> %4 935*e1eccf28SAndroid Build Coastguard Worker} 936*e1eccf28SAndroid Build Coastguard Worker 937*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 938*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;; matrix ;;;;;;;;;; 939*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 940*e1eccf28SAndroid Build Coastguard Worker 941*e1eccf28SAndroid Build Coastguard Worker%struct.rs_matrix4x4 = type { [16 x float] } 942*e1eccf28SAndroid Build Coastguard Worker%struct.rs_matrix3x3 = type { [9 x float] } 943*e1eccf28SAndroid Build Coastguard Worker%struct.rs_matrix2x2 = type { [4 x float] } 944*e1eccf28SAndroid Build Coastguard Worker 945*e1eccf28SAndroid Build Coastguard Workerdefine internal <4 x float> @smear_f(float %in) nounwind readnone alwaysinline { 946*e1eccf28SAndroid Build Coastguard Worker %1 = insertelement <4 x float> undef, float %in, i32 0 947*e1eccf28SAndroid Build Coastguard Worker %2 = insertelement <4 x float> %1, float %in, i32 1 948*e1eccf28SAndroid Build Coastguard Worker %3 = insertelement <4 x float> %2, float %in, i32 2 949*e1eccf28SAndroid Build Coastguard Worker %4 = insertelement <4 x float> %3, float %in, i32 3 950*e1eccf28SAndroid Build Coastguard Worker ret <4 x float> %4 951*e1eccf28SAndroid Build Coastguard Worker} 952*e1eccf28SAndroid Build Coastguard Worker 953*e1eccf28SAndroid Build Coastguard Worker 954*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z16rsMatrixMultiplyPK12rs_matrix3x3Dv3_f(%struct.rs_matrix3x3* nocapture %m, <3 x float> %in) nounwind readonly { 955*e1eccf28SAndroid Build Coastguard Worker %x0 = extractelement <3 x float> %in, i32 0 956*e1eccf28SAndroid Build Coastguard Worker %x = tail call <4 x float> @smear_f(float %x0) nounwind readnone 957*e1eccf28SAndroid Build Coastguard Worker %y0 = extractelement <3 x float> %in, i32 1 958*e1eccf28SAndroid Build Coastguard Worker %y = tail call <4 x float> @smear_f(float %y0) nounwind readnone 959*e1eccf28SAndroid Build Coastguard Worker %z0 = extractelement <3 x float> %in, i32 2 960*e1eccf28SAndroid Build Coastguard Worker %z = tail call <4 x float> @smear_f(float %z0) nounwind readnone 961*e1eccf28SAndroid Build Coastguard Worker 962*e1eccf28SAndroid Build Coastguard Worker %px = getelementptr inbounds %struct.rs_matrix3x3, %struct.rs_matrix3x3* %m, i32 0, i32 0, i32 0 963*e1eccf28SAndroid Build Coastguard Worker %px2 = bitcast float* %px to <4 x float>* 964*e1eccf28SAndroid Build Coastguard Worker %xm = load <4 x float>, <4 x float>* %px2, align 4 965*e1eccf28SAndroid Build Coastguard Worker 966*e1eccf28SAndroid Build Coastguard Worker %py = getelementptr inbounds %struct.rs_matrix3x3, %struct.rs_matrix3x3* %m, i32 0, i32 0, i32 3 967*e1eccf28SAndroid Build Coastguard Worker %py2 = bitcast float* %py to <4 x float>* 968*e1eccf28SAndroid Build Coastguard Worker ; %ym = call <4 x float> @llvm.aarch64.neon.ld4.v4f32(i8* %py2, i32 4) nounwind 969*e1eccf28SAndroid Build Coastguard Worker %ym = load <4 x float>, <4 x float>* %py2, align 4 970*e1eccf28SAndroid Build Coastguard Worker 971*e1eccf28SAndroid Build Coastguard Worker %pz = getelementptr inbounds %struct.rs_matrix3x3, %struct.rs_matrix3x3* %m, i32 0, i32 0, i32 5 972*e1eccf28SAndroid Build Coastguard Worker %pz2 = bitcast float* %pz to <4 x float>* 973*e1eccf28SAndroid Build Coastguard Worker; %zm2 = call <4 x float> @llvm.aarch64.neon.ld4.v4f32(i8* %pz2, i32 4) nounwind 974*e1eccf28SAndroid Build Coastguard Worker %zm2 = load <4 x float>, <4 x float>* %pz2, align 4 975*e1eccf28SAndroid Build Coastguard Worker %zm = shufflevector <4 x float> %zm2, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 4> 976*e1eccf28SAndroid Build Coastguard Worker 977*e1eccf28SAndroid Build Coastguard Worker %a1 = fmul <4 x float> %x, %xm 978*e1eccf28SAndroid Build Coastguard Worker %a2 = fmul <4 x float> %y, %ym 979*e1eccf28SAndroid Build Coastguard Worker %a3 = fadd <4 x float> %a1, %a2 980*e1eccf28SAndroid Build Coastguard Worker %a4 = fmul <4 x float> %z, %zm 981*e1eccf28SAndroid Build Coastguard Worker %a5 = fadd <4 x float> %a4, %a3 982*e1eccf28SAndroid Build Coastguard Worker %a6 = shufflevector <4 x float> %a5, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2> 983*e1eccf28SAndroid Build Coastguard Worker ret <3 x float> %a6 984*e1eccf28SAndroid Build Coastguard Worker} 985*e1eccf28SAndroid Build Coastguard Worker 986*e1eccf28SAndroid Build Coastguard Workerdefine <3 x float> @_Z16rsMatrixMultiplyPK12rs_matrix3x3Dv2_f(%struct.rs_matrix3x3* nocapture %m, <2 x float> %in) nounwind readonly { 987*e1eccf28SAndroid Build Coastguard Worker %x0 = extractelement <2 x float> %in, i32 0 988*e1eccf28SAndroid Build Coastguard Worker %x = tail call <4 x float> @smear_f(float %x0) nounwind readnone 989*e1eccf28SAndroid Build Coastguard Worker %y0 = extractelement <2 x float> %in, i32 1 990*e1eccf28SAndroid Build Coastguard Worker %y = tail call <4 x float> @smear_f(float %y0) nounwind readnone 991*e1eccf28SAndroid Build Coastguard Worker 992*e1eccf28SAndroid Build Coastguard Worker %px = getelementptr inbounds %struct.rs_matrix3x3, %struct.rs_matrix3x3* %m, i32 0, i32 0, i32 0 993*e1eccf28SAndroid Build Coastguard Worker %px2 = bitcast float* %px to <4 x float>* 994*e1eccf28SAndroid Build Coastguard Worker %xm = load <4 x float>, <4 x float>* %px2, align 4 995*e1eccf28SAndroid Build Coastguard Worker %py = getelementptr inbounds %struct.rs_matrix3x3, %struct.rs_matrix3x3* %m, i32 0, i32 0, i32 3 996*e1eccf28SAndroid Build Coastguard Worker %py2 = bitcast float* %py to <4 x float>* 997*e1eccf28SAndroid Build Coastguard Worker %ym = load <4 x float>, <4 x float>* %py2, align 4 998*e1eccf28SAndroid Build Coastguard Worker 999*e1eccf28SAndroid Build Coastguard Worker %a1 = fmul <4 x float> %x, %xm 1000*e1eccf28SAndroid Build Coastguard Worker %a2 = fmul <4 x float> %y, %ym 1001*e1eccf28SAndroid Build Coastguard Worker %a3 = fadd <4 x float> %a1, %a2 1002*e1eccf28SAndroid Build Coastguard Worker %a4 = shufflevector <4 x float> %a3, <4 x float> undef, <3 x i32> <i32 0, i32 1, i32 2> 1003*e1eccf28SAndroid Build Coastguard Worker ret <3 x float> %a4 1004*e1eccf28SAndroid Build Coastguard Worker} 1005*e1eccf28SAndroid Build Coastguard Worker 1006*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z16rsMatrixMultiplyPK12rs_matrix4x4Dv4_f(%struct.rs_matrix4x4* nocapture %m, <4 x float> %in) nounwind readonly { 1007*e1eccf28SAndroid Build Coastguard Worker %x0 = extractelement <4 x float> %in, i32 0 1008*e1eccf28SAndroid Build Coastguard Worker %x = tail call <4 x float> @smear_f(float %x0) nounwind readnone 1009*e1eccf28SAndroid Build Coastguard Worker %y0 = extractelement <4 x float> %in, i32 1 1010*e1eccf28SAndroid Build Coastguard Worker %y = tail call <4 x float> @smear_f(float %y0) nounwind readnone 1011*e1eccf28SAndroid Build Coastguard Worker %z0 = extractelement <4 x float> %in, i32 2 1012*e1eccf28SAndroid Build Coastguard Worker %z = tail call <4 x float> @smear_f(float %z0) nounwind readnone 1013*e1eccf28SAndroid Build Coastguard Worker %w0 = extractelement <4 x float> %in, i32 3 1014*e1eccf28SAndroid Build Coastguard Worker %w = tail call <4 x float> @smear_f(float %w0) nounwind readnone 1015*e1eccf28SAndroid Build Coastguard Worker 1016*e1eccf28SAndroid Build Coastguard Worker %px = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 0 1017*e1eccf28SAndroid Build Coastguard Worker %px2 = bitcast float* %px to <4 x float>* 1018*e1eccf28SAndroid Build Coastguard Worker %xm = load <4 x float>, <4 x float>* %px2, align 4 1019*e1eccf28SAndroid Build Coastguard Worker %py = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 4 1020*e1eccf28SAndroid Build Coastguard Worker %py2 = bitcast float* %py to <4 x float>* 1021*e1eccf28SAndroid Build Coastguard Worker %ym = load <4 x float>, <4 x float>* %py2, align 4 1022*e1eccf28SAndroid Build Coastguard Worker %pz = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 8 1023*e1eccf28SAndroid Build Coastguard Worker %pz2 = bitcast float* %pz to <4 x float>* 1024*e1eccf28SAndroid Build Coastguard Worker %zm = load <4 x float>, <4 x float>* %pz2, align 4 1025*e1eccf28SAndroid Build Coastguard Worker %pw = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 12 1026*e1eccf28SAndroid Build Coastguard Worker %pw2 = bitcast float* %pw to <4 x float>* 1027*e1eccf28SAndroid Build Coastguard Worker %wm = load <4 x float>, <4 x float>* %pw2, align 4 1028*e1eccf28SAndroid Build Coastguard Worker 1029*e1eccf28SAndroid Build Coastguard Worker %a1 = fmul <4 x float> %x, %xm 1030*e1eccf28SAndroid Build Coastguard Worker %a2 = fmul <4 x float> %y, %ym 1031*e1eccf28SAndroid Build Coastguard Worker %a3 = fadd <4 x float> %a1, %a2 1032*e1eccf28SAndroid Build Coastguard Worker %a4 = fmul <4 x float> %z, %zm 1033*e1eccf28SAndroid Build Coastguard Worker %a5 = fadd <4 x float> %a3, %a4 1034*e1eccf28SAndroid Build Coastguard Worker %a6 = fmul <4 x float> %w, %wm 1035*e1eccf28SAndroid Build Coastguard Worker %a7 = fadd <4 x float> %a5, %a6 1036*e1eccf28SAndroid Build Coastguard Worker ret <4 x float> %a7 1037*e1eccf28SAndroid Build Coastguard Worker} 1038*e1eccf28SAndroid Build Coastguard Worker 1039*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z16rsMatrixMultiplyPK12rs_matrix4x4Dv3_f(%struct.rs_matrix4x4* nocapture %m, <3 x float> %in) nounwind readonly { 1040*e1eccf28SAndroid Build Coastguard Worker %x0 = extractelement <3 x float> %in, i32 0 1041*e1eccf28SAndroid Build Coastguard Worker %x = tail call <4 x float> @smear_f(float %x0) nounwind readnone 1042*e1eccf28SAndroid Build Coastguard Worker %y0 = extractelement <3 x float> %in, i32 1 1043*e1eccf28SAndroid Build Coastguard Worker %y = tail call <4 x float> @smear_f(float %y0) nounwind readnone 1044*e1eccf28SAndroid Build Coastguard Worker %z0 = extractelement <3 x float> %in, i32 2 1045*e1eccf28SAndroid Build Coastguard Worker %z = tail call <4 x float> @smear_f(float %z0) nounwind readnone 1046*e1eccf28SAndroid Build Coastguard Worker 1047*e1eccf28SAndroid Build Coastguard Worker %px = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 0 1048*e1eccf28SAndroid Build Coastguard Worker %px2 = bitcast float* %px to <4 x float>* 1049*e1eccf28SAndroid Build Coastguard Worker %xm = load <4 x float>, <4 x float>* %px2, align 4 1050*e1eccf28SAndroid Build Coastguard Worker %py = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 4 1051*e1eccf28SAndroid Build Coastguard Worker %py2 = bitcast float* %py to <4 x float>* 1052*e1eccf28SAndroid Build Coastguard Worker %ym = load <4 x float>, <4 x float>* %py2, align 4 1053*e1eccf28SAndroid Build Coastguard Worker %pz = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 8 1054*e1eccf28SAndroid Build Coastguard Worker %pz2 = bitcast float* %pz to <4 x float>* 1055*e1eccf28SAndroid Build Coastguard Worker %zm = load <4 x float>, <4 x float>* %pz2, align 4 1056*e1eccf28SAndroid Build Coastguard Worker %pw = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 12 1057*e1eccf28SAndroid Build Coastguard Worker %pw2 = bitcast float* %pw to <4 x float>* 1058*e1eccf28SAndroid Build Coastguard Worker %wm = load <4 x float>, <4 x float>* %pw2, align 4 1059*e1eccf28SAndroid Build Coastguard Worker 1060*e1eccf28SAndroid Build Coastguard Worker %a1 = fmul <4 x float> %x, %xm 1061*e1eccf28SAndroid Build Coastguard Worker %a2 = fadd <4 x float> %wm, %a1 1062*e1eccf28SAndroid Build Coastguard Worker %a3 = fmul <4 x float> %y, %ym 1063*e1eccf28SAndroid Build Coastguard Worker %a4 = fadd <4 x float> %a2, %a3 1064*e1eccf28SAndroid Build Coastguard Worker %a5 = fmul <4 x float> %z, %zm 1065*e1eccf28SAndroid Build Coastguard Worker %a6 = fadd <4 x float> %a4, %a5 1066*e1eccf28SAndroid Build Coastguard Worker ret <4 x float> %a6 1067*e1eccf28SAndroid Build Coastguard Worker} 1068*e1eccf28SAndroid Build Coastguard Worker 1069*e1eccf28SAndroid Build Coastguard Workerdefine <4 x float> @_Z16rsMatrixMultiplyPK12rs_matrix4x4Dv2_f(%struct.rs_matrix4x4* nocapture %m, <2 x float> %in) nounwind readonly { 1070*e1eccf28SAndroid Build Coastguard Worker %x0 = extractelement <2 x float> %in, i32 0 1071*e1eccf28SAndroid Build Coastguard Worker %x = tail call <4 x float> @smear_f(float %x0) nounwind readnone 1072*e1eccf28SAndroid Build Coastguard Worker %y0 = extractelement <2 x float> %in, i32 1 1073*e1eccf28SAndroid Build Coastguard Worker %y = tail call <4 x float> @smear_f(float %y0) nounwind readnone 1074*e1eccf28SAndroid Build Coastguard Worker 1075*e1eccf28SAndroid Build Coastguard Worker %px = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 0 1076*e1eccf28SAndroid Build Coastguard Worker %px2 = bitcast float* %px to <4 x float>* 1077*e1eccf28SAndroid Build Coastguard Worker %xm = load <4 x float>, <4 x float>* %px2, align 4 1078*e1eccf28SAndroid Build Coastguard Worker %py = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 4 1079*e1eccf28SAndroid Build Coastguard Worker %py2 = bitcast float* %py to <4 x float>* 1080*e1eccf28SAndroid Build Coastguard Worker %ym = load <4 x float>, <4 x float>* %py2, align 4 1081*e1eccf28SAndroid Build Coastguard Worker %pw = getelementptr inbounds %struct.rs_matrix4x4, %struct.rs_matrix4x4* %m, i32 0, i32 0, i32 12 1082*e1eccf28SAndroid Build Coastguard Worker %pw2 = bitcast float* %pw to <4 x float>* 1083*e1eccf28SAndroid Build Coastguard Worker %wm = load <4 x float>, <4 x float>* %pw2, align 4 1084*e1eccf28SAndroid Build Coastguard Worker 1085*e1eccf28SAndroid Build Coastguard Worker %a1 = fmul <4 x float> %x, %xm 1086*e1eccf28SAndroid Build Coastguard Worker %a2 = fadd <4 x float> %wm, %a1 1087*e1eccf28SAndroid Build Coastguard Worker %a3 = fmul <4 x float> %y, %ym 1088*e1eccf28SAndroid Build Coastguard Worker %a4 = fadd <4 x float> %a2, %a3 1089*e1eccf28SAndroid Build Coastguard Worker ret <4 x float> %a4 1090*e1eccf28SAndroid Build Coastguard Worker} 1091*e1eccf28SAndroid Build Coastguard Worker 1092*e1eccf28SAndroid Build Coastguard Worker 1093*e1eccf28SAndroid Build Coastguard Worker 1094*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1095*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;; pixel ops ;;;;;;;;;; 1096*e1eccf28SAndroid Build Coastguard Worker;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1097*e1eccf28SAndroid Build Coastguard Worker 1098*e1eccf28SAndroid Build Coastguard Worker 1099*e1eccf28SAndroid Build Coastguard Worker@fc_255.0 = internal constant <4 x float> <float 255.0, float 255.0, float 255.0, float 255.0>, align 16 1100*e1eccf28SAndroid Build Coastguard Worker@fc_0.5 = internal constant <4 x float> <float 0.5, float 0.5, float 0.5, float 0.5>, align 16 1101*e1eccf28SAndroid Build Coastguard Worker@fc_0 = internal constant <4 x float> <float 0.0, float 0.0, float 0.0, float 0.0>, align 16 1102*e1eccf28SAndroid Build Coastguard Worker 1103*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x i8> @_Z14convert_uchar4Dv4_f(<4 x float> %in) nounwind readnone 1104*e1eccf28SAndroid Build Coastguard Workerdeclare <4 x float> @_Z14convert_float4Dv4_h(<4 x i8> %in) nounwind readnone 1105*e1eccf28SAndroid Build Coastguard Worker 1106*e1eccf28SAndroid Build Coastguard Worker; uchar4 __attribute__((overloadable)) rsPackColorTo8888(float4 color) 1107*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i8> @_Z17rsPackColorTo8888Dv4_f(<4 x float> %color) nounwind readnone { 1108*e1eccf28SAndroid Build Coastguard Worker %f255 = load <4 x float>, <4 x float>* @fc_255.0, align 16 1109*e1eccf28SAndroid Build Coastguard Worker %f05 = load <4 x float>, <4 x float>* @fc_0.5, align 16 1110*e1eccf28SAndroid Build Coastguard Worker %f0 = load <4 x float>, <4 x float>* @fc_0, align 16 1111*e1eccf28SAndroid Build Coastguard Worker %v1 = fmul <4 x float> %f255, %color 1112*e1eccf28SAndroid Build Coastguard Worker %v2 = fadd <4 x float> %f05, %v1 1113*e1eccf28SAndroid Build Coastguard Worker %v3 = tail call <4 x float> @_Z5clampDv4_fS_S_(<4 x float> %v2, <4 x float> %f0, <4 x float> %f255) nounwind readnone 1114*e1eccf28SAndroid Build Coastguard Worker %v4 = tail call <4 x i8> @_Z14convert_uchar4Dv4_f(<4 x float> %v3) nounwind readnone 1115*e1eccf28SAndroid Build Coastguard Worker ret <4 x i8> %v4 1116*e1eccf28SAndroid Build Coastguard Worker} 1117*e1eccf28SAndroid Build Coastguard Worker 1118*e1eccf28SAndroid Build Coastguard Worker; uchar4 __attribute__((overloadable)) rsPackColorTo8888(float3 color) 1119*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i8> @_Z17rsPackColorTo8888Dv3_f(<4 x i32> %color) nounwind readnone { 1120*e1eccf28SAndroid Build Coastguard Worker %1 = bitcast <4 x i32> %color to <4 x float> 1121*e1eccf28SAndroid Build Coastguard Worker %2 = insertelement <4 x float> %1, float 1.0, i32 3 1122*e1eccf28SAndroid Build Coastguard Worker %3 = tail call <4 x i8> @_Z17rsPackColorTo8888Dv4_f(<4 x float> %2) nounwind readnone 1123*e1eccf28SAndroid Build Coastguard Worker ret <4 x i8> %3 1124*e1eccf28SAndroid Build Coastguard Worker} 1125*e1eccf28SAndroid Build Coastguard Worker 1126*e1eccf28SAndroid Build Coastguard Worker; uchar4 __attribute__((overloadable)) rsPackColorTo8888(float r, float g, float b) 1127*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i8> @_Z17rsPackColorTo8888fff(float %r, float %g, float %b) nounwind readnone { 1128*e1eccf28SAndroid Build Coastguard Worker %1 = insertelement <4 x float> undef, float %r, i32 0 1129*e1eccf28SAndroid Build Coastguard Worker %2 = insertelement <4 x float> %1, float %g, i32 1 1130*e1eccf28SAndroid Build Coastguard Worker %3 = insertelement <4 x float> %2, float %b, i32 2 1131*e1eccf28SAndroid Build Coastguard Worker %4 = insertelement <4 x float> %3, float 1.0, i32 3 1132*e1eccf28SAndroid Build Coastguard Worker %5 = tail call <4 x i8> @_Z17rsPackColorTo8888Dv4_f(<4 x float> %4) nounwind readnone 1133*e1eccf28SAndroid Build Coastguard Worker ret <4 x i8> %5 1134*e1eccf28SAndroid Build Coastguard Worker} 1135*e1eccf28SAndroid Build Coastguard Worker 1136*e1eccf28SAndroid Build Coastguard Worker; uchar4 __attribute__((overloadable)) rsPackColorTo8888(float r, float g, float b, float a) 1137*e1eccf28SAndroid Build Coastguard Workerdefine <4 x i8> @_Z17rsPackColorTo8888ffff(float %r, float %g, float %b, float %a) nounwind readnone { 1138*e1eccf28SAndroid Build Coastguard Worker %1 = insertelement <4 x float> undef, float %r, i32 0 1139*e1eccf28SAndroid Build Coastguard Worker %2 = insertelement <4 x float> %1, float %g, i32 1 1140*e1eccf28SAndroid Build Coastguard Worker %3 = insertelement <4 x float> %2, float %b, i32 2 1141*e1eccf28SAndroid Build Coastguard Worker %4 = insertelement <4 x float> %3, float %a, i32 3 1142*e1eccf28SAndroid Build Coastguard Worker %5 = tail call <4 x i8> @_Z17rsPackColorTo8888Dv4_f(<4 x float> %4) nounwind readnone 1143*e1eccf28SAndroid Build Coastguard Worker ret <4 x i8> %5 1144*e1eccf28SAndroid Build Coastguard Worker} 1145*e1eccf28SAndroid Build Coastguard Worker 1146