1
; RUN: llc -asm-verbose=false -disable-branch-fold -disable-block-placement -disable-tail-duplicate -march=x86-64 -mcpu=nehalem -no-integrated-as < %s | FileCheck %s
4
; The scheduler's 2-address hack has been disabled, so there is
5
; currently no good guarantee that this test will pass until the
6
; machine scheduler develops an equivalent heuristic.
8
; CodeGen shouldn't require any lea instructions inside the marked loop.
9
; It should properly set up post-increment uses and do coalescing for
10
; the induction variables.
16
target datalayout = "e-p:64:64:64-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:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
18
define void @foo(float* %I, i64 %IS, float* nocapture %Start, float* nocapture %Step, float* %O, i64 %OS, i64 %N) nounwind {
20
%times4 = alloca float, align 4 ; <float*> [#uses=3]
21
%timesN = alloca float, align 4 ; <float*> [#uses=2]
22
%0 = load float, float* %Step, align 4 ; <float> [#uses=8]
23
%1 = ptrtoint float* %I to i64 ; <i64> [#uses=1]
24
%2 = ptrtoint float* %O to i64 ; <i64> [#uses=1]
25
%tmp = xor i64 %2, %1 ; <i64> [#uses=1]
26
%tmp16 = and i64 %tmp, 15 ; <i64> [#uses=1]
27
%3 = icmp eq i64 %tmp16, 0 ; <i1> [#uses=1]
28
%4 = trunc i64 %IS to i32 ; <i32> [#uses=1]
29
%5 = xor i32 %4, 1 ; <i32> [#uses=1]
30
%6 = trunc i64 %OS to i32 ; <i32> [#uses=1]
31
%7 = xor i32 %6, 1 ; <i32> [#uses=1]
32
%8 = or i32 %7, %5 ; <i32> [#uses=1]
33
%9 = icmp eq i32 %8, 0 ; <i1> [#uses=1]
34
br i1 %9, label %bb, label %return
37
%10 = load float, float* %Start, align 4 ; <float> [#uses=1]
41
%11 = load float, float* %I_addr.0, align 4 ; <float> [#uses=1]
42
%12 = fmul float %11, %x.0 ; <float> [#uses=1]
43
store float %12, float* %O_addr.0, align 4
44
%13 = fadd float %x.0, %0 ; <float> [#uses=1]
45
%indvar.next53 = add i64 %14, 1 ; <i64> [#uses=1]
48
bb2: ; preds = %bb1, %bb
49
%14 = phi i64 [ %indvar.next53, %bb1 ], [ 0, %bb ] ; <i64> [#uses=21]
50
%x.0 = phi float [ %13, %bb1 ], [ %10, %bb ] ; <float> [#uses=6]
51
%N_addr.0 = sub i64 %N, %14 ; <i64> [#uses=4]
52
%O_addr.0 = getelementptr float, float* %O, i64 %14 ; <float*> [#uses=4]
53
%I_addr.0 = getelementptr float, float* %I, i64 %14 ; <float*> [#uses=3]
54
%15 = icmp slt i64 %N_addr.0, 1 ; <i1> [#uses=1]
55
br i1 %15, label %bb4, label %bb3
58
%16 = ptrtoint float* %O_addr.0 to i64 ; <i64> [#uses=1]
59
%17 = and i64 %16, 15 ; <i64> [#uses=1]
60
%18 = icmp eq i64 %17, 0 ; <i1> [#uses=1]
61
br i1 %18, label %bb4, label %bb1
63
bb4: ; preds = %bb3, %bb2
64
%19 = fmul float %0, 4.000000e+00 ; <float> [#uses=1]
65
store float %19, float* %times4, align 4
66
%20 = fmul float %0, 1.600000e+01 ; <float> [#uses=1]
67
store float %20, float* %timesN, align 4
68
%21 = fmul float %0, 0.000000e+00 ; <float> [#uses=1]
69
%22 = fadd float %21, %x.0 ; <float> [#uses=1]
70
%23 = fadd float %x.0, %0 ; <float> [#uses=1]
71
%24 = fmul float %0, 2.000000e+00 ; <float> [#uses=1]
72
%25 = fadd float %24, %x.0 ; <float> [#uses=1]
73
%26 = fmul float %0, 3.000000e+00 ; <float> [#uses=1]
74
%27 = fadd float %26, %x.0 ; <float> [#uses=1]
75
%28 = insertelement <4 x float> undef, float %22, i32 0 ; <<4 x float>> [#uses=1]
76
%29 = insertelement <4 x float> %28, float %23, i32 1 ; <<4 x float>> [#uses=1]
77
%30 = insertelement <4 x float> %29, float %25, i32 2 ; <<4 x float>> [#uses=1]
78
%31 = insertelement <4 x float> %30, float %27, i32 3 ; <<4 x float>> [#uses=5]
79
%asmtmp.i = call <4 x float> asm "movss $1, $0\09\0Apshufd $$0, $0, $0", "=x,*m,~{dirflag},~{fpsr},~{flags}"(float* %times4) nounwind ; <<4 x float>> [#uses=3]
80
%32 = fadd <4 x float> %31, %asmtmp.i ; <<4 x float>> [#uses=3]
81
%33 = fadd <4 x float> %32, %asmtmp.i ; <<4 x float>> [#uses=3]
82
%34 = fadd <4 x float> %33, %asmtmp.i ; <<4 x float>> [#uses=2]
83
%asmtmp.i18 = call <4 x float> asm "movss $1, $0\09\0Apshufd $$0, $0, $0", "=x,*m,~{dirflag},~{fpsr},~{flags}"(float* %timesN) nounwind ; <<4 x float>> [#uses=8]
84
%35 = icmp sgt i64 %N_addr.0, 15 ; <i1> [#uses=2]
85
br i1 %3, label %bb6.preheader, label %bb8
87
bb6.preheader: ; preds = %bb4
88
br i1 %35, label %bb.nph43, label %bb7
90
bb.nph43: ; preds = %bb6.preheader
91
%tmp108 = add i64 %14, 16 ; <i64> [#uses=1]
92
%tmp111 = add i64 %14, 4 ; <i64> [#uses=1]
93
%tmp115 = add i64 %14, 8 ; <i64> [#uses=1]
94
%tmp119 = add i64 %14, 12 ; <i64> [#uses=1]
95
%tmp134 = add i64 %N, -16 ; <i64> [#uses=1]
96
%tmp135 = sub i64 %tmp134, %14 ; <i64> [#uses=1]
97
call void asm sideeffect "# Start.", "~{dirflag},~{fpsr},~{flags}"() nounwind
100
bb5: ; preds = %bb.nph43, %bb5
101
%indvar102 = phi i64 [ 0, %bb.nph43 ], [ %indvar.next103, %bb5 ] ; <i64> [#uses=3]
102
%vX3.041 = phi <4 x float> [ %34, %bb.nph43 ], [ %45, %bb5 ] ; <<4 x float>> [#uses=2]
103
%vX0.039 = phi <4 x float> [ %31, %bb.nph43 ], [ %41, %bb5 ] ; <<4 x float>> [#uses=2]
104
%vX2.037 = phi <4 x float> [ %33, %bb.nph43 ], [ %46, %bb5 ] ; <<4 x float>> [#uses=2]
105
%vX1.036 = phi <4 x float> [ %32, %bb.nph43 ], [ %47, %bb5 ] ; <<4 x float>> [#uses=2]
106
%tmp104 = shl i64 %indvar102, 4 ; <i64> [#uses=5]
107
%tmp105 = add i64 %14, %tmp104 ; <i64> [#uses=2]
108
%scevgep106 = getelementptr float, float* %I, i64 %tmp105 ; <float*> [#uses=1]
109
%scevgep106107 = bitcast float* %scevgep106 to <4 x float>* ; <<4 x float>*> [#uses=1]
110
%tmp109 = add i64 %tmp108, %tmp104 ; <i64> [#uses=2]
111
%tmp112 = add i64 %tmp111, %tmp104 ; <i64> [#uses=2]
112
%scevgep113 = getelementptr float, float* %I, i64 %tmp112 ; <float*> [#uses=1]
113
%scevgep113114 = bitcast float* %scevgep113 to <4 x float>* ; <<4 x float>*> [#uses=1]
114
%tmp116 = add i64 %tmp115, %tmp104 ; <i64> [#uses=2]
115
%scevgep117 = getelementptr float, float* %I, i64 %tmp116 ; <float*> [#uses=1]
116
%scevgep117118 = bitcast float* %scevgep117 to <4 x float>* ; <<4 x float>*> [#uses=1]
117
%tmp120 = add i64 %tmp119, %tmp104 ; <i64> [#uses=2]
118
%scevgep121 = getelementptr float, float* %I, i64 %tmp120 ; <float*> [#uses=1]
119
%scevgep121122 = bitcast float* %scevgep121 to <4 x float>* ; <<4 x float>*> [#uses=1]
120
%scevgep123 = getelementptr float, float* %O, i64 %tmp105 ; <float*> [#uses=1]
121
%scevgep123124 = bitcast float* %scevgep123 to <4 x float>* ; <<4 x float>*> [#uses=1]
122
%scevgep126 = getelementptr float, float* %O, i64 %tmp112 ; <float*> [#uses=1]
123
%scevgep126127 = bitcast float* %scevgep126 to <4 x float>* ; <<4 x float>*> [#uses=1]
124
%scevgep128 = getelementptr float, float* %O, i64 %tmp116 ; <float*> [#uses=1]
125
%scevgep128129 = bitcast float* %scevgep128 to <4 x float>* ; <<4 x float>*> [#uses=1]
126
%scevgep130 = getelementptr float, float* %O, i64 %tmp120 ; <float*> [#uses=1]
127
%scevgep130131 = bitcast float* %scevgep130 to <4 x float>* ; <<4 x float>*> [#uses=1]
128
%tmp132 = mul i64 %indvar102, -16 ; <i64> [#uses=1]
129
%tmp136 = add i64 %tmp135, %tmp132 ; <i64> [#uses=2]
130
%36 = load <4 x float>, <4 x float>* %scevgep106107, align 16 ; <<4 x float>> [#uses=1]
131
%37 = load <4 x float>, <4 x float>* %scevgep113114, align 16 ; <<4 x float>> [#uses=1]
132
%38 = load <4 x float>, <4 x float>* %scevgep117118, align 16 ; <<4 x float>> [#uses=1]
133
%39 = load <4 x float>, <4 x float>* %scevgep121122, align 16 ; <<4 x float>> [#uses=1]
134
%40 = fmul <4 x float> %36, %vX0.039 ; <<4 x float>> [#uses=1]
135
%41 = fadd <4 x float> %vX0.039, %asmtmp.i18 ; <<4 x float>> [#uses=2]
136
%42 = fmul <4 x float> %37, %vX1.036 ; <<4 x float>> [#uses=1]
137
%43 = fmul <4 x float> %38, %vX2.037 ; <<4 x float>> [#uses=1]
138
%44 = fmul <4 x float> %39, %vX3.041 ; <<4 x float>> [#uses=1]
139
store <4 x float> %40, <4 x float>* %scevgep123124, align 16
140
store <4 x float> %42, <4 x float>* %scevgep126127, align 16
141
store <4 x float> %43, <4 x float>* %scevgep128129, align 16
142
store <4 x float> %44, <4 x float>* %scevgep130131, align 16
143
%45 = fadd <4 x float> %vX3.041, %asmtmp.i18 ; <<4 x float>> [#uses=1]
144
%46 = fadd <4 x float> %vX2.037, %asmtmp.i18 ; <<4 x float>> [#uses=1]
145
%47 = fadd <4 x float> %vX1.036, %asmtmp.i18 ; <<4 x float>> [#uses=1]
146
%48 = icmp sgt i64 %tmp136, 15 ; <i1> [#uses=1]
147
%indvar.next103 = add i64 %indvar102, 1 ; <i64> [#uses=1]
148
br i1 %48, label %bb5, label %bb6.bb7_crit_edge
150
bb6.bb7_crit_edge: ; preds = %bb5
151
call void asm sideeffect "# Stop.", "~{dirflag},~{fpsr},~{flags}"() nounwind
152
%scevgep110 = getelementptr float, float* %I, i64 %tmp109 ; <float*> [#uses=1]
153
%scevgep125 = getelementptr float, float* %O, i64 %tmp109 ; <float*> [#uses=1]
156
bb7: ; preds = %bb6.bb7_crit_edge, %bb6.preheader
157
%I_addr.1.lcssa = phi float* [ %scevgep110, %bb6.bb7_crit_edge ], [ %I_addr.0, %bb6.preheader ] ; <float*> [#uses=1]
158
%O_addr.1.lcssa = phi float* [ %scevgep125, %bb6.bb7_crit_edge ], [ %O_addr.0, %bb6.preheader ] ; <float*> [#uses=1]
159
%vX0.0.lcssa = phi <4 x float> [ %41, %bb6.bb7_crit_edge ], [ %31, %bb6.preheader ] ; <<4 x float>> [#uses=1]
160
%N_addr.1.lcssa = phi i64 [ %tmp136, %bb6.bb7_crit_edge ], [ %N_addr.0, %bb6.preheader ] ; <i64> [#uses=1]
161
%asmtmp.i17 = call <4 x float> asm "movss $1, $0\09\0Apshufd $$0, $0, $0", "=x,*m,~{dirflag},~{fpsr},~{flags}"(float* %times4) nounwind ; <<4 x float>> [#uses=0]
165
br i1 %35, label %bb.nph, label %bb11
167
bb.nph: ; preds = %bb8
168
%I_addr.0.sum = add i64 %14, -1 ; <i64> [#uses=1]
169
%49 = getelementptr inbounds float, float* %I, i64 %I_addr.0.sum ; <float*> [#uses=1]
170
%50 = bitcast float* %49 to <4 x float>* ; <<4 x float>*> [#uses=1]
171
%51 = load <4 x float>, <4 x float>* %50, align 16 ; <<4 x float>> [#uses=1]
172
%tmp54 = add i64 %14, 16 ; <i64> [#uses=1]
173
%tmp56 = add i64 %14, 3 ; <i64> [#uses=1]
174
%tmp60 = add i64 %14, 7 ; <i64> [#uses=1]
175
%tmp64 = add i64 %14, 11 ; <i64> [#uses=1]
176
%tmp68 = add i64 %14, 15 ; <i64> [#uses=1]
177
%tmp76 = add i64 %14, 4 ; <i64> [#uses=1]
178
%tmp80 = add i64 %14, 8 ; <i64> [#uses=1]
179
%tmp84 = add i64 %14, 12 ; <i64> [#uses=1]
180
%tmp90 = add i64 %N, -16 ; <i64> [#uses=1]
181
%tmp91 = sub i64 %tmp90, %14 ; <i64> [#uses=1]
184
bb9: ; preds = %bb.nph, %bb9
185
%indvar = phi i64 [ 0, %bb.nph ], [ %indvar.next, %bb9 ] ; <i64> [#uses=3]
186
%vX3.125 = phi <4 x float> [ %34, %bb.nph ], [ %69, %bb9 ] ; <<4 x float>> [#uses=2]
187
%vX0.223 = phi <4 x float> [ %31, %bb.nph ], [ %65, %bb9 ] ; <<4 x float>> [#uses=2]
188
%vX2.121 = phi <4 x float> [ %33, %bb.nph ], [ %70, %bb9 ] ; <<4 x float>> [#uses=2]
189
%vX1.120 = phi <4 x float> [ %32, %bb.nph ], [ %71, %bb9 ] ; <<4 x float>> [#uses=2]
190
%vI0.019 = phi <4 x float> [ %51, %bb.nph ], [ %55, %bb9 ] ; <<4 x float>> [#uses=1]
191
%tmp51 = shl i64 %indvar, 4 ; <i64> [#uses=9]
192
%tmp55 = add i64 %tmp54, %tmp51 ; <i64> [#uses=2]
193
%tmp57 = add i64 %tmp56, %tmp51 ; <i64> [#uses=1]
194
%scevgep58 = getelementptr float, float* %I, i64 %tmp57 ; <float*> [#uses=1]
195
%scevgep5859 = bitcast float* %scevgep58 to <4 x float>* ; <<4 x float>*> [#uses=1]
196
%tmp61 = add i64 %tmp60, %tmp51 ; <i64> [#uses=1]
197
%scevgep62 = getelementptr float, float* %I, i64 %tmp61 ; <float*> [#uses=1]
198
%scevgep6263 = bitcast float* %scevgep62 to <4 x float>* ; <<4 x float>*> [#uses=1]
199
%tmp65 = add i64 %tmp64, %tmp51 ; <i64> [#uses=1]
200
%scevgep66 = getelementptr float, float* %I, i64 %tmp65 ; <float*> [#uses=1]
201
%scevgep6667 = bitcast float* %scevgep66 to <4 x float>* ; <<4 x float>*> [#uses=1]
202
%tmp69 = add i64 %tmp68, %tmp51 ; <i64> [#uses=1]
203
%scevgep70 = getelementptr float, float* %I, i64 %tmp69 ; <float*> [#uses=1]
204
%scevgep7071 = bitcast float* %scevgep70 to <4 x float>* ; <<4 x float>*> [#uses=1]
205
%tmp72 = add i64 %14, %tmp51 ; <i64> [#uses=1]
206
%scevgep73 = getelementptr float, float* %O, i64 %tmp72 ; <float*> [#uses=1]
207
%scevgep7374 = bitcast float* %scevgep73 to <4 x float>* ; <<4 x float>*> [#uses=1]
208
%tmp77 = add i64 %tmp76, %tmp51 ; <i64> [#uses=1]
209
%scevgep78 = getelementptr float, float* %O, i64 %tmp77 ; <float*> [#uses=1]
210
%scevgep7879 = bitcast float* %scevgep78 to <4 x float>* ; <<4 x float>*> [#uses=1]
211
%tmp81 = add i64 %tmp80, %tmp51 ; <i64> [#uses=1]
212
%scevgep82 = getelementptr float, float* %O, i64 %tmp81 ; <float*> [#uses=1]
213
%scevgep8283 = bitcast float* %scevgep82 to <4 x float>* ; <<4 x float>*> [#uses=1]
214
%tmp85 = add i64 %tmp84, %tmp51 ; <i64> [#uses=1]
215
%scevgep86 = getelementptr float, float* %O, i64 %tmp85 ; <float*> [#uses=1]
216
%scevgep8687 = bitcast float* %scevgep86 to <4 x float>* ; <<4 x float>*> [#uses=1]
217
%tmp88 = mul i64 %indvar, -16 ; <i64> [#uses=1]
218
%tmp92 = add i64 %tmp91, %tmp88 ; <i64> [#uses=2]
219
%52 = load <4 x float>, <4 x float>* %scevgep5859, align 16 ; <<4 x float>> [#uses=2]
220
%53 = load <4 x float>, <4 x float>* %scevgep6263, align 16 ; <<4 x float>> [#uses=2]
221
%54 = load <4 x float>, <4 x float>* %scevgep6667, align 16 ; <<4 x float>> [#uses=2]
222
%55 = load <4 x float>, <4 x float>* %scevgep7071, align 16 ; <<4 x float>> [#uses=2]
223
%56 = shufflevector <4 x float> %vI0.019, <4 x float> %52, <4 x i32> <i32 4, i32 1, i32 2, i32 3> ; <<4 x float>> [#uses=1]
224
%57 = shufflevector <4 x float> %56, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0> ; <<4 x float>> [#uses=1]
225
%58 = shufflevector <4 x float> %52, <4 x float> %53, <4 x i32> <i32 4, i32 1, i32 2, i32 3> ; <<4 x float>> [#uses=1]
226
%59 = shufflevector <4 x float> %58, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0> ; <<4 x float>> [#uses=1]
227
%60 = shufflevector <4 x float> %53, <4 x float> %54, <4 x i32> <i32 4, i32 1, i32 2, i32 3> ; <<4 x float>> [#uses=1]
228
%61 = shufflevector <4 x float> %60, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0> ; <<4 x float>> [#uses=1]
229
%62 = shufflevector <4 x float> %54, <4 x float> %55, <4 x i32> <i32 4, i32 1, i32 2, i32 3> ; <<4 x float>> [#uses=1]
230
%63 = shufflevector <4 x float> %62, <4 x float> undef, <4 x i32> <i32 1, i32 2, i32 3, i32 0> ; <<4 x float>> [#uses=1]
231
%64 = fmul <4 x float> %57, %vX0.223 ; <<4 x float>> [#uses=1]
232
%65 = fadd <4 x float> %vX0.223, %asmtmp.i18 ; <<4 x float>> [#uses=2]
233
%66 = fmul <4 x float> %59, %vX1.120 ; <<4 x float>> [#uses=1]
234
%67 = fmul <4 x float> %61, %vX2.121 ; <<4 x float>> [#uses=1]
235
%68 = fmul <4 x float> %63, %vX3.125 ; <<4 x float>> [#uses=1]
236
store <4 x float> %64, <4 x float>* %scevgep7374, align 16
237
store <4 x float> %66, <4 x float>* %scevgep7879, align 16
238
store <4 x float> %67, <4 x float>* %scevgep8283, align 16
239
store <4 x float> %68, <4 x float>* %scevgep8687, align 16
240
%69 = fadd <4 x float> %vX3.125, %asmtmp.i18 ; <<4 x float>> [#uses=1]
241
%70 = fadd <4 x float> %vX2.121, %asmtmp.i18 ; <<4 x float>> [#uses=1]
242
%71 = fadd <4 x float> %vX1.120, %asmtmp.i18 ; <<4 x float>> [#uses=1]
243
%72 = icmp sgt i64 %tmp92, 15 ; <i1> [#uses=1]
244
%indvar.next = add i64 %indvar, 1 ; <i64> [#uses=1]
245
br i1 %72, label %bb9, label %bb10.bb11.loopexit_crit_edge
247
bb10.bb11.loopexit_crit_edge: ; preds = %bb9
248
%scevgep = getelementptr float, float* %I, i64 %tmp55 ; <float*> [#uses=1]
249
%scevgep75 = getelementptr float, float* %O, i64 %tmp55 ; <float*> [#uses=1]
252
bb11: ; preds = %bb8, %bb10.bb11.loopexit_crit_edge, %bb7
253
%N_addr.2 = phi i64 [ %N_addr.1.lcssa, %bb7 ], [ %tmp92, %bb10.bb11.loopexit_crit_edge ], [ %N_addr.0, %bb8 ] ; <i64> [#uses=2]
254
%vX0.1 = phi <4 x float> [ %vX0.0.lcssa, %bb7 ], [ %65, %bb10.bb11.loopexit_crit_edge ], [ %31, %bb8 ] ; <<4 x float>> [#uses=1]
255
%O_addr.2 = phi float* [ %O_addr.1.lcssa, %bb7 ], [ %scevgep75, %bb10.bb11.loopexit_crit_edge ], [ %O_addr.0, %bb8 ] ; <float*> [#uses=1]
256
%I_addr.2 = phi float* [ %I_addr.1.lcssa, %bb7 ], [ %scevgep, %bb10.bb11.loopexit_crit_edge ], [ %I_addr.0, %bb8 ] ; <float*> [#uses=1]
257
%73 = extractelement <4 x float> %vX0.1, i32 0 ; <float> [#uses=2]
258
%74 = icmp sgt i64 %N_addr.2, 0 ; <i1> [#uses=1]
259
br i1 %74, label %bb12, label %bb14
261
bb12: ; preds = %bb11, %bb12
262
%indvar94 = phi i64 [ %indvar.next95, %bb12 ], [ 0, %bb11 ] ; <i64> [#uses=3]
263
%x.130 = phi float [ %77, %bb12 ], [ %73, %bb11 ] ; <float> [#uses=2]
264
%I_addr.433 = getelementptr float, float* %I_addr.2, i64 %indvar94 ; <float*> [#uses=1]
265
%O_addr.432 = getelementptr float, float* %O_addr.2, i64 %indvar94 ; <float*> [#uses=1]
266
%75 = load float, float* %I_addr.433, align 4 ; <float> [#uses=1]
267
%76 = fmul float %75, %x.130 ; <float> [#uses=1]
268
store float %76, float* %O_addr.432, align 4
269
%77 = fadd float %x.130, %0 ; <float> [#uses=2]
270
%indvar.next95 = add i64 %indvar94, 1 ; <i64> [#uses=2]
271
%exitcond = icmp eq i64 %indvar.next95, %N_addr.2 ; <i1> [#uses=1]
272
br i1 %exitcond, label %bb14, label %bb12
274
bb14: ; preds = %bb12, %bb11
275
%x.1.lcssa = phi float [ %73, %bb11 ], [ %77, %bb12 ] ; <float> [#uses=1]
276
store float %x.1.lcssa, float* %Start, align 4
279
return: ; preds = %entry
283
; Codegen shouldn't crash on this testcase.
285
define void @bar(i32 %a, i32 %b) nounwind {
286
entry: ; preds = %bb1, %entry, %for.end204
289
outer: ; preds = %bb1, %entry
290
%i6 = phi i32 [ %storemerge171, %bb1 ], [ %a, %entry ] ; <i32> [#uses=2]
291
%storemerge171 = add i32 %i6, 1 ; <i32> [#uses=1]
294
inner: ; preds = %bb0, %if.end275
295
%i8 = phi i32 [ %a, %outer ], [ %indvar.next159, %bb0 ] ; <i32> [#uses=2]
296
%t338 = load i32, i32* undef ; <i32> [#uses=1]
297
%t191 = mul i32 %i8, %t338 ; <i32> [#uses=1]
298
%t179 = add i32 %i6, %t191 ; <i32> [#uses=1]
301
bb0: ; preds = %for.body332
302
%indvar.next159 = add i32 %i8, 1 ; <i32> [#uses=1]
303
br i1 undef, label %bb1, label %inner
305
bb1: ; preds = %bb0, %outer
306
%midx.4 = phi i32 [ %t179, %bb0 ] ; <i32> [#uses=0]