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