[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / Mips / GlobalISel / llvm-ir / long_ambiguous_chain_s32.ll
blob630aa1312d038105feaed3f8545797c83abb201d
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc  -O0 -mtriple=mipsel-linux-gnu -global-isel  -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=MIPS32
4 define void @long_chain_ambiguous_i32_in_gpr(i1 %cnd0, i1 %cnd1, i1 %cnd2, i32* %a, i32* %b, i32* %c, i32* %result) {
5 ; MIPS32-LABEL: long_chain_ambiguous_i32_in_gpr:
6 ; MIPS32:       # %bb.0: # %entry
7 ; MIPS32-NEXT:    addiu $sp, $sp, -48
8 ; MIPS32-NEXT:    .cfi_def_cfa_offset 48
9 ; MIPS32-NEXT:    addiu $1, $sp, 64
10 ; MIPS32-NEXT:    lw $1, 0($1)
11 ; MIPS32-NEXT:    addiu $2, $sp, 68
12 ; MIPS32-NEXT:    lw $2, 0($2)
13 ; MIPS32-NEXT:    addiu $3, $sp, 72
14 ; MIPS32-NEXT:    lw $3, 0($3)
15 ; MIPS32-NEXT:    ori $8, $zero, 1
16 ; MIPS32-NEXT:    and $8, $4, $8
17 ; MIPS32-NEXT:    sw $1, 44($sp) # 4-byte Folded Spill
18 ; MIPS32-NEXT:    sw $4, 40($sp) # 4-byte Folded Spill
19 ; MIPS32-NEXT:    sw $5, 36($sp) # 4-byte Folded Spill
20 ; MIPS32-NEXT:    sw $6, 32($sp) # 4-byte Folded Spill
21 ; MIPS32-NEXT:    sw $7, 28($sp) # 4-byte Folded Spill
22 ; MIPS32-NEXT:    sw $2, 24($sp) # 4-byte Folded Spill
23 ; MIPS32-NEXT:    sw $3, 20($sp) # 4-byte Folded Spill
24 ; MIPS32-NEXT:    bnez $8, $BB0_9
25 ; MIPS32-NEXT:    nop
26 ; MIPS32-NEXT:  # %bb.1: # %pre.PHI.1
27 ; MIPS32-NEXT:    ori $1, $zero, 1
28 ; MIPS32-NEXT:    lw $2, 36($sp) # 4-byte Folded Reload
29 ; MIPS32-NEXT:    and $1, $2, $1
30 ; MIPS32-NEXT:    bnez $1, $BB0_4
31 ; MIPS32-NEXT:    nop
32 ; MIPS32-NEXT:  # %bb.2: # %pre.PHI.1.0
33 ; MIPS32-NEXT:    ori $1, $zero, 1
34 ; MIPS32-NEXT:    lw $2, 32($sp) # 4-byte Folded Reload
35 ; MIPS32-NEXT:    and $1, $2, $1
36 ; MIPS32-NEXT:    bnez $1, $BB0_5
37 ; MIPS32-NEXT:    nop
38 ; MIPS32-NEXT:  # %bb.3: # %b.PHI.1.0
39 ; MIPS32-NEXT:    lw $1, 28($sp) # 4-byte Folded Reload
40 ; MIPS32-NEXT:    lw $2, 0($1)
41 ; MIPS32-NEXT:    sw $2, 16($sp) # 4-byte Folded Spill
42 ; MIPS32-NEXT:    j $BB0_6
43 ; MIPS32-NEXT:    nop
44 ; MIPS32-NEXT:  $BB0_4: # %b.PHI.1.1
45 ; MIPS32-NEXT:    lw $1, 44($sp) # 4-byte Folded Reload
46 ; MIPS32-NEXT:    lw $2, 0($1)
47 ; MIPS32-NEXT:    sw $2, 16($sp) # 4-byte Folded Spill
48 ; MIPS32-NEXT:    j $BB0_6
49 ; MIPS32-NEXT:    nop
50 ; MIPS32-NEXT:  $BB0_5: # %b.PHI.1.2
51 ; MIPS32-NEXT:    lw $1, 24($sp) # 4-byte Folded Reload
52 ; MIPS32-NEXT:    lw $2, 0($1)
53 ; MIPS32-NEXT:    sw $2, 16($sp) # 4-byte Folded Spill
54 ; MIPS32-NEXT:  $BB0_6: # %b.PHI.1
55 ; MIPS32-NEXT:    lw $1, 16($sp) # 4-byte Folded Reload
56 ; MIPS32-NEXT:    ori $2, $zero, 1
57 ; MIPS32-NEXT:    lw $3, 32($sp) # 4-byte Folded Reload
58 ; MIPS32-NEXT:    and $2, $3, $2
59 ; MIPS32-NEXT:    move $4, $1
60 ; MIPS32-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
61 ; MIPS32-NEXT:    sw $4, 8($sp) # 4-byte Folded Spill
62 ; MIPS32-NEXT:    bnez $2, $BB0_8
63 ; MIPS32-NEXT:    nop
64 ; MIPS32-NEXT:  # %bb.7: # %b.PHI.1
65 ; MIPS32-NEXT:    j $BB0_15
66 ; MIPS32-NEXT:    nop
67 ; MIPS32-NEXT:  $BB0_8: # %b.PHI.1.end
68 ; MIPS32-NEXT:    lw $1, 12($sp) # 4-byte Folded Reload
69 ; MIPS32-NEXT:    lw $2, 20($sp) # 4-byte Folded Reload
70 ; MIPS32-NEXT:    sw $1, 0($2)
71 ; MIPS32-NEXT:    addiu $sp, $sp, 48
72 ; MIPS32-NEXT:    jr $ra
73 ; MIPS32-NEXT:    nop
74 ; MIPS32-NEXT:  $BB0_9: # %pre.PHI.2
75 ; MIPS32-NEXT:    ori $1, $zero, 1
76 ; MIPS32-NEXT:    lw $2, 40($sp) # 4-byte Folded Reload
77 ; MIPS32-NEXT:    and $1, $2, $1
78 ; MIPS32-NEXT:    bnez $1, $BB0_11
79 ; MIPS32-NEXT:    nop
80 ; MIPS32-NEXT:  # %bb.10: # %pre.PHI.2
81 ; MIPS32-NEXT:    j $BB0_12
82 ; MIPS32-NEXT:    nop
83 ; MIPS32-NEXT:  $BB0_11: # %b.PHI.2.0
84 ; MIPS32-NEXT:    lw $1, 28($sp) # 4-byte Folded Reload
85 ; MIPS32-NEXT:    lw $2, 0($1)
86 ; MIPS32-NEXT:    sw $2, 4($sp) # 4-byte Folded Spill
87 ; MIPS32-NEXT:    j $BB0_13
88 ; MIPS32-NEXT:    nop
89 ; MIPS32-NEXT:  $BB0_12: # %b.PHI.2.1
90 ; MIPS32-NEXT:    lw $1, 44($sp) # 4-byte Folded Reload
91 ; MIPS32-NEXT:    lw $2, 0($1)
92 ; MIPS32-NEXT:    sw $2, 4($sp) # 4-byte Folded Spill
93 ; MIPS32-NEXT:  $BB0_13: # %b.PHI.2
94 ; MIPS32-NEXT:    lw $1, 4($sp) # 4-byte Folded Reload
95 ; MIPS32-NEXT:    ori $2, $zero, 1
96 ; MIPS32-NEXT:    lw $3, 36($sp) # 4-byte Folded Reload
97 ; MIPS32-NEXT:    and $2, $3, $2
98 ; MIPS32-NEXT:    move $4, $1
99 ; MIPS32-NEXT:    sw $1, 0($sp) # 4-byte Folded Spill
100 ; MIPS32-NEXT:    sw $4, 8($sp) # 4-byte Folded Spill
101 ; MIPS32-NEXT:    bnez $2, $BB0_15
102 ; MIPS32-NEXT:    nop
103 ; MIPS32-NEXT:  # %bb.14: # %b.PHI.2.end
104 ; MIPS32-NEXT:    lw $1, 0($sp) # 4-byte Folded Reload
105 ; MIPS32-NEXT:    lw $2, 20($sp) # 4-byte Folded Reload
106 ; MIPS32-NEXT:    sw $1, 0($2)
107 ; MIPS32-NEXT:    addiu $sp, $sp, 48
108 ; MIPS32-NEXT:    jr $ra
109 ; MIPS32-NEXT:    nop
110 ; MIPS32-NEXT:  $BB0_15: # %b.PHI.3
111 ; MIPS32-NEXT:    lw $1, 8($sp) # 4-byte Folded Reload
112 ; MIPS32-NEXT:    lw $2, 8($sp) # 4-byte Folded Reload
113 ; MIPS32-NEXT:    ori $3, $zero, 1
114 ; MIPS32-NEXT:    lw $4, 32($sp) # 4-byte Folded Reload
115 ; MIPS32-NEXT:    and $5, $4, $3
116 ; MIPS32-NEXT:    movn $1, $2, $5
117 ; MIPS32-NEXT:    lw $5, 36($sp) # 4-byte Folded Reload
118 ; MIPS32-NEXT:    and $3, $5, $3
119 ; MIPS32-NEXT:    move $6, $2
120 ; MIPS32-NEXT:    movn $6, $1, $3
121 ; MIPS32-NEXT:    lw $1, 20($sp) # 4-byte Folded Reload
122 ; MIPS32-NEXT:    sw $6, 0($1)
123 ; MIPS32-NEXT:    sw $2, 0($1)
124 ; MIPS32-NEXT:    addiu $sp, $sp, 48
125 ; MIPS32-NEXT:    jr $ra
126 ; MIPS32-NEXT:    nop
127 entry:
128   br i1 %cnd0, label %pre.PHI.2, label %pre.PHI.1
130 pre.PHI.1:
131   br i1 %cnd1, label %b.PHI.1.1, label %pre.PHI.1.0
133 pre.PHI.1.0:
134   br i1 %cnd2, label %b.PHI.1.2, label %b.PHI.1.0
136 b.PHI.1.0:
137   %phi1.0 = load i32, i32* %a
138   br label %b.PHI.1
140 b.PHI.1.1:
141   %phi1.1 = load i32, i32* %b
142   br label %b.PHI.1
144 b.PHI.1.2:
145   %phi1.2 = load i32, i32* %c
146   br label %b.PHI.1
148 b.PHI.1:
149   %phi1 = phi i32 [ %phi1.0, %b.PHI.1.0 ], [ %phi1.1, %b.PHI.1.1 ], [ %phi1.2, %b.PHI.1.2 ]
150   br i1 %cnd2, label %b.PHI.1.end, label %b.PHI.3
152 b.PHI.1.end:
153   store i32 %phi1, i32* %result
154   ret void
156 pre.PHI.2:
157   br i1 %cnd0, label %b.PHI.2.0, label %b.PHI.2.1
159 b.PHI.2.0:
160   %phi2.0 = load i32, i32* %a
161   br label %b.PHI.2
163 b.PHI.2.1:
164   %phi2.1 = load i32, i32* %b
165   br label %b.PHI.2
167 b.PHI.2:
168   %phi2 = phi i32 [ %phi2.0, %b.PHI.2.0 ], [ %phi2.1, %b.PHI.2.1 ]
169    br i1 %cnd1, label %b.PHI.3, label %b.PHI.2.end
171 b.PHI.2.end:
172   store i32 %phi2, i32* %result
173   ret void
175 b.PHI.3:
176   %phi3 = phi i32 [ %phi2, %b.PHI.2], [ %phi1, %b.PHI.1 ]
177   %phi4 = phi i32 [ %phi2, %b.PHI.2], [ %phi1, %b.PHI.1 ]
178   %sel_1.2 = select i1 %cnd2, i32 %phi3, i32 %phi4
179   %sel_3_1.2 = select i1 %cnd1, i32 %sel_1.2, i32 %phi3
180   store i32 %sel_3_1.2, i32* %result
181   store i32 %phi3, i32* %result
182   ret void
186 define void @long_chain_i32_in_gpr(i1 %cnd0, i1 %cnd1, i1 %cnd2, i32* %a, i32* %b, i32* %c, i32* %result) {
187 ; MIPS32-LABEL: long_chain_i32_in_gpr:
188 ; MIPS32:       # %bb.0: # %entry
189 ; MIPS32-NEXT:    addiu $sp, $sp, -56
190 ; MIPS32-NEXT:    .cfi_def_cfa_offset 56
191 ; MIPS32-NEXT:    addiu $1, $sp, 72
192 ; MIPS32-NEXT:    lw $1, 0($1)
193 ; MIPS32-NEXT:    addiu $2, $sp, 76
194 ; MIPS32-NEXT:    lw $2, 0($2)
195 ; MIPS32-NEXT:    addiu $3, $sp, 80
196 ; MIPS32-NEXT:    lw $3, 0($3)
197 ; MIPS32-NEXT:    ori $8, $zero, 0
198 ; MIPS32-NEXT:    ori $9, $zero, 1
199 ; MIPS32-NEXT:    and $9, $4, $9
200 ; MIPS32-NEXT:    sw $1, 52($sp) # 4-byte Folded Spill
201 ; MIPS32-NEXT:    sw $4, 48($sp) # 4-byte Folded Spill
202 ; MIPS32-NEXT:    sw $5, 44($sp) # 4-byte Folded Spill
203 ; MIPS32-NEXT:    sw $6, 40($sp) # 4-byte Folded Spill
204 ; MIPS32-NEXT:    sw $7, 36($sp) # 4-byte Folded Spill
205 ; MIPS32-NEXT:    sw $2, 32($sp) # 4-byte Folded Spill
206 ; MIPS32-NEXT:    sw $3, 28($sp) # 4-byte Folded Spill
207 ; MIPS32-NEXT:    sw $8, 24($sp) # 4-byte Folded Spill
208 ; MIPS32-NEXT:    bnez $9, $BB1_9
209 ; MIPS32-NEXT:    nop
210 ; MIPS32-NEXT:  # %bb.1: # %pre.PHI.1
211 ; MIPS32-NEXT:    ori $1, $zero, 1
212 ; MIPS32-NEXT:    lw $2, 44($sp) # 4-byte Folded Reload
213 ; MIPS32-NEXT:    and $1, $2, $1
214 ; MIPS32-NEXT:    bnez $1, $BB1_4
215 ; MIPS32-NEXT:    nop
216 ; MIPS32-NEXT:  # %bb.2: # %pre.PHI.1.0
217 ; MIPS32-NEXT:    ori $1, $zero, 1
218 ; MIPS32-NEXT:    lw $2, 40($sp) # 4-byte Folded Reload
219 ; MIPS32-NEXT:    and $1, $2, $1
220 ; MIPS32-NEXT:    bnez $1, $BB1_5
221 ; MIPS32-NEXT:    nop
222 ; MIPS32-NEXT:  # %bb.3: # %b.PHI.1.0
223 ; MIPS32-NEXT:    lw $1, 36($sp) # 4-byte Folded Reload
224 ; MIPS32-NEXT:    lw $2, 0($1)
225 ; MIPS32-NEXT:    sw $2, 20($sp) # 4-byte Folded Spill
226 ; MIPS32-NEXT:    j $BB1_6
227 ; MIPS32-NEXT:    nop
228 ; MIPS32-NEXT:  $BB1_4: # %b.PHI.1.1
229 ; MIPS32-NEXT:    lw $1, 52($sp) # 4-byte Folded Reload
230 ; MIPS32-NEXT:    lw $2, 0($1)
231 ; MIPS32-NEXT:    sw $2, 20($sp) # 4-byte Folded Spill
232 ; MIPS32-NEXT:    j $BB1_6
233 ; MIPS32-NEXT:    nop
234 ; MIPS32-NEXT:  $BB1_5: # %b.PHI.1.2
235 ; MIPS32-NEXT:    lw $1, 32($sp) # 4-byte Folded Reload
236 ; MIPS32-NEXT:    lw $2, 0($1)
237 ; MIPS32-NEXT:    sw $2, 20($sp) # 4-byte Folded Spill
238 ; MIPS32-NEXT:  $BB1_6: # %b.PHI.1
239 ; MIPS32-NEXT:    lw $1, 20($sp) # 4-byte Folded Reload
240 ; MIPS32-NEXT:    ori $2, $zero, 1
241 ; MIPS32-NEXT:    lw $3, 40($sp) # 4-byte Folded Reload
242 ; MIPS32-NEXT:    and $2, $3, $2
243 ; MIPS32-NEXT:    move $4, $1
244 ; MIPS32-NEXT:    lw $5, 24($sp) # 4-byte Folded Reload
245 ; MIPS32-NEXT:    sw $1, 16($sp) # 4-byte Folded Spill
246 ; MIPS32-NEXT:    sw $4, 12($sp) # 4-byte Folded Spill
247 ; MIPS32-NEXT:    sw $5, 8($sp) # 4-byte Folded Spill
248 ; MIPS32-NEXT:    bnez $2, $BB1_8
249 ; MIPS32-NEXT:    nop
250 ; MIPS32-NEXT:  # %bb.7: # %b.PHI.1
251 ; MIPS32-NEXT:    j $BB1_15
252 ; MIPS32-NEXT:    nop
253 ; MIPS32-NEXT:  $BB1_8: # %b.PHI.1.end
254 ; MIPS32-NEXT:    lw $1, 16($sp) # 4-byte Folded Reload
255 ; MIPS32-NEXT:    lw $2, 28($sp) # 4-byte Folded Reload
256 ; MIPS32-NEXT:    sw $1, 0($2)
257 ; MIPS32-NEXT:    addiu $sp, $sp, 56
258 ; MIPS32-NEXT:    jr $ra
259 ; MIPS32-NEXT:    nop
260 ; MIPS32-NEXT:  $BB1_9: # %pre.PHI.2
261 ; MIPS32-NEXT:    ori $1, $zero, 1
262 ; MIPS32-NEXT:    lw $2, 48($sp) # 4-byte Folded Reload
263 ; MIPS32-NEXT:    and $1, $2, $1
264 ; MIPS32-NEXT:    bnez $1, $BB1_11
265 ; MIPS32-NEXT:    nop
266 ; MIPS32-NEXT:  # %bb.10: # %pre.PHI.2
267 ; MIPS32-NEXT:    j $BB1_12
268 ; MIPS32-NEXT:    nop
269 ; MIPS32-NEXT:  $BB1_11: # %b.PHI.2.0
270 ; MIPS32-NEXT:    lw $1, 36($sp) # 4-byte Folded Reload
271 ; MIPS32-NEXT:    lw $2, 0($1)
272 ; MIPS32-NEXT:    sw $2, 4($sp) # 4-byte Folded Spill
273 ; MIPS32-NEXT:    j $BB1_13
274 ; MIPS32-NEXT:    nop
275 ; MIPS32-NEXT:  $BB1_12: # %b.PHI.2.1
276 ; MIPS32-NEXT:    lw $1, 52($sp) # 4-byte Folded Reload
277 ; MIPS32-NEXT:    lw $2, 0($1)
278 ; MIPS32-NEXT:    sw $2, 4($sp) # 4-byte Folded Spill
279 ; MIPS32-NEXT:  $BB1_13: # %b.PHI.2
280 ; MIPS32-NEXT:    lw $1, 4($sp) # 4-byte Folded Reload
281 ; MIPS32-NEXT:    ori $2, $zero, 1
282 ; MIPS32-NEXT:    lw $3, 44($sp) # 4-byte Folded Reload
283 ; MIPS32-NEXT:    and $2, $3, $2
284 ; MIPS32-NEXT:    move $4, $1
285 ; MIPS32-NEXT:    move $5, $1
286 ; MIPS32-NEXT:    sw $1, 0($sp) # 4-byte Folded Spill
287 ; MIPS32-NEXT:    sw $4, 12($sp) # 4-byte Folded Spill
288 ; MIPS32-NEXT:    sw $5, 8($sp) # 4-byte Folded Spill
289 ; MIPS32-NEXT:    bnez $2, $BB1_15
290 ; MIPS32-NEXT:    nop
291 ; MIPS32-NEXT:  # %bb.14: # %b.PHI.2.end
292 ; MIPS32-NEXT:    lw $1, 0($sp) # 4-byte Folded Reload
293 ; MIPS32-NEXT:    lw $2, 28($sp) # 4-byte Folded Reload
294 ; MIPS32-NEXT:    sw $1, 0($2)
295 ; MIPS32-NEXT:    addiu $sp, $sp, 56
296 ; MIPS32-NEXT:    jr $ra
297 ; MIPS32-NEXT:    nop
298 ; MIPS32-NEXT:  $BB1_15: # %b.PHI.3
299 ; MIPS32-NEXT:    lw $1, 8($sp) # 4-byte Folded Reload
300 ; MIPS32-NEXT:    lw $2, 12($sp) # 4-byte Folded Reload
301 ; MIPS32-NEXT:    ori $3, $zero, 1
302 ; MIPS32-NEXT:    lw $4, 40($sp) # 4-byte Folded Reload
303 ; MIPS32-NEXT:    and $5, $4, $3
304 ; MIPS32-NEXT:    movn $1, $2, $5
305 ; MIPS32-NEXT:    lw $5, 44($sp) # 4-byte Folded Reload
306 ; MIPS32-NEXT:    and $3, $5, $3
307 ; MIPS32-NEXT:    move $6, $2
308 ; MIPS32-NEXT:    movn $6, $1, $3
309 ; MIPS32-NEXT:    lw $1, 28($sp) # 4-byte Folded Reload
310 ; MIPS32-NEXT:    sw $6, 0($1)
311 ; MIPS32-NEXT:    sw $2, 0($1)
312 ; MIPS32-NEXT:    addiu $sp, $sp, 56
313 ; MIPS32-NEXT:    jr $ra
314 ; MIPS32-NEXT:    nop
315 entry:
316   br i1 %cnd0, label %pre.PHI.2, label %pre.PHI.1
318 pre.PHI.1:
319   br i1 %cnd1, label %b.PHI.1.1, label %pre.PHI.1.0
321 pre.PHI.1.0:
322   br i1 %cnd2, label %b.PHI.1.2, label %b.PHI.1.0
324 b.PHI.1.0:
325   %phi1.0 = load i32, i32* %a
326   br label %b.PHI.1
328 b.PHI.1.1:
329   %phi1.1 = load i32, i32* %b
330   br label %b.PHI.1
332 b.PHI.1.2:
333   %phi1.2 = load i32, i32* %c
334   br label %b.PHI.1
336 b.PHI.1:
337   %phi1 = phi i32 [ %phi1.0, %b.PHI.1.0 ], [ %phi1.1, %b.PHI.1.1 ], [ %phi1.2, %b.PHI.1.2 ]
338   br i1 %cnd2, label %b.PHI.1.end, label %b.PHI.3
340 b.PHI.1.end:
341   store i32 %phi1, i32* %result
342   ret void
344 pre.PHI.2:
345   br i1 %cnd0, label %b.PHI.2.0, label %b.PHI.2.1
347 b.PHI.2.0:
348   %phi2.0 = load i32, i32* %a
349   br label %b.PHI.2
351 b.PHI.2.1:
352   %phi2.1 = load i32, i32* %b
353   br label %b.PHI.2
355 b.PHI.2:
356   %phi2 = phi i32 [ %phi2.0, %b.PHI.2.0 ], [ %phi2.1, %b.PHI.2.1 ]
357    br i1 %cnd1, label %b.PHI.3, label %b.PHI.2.end
359 b.PHI.2.end:
360   store i32 %phi2, i32* %result
361   ret void
363 b.PHI.3:
364   %phi3 = phi i32 [ %phi2, %b.PHI.2], [ %phi1, %b.PHI.1 ]
365   %phi4 = phi i32 [ %phi2, %b.PHI.2], [ 0, %b.PHI.1 ]
366   %sel_1.2 = select i1 %cnd2, i32 %phi3, i32 %phi4
367   %sel_3_1.2 = select i1 %cnd1, i32 %sel_1.2, i32 %phi3
368   store i32 %sel_3_1.2, i32* %result
369   store i32 %phi3, i32* %result
370   ret void
373 define void @long_chain_ambiguous_float_in_fpr(i1 %cnd0, i1 %cnd1, i1 %cnd2, float* %a, float* %b, float* %c, float* %result) {
374 ; MIPS32-LABEL: long_chain_ambiguous_float_in_fpr:
375 ; MIPS32:       # %bb.0: # %entry
376 ; MIPS32-NEXT:    addiu $sp, $sp, -48
377 ; MIPS32-NEXT:    .cfi_def_cfa_offset 48
378 ; MIPS32-NEXT:    addiu $1, $sp, 64
379 ; MIPS32-NEXT:    lw $1, 0($1)
380 ; MIPS32-NEXT:    addiu $2, $sp, 68
381 ; MIPS32-NEXT:    lw $2, 0($2)
382 ; MIPS32-NEXT:    addiu $3, $sp, 72
383 ; MIPS32-NEXT:    lw $3, 0($3)
384 ; MIPS32-NEXT:    ori $8, $zero, 1
385 ; MIPS32-NEXT:    and $8, $4, $8
386 ; MIPS32-NEXT:    sw $1, 44($sp) # 4-byte Folded Spill
387 ; MIPS32-NEXT:    sw $4, 40($sp) # 4-byte Folded Spill
388 ; MIPS32-NEXT:    sw $5, 36($sp) # 4-byte Folded Spill
389 ; MIPS32-NEXT:    sw $6, 32($sp) # 4-byte Folded Spill
390 ; MIPS32-NEXT:    sw $7, 28($sp) # 4-byte Folded Spill
391 ; MIPS32-NEXT:    sw $2, 24($sp) # 4-byte Folded Spill
392 ; MIPS32-NEXT:    sw $3, 20($sp) # 4-byte Folded Spill
393 ; MIPS32-NEXT:    bnez $8, $BB2_9
394 ; MIPS32-NEXT:    nop
395 ; MIPS32-NEXT:  # %bb.1: # %pre.PHI.1
396 ; MIPS32-NEXT:    ori $1, $zero, 1
397 ; MIPS32-NEXT:    lw $2, 36($sp) # 4-byte Folded Reload
398 ; MIPS32-NEXT:    and $1, $2, $1
399 ; MIPS32-NEXT:    bnez $1, $BB2_4
400 ; MIPS32-NEXT:    nop
401 ; MIPS32-NEXT:  # %bb.2: # %pre.PHI.1.0
402 ; MIPS32-NEXT:    ori $1, $zero, 1
403 ; MIPS32-NEXT:    lw $2, 32($sp) # 4-byte Folded Reload
404 ; MIPS32-NEXT:    and $1, $2, $1
405 ; MIPS32-NEXT:    bnez $1, $BB2_5
406 ; MIPS32-NEXT:    nop
407 ; MIPS32-NEXT:  # %bb.3: # %b.PHI.1.0
408 ; MIPS32-NEXT:    lw $1, 28($sp) # 4-byte Folded Reload
409 ; MIPS32-NEXT:    lw $2, 0($1)
410 ; MIPS32-NEXT:    sw $2, 16($sp) # 4-byte Folded Spill
411 ; MIPS32-NEXT:    j $BB2_6
412 ; MIPS32-NEXT:    nop
413 ; MIPS32-NEXT:  $BB2_4: # %b.PHI.1.1
414 ; MIPS32-NEXT:    lw $1, 44($sp) # 4-byte Folded Reload
415 ; MIPS32-NEXT:    lw $2, 0($1)
416 ; MIPS32-NEXT:    sw $2, 16($sp) # 4-byte Folded Spill
417 ; MIPS32-NEXT:    j $BB2_6
418 ; MIPS32-NEXT:    nop
419 ; MIPS32-NEXT:  $BB2_5: # %b.PHI.1.2
420 ; MIPS32-NEXT:    lw $1, 24($sp) # 4-byte Folded Reload
421 ; MIPS32-NEXT:    lw $2, 0($1)
422 ; MIPS32-NEXT:    sw $2, 16($sp) # 4-byte Folded Spill
423 ; MIPS32-NEXT:  $BB2_6: # %b.PHI.1
424 ; MIPS32-NEXT:    lw $1, 16($sp) # 4-byte Folded Reload
425 ; MIPS32-NEXT:    ori $2, $zero, 1
426 ; MIPS32-NEXT:    lw $3, 32($sp) # 4-byte Folded Reload
427 ; MIPS32-NEXT:    and $2, $3, $2
428 ; MIPS32-NEXT:    move $4, $1
429 ; MIPS32-NEXT:    sw $1, 12($sp) # 4-byte Folded Spill
430 ; MIPS32-NEXT:    sw $4, 8($sp) # 4-byte Folded Spill
431 ; MIPS32-NEXT:    bnez $2, $BB2_8
432 ; MIPS32-NEXT:    nop
433 ; MIPS32-NEXT:  # %bb.7: # %b.PHI.1
434 ; MIPS32-NEXT:    j $BB2_15
435 ; MIPS32-NEXT:    nop
436 ; MIPS32-NEXT:  $BB2_8: # %b.PHI.1.end
437 ; MIPS32-NEXT:    lw $1, 12($sp) # 4-byte Folded Reload
438 ; MIPS32-NEXT:    lw $2, 20($sp) # 4-byte Folded Reload
439 ; MIPS32-NEXT:    sw $1, 0($2)
440 ; MIPS32-NEXT:    addiu $sp, $sp, 48
441 ; MIPS32-NEXT:    jr $ra
442 ; MIPS32-NEXT:    nop
443 ; MIPS32-NEXT:  $BB2_9: # %pre.PHI.2
444 ; MIPS32-NEXT:    ori $1, $zero, 1
445 ; MIPS32-NEXT:    lw $2, 40($sp) # 4-byte Folded Reload
446 ; MIPS32-NEXT:    and $1, $2, $1
447 ; MIPS32-NEXT:    bnez $1, $BB2_11
448 ; MIPS32-NEXT:    nop
449 ; MIPS32-NEXT:  # %bb.10: # %pre.PHI.2
450 ; MIPS32-NEXT:    j $BB2_12
451 ; MIPS32-NEXT:    nop
452 ; MIPS32-NEXT:  $BB2_11: # %b.PHI.2.0
453 ; MIPS32-NEXT:    lw $1, 28($sp) # 4-byte Folded Reload
454 ; MIPS32-NEXT:    lw $2, 0($1)
455 ; MIPS32-NEXT:    sw $2, 4($sp) # 4-byte Folded Spill
456 ; MIPS32-NEXT:    j $BB2_13
457 ; MIPS32-NEXT:    nop
458 ; MIPS32-NEXT:  $BB2_12: # %b.PHI.2.1
459 ; MIPS32-NEXT:    lw $1, 44($sp) # 4-byte Folded Reload
460 ; MIPS32-NEXT:    lw $2, 0($1)
461 ; MIPS32-NEXT:    sw $2, 4($sp) # 4-byte Folded Spill
462 ; MIPS32-NEXT:  $BB2_13: # %b.PHI.2
463 ; MIPS32-NEXT:    lw $1, 4($sp) # 4-byte Folded Reload
464 ; MIPS32-NEXT:    ori $2, $zero, 1
465 ; MIPS32-NEXT:    lw $3, 36($sp) # 4-byte Folded Reload
466 ; MIPS32-NEXT:    and $2, $3, $2
467 ; MIPS32-NEXT:    move $4, $1
468 ; MIPS32-NEXT:    sw $1, 0($sp) # 4-byte Folded Spill
469 ; MIPS32-NEXT:    sw $4, 8($sp) # 4-byte Folded Spill
470 ; MIPS32-NEXT:    bnez $2, $BB2_15
471 ; MIPS32-NEXT:    nop
472 ; MIPS32-NEXT:  # %bb.14: # %b.PHI.2.end
473 ; MIPS32-NEXT:    lw $1, 0($sp) # 4-byte Folded Reload
474 ; MIPS32-NEXT:    lw $2, 20($sp) # 4-byte Folded Reload
475 ; MIPS32-NEXT:    sw $1, 0($2)
476 ; MIPS32-NEXT:    addiu $sp, $sp, 48
477 ; MIPS32-NEXT:    jr $ra
478 ; MIPS32-NEXT:    nop
479 ; MIPS32-NEXT:  $BB2_15: # %b.PHI.3
480 ; MIPS32-NEXT:    lw $1, 8($sp) # 4-byte Folded Reload
481 ; MIPS32-NEXT:    lw $2, 8($sp) # 4-byte Folded Reload
482 ; MIPS32-NEXT:    ori $3, $zero, 1
483 ; MIPS32-NEXT:    lw $4, 32($sp) # 4-byte Folded Reload
484 ; MIPS32-NEXT:    and $5, $4, $3
485 ; MIPS32-NEXT:    movn $1, $2, $5
486 ; MIPS32-NEXT:    lw $5, 36($sp) # 4-byte Folded Reload
487 ; MIPS32-NEXT:    and $3, $5, $3
488 ; MIPS32-NEXT:    move $6, $2
489 ; MIPS32-NEXT:    movn $6, $1, $3
490 ; MIPS32-NEXT:    lw $1, 20($sp) # 4-byte Folded Reload
491 ; MIPS32-NEXT:    sw $6, 0($1)
492 ; MIPS32-NEXT:    sw $2, 0($1)
493 ; MIPS32-NEXT:    addiu $sp, $sp, 48
494 ; MIPS32-NEXT:    jr $ra
495 ; MIPS32-NEXT:    nop
496 entry:
497   br i1 %cnd0, label %pre.PHI.2, label %pre.PHI.1
499 pre.PHI.1:
500   br i1 %cnd1, label %b.PHI.1.1, label %pre.PHI.1.0
502 pre.PHI.1.0:
503   br i1 %cnd2, label %b.PHI.1.2, label %b.PHI.1.0
505 b.PHI.1.0:
506   %phi1.0 = load float, float* %a
507   br label %b.PHI.1
509 b.PHI.1.1:
510   %phi1.1 = load float, float* %b
511   br label %b.PHI.1
513 b.PHI.1.2:
514   %phi1.2 = load float, float* %c
515   br label %b.PHI.1
517 b.PHI.1:
518   %phi1 = phi float [ %phi1.0, %b.PHI.1.0 ], [ %phi1.1, %b.PHI.1.1 ], [ %phi1.2, %b.PHI.1.2 ]
519   br i1 %cnd2, label %b.PHI.1.end, label %b.PHI.3
521 b.PHI.1.end:
522   store float %phi1, float* %result
523   ret void
525 pre.PHI.2:
526   br i1 %cnd0, label %b.PHI.2.0, label %b.PHI.2.1
528 b.PHI.2.0:
529   %phi2.0 = load float, float* %a
530   br label %b.PHI.2
532 b.PHI.2.1:
533   %phi2.1 = load float, float* %b
534   br label %b.PHI.2
536 b.PHI.2:
537   %phi2 = phi float [ %phi2.0, %b.PHI.2.0 ], [ %phi2.1, %b.PHI.2.1 ]
538    br i1 %cnd1, label %b.PHI.3, label %b.PHI.2.end
540 b.PHI.2.end:
541   store float %phi2, float* %result
542   ret void
544 b.PHI.3:
545   %phi3 = phi float [ %phi2, %b.PHI.2], [ %phi1, %b.PHI.1 ]
546   %phi4 = phi float [ %phi2, %b.PHI.2], [ %phi1, %b.PHI.1 ]
547   %sel_1.2 = select i1 %cnd2, float %phi3, float %phi4
548   %sel_3_1.2 = select i1 %cnd1, float %sel_1.2, float %phi3
549   store float %sel_3_1.2, float* %result
550   store float %phi3, float* %result
551   ret void
555 define void @long_chain_float_in_fpr(i1 %cnd0, i1 %cnd1, i1 %cnd2, float* %a, float* %b, float* %c, float* %result) {
556 ; MIPS32-LABEL: long_chain_float_in_fpr:
557 ; MIPS32:       # %bb.0: # %entry
558 ; MIPS32-NEXT:    addiu $sp, $sp, -56
559 ; MIPS32-NEXT:    .cfi_def_cfa_offset 56
560 ; MIPS32-NEXT:    addiu $1, $sp, 72
561 ; MIPS32-NEXT:    lw $1, 0($1)
562 ; MIPS32-NEXT:    addiu $2, $sp, 76
563 ; MIPS32-NEXT:    lw $2, 0($2)
564 ; MIPS32-NEXT:    addiu $3, $sp, 80
565 ; MIPS32-NEXT:    lw $3, 0($3)
566 ; MIPS32-NEXT:    ori $8, $zero, 0
567 ; MIPS32-NEXT:    mtc1 $8, $f0
568 ; MIPS32-NEXT:    ori $8, $zero, 1
569 ; MIPS32-NEXT:    and $8, $4, $8
570 ; MIPS32-NEXT:    sw $1, 52($sp) # 4-byte Folded Spill
571 ; MIPS32-NEXT:    sw $4, 48($sp) # 4-byte Folded Spill
572 ; MIPS32-NEXT:    sw $5, 44($sp) # 4-byte Folded Spill
573 ; MIPS32-NEXT:    sw $6, 40($sp) # 4-byte Folded Spill
574 ; MIPS32-NEXT:    sw $7, 36($sp) # 4-byte Folded Spill
575 ; MIPS32-NEXT:    sw $2, 32($sp) # 4-byte Folded Spill
576 ; MIPS32-NEXT:    sw $3, 28($sp) # 4-byte Folded Spill
577 ; MIPS32-NEXT:    swc1 $f0, 24($sp) # 4-byte Folded Spill
578 ; MIPS32-NEXT:    bnez $8, $BB3_9
579 ; MIPS32-NEXT:    nop
580 ; MIPS32-NEXT:  # %bb.1: # %pre.PHI.1
581 ; MIPS32-NEXT:    ori $1, $zero, 1
582 ; MIPS32-NEXT:    lw $2, 44($sp) # 4-byte Folded Reload
583 ; MIPS32-NEXT:    and $1, $2, $1
584 ; MIPS32-NEXT:    bnez $1, $BB3_4
585 ; MIPS32-NEXT:    nop
586 ; MIPS32-NEXT:  # %bb.2: # %pre.PHI.1.0
587 ; MIPS32-NEXT:    ori $1, $zero, 1
588 ; MIPS32-NEXT:    lw $2, 40($sp) # 4-byte Folded Reload
589 ; MIPS32-NEXT:    and $1, $2, $1
590 ; MIPS32-NEXT:    bnez $1, $BB3_5
591 ; MIPS32-NEXT:    nop
592 ; MIPS32-NEXT:  # %bb.3: # %b.PHI.1.0
593 ; MIPS32-NEXT:    lw $1, 36($sp) # 4-byte Folded Reload
594 ; MIPS32-NEXT:    lwc1 $f0, 0($1)
595 ; MIPS32-NEXT:    swc1 $f0, 20($sp) # 4-byte Folded Spill
596 ; MIPS32-NEXT:    j $BB3_6
597 ; MIPS32-NEXT:    nop
598 ; MIPS32-NEXT:  $BB3_4: # %b.PHI.1.1
599 ; MIPS32-NEXT:    lw $1, 52($sp) # 4-byte Folded Reload
600 ; MIPS32-NEXT:    lwc1 $f0, 0($1)
601 ; MIPS32-NEXT:    swc1 $f0, 20($sp) # 4-byte Folded Spill
602 ; MIPS32-NEXT:    j $BB3_6
603 ; MIPS32-NEXT:    nop
604 ; MIPS32-NEXT:  $BB3_5: # %b.PHI.1.2
605 ; MIPS32-NEXT:    lw $1, 32($sp) # 4-byte Folded Reload
606 ; MIPS32-NEXT:    lwc1 $f0, 0($1)
607 ; MIPS32-NEXT:    swc1 $f0, 20($sp) # 4-byte Folded Spill
608 ; MIPS32-NEXT:  $BB3_6: # %b.PHI.1
609 ; MIPS32-NEXT:    lwc1 $f0, 20($sp) # 4-byte Folded Reload
610 ; MIPS32-NEXT:    ori $1, $zero, 1
611 ; MIPS32-NEXT:    lw $2, 40($sp) # 4-byte Folded Reload
612 ; MIPS32-NEXT:    and $1, $2, $1
613 ; MIPS32-NEXT:    mov.s $f1, $f0
614 ; MIPS32-NEXT:    lwc1 $f2, 24($sp) # 4-byte Folded Reload
615 ; MIPS32-NEXT:    swc1 $f0, 16($sp) # 4-byte Folded Spill
616 ; MIPS32-NEXT:    swc1 $f1, 12($sp) # 4-byte Folded Spill
617 ; MIPS32-NEXT:    swc1 $f2, 8($sp) # 4-byte Folded Spill
618 ; MIPS32-NEXT:    bnez $1, $BB3_8
619 ; MIPS32-NEXT:    nop
620 ; MIPS32-NEXT:  # %bb.7: # %b.PHI.1
621 ; MIPS32-NEXT:    j $BB3_15
622 ; MIPS32-NEXT:    nop
623 ; MIPS32-NEXT:  $BB3_8: # %b.PHI.1.end
624 ; MIPS32-NEXT:    lwc1 $f0, 16($sp) # 4-byte Folded Reload
625 ; MIPS32-NEXT:    lw $1, 28($sp) # 4-byte Folded Reload
626 ; MIPS32-NEXT:    swc1 $f0, 0($1)
627 ; MIPS32-NEXT:    addiu $sp, $sp, 56
628 ; MIPS32-NEXT:    jr $ra
629 ; MIPS32-NEXT:    nop
630 ; MIPS32-NEXT:  $BB3_9: # %pre.PHI.2
631 ; MIPS32-NEXT:    ori $1, $zero, 1
632 ; MIPS32-NEXT:    lw $2, 48($sp) # 4-byte Folded Reload
633 ; MIPS32-NEXT:    and $1, $2, $1
634 ; MIPS32-NEXT:    bnez $1, $BB3_11
635 ; MIPS32-NEXT:    nop
636 ; MIPS32-NEXT:  # %bb.10: # %pre.PHI.2
637 ; MIPS32-NEXT:    j $BB3_12
638 ; MIPS32-NEXT:    nop
639 ; MIPS32-NEXT:  $BB3_11: # %b.PHI.2.0
640 ; MIPS32-NEXT:    lw $1, 36($sp) # 4-byte Folded Reload
641 ; MIPS32-NEXT:    lwc1 $f0, 0($1)
642 ; MIPS32-NEXT:    swc1 $f0, 4($sp) # 4-byte Folded Spill
643 ; MIPS32-NEXT:    j $BB3_13
644 ; MIPS32-NEXT:    nop
645 ; MIPS32-NEXT:  $BB3_12: # %b.PHI.2.1
646 ; MIPS32-NEXT:    lw $1, 52($sp) # 4-byte Folded Reload
647 ; MIPS32-NEXT:    lwc1 $f0, 0($1)
648 ; MIPS32-NEXT:    swc1 $f0, 4($sp) # 4-byte Folded Spill
649 ; MIPS32-NEXT:  $BB3_13: # %b.PHI.2
650 ; MIPS32-NEXT:    lwc1 $f0, 4($sp) # 4-byte Folded Reload
651 ; MIPS32-NEXT:    ori $1, $zero, 1
652 ; MIPS32-NEXT:    lw $2, 44($sp) # 4-byte Folded Reload
653 ; MIPS32-NEXT:    and $1, $2, $1
654 ; MIPS32-NEXT:    mov.s $f1, $f0
655 ; MIPS32-NEXT:    mov.s $f2, $f0
656 ; MIPS32-NEXT:    swc1 $f0, 0($sp) # 4-byte Folded Spill
657 ; MIPS32-NEXT:    swc1 $f1, 12($sp) # 4-byte Folded Spill
658 ; MIPS32-NEXT:    swc1 $f2, 8($sp) # 4-byte Folded Spill
659 ; MIPS32-NEXT:    bnez $1, $BB3_15
660 ; MIPS32-NEXT:    nop
661 ; MIPS32-NEXT:  # %bb.14: # %b.PHI.2.end
662 ; MIPS32-NEXT:    lwc1 $f0, 0($sp) # 4-byte Folded Reload
663 ; MIPS32-NEXT:    lw $1, 28($sp) # 4-byte Folded Reload
664 ; MIPS32-NEXT:    swc1 $f0, 0($1)
665 ; MIPS32-NEXT:    addiu $sp, $sp, 56
666 ; MIPS32-NEXT:    jr $ra
667 ; MIPS32-NEXT:    nop
668 ; MIPS32-NEXT:  $BB3_15: # %b.PHI.3
669 ; MIPS32-NEXT:    lwc1 $f0, 8($sp) # 4-byte Folded Reload
670 ; MIPS32-NEXT:    lwc1 $f1, 12($sp) # 4-byte Folded Reload
671 ; MIPS32-NEXT:    ori $1, $zero, 1
672 ; MIPS32-NEXT:    lw $2, 40($sp) # 4-byte Folded Reload
673 ; MIPS32-NEXT:    and $3, $2, $1
674 ; MIPS32-NEXT:    movn.s $f0, $f1, $3
675 ; MIPS32-NEXT:    lw $3, 44($sp) # 4-byte Folded Reload
676 ; MIPS32-NEXT:    and $1, $3, $1
677 ; MIPS32-NEXT:    mov.s $f2, $f1
678 ; MIPS32-NEXT:    movn.s $f2, $f0, $1
679 ; MIPS32-NEXT:    lw $1, 28($sp) # 4-byte Folded Reload
680 ; MIPS32-NEXT:    swc1 $f2, 0($1)
681 ; MIPS32-NEXT:    swc1 $f1, 0($1)
682 ; MIPS32-NEXT:    addiu $sp, $sp, 56
683 ; MIPS32-NEXT:    jr $ra
684 ; MIPS32-NEXT:    nop
685 entry:
686   br i1 %cnd0, label %pre.PHI.2, label %pre.PHI.1
688 pre.PHI.1:
689   br i1 %cnd1, label %b.PHI.1.1, label %pre.PHI.1.0
691 pre.PHI.1.0:
692   br i1 %cnd2, label %b.PHI.1.2, label %b.PHI.1.0
694 b.PHI.1.0:
695   %phi1.0 = load float, float* %a
696   br label %b.PHI.1
698 b.PHI.1.1:
699   %phi1.1 = load float, float* %b
700   br label %b.PHI.1
702 b.PHI.1.2:
703   %phi1.2 = load float, float* %c
704   br label %b.PHI.1
706 b.PHI.1:
707   %phi1 = phi float [ %phi1.0, %b.PHI.1.0 ], [ %phi1.1, %b.PHI.1.1 ], [ %phi1.2, %b.PHI.1.2 ]
708   br i1 %cnd2, label %b.PHI.1.end, label %b.PHI.3
710 b.PHI.1.end:
711   store float %phi1, float* %result
712   ret void
714 pre.PHI.2:
715   br i1 %cnd0, label %b.PHI.2.0, label %b.PHI.2.1
717 b.PHI.2.0:
718   %phi2.0 = load float, float* %a
719   br label %b.PHI.2
721 b.PHI.2.1:
722   %phi2.1 = load float, float* %b
723   br label %b.PHI.2
725 b.PHI.2:
726   %phi2 = phi float [ %phi2.0, %b.PHI.2.0 ], [ %phi2.1, %b.PHI.2.1 ]
727    br i1 %cnd1, label %b.PHI.3, label %b.PHI.2.end
729 b.PHI.2.end:
730   store float %phi2, float* %result
731   ret void
733 b.PHI.3:
734   %phi3 = phi float [ %phi2, %b.PHI.2], [ %phi1, %b.PHI.1 ]
735   %phi4 = phi float [ %phi2, %b.PHI.2], [ 0.0, %b.PHI.1 ]
736   %sel_1.2 = select i1 %cnd2, float %phi3, float %phi4
737   %sel_3_1.2 = select i1 %cnd1, float %sel_1.2, float %phi3
738   store float %sel_3_1.2, float* %result
739   store float %phi3, float* %result
740   ret void