xref: /aosp_15_r20/external/llvm/test/CodeGen/ARM/2012-01-26-CopyPropKills.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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