1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mcpu=cortex-a9 -join-liveintervals=0 -verify-machineinstrs 2*9880d681SAndroid Build Coastguard Worker; PR11765 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 Worker; This test case exercises the MachineCopyPropagation pass by disabling the 7*9880d681SAndroid Build Coastguard Worker; RegisterCoalescer. 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Workerdefine arm_aapcs_vfpcc void @foo(i8* %arg) nounwind uwtable align 2 { 10*9880d681SAndroid Build Coastguard Workerbb: 11*9880d681SAndroid Build Coastguard Worker br i1 undef, label %bb1, label %bb2 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Workerbb1: ; preds = %bb 14*9880d681SAndroid Build Coastguard Worker unreachable 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerbb2: ; preds = %bb 17*9880d681SAndroid Build Coastguard Worker br i1 undef, label %bb92, label %bb3 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Workerbb3: ; preds = %bb2 20*9880d681SAndroid Build Coastguard Worker %tmp = or <4 x i32> undef, undef 21*9880d681SAndroid Build Coastguard Worker %tmp4 = bitcast <4 x i32> %tmp to <4 x float> 22*9880d681SAndroid Build Coastguard Worker %tmp5 = fsub <4 x float> <float -0.000000e+00, float -0.000000e+00, float -0.000000e+00, float -0.000000e+00>, %tmp4 23*9880d681SAndroid Build Coastguard Worker %tmp6 = bitcast <4 x i32> zeroinitializer to <4 x float> 24*9880d681SAndroid Build Coastguard Worker %tmp7 = fmul <4 x float> %tmp6, <float 1.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00> 25*9880d681SAndroid Build Coastguard Worker %tmp8 = bitcast <4 x float> %tmp7 to <2 x i64> 26*9880d681SAndroid Build Coastguard Worker %tmp9 = shufflevector <2 x i64> %tmp8, <2 x i64> undef, <1 x i32> zeroinitializer 27*9880d681SAndroid Build Coastguard Worker %tmp10 = bitcast <1 x i64> %tmp9 to <2 x float> 28*9880d681SAndroid Build Coastguard Worker %tmp11 = shufflevector <2 x i64> %tmp8, <2 x i64> undef, <1 x i32> <i32 1> 29*9880d681SAndroid Build Coastguard Worker %tmp12 = bitcast <1 x i64> %tmp11 to <2 x float> 30*9880d681SAndroid Build Coastguard Worker %tmp13 = shufflevector <2 x float> %tmp10, <2 x float> %tmp12, <2 x i32> <i32 0, i32 2> 31*9880d681SAndroid Build Coastguard Worker %tmp14 = shufflevector <2 x float> %tmp10, <2 x float> undef, <2 x i32> <i32 1, i32 2> 32*9880d681SAndroid Build Coastguard Worker %tmp15 = bitcast <2 x float> %tmp14 to <1 x i64> 33*9880d681SAndroid Build Coastguard Worker %tmp16 = bitcast <4 x i32> zeroinitializer to <2 x i64> 34*9880d681SAndroid Build Coastguard Worker %tmp17 = shufflevector <2 x i64> %tmp16, <2 x i64> undef, <1 x i32> zeroinitializer 35*9880d681SAndroid Build Coastguard Worker %tmp18 = bitcast <1 x i64> %tmp17 to <2 x i32> 36*9880d681SAndroid Build Coastguard Worker %tmp19 = and <2 x i32> %tmp18, <i32 -1, i32 0> 37*9880d681SAndroid Build Coastguard Worker %tmp20 = bitcast <2 x float> %tmp13 to <2 x i32> 38*9880d681SAndroid Build Coastguard Worker %tmp21 = and <2 x i32> %tmp20, <i32 0, i32 -1> 39*9880d681SAndroid Build Coastguard Worker %tmp22 = or <2 x i32> %tmp19, %tmp21 40*9880d681SAndroid Build Coastguard Worker %tmp23 = bitcast <2 x i32> %tmp22 to <1 x i64> 41*9880d681SAndroid Build Coastguard Worker %tmp24 = shufflevector <1 x i64> %tmp23, <1 x i64> undef, <2 x i32> <i32 0, i32 1> 42*9880d681SAndroid Build Coastguard Worker %tmp25 = bitcast <2 x i64> %tmp24 to <4 x float> 43*9880d681SAndroid Build Coastguard Worker %tmp26 = shufflevector <2 x i64> %tmp16, <2 x i64> undef, <1 x i32> <i32 1> 44*9880d681SAndroid Build Coastguard Worker %tmp27 = bitcast <1 x i64> %tmp26 to <2 x i32> 45*9880d681SAndroid Build Coastguard Worker %tmp28 = and <2 x i32> %tmp27, <i32 -1, i32 0> 46*9880d681SAndroid Build Coastguard Worker %tmp29 = and <2 x i32> undef, <i32 0, i32 -1> 47*9880d681SAndroid Build Coastguard Worker %tmp30 = or <2 x i32> %tmp28, %tmp29 48*9880d681SAndroid Build Coastguard Worker %tmp31 = bitcast <2 x i32> %tmp30 to <1 x i64> 49*9880d681SAndroid Build Coastguard Worker %tmp32 = insertelement <4 x float> %tmp25, float 0.000000e+00, i32 3 50*9880d681SAndroid Build Coastguard Worker %tmp33 = fmul <4 x float> undef, <float 1.000000e+00, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00> 51*9880d681SAndroid Build Coastguard Worker %tmp34 = fadd <4 x float> %tmp33, %tmp32 52*9880d681SAndroid Build Coastguard Worker %tmp35 = fmul <4 x float> %tmp33, zeroinitializer 53*9880d681SAndroid Build Coastguard Worker %tmp36 = fadd <4 x float> %tmp35, zeroinitializer 54*9880d681SAndroid Build Coastguard Worker %tmp37 = fadd <4 x float> %tmp35, zeroinitializer 55*9880d681SAndroid Build Coastguard Worker %tmp38 = bitcast <4 x float> %tmp34 to <2 x i64> 56*9880d681SAndroid Build Coastguard Worker %tmp39 = shufflevector <2 x i64> %tmp38, <2 x i64> undef, <1 x i32> zeroinitializer 57*9880d681SAndroid Build Coastguard Worker %tmp40 = bitcast <1 x i64> %tmp39 to <2 x float> 58*9880d681SAndroid Build Coastguard Worker %tmp41 = shufflevector <2 x float> %tmp40, <2 x float> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 59*9880d681SAndroid Build Coastguard Worker %tmp42 = load <4 x float>, <4 x float>* null, align 16 60*9880d681SAndroid Build Coastguard Worker %tmp43 = fmul <4 x float> %tmp42, %tmp41 61*9880d681SAndroid Build Coastguard Worker %tmp44 = load <4 x float>, <4 x float>* undef, align 16 62*9880d681SAndroid Build Coastguard Worker %tmp45 = fadd <4 x float> undef, %tmp43 63*9880d681SAndroid Build Coastguard Worker %tmp46 = fadd <4 x float> undef, %tmp45 64*9880d681SAndroid Build Coastguard Worker %tmp47 = bitcast <4 x float> %tmp36 to <2 x i64> 65*9880d681SAndroid Build Coastguard Worker %tmp48 = shufflevector <2 x i64> %tmp47, <2 x i64> undef, <1 x i32> zeroinitializer 66*9880d681SAndroid Build Coastguard Worker %tmp49 = bitcast <1 x i64> %tmp48 to <2 x float> 67*9880d681SAndroid Build Coastguard Worker %tmp50 = shufflevector <2 x float> %tmp49, <2 x float> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 68*9880d681SAndroid Build Coastguard Worker %tmp51 = fmul <4 x float> %tmp42, %tmp50 69*9880d681SAndroid Build Coastguard Worker %tmp52 = fmul <4 x float> %tmp44, undef 70*9880d681SAndroid Build Coastguard Worker %tmp53 = fadd <4 x float> %tmp52, %tmp51 71*9880d681SAndroid Build Coastguard Worker %tmp54 = fadd <4 x float> undef, %tmp53 72*9880d681SAndroid Build Coastguard Worker %tmp55 = bitcast <4 x float> %tmp37 to <2 x i64> 73*9880d681SAndroid Build Coastguard Worker %tmp56 = shufflevector <2 x i64> %tmp55, <2 x i64> undef, <1 x i32> <i32 1> 74*9880d681SAndroid Build Coastguard Worker %tmp57 = bitcast <1 x i64> %tmp56 to <2 x float> 75*9880d681SAndroid Build Coastguard Worker %tmp58 = shufflevector <2 x float> %tmp57, <2 x float> undef, <4 x i32> zeroinitializer 76*9880d681SAndroid Build Coastguard Worker %tmp59 = fmul <4 x float> undef, %tmp58 77*9880d681SAndroid Build Coastguard Worker %tmp60 = fadd <4 x float> %tmp59, undef 78*9880d681SAndroid Build Coastguard Worker %tmp61 = fadd <4 x float> %tmp60, zeroinitializer 79*9880d681SAndroid Build Coastguard Worker %tmp62 = load void (i8*, i8*)*, void (i8*, i8*)** undef, align 4 80*9880d681SAndroid Build Coastguard Worker call arm_aapcs_vfpcc void %tmp62(i8* sret undef, i8* undef) nounwind 81*9880d681SAndroid Build Coastguard Worker %tmp63 = bitcast <4 x float> %tmp46 to i128 82*9880d681SAndroid Build Coastguard Worker %tmp64 = bitcast <4 x float> %tmp54 to i128 83*9880d681SAndroid Build Coastguard Worker %tmp65 = bitcast <4 x float> %tmp61 to i128 84*9880d681SAndroid Build Coastguard Worker %tmp66 = lshr i128 %tmp63, 64 85*9880d681SAndroid Build Coastguard Worker %tmp67 = trunc i128 %tmp66 to i64 86*9880d681SAndroid Build Coastguard Worker %tmp68 = insertvalue [8 x i64] undef, i64 %tmp67, 1 87*9880d681SAndroid Build Coastguard Worker %tmp69 = insertvalue [8 x i64] %tmp68, i64 undef, 2 88*9880d681SAndroid Build Coastguard Worker %tmp70 = lshr i128 %tmp64, 64 89*9880d681SAndroid Build Coastguard Worker %tmp71 = trunc i128 %tmp70 to i64 90*9880d681SAndroid Build Coastguard Worker %tmp72 = insertvalue [8 x i64] %tmp69, i64 %tmp71, 3 91*9880d681SAndroid Build Coastguard Worker %tmp73 = trunc i128 %tmp65 to i64 92*9880d681SAndroid Build Coastguard Worker %tmp74 = insertvalue [8 x i64] %tmp72, i64 %tmp73, 4 93*9880d681SAndroid Build Coastguard Worker %tmp75 = insertvalue [8 x i64] %tmp74, i64 undef, 5 94*9880d681SAndroid Build Coastguard Worker %tmp76 = insertvalue [8 x i64] %tmp75, i64 undef, 6 95*9880d681SAndroid Build Coastguard Worker %tmp77 = insertvalue [8 x i64] %tmp76, i64 undef, 7 96*9880d681SAndroid Build Coastguard Worker call arm_aapcs_vfpcc void @bar(i8* sret null, [8 x i64] %tmp77) nounwind 97*9880d681SAndroid Build Coastguard Worker %tmp78 = call arm_aapcs_vfpcc i8* null(i8* null) nounwind 98*9880d681SAndroid Build Coastguard Worker %tmp79 = bitcast i8* %tmp78 to i512* 99*9880d681SAndroid Build Coastguard Worker %tmp80 = load i512, i512* %tmp79, align 16 100*9880d681SAndroid Build Coastguard Worker %tmp81 = lshr i512 %tmp80, 128 101*9880d681SAndroid Build Coastguard Worker %tmp82 = trunc i512 %tmp80 to i128 102*9880d681SAndroid Build Coastguard Worker %tmp83 = trunc i512 %tmp81 to i128 103*9880d681SAndroid Build Coastguard Worker %tmp84 = bitcast i128 %tmp83 to <4 x float> 104*9880d681SAndroid Build Coastguard Worker %tmp85 = bitcast <4 x float> %tmp84 to <2 x i64> 105*9880d681SAndroid Build Coastguard Worker %tmp86 = shufflevector <2 x i64> %tmp85, <2 x i64> undef, <1 x i32> <i32 1> 106*9880d681SAndroid Build Coastguard Worker %tmp87 = bitcast <1 x i64> %tmp86 to <2 x float> 107*9880d681SAndroid Build Coastguard Worker %tmp88 = shufflevector <2 x float> %tmp87, <2 x float> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1> 108*9880d681SAndroid Build Coastguard Worker %tmp89 = fmul <4 x float> undef, %tmp88 109*9880d681SAndroid Build Coastguard Worker %tmp90 = fadd <4 x float> %tmp89, undef 110*9880d681SAndroid Build Coastguard Worker %tmp91 = fadd <4 x float> undef, %tmp90 111*9880d681SAndroid Build Coastguard Worker store <4 x float> %tmp91, <4 x float>* undef, align 16 112*9880d681SAndroid Build Coastguard Worker unreachable 113*9880d681SAndroid Build Coastguard Worker 114*9880d681SAndroid Build Coastguard Workerbb92: ; preds = %bb2 115*9880d681SAndroid Build Coastguard Worker ret void 116*9880d681SAndroid Build Coastguard Worker} 117*9880d681SAndroid Build Coastguard Worker 118*9880d681SAndroid Build Coastguard Workerdeclare arm_aapcs_vfpcc void @bar(i8* noalias nocapture sret, [8 x i64]) nounwind uwtable inlinehint 119