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