1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mcpu=cortex-a8 -verify-machineinstrs 2*9880d681SAndroid Build Coastguard Worker; PR11829 3*9880d681SAndroid 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" 4*9880d681SAndroid Build Coastguard Workertarget triple = "armv7-none-linux-gnueabi" 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine arm_aapcs_vfpcc void @foo(i8* nocapture %arg) nounwind uwtable align 2 { 7*9880d681SAndroid Build Coastguard Workerbb: 8*9880d681SAndroid Build Coastguard Worker br i1 undef, label %bb1, label %bb2 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerbb1: ; preds = %bb 11*9880d681SAndroid Build Coastguard Worker unreachable 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Workerbb2: ; preds = %bb 14*9880d681SAndroid Build Coastguard Worker br label %bb3 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerbb3: ; preds = %bb4, %bb2 17*9880d681SAndroid Build Coastguard Worker %tmp = icmp slt i32 undef, undef 18*9880d681SAndroid Build Coastguard Worker br i1 %tmp, label %bb4, label %bb67 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerbb4: ; preds = %bb3 21*9880d681SAndroid Build Coastguard Worker %tmp5 = load <4 x i32>, <4 x i32>* undef, align 16 22*9880d681SAndroid Build Coastguard Worker %tmp6 = and <4 x i32> %tmp5, <i32 8388607, i32 8388607, i32 8388607, i32 8388607> 23*9880d681SAndroid Build Coastguard Worker %tmp7 = or <4 x i32> %tmp6, <i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216> 24*9880d681SAndroid Build Coastguard Worker %tmp8 = bitcast <4 x i32> %tmp7 to <4 x float> 25*9880d681SAndroid Build Coastguard Worker %tmp9 = fsub <4 x float> %tmp8, bitcast (i128 or (i128 shl (i128 zext (i64 trunc (i128 lshr (i128 bitcast (<4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00> to i128), i128 64) to i64) to i128), i128 64), i128 zext (i64 trunc (i128 bitcast (<4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00> to i128) to i64) to i128)) to <4 x float>) 26*9880d681SAndroid Build Coastguard Worker %tmp10 = fmul <4 x float> undef, %tmp9 27*9880d681SAndroid Build Coastguard Worker %tmp11 = fadd <4 x float> undef, %tmp10 28*9880d681SAndroid Build Coastguard Worker %tmp12 = bitcast <4 x float> zeroinitializer to i128 29*9880d681SAndroid Build Coastguard Worker %tmp13 = lshr i128 %tmp12, 64 30*9880d681SAndroid Build Coastguard Worker %tmp14 = trunc i128 %tmp13 to i64 31*9880d681SAndroid Build Coastguard Worker %tmp15 = insertvalue [2 x i64] undef, i64 %tmp14, 1 32*9880d681SAndroid Build Coastguard Worker %tmp16 = call <4 x float> @llvm.arm.neon.vrecpe.v4f32(<4 x float> %tmp11) nounwind 33*9880d681SAndroid Build Coastguard Worker %tmp17 = call <4 x float> @llvm.arm.neon.vrecps.v4f32(<4 x float> %tmp16, <4 x float> %tmp11) nounwind 34*9880d681SAndroid Build Coastguard Worker %tmp18 = fmul <4 x float> %tmp17, %tmp16 35*9880d681SAndroid Build Coastguard Worker %tmp19 = call <4 x float> @llvm.arm.neon.vrecps.v4f32(<4 x float> %tmp18, <4 x float> %tmp11) nounwind 36*9880d681SAndroid Build Coastguard Worker %tmp20 = fmul <4 x float> %tmp19, %tmp18 37*9880d681SAndroid Build Coastguard Worker %tmp21 = fmul <4 x float> %tmp20, zeroinitializer 38*9880d681SAndroid Build Coastguard Worker %tmp22 = call <4 x float> @llvm.arm.neon.vmins.v4f32(<4 x float> %tmp21, <4 x float> undef) nounwind 39*9880d681SAndroid Build Coastguard Worker call arm_aapcs_vfpcc void @bar(i8* null, i8* undef, <4 x i32>* undef, [2 x i64] zeroinitializer) nounwind 40*9880d681SAndroid Build Coastguard Worker %tmp23 = bitcast <4 x float> %tmp22 to i128 41*9880d681SAndroid Build Coastguard Worker %tmp24 = trunc i128 %tmp23 to i64 42*9880d681SAndroid Build Coastguard Worker %tmp25 = insertvalue [2 x i64] undef, i64 %tmp24, 0 43*9880d681SAndroid Build Coastguard Worker %tmp26 = insertvalue [2 x i64] %tmp25, i64 0, 1 44*9880d681SAndroid Build Coastguard Worker %tmp27 = load float, float* undef, align 4 45*9880d681SAndroid Build Coastguard Worker %tmp28 = insertelement <4 x float> undef, float %tmp27, i32 3 46*9880d681SAndroid Build Coastguard Worker %tmp29 = load <4 x i32>, <4 x i32>* undef, align 16 47*9880d681SAndroid Build Coastguard Worker %tmp30 = and <4 x i32> %tmp29, <i32 8388607, i32 8388607, i32 8388607, i32 8388607> 48*9880d681SAndroid Build Coastguard Worker %tmp31 = or <4 x i32> %tmp30, <i32 1065353216, i32 1065353216, i32 1065353216, i32 1065353216> 49*9880d681SAndroid Build Coastguard Worker %tmp32 = bitcast <4 x i32> %tmp31 to <4 x float> 50*9880d681SAndroid Build Coastguard Worker %tmp33 = fsub <4 x float> %tmp32, bitcast (i128 or (i128 shl (i128 zext (i64 trunc (i128 lshr (i128 bitcast (<4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00> to i128), i128 64) to i64) to i128), i128 64), i128 zext (i64 trunc (i128 bitcast (<4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00> to i128) to i64) to i128)) to <4 x float>) 51*9880d681SAndroid Build Coastguard Worker %tmp34 = call <4 x float> @llvm.arm.neon.vrecps.v4f32(<4 x float> undef, <4 x float> %tmp28) nounwind 52*9880d681SAndroid Build Coastguard Worker %tmp35 = fmul <4 x float> %tmp34, undef 53*9880d681SAndroid Build Coastguard Worker %tmp36 = fmul <4 x float> %tmp35, undef 54*9880d681SAndroid Build Coastguard Worker %tmp37 = call arm_aapcs_vfpcc i8* undef(i8* undef) nounwind 55*9880d681SAndroid Build Coastguard Worker %tmp38 = load float, float* undef, align 4 56*9880d681SAndroid Build Coastguard Worker %tmp39 = insertelement <2 x float> undef, float %tmp38, i32 0 57*9880d681SAndroid Build Coastguard Worker %tmp40 = call arm_aapcs_vfpcc i8* undef(i8* undef) nounwind 58*9880d681SAndroid Build Coastguard Worker %tmp41 = load float, float* undef, align 4 59*9880d681SAndroid Build Coastguard Worker %tmp42 = insertelement <4 x float> undef, float %tmp41, i32 3 60*9880d681SAndroid Build Coastguard Worker %tmp43 = shufflevector <2 x float> %tmp39, <2 x float> undef, <4 x i32> zeroinitializer 61*9880d681SAndroid Build Coastguard Worker %tmp44 = fmul <4 x float> %tmp33, %tmp43 62*9880d681SAndroid Build Coastguard Worker %tmp45 = fadd <4 x float> %tmp42, %tmp44 63*9880d681SAndroid Build Coastguard Worker %tmp46 = fsub <4 x float> %tmp45, undef 64*9880d681SAndroid Build Coastguard Worker %tmp47 = fmul <4 x float> %tmp46, %tmp36 65*9880d681SAndroid Build Coastguard Worker %tmp48 = fadd <4 x float> undef, %tmp47 66*9880d681SAndroid Build Coastguard Worker %tmp49 = call arm_aapcs_vfpcc i8* undef(i8* undef) nounwind 67*9880d681SAndroid Build Coastguard Worker %tmp50 = load float, float* undef, align 4 68*9880d681SAndroid Build Coastguard Worker %tmp51 = insertelement <4 x float> undef, float %tmp50, i32 3 69*9880d681SAndroid Build Coastguard Worker %tmp52 = call arm_aapcs_vfpcc float* null(i8* undef) nounwind 70*9880d681SAndroid Build Coastguard Worker %tmp54 = load float, float* %tmp52, align 4 71*9880d681SAndroid Build Coastguard Worker %tmp55 = insertelement <4 x float> undef, float %tmp54, i32 3 72*9880d681SAndroid Build Coastguard Worker %tmp56 = fsub <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %tmp22 73*9880d681SAndroid Build Coastguard Worker %tmp57 = call <4 x float> @llvm.arm.neon.vmins.v4f32(<4 x float> %tmp56, <4 x float> %tmp55) nounwind 74*9880d681SAndroid Build Coastguard Worker %tmp58 = fmul <4 x float> undef, %tmp57 75*9880d681SAndroid Build Coastguard Worker %tmp59 = fsub <4 x float> %tmp51, %tmp48 76*9880d681SAndroid Build Coastguard Worker %tmp60 = fsub <4 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>, %tmp58 77*9880d681SAndroid Build Coastguard Worker %tmp61 = fmul <4 x float> %tmp59, %tmp60 78*9880d681SAndroid Build Coastguard Worker %tmp62 = fadd <4 x float> %tmp48, %tmp61 79*9880d681SAndroid Build Coastguard Worker call arm_aapcs_vfpcc void @baz(i8* undef, i8* undef, [2 x i64] %tmp26, <4 x i32>* undef) 80*9880d681SAndroid Build Coastguard Worker %tmp63 = bitcast <4 x float> %tmp62 to i128 81*9880d681SAndroid Build Coastguard Worker %tmp64 = lshr i128 %tmp63, 64 82*9880d681SAndroid Build Coastguard Worker %tmp65 = trunc i128 %tmp64 to i64 83*9880d681SAndroid Build Coastguard Worker %tmp66 = insertvalue [2 x i64] zeroinitializer, i64 %tmp65, 1 84*9880d681SAndroid Build Coastguard Worker call arm_aapcs_vfpcc void @quux(i8* undef, i8* undef, [2 x i64] undef, i8* undef, [2 x i64] %tmp66, i8* undef, i8* undef, [2 x i64] %tmp26, [2 x i64] %tmp15, <4 x i32>* undef) 85*9880d681SAndroid Build Coastguard Worker br label %bb3 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Workerbb67: ; preds = %bb3 88*9880d681SAndroid Build Coastguard Worker ret void 89*9880d681SAndroid Build Coastguard Worker} 90*9880d681SAndroid Build Coastguard Worker 91*9880d681SAndroid Build Coastguard Workerdeclare arm_aapcs_vfpcc void @bar(i8*, i8*, <4 x i32>*, [2 x i64]) 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Workerdeclare arm_aapcs_vfpcc void @baz(i8*, i8* nocapture, [2 x i64], <4 x i32>* nocapture) nounwind uwtable inlinehint align 2 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Workerdeclare arm_aapcs_vfpcc void @quux(i8*, i8*, [2 x i64], i8* nocapture, [2 x i64], i8* nocapture, i8* nocapture, [2 x i64], [2 x i64], <4 x i32>* nocapture) nounwind uwtable inlinehint align 2 96*9880d681SAndroid Build Coastguard Worker 97*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.arm.neon.vmins.v4f32(<4 x float>, <4 x float>) nounwind readnone 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.arm.neon.vrecps.v4f32(<4 x float>, <4 x float>) nounwind readnone 100*9880d681SAndroid Build Coastguard Worker 101*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.arm.neon.vrecpe.v4f32(<4 x float>) nounwind readnone 102