xref: /llvm-project/llvm/test/CodeGen/RISCV/branch-relaxation-rv64.ll (revision 6d91d7ce6aeb46d948a5a476909825b71b0c84a2)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv64 -verify-machineinstrs -filetype=obj < %s \
3; RUN:   -o /dev/null 2>&1
4; RUN: llc -mtriple=riscv64 -relocation-model=pic -verify-machineinstrs \
5; RUN:   -filetype=obj < %s -o /dev/null 2>&1
6; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \
7; RUN:   | FileCheck %s
8; RUN: llc -mtriple=riscv64 -relocation-model=pic -verify-machineinstrs < %s \
9; RUN:   | FileCheck %s
10
11define void @relax_bcc(i1 %a) nounwind {
12; CHECK-LABEL: relax_bcc:
13; CHECK:       # %bb.0:
14; CHECK-NEXT:    andi a0, a0, 1
15; CHECK-NEXT:    bnez a0, .LBB0_1
16; CHECK-NEXT:    j .LBB0_2
17; CHECK-NEXT:  .LBB0_1: # %iftrue
18; CHECK-NEXT:    #APP
19; CHECK-NEXT:    .zero 4096
20; CHECK-NEXT:    #NO_APP
21; CHECK-NEXT:  .LBB0_2: # %tail
22; CHECK-NEXT:    ret
23  br i1 %a, label %iftrue, label %tail
24
25iftrue:
26  call void asm sideeffect ".space 4096", ""()
27  br label %tail
28
29tail:
30  ret void
31}
32
33define i32 @relax_jal(i1 %a) nounwind {
34; CHECK-LABEL: relax_jal:
35; CHECK:       # %bb.0:
36; CHECK-NEXT:    addi sp, sp, -16
37; CHECK-NEXT:    andi a0, a0, 1
38; CHECK-NEXT:    bnez a0, .LBB1_1
39; CHECK-NEXT:  # %bb.4:
40; CHECK-NEXT:    jump .LBB1_2, a0
41; CHECK-NEXT:  .LBB1_1: # %iftrue
42; CHECK-NEXT:    #APP
43; CHECK-NEXT:    #NO_APP
44; CHECK-NEXT:    #APP
45; CHECK-NEXT:    .zero 1048576
46; CHECK-NEXT:    #NO_APP
47; CHECK-NEXT:    j .LBB1_3
48; CHECK-NEXT:  .LBB1_2: # %jmp
49; CHECK-NEXT:    #APP
50; CHECK-NEXT:    #NO_APP
51; CHECK-NEXT:  .LBB1_3: # %tail
52; CHECK-NEXT:    li a0, 1
53; CHECK-NEXT:    addi sp, sp, 16
54; CHECK-NEXT:    ret
55  br i1 %a, label %iftrue, label %jmp
56
57jmp:
58  call void asm sideeffect "", ""()
59  br label %tail
60
61iftrue:
62  call void asm sideeffect "", ""()
63  br label %space
64
65space:
66  call void asm sideeffect ".space 1048576", ""()
67  br label %tail
68
69tail:
70  ret i32 1
71}
72
73
74define void @relax_jal_spill_64() {
75;
76; CHECK-LABEL: relax_jal_spill_64:
77; CHECK:       # %bb.0:
78; CHECK-NEXT:    addi sp, sp, -112
79; CHECK-NEXT:    .cfi_def_cfa_offset 112
80; CHECK-NEXT:    sd ra, 104(sp) # 8-byte Folded Spill
81; CHECK-NEXT:    sd s0, 96(sp) # 8-byte Folded Spill
82; CHECK-NEXT:    sd s1, 88(sp) # 8-byte Folded Spill
83; CHECK-NEXT:    sd s2, 80(sp) # 8-byte Folded Spill
84; CHECK-NEXT:    sd s3, 72(sp) # 8-byte Folded Spill
85; CHECK-NEXT:    sd s4, 64(sp) # 8-byte Folded Spill
86; CHECK-NEXT:    sd s5, 56(sp) # 8-byte Folded Spill
87; CHECK-NEXT:    sd s6, 48(sp) # 8-byte Folded Spill
88; CHECK-NEXT:    sd s7, 40(sp) # 8-byte Folded Spill
89; CHECK-NEXT:    sd s8, 32(sp) # 8-byte Folded Spill
90; CHECK-NEXT:    sd s9, 24(sp) # 8-byte Folded Spill
91; CHECK-NEXT:    sd s10, 16(sp) # 8-byte Folded Spill
92; CHECK-NEXT:    sd s11, 8(sp) # 8-byte Folded Spill
93; CHECK-NEXT:    .cfi_offset ra, -8
94; CHECK-NEXT:    .cfi_offset s0, -16
95; CHECK-NEXT:    .cfi_offset s1, -24
96; CHECK-NEXT:    .cfi_offset s2, -32
97; CHECK-NEXT:    .cfi_offset s3, -40
98; CHECK-NEXT:    .cfi_offset s4, -48
99; CHECK-NEXT:    .cfi_offset s5, -56
100; CHECK-NEXT:    .cfi_offset s6, -64
101; CHECK-NEXT:    .cfi_offset s7, -72
102; CHECK-NEXT:    .cfi_offset s8, -80
103; CHECK-NEXT:    .cfi_offset s9, -88
104; CHECK-NEXT:    .cfi_offset s10, -96
105; CHECK-NEXT:    .cfi_offset s11, -104
106; CHECK-NEXT:    #APP
107; CHECK-NEXT:    li ra, 1
108; CHECK-NEXT:    #NO_APP
109; CHECK-NEXT:    #APP
110; CHECK-NEXT:    li t0, 5
111; CHECK-NEXT:    #NO_APP
112; CHECK-NEXT:    #APP
113; CHECK-NEXT:    li t1, 6
114; CHECK-NEXT:    #NO_APP
115; CHECK-NEXT:    #APP
116; CHECK-NEXT:    li t2, 7
117; CHECK-NEXT:    #NO_APP
118; CHECK-NEXT:    #APP
119; CHECK-NEXT:    li s0, 8
120; CHECK-NEXT:    #NO_APP
121; CHECK-NEXT:    #APP
122; CHECK-NEXT:    li s1, 9
123; CHECK-NEXT:    #NO_APP
124; CHECK-NEXT:    #APP
125; CHECK-NEXT:    li a0, 10
126; CHECK-NEXT:    #NO_APP
127; CHECK-NEXT:    #APP
128; CHECK-NEXT:    li a1, 11
129; CHECK-NEXT:    #NO_APP
130; CHECK-NEXT:    #APP
131; CHECK-NEXT:    li a2, 12
132; CHECK-NEXT:    #NO_APP
133; CHECK-NEXT:    #APP
134; CHECK-NEXT:    li a3, 13
135; CHECK-NEXT:    #NO_APP
136; CHECK-NEXT:    #APP
137; CHECK-NEXT:    li a4, 14
138; CHECK-NEXT:    #NO_APP
139; CHECK-NEXT:    #APP
140; CHECK-NEXT:    li a5, 15
141; CHECK-NEXT:    #NO_APP
142; CHECK-NEXT:    #APP
143; CHECK-NEXT:    li a6, 16
144; CHECK-NEXT:    #NO_APP
145; CHECK-NEXT:    #APP
146; CHECK-NEXT:    li a7, 17
147; CHECK-NEXT:    #NO_APP
148; CHECK-NEXT:    #APP
149; CHECK-NEXT:    li s2, 18
150; CHECK-NEXT:    #NO_APP
151; CHECK-NEXT:    #APP
152; CHECK-NEXT:    li s3, 19
153; CHECK-NEXT:    #NO_APP
154; CHECK-NEXT:    #APP
155; CHECK-NEXT:    li s4, 20
156; CHECK-NEXT:    #NO_APP
157; CHECK-NEXT:    #APP
158; CHECK-NEXT:    li s5, 21
159; CHECK-NEXT:    #NO_APP
160; CHECK-NEXT:    #APP
161; CHECK-NEXT:    li s6, 22
162; CHECK-NEXT:    #NO_APP
163; CHECK-NEXT:    #APP
164; CHECK-NEXT:    li s7, 23
165; CHECK-NEXT:    #NO_APP
166; CHECK-NEXT:    #APP
167; CHECK-NEXT:    li s8, 24
168; CHECK-NEXT:    #NO_APP
169; CHECK-NEXT:    #APP
170; CHECK-NEXT:    li s9, 25
171; CHECK-NEXT:    #NO_APP
172; CHECK-NEXT:    #APP
173; CHECK-NEXT:    li s10, 26
174; CHECK-NEXT:    #NO_APP
175; CHECK-NEXT:    #APP
176; CHECK-NEXT:    li s11, 27
177; CHECK-NEXT:    #NO_APP
178; CHECK-NEXT:    #APP
179; CHECK-NEXT:    li t3, 28
180; CHECK-NEXT:    #NO_APP
181; CHECK-NEXT:    #APP
182; CHECK-NEXT:    li t4, 29
183; CHECK-NEXT:    #NO_APP
184; CHECK-NEXT:    #APP
185; CHECK-NEXT:    li t5, 30
186; CHECK-NEXT:    #NO_APP
187; CHECK-NEXT:    #APP
188; CHECK-NEXT:    li t6, 31
189; CHECK-NEXT:    #NO_APP
190; CHECK-NEXT:    beq t5, t6, .LBB2_1
191; CHECK-NEXT:  # %bb.3:
192; CHECK-NEXT:    sd s11, 0(sp)
193; CHECK-NEXT:    jump .LBB2_4, s11
194; CHECK-NEXT:  .LBB2_1: # %branch_1
195; CHECK-NEXT:    #APP
196; CHECK-NEXT:    .zero 1048576
197; CHECK-NEXT:    #NO_APP
198; CHECK-NEXT:    j .LBB2_2
199; CHECK-NEXT:  .LBB2_4: # %branch_2
200; CHECK-NEXT:    ld s11, 0(sp)
201; CHECK-NEXT:  .LBB2_2: # %branch_2
202; CHECK-NEXT:    #APP
203; CHECK-NEXT:    # reg use ra
204; CHECK-NEXT:    #NO_APP
205; CHECK-NEXT:    #APP
206; CHECK-NEXT:    # reg use t0
207; CHECK-NEXT:    #NO_APP
208; CHECK-NEXT:    #APP
209; CHECK-NEXT:    # reg use t1
210; CHECK-NEXT:    #NO_APP
211; CHECK-NEXT:    #APP
212; CHECK-NEXT:    # reg use t2
213; CHECK-NEXT:    #NO_APP
214; CHECK-NEXT:    #APP
215; CHECK-NEXT:    # reg use s0
216; CHECK-NEXT:    #NO_APP
217; CHECK-NEXT:    #APP
218; CHECK-NEXT:    # reg use s1
219; CHECK-NEXT:    #NO_APP
220; CHECK-NEXT:    #APP
221; CHECK-NEXT:    # reg use a0
222; CHECK-NEXT:    #NO_APP
223; CHECK-NEXT:    #APP
224; CHECK-NEXT:    # reg use a1
225; CHECK-NEXT:    #NO_APP
226; CHECK-NEXT:    #APP
227; CHECK-NEXT:    # reg use a2
228; CHECK-NEXT:    #NO_APP
229; CHECK-NEXT:    #APP
230; CHECK-NEXT:    # reg use a3
231; CHECK-NEXT:    #NO_APP
232; CHECK-NEXT:    #APP
233; CHECK-NEXT:    # reg use a4
234; CHECK-NEXT:    #NO_APP
235; CHECK-NEXT:    #APP
236; CHECK-NEXT:    # reg use a5
237; CHECK-NEXT:    #NO_APP
238; CHECK-NEXT:    #APP
239; CHECK-NEXT:    # reg use a6
240; CHECK-NEXT:    #NO_APP
241; CHECK-NEXT:    #APP
242; CHECK-NEXT:    # reg use a7
243; CHECK-NEXT:    #NO_APP
244; CHECK-NEXT:    #APP
245; CHECK-NEXT:    # reg use s2
246; CHECK-NEXT:    #NO_APP
247; CHECK-NEXT:    #APP
248; CHECK-NEXT:    # reg use s3
249; CHECK-NEXT:    #NO_APP
250; CHECK-NEXT:    #APP
251; CHECK-NEXT:    # reg use s4
252; CHECK-NEXT:    #NO_APP
253; CHECK-NEXT:    #APP
254; CHECK-NEXT:    # reg use s5
255; CHECK-NEXT:    #NO_APP
256; CHECK-NEXT:    #APP
257; CHECK-NEXT:    # reg use s6
258; CHECK-NEXT:    #NO_APP
259; CHECK-NEXT:    #APP
260; CHECK-NEXT:    # reg use s7
261; CHECK-NEXT:    #NO_APP
262; CHECK-NEXT:    #APP
263; CHECK-NEXT:    # reg use s8
264; CHECK-NEXT:    #NO_APP
265; CHECK-NEXT:    #APP
266; CHECK-NEXT:    # reg use s9
267; CHECK-NEXT:    #NO_APP
268; CHECK-NEXT:    #APP
269; CHECK-NEXT:    # reg use s10
270; CHECK-NEXT:    #NO_APP
271; CHECK-NEXT:    #APP
272; CHECK-NEXT:    # reg use s11
273; CHECK-NEXT:    #NO_APP
274; CHECK-NEXT:    #APP
275; CHECK-NEXT:    # reg use t3
276; CHECK-NEXT:    #NO_APP
277; CHECK-NEXT:    #APP
278; CHECK-NEXT:    # reg use t4
279; CHECK-NEXT:    #NO_APP
280; CHECK-NEXT:    #APP
281; CHECK-NEXT:    # reg use t5
282; CHECK-NEXT:    #NO_APP
283; CHECK-NEXT:    #APP
284; CHECK-NEXT:    # reg use t6
285; CHECK-NEXT:    #NO_APP
286; CHECK-NEXT:    ld ra, 104(sp) # 8-byte Folded Reload
287; CHECK-NEXT:    ld s0, 96(sp) # 8-byte Folded Reload
288; CHECK-NEXT:    ld s1, 88(sp) # 8-byte Folded Reload
289; CHECK-NEXT:    ld s2, 80(sp) # 8-byte Folded Reload
290; CHECK-NEXT:    ld s3, 72(sp) # 8-byte Folded Reload
291; CHECK-NEXT:    ld s4, 64(sp) # 8-byte Folded Reload
292; CHECK-NEXT:    ld s5, 56(sp) # 8-byte Folded Reload
293; CHECK-NEXT:    ld s6, 48(sp) # 8-byte Folded Reload
294; CHECK-NEXT:    ld s7, 40(sp) # 8-byte Folded Reload
295; CHECK-NEXT:    ld s8, 32(sp) # 8-byte Folded Reload
296; CHECK-NEXT:    ld s9, 24(sp) # 8-byte Folded Reload
297; CHECK-NEXT:    ld s10, 16(sp) # 8-byte Folded Reload
298; CHECK-NEXT:    ld s11, 8(sp) # 8-byte Folded Reload
299; CHECK-NEXT:    .cfi_restore ra
300; CHECK-NEXT:    .cfi_restore s0
301; CHECK-NEXT:    .cfi_restore s1
302; CHECK-NEXT:    .cfi_restore s2
303; CHECK-NEXT:    .cfi_restore s3
304; CHECK-NEXT:    .cfi_restore s4
305; CHECK-NEXT:    .cfi_restore s5
306; CHECK-NEXT:    .cfi_restore s6
307; CHECK-NEXT:    .cfi_restore s7
308; CHECK-NEXT:    .cfi_restore s8
309; CHECK-NEXT:    .cfi_restore s9
310; CHECK-NEXT:    .cfi_restore s10
311; CHECK-NEXT:    .cfi_restore s11
312; CHECK-NEXT:    addi sp, sp, 112
313; CHECK-NEXT:    .cfi_def_cfa_offset 0
314; CHECK-NEXT:    ret
315  %ra = call i64 asm sideeffect "addi ra, x0, 1", "={ra}"()
316  %t0 = call i64 asm sideeffect "addi t0, x0, 5", "={t0}"()
317  %t1 = call i64 asm sideeffect "addi t1, x0, 6", "={t1}"()
318  %t2 = call i64 asm sideeffect "addi t2, x0, 7", "={t2}"()
319  %s0 = call i64 asm sideeffect "addi s0, x0, 8", "={s0}"()
320  %s1 = call i64 asm sideeffect "addi s1, x0, 9", "={s1}"()
321  %a0 = call i64 asm sideeffect "addi a0, x0, 10", "={a0}"()
322  %a1 = call i64 asm sideeffect "addi a1, x0, 11", "={a1}"()
323  %a2 = call i64 asm sideeffect "addi a2, x0, 12", "={a2}"()
324  %a3 = call i64 asm sideeffect "addi a3, x0, 13", "={a3}"()
325  %a4 = call i64 asm sideeffect "addi a4, x0, 14", "={a4}"()
326  %a5 = call i64 asm sideeffect "addi a5, x0, 15", "={a5}"()
327  %a6 = call i64 asm sideeffect "addi a6, x0, 16", "={a6}"()
328  %a7 = call i64 asm sideeffect "addi a7, x0, 17", "={a7}"()
329  %s2 = call i64 asm sideeffect "addi s2, x0, 18", "={s2}"()
330  %s3 = call i64 asm sideeffect "addi s3, x0, 19", "={s3}"()
331  %s4 = call i64 asm sideeffect "addi s4, x0, 20", "={s4}"()
332  %s5 = call i64 asm sideeffect "addi s5, x0, 21", "={s5}"()
333  %s6 = call i64 asm sideeffect "addi s6, x0, 22", "={s6}"()
334  %s7 = call i64 asm sideeffect "addi s7, x0, 23", "={s7}"()
335  %s8 = call i64 asm sideeffect "addi s8, x0, 24", "={s8}"()
336  %s9 = call i64 asm sideeffect "addi s9, x0, 25", "={s9}"()
337  %s10 = call i64 asm sideeffect "addi s10, x0, 26", "={s10}"()
338  %s11 = call i64 asm sideeffect "addi s11, x0, 27", "={s11}"()
339  %t3 = call i64 asm sideeffect "addi t3, x0, 28", "={t3}"()
340  %t4 = call i64 asm sideeffect "addi t4, x0, 29", "={t4}"()
341  %t5 = call i64 asm sideeffect "addi t5, x0, 30", "={t5}"()
342  %t6 = call i64 asm sideeffect "addi t6, x0, 31", "={t6}"()
343
344  %cmp = icmp eq i64 %t5, %t6
345  br i1 %cmp, label %branch_1, label %branch_2
346
347branch_1:
348  call void asm sideeffect ".space 1048576", ""()
349  br label %branch_2
350
351branch_2:
352  call void asm sideeffect "# reg use $0", "{ra}"(i64 %ra)
353  call void asm sideeffect "# reg use $0", "{t0}"(i64 %t0)
354  call void asm sideeffect "# reg use $0", "{t1}"(i64 %t1)
355  call void asm sideeffect "# reg use $0", "{t2}"(i64 %t2)
356  call void asm sideeffect "# reg use $0", "{s0}"(i64 %s0)
357  call void asm sideeffect "# reg use $0", "{s1}"(i64 %s1)
358  call void asm sideeffect "# reg use $0", "{a0}"(i64 %a0)
359  call void asm sideeffect "# reg use $0", "{a1}"(i64 %a1)
360  call void asm sideeffect "# reg use $0", "{a2}"(i64 %a2)
361  call void asm sideeffect "# reg use $0", "{a3}"(i64 %a3)
362  call void asm sideeffect "# reg use $0", "{a4}"(i64 %a4)
363  call void asm sideeffect "# reg use $0", "{a5}"(i64 %a5)
364  call void asm sideeffect "# reg use $0", "{a6}"(i64 %a6)
365  call void asm sideeffect "# reg use $0", "{a7}"(i64 %a7)
366  call void asm sideeffect "# reg use $0", "{s2}"(i64 %s2)
367  call void asm sideeffect "# reg use $0", "{s3}"(i64 %s3)
368  call void asm sideeffect "# reg use $0", "{s4}"(i64 %s4)
369  call void asm sideeffect "# reg use $0", "{s5}"(i64 %s5)
370  call void asm sideeffect "# reg use $0", "{s6}"(i64 %s6)
371  call void asm sideeffect "# reg use $0", "{s7}"(i64 %s7)
372  call void asm sideeffect "# reg use $0", "{s8}"(i64 %s8)
373  call void asm sideeffect "# reg use $0", "{s9}"(i64 %s9)
374  call void asm sideeffect "# reg use $0", "{s10}"(i64 %s10)
375  call void asm sideeffect "# reg use $0", "{s11}"(i64 %s11)
376  call void asm sideeffect "# reg use $0", "{t3}"(i64 %t3)
377  call void asm sideeffect "# reg use $0", "{t4}"(i64 %t4)
378  call void asm sideeffect "# reg use $0", "{t5}"(i64 %t5)
379  call void asm sideeffect "# reg use $0", "{t6}"(i64 %t6)
380
381  ret void
382}
383
384define void @relax_jal_spill_64_adjust_spill_slot() {
385;
386  ; If the stack is large and the offset of BranchRelaxationScratchFrameIndex
387  ; is out the range of 12-bit signed integer, check whether the spill slot is
388  ; adjusted to close to the stack base register.
389; CHECK-LABEL: relax_jal_spill_64_adjust_spill_slot:
390; CHECK:       # %bb.0:
391; CHECK-NEXT:    addi sp, sp, -2032
392; CHECK-NEXT:    .cfi_def_cfa_offset 2032
393; CHECK-NEXT:    sd ra, 2024(sp) # 8-byte Folded Spill
394; CHECK-NEXT:    sd s0, 2016(sp) # 8-byte Folded Spill
395; CHECK-NEXT:    sd s1, 2008(sp) # 8-byte Folded Spill
396; CHECK-NEXT:    sd s2, 2000(sp) # 8-byte Folded Spill
397; CHECK-NEXT:    sd s3, 1992(sp) # 8-byte Folded Spill
398; CHECK-NEXT:    sd s4, 1984(sp) # 8-byte Folded Spill
399; CHECK-NEXT:    sd s5, 1976(sp) # 8-byte Folded Spill
400; CHECK-NEXT:    sd s6, 1968(sp) # 8-byte Folded Spill
401; CHECK-NEXT:    sd s7, 1960(sp) # 8-byte Folded Spill
402; CHECK-NEXT:    sd s8, 1952(sp) # 8-byte Folded Spill
403; CHECK-NEXT:    sd s9, 1944(sp) # 8-byte Folded Spill
404; CHECK-NEXT:    sd s10, 1936(sp) # 8-byte Folded Spill
405; CHECK-NEXT:    sd s11, 1928(sp) # 8-byte Folded Spill
406; CHECK-NEXT:    .cfi_offset ra, -8
407; CHECK-NEXT:    .cfi_offset s0, -16
408; CHECK-NEXT:    .cfi_offset s1, -24
409; CHECK-NEXT:    .cfi_offset s2, -32
410; CHECK-NEXT:    .cfi_offset s3, -40
411; CHECK-NEXT:    .cfi_offset s4, -48
412; CHECK-NEXT:    .cfi_offset s5, -56
413; CHECK-NEXT:    .cfi_offset s6, -64
414; CHECK-NEXT:    .cfi_offset s7, -72
415; CHECK-NEXT:    .cfi_offset s8, -80
416; CHECK-NEXT:    .cfi_offset s9, -88
417; CHECK-NEXT:    .cfi_offset s10, -96
418; CHECK-NEXT:    .cfi_offset s11, -104
419; CHECK-NEXT:    addi s0, sp, 2032
420; CHECK-NEXT:    .cfi_def_cfa s0, 0
421; CHECK-NEXT:    lui a0, 2
422; CHECK-NEXT:    addiw a0, a0, -2032
423; CHECK-NEXT:    sub sp, sp, a0
424; CHECK-NEXT:    srli a0, sp, 12
425; CHECK-NEXT:    slli sp, a0, 12
426; CHECK-NEXT:    #APP
427; CHECK-NEXT:    li ra, 1
428; CHECK-NEXT:    #NO_APP
429; CHECK-NEXT:    #APP
430; CHECK-NEXT:    li t0, 5
431; CHECK-NEXT:    #NO_APP
432; CHECK-NEXT:    #APP
433; CHECK-NEXT:    li t1, 6
434; CHECK-NEXT:    #NO_APP
435; CHECK-NEXT:    #APP
436; CHECK-NEXT:    li t2, 7
437; CHECK-NEXT:    #NO_APP
438; CHECK-NEXT:    #APP
439; CHECK-NEXT:    li s0, 8
440; CHECK-NEXT:    #NO_APP
441; CHECK-NEXT:    #APP
442; CHECK-NEXT:    li s1, 9
443; CHECK-NEXT:    #NO_APP
444; CHECK-NEXT:    #APP
445; CHECK-NEXT:    li a0, 10
446; CHECK-NEXT:    #NO_APP
447; CHECK-NEXT:    #APP
448; CHECK-NEXT:    li a1, 11
449; CHECK-NEXT:    #NO_APP
450; CHECK-NEXT:    #APP
451; CHECK-NEXT:    li a2, 12
452; CHECK-NEXT:    #NO_APP
453; CHECK-NEXT:    #APP
454; CHECK-NEXT:    li a3, 13
455; CHECK-NEXT:    #NO_APP
456; CHECK-NEXT:    #APP
457; CHECK-NEXT:    li a4, 14
458; CHECK-NEXT:    #NO_APP
459; CHECK-NEXT:    #APP
460; CHECK-NEXT:    li a5, 15
461; CHECK-NEXT:    #NO_APP
462; CHECK-NEXT:    #APP
463; CHECK-NEXT:    li a6, 16
464; CHECK-NEXT:    #NO_APP
465; CHECK-NEXT:    #APP
466; CHECK-NEXT:    li a7, 17
467; CHECK-NEXT:    #NO_APP
468; CHECK-NEXT:    #APP
469; CHECK-NEXT:    li s2, 18
470; CHECK-NEXT:    #NO_APP
471; CHECK-NEXT:    #APP
472; CHECK-NEXT:    li s3, 19
473; CHECK-NEXT:    #NO_APP
474; CHECK-NEXT:    #APP
475; CHECK-NEXT:    li s4, 20
476; CHECK-NEXT:    #NO_APP
477; CHECK-NEXT:    #APP
478; CHECK-NEXT:    li s5, 21
479; CHECK-NEXT:    #NO_APP
480; CHECK-NEXT:    #APP
481; CHECK-NEXT:    li s6, 22
482; CHECK-NEXT:    #NO_APP
483; CHECK-NEXT:    #APP
484; CHECK-NEXT:    li s7, 23
485; CHECK-NEXT:    #NO_APP
486; CHECK-NEXT:    #APP
487; CHECK-NEXT:    li s8, 24
488; CHECK-NEXT:    #NO_APP
489; CHECK-NEXT:    #APP
490; CHECK-NEXT:    li s9, 25
491; CHECK-NEXT:    #NO_APP
492; CHECK-NEXT:    #APP
493; CHECK-NEXT:    li s10, 26
494; CHECK-NEXT:    #NO_APP
495; CHECK-NEXT:    #APP
496; CHECK-NEXT:    li s11, 27
497; CHECK-NEXT:    #NO_APP
498; CHECK-NEXT:    #APP
499; CHECK-NEXT:    li t3, 28
500; CHECK-NEXT:    #NO_APP
501; CHECK-NEXT:    #APP
502; CHECK-NEXT:    li t4, 29
503; CHECK-NEXT:    #NO_APP
504; CHECK-NEXT:    #APP
505; CHECK-NEXT:    li t5, 30
506; CHECK-NEXT:    #NO_APP
507; CHECK-NEXT:    #APP
508; CHECK-NEXT:    li t6, 31
509; CHECK-NEXT:    #NO_APP
510; CHECK-NEXT:    beq t5, t6, .LBB3_1
511; CHECK-NEXT:  # %bb.3:
512; CHECK-NEXT:    sd s11, 0(sp)
513; CHECK-NEXT:    jump .LBB3_4, s11
514; CHECK-NEXT:  .LBB3_1: # %branch_1
515; CHECK-NEXT:    #APP
516; CHECK-NEXT:    .zero 1048576
517; CHECK-NEXT:    #NO_APP
518; CHECK-NEXT:    j .LBB3_2
519; CHECK-NEXT:  .LBB3_4: # %branch_2
520; CHECK-NEXT:    ld s11, 0(sp)
521; CHECK-NEXT:  .LBB3_2: # %branch_2
522; CHECK-NEXT:    #APP
523; CHECK-NEXT:    # reg use ra
524; CHECK-NEXT:    #NO_APP
525; CHECK-NEXT:    #APP
526; CHECK-NEXT:    # reg use t0
527; CHECK-NEXT:    #NO_APP
528; CHECK-NEXT:    #APP
529; CHECK-NEXT:    # reg use t1
530; CHECK-NEXT:    #NO_APP
531; CHECK-NEXT:    #APP
532; CHECK-NEXT:    # reg use t2
533; CHECK-NEXT:    #NO_APP
534; CHECK-NEXT:    #APP
535; CHECK-NEXT:    # reg use s0
536; CHECK-NEXT:    #NO_APP
537; CHECK-NEXT:    #APP
538; CHECK-NEXT:    # reg use s1
539; CHECK-NEXT:    #NO_APP
540; CHECK-NEXT:    #APP
541; CHECK-NEXT:    # reg use a0
542; CHECK-NEXT:    #NO_APP
543; CHECK-NEXT:    #APP
544; CHECK-NEXT:    # reg use a1
545; CHECK-NEXT:    #NO_APP
546; CHECK-NEXT:    #APP
547; CHECK-NEXT:    # reg use a2
548; CHECK-NEXT:    #NO_APP
549; CHECK-NEXT:    #APP
550; CHECK-NEXT:    # reg use a3
551; CHECK-NEXT:    #NO_APP
552; CHECK-NEXT:    #APP
553; CHECK-NEXT:    # reg use a4
554; CHECK-NEXT:    #NO_APP
555; CHECK-NEXT:    #APP
556; CHECK-NEXT:    # reg use a5
557; CHECK-NEXT:    #NO_APP
558; CHECK-NEXT:    #APP
559; CHECK-NEXT:    # reg use a6
560; CHECK-NEXT:    #NO_APP
561; CHECK-NEXT:    #APP
562; CHECK-NEXT:    # reg use a7
563; CHECK-NEXT:    #NO_APP
564; CHECK-NEXT:    #APP
565; CHECK-NEXT:    # reg use s2
566; CHECK-NEXT:    #NO_APP
567; CHECK-NEXT:    #APP
568; CHECK-NEXT:    # reg use s3
569; CHECK-NEXT:    #NO_APP
570; CHECK-NEXT:    #APP
571; CHECK-NEXT:    # reg use s4
572; CHECK-NEXT:    #NO_APP
573; CHECK-NEXT:    #APP
574; CHECK-NEXT:    # reg use s5
575; CHECK-NEXT:    #NO_APP
576; CHECK-NEXT:    #APP
577; CHECK-NEXT:    # reg use s6
578; CHECK-NEXT:    #NO_APP
579; CHECK-NEXT:    #APP
580; CHECK-NEXT:    # reg use s7
581; CHECK-NEXT:    #NO_APP
582; CHECK-NEXT:    #APP
583; CHECK-NEXT:    # reg use s8
584; CHECK-NEXT:    #NO_APP
585; CHECK-NEXT:    #APP
586; CHECK-NEXT:    # reg use s9
587; CHECK-NEXT:    #NO_APP
588; CHECK-NEXT:    #APP
589; CHECK-NEXT:    # reg use s10
590; CHECK-NEXT:    #NO_APP
591; CHECK-NEXT:    #APP
592; CHECK-NEXT:    # reg use s11
593; CHECK-NEXT:    #NO_APP
594; CHECK-NEXT:    #APP
595; CHECK-NEXT:    # reg use t3
596; CHECK-NEXT:    #NO_APP
597; CHECK-NEXT:    #APP
598; CHECK-NEXT:    # reg use t4
599; CHECK-NEXT:    #NO_APP
600; CHECK-NEXT:    #APP
601; CHECK-NEXT:    # reg use t5
602; CHECK-NEXT:    #NO_APP
603; CHECK-NEXT:    #APP
604; CHECK-NEXT:    # reg use t6
605; CHECK-NEXT:    #NO_APP
606; CHECK-NEXT:    addi sp, s0, -2032
607; CHECK-NEXT:    .cfi_def_cfa sp, 2032
608; CHECK-NEXT:    ld ra, 2024(sp) # 8-byte Folded Reload
609; CHECK-NEXT:    ld s0, 2016(sp) # 8-byte Folded Reload
610; CHECK-NEXT:    ld s1, 2008(sp) # 8-byte Folded Reload
611; CHECK-NEXT:    ld s2, 2000(sp) # 8-byte Folded Reload
612; CHECK-NEXT:    ld s3, 1992(sp) # 8-byte Folded Reload
613; CHECK-NEXT:    ld s4, 1984(sp) # 8-byte Folded Reload
614; CHECK-NEXT:    ld s5, 1976(sp) # 8-byte Folded Reload
615; CHECK-NEXT:    ld s6, 1968(sp) # 8-byte Folded Reload
616; CHECK-NEXT:    ld s7, 1960(sp) # 8-byte Folded Reload
617; CHECK-NEXT:    ld s8, 1952(sp) # 8-byte Folded Reload
618; CHECK-NEXT:    ld s9, 1944(sp) # 8-byte Folded Reload
619; CHECK-NEXT:    ld s10, 1936(sp) # 8-byte Folded Reload
620; CHECK-NEXT:    ld s11, 1928(sp) # 8-byte Folded Reload
621; CHECK-NEXT:    .cfi_restore ra
622; CHECK-NEXT:    .cfi_restore s0
623; CHECK-NEXT:    .cfi_restore s1
624; CHECK-NEXT:    .cfi_restore s2
625; CHECK-NEXT:    .cfi_restore s3
626; CHECK-NEXT:    .cfi_restore s4
627; CHECK-NEXT:    .cfi_restore s5
628; CHECK-NEXT:    .cfi_restore s6
629; CHECK-NEXT:    .cfi_restore s7
630; CHECK-NEXT:    .cfi_restore s8
631; CHECK-NEXT:    .cfi_restore s9
632; CHECK-NEXT:    .cfi_restore s10
633; CHECK-NEXT:    .cfi_restore s11
634; CHECK-NEXT:    addi sp, sp, 2032
635; CHECK-NEXT:    .cfi_def_cfa_offset 0
636; CHECK-NEXT:    ret
637  %stack_obj = alloca i64, align 4096
638
639  %ra = call i64 asm sideeffect "addi ra, x0, 1", "={ra}"()
640  %t0 = call i64 asm sideeffect "addi t0, x0, 5", "={t0}"()
641  %t1 = call i64 asm sideeffect "addi t1, x0, 6", "={t1}"()
642  %t2 = call i64 asm sideeffect "addi t2, x0, 7", "={t2}"()
643  %s0 = call i64 asm sideeffect "addi s0, x0, 8", "={s0}"()
644  %s1 = call i64 asm sideeffect "addi s1, x0, 9", "={s1}"()
645  %a0 = call i64 asm sideeffect "addi a0, x0, 10", "={a0}"()
646  %a1 = call i64 asm sideeffect "addi a1, x0, 11", "={a1}"()
647  %a2 = call i64 asm sideeffect "addi a2, x0, 12", "={a2}"()
648  %a3 = call i64 asm sideeffect "addi a3, x0, 13", "={a3}"()
649  %a4 = call i64 asm sideeffect "addi a4, x0, 14", "={a4}"()
650  %a5 = call i64 asm sideeffect "addi a5, x0, 15", "={a5}"()
651  %a6 = call i64 asm sideeffect "addi a6, x0, 16", "={a6}"()
652  %a7 = call i64 asm sideeffect "addi a7, x0, 17", "={a7}"()
653  %s2 = call i64 asm sideeffect "addi s2, x0, 18", "={s2}"()
654  %s3 = call i64 asm sideeffect "addi s3, x0, 19", "={s3}"()
655  %s4 = call i64 asm sideeffect "addi s4, x0, 20", "={s4}"()
656  %s5 = call i64 asm sideeffect "addi s5, x0, 21", "={s5}"()
657  %s6 = call i64 asm sideeffect "addi s6, x0, 22", "={s6}"()
658  %s7 = call i64 asm sideeffect "addi s7, x0, 23", "={s7}"()
659  %s8 = call i64 asm sideeffect "addi s8, x0, 24", "={s8}"()
660  %s9 = call i64 asm sideeffect "addi s9, x0, 25", "={s9}"()
661  %s10 = call i64 asm sideeffect "addi s10, x0, 26", "={s10}"()
662  %s11 = call i64 asm sideeffect "addi s11, x0, 27", "={s11}"()
663  %t3 = call i64 asm sideeffect "addi t3, x0, 28", "={t3}"()
664  %t4 = call i64 asm sideeffect "addi t4, x0, 29", "={t4}"()
665  %t5 = call i64 asm sideeffect "addi t5, x0, 30", "={t5}"()
666  %t6 = call i64 asm sideeffect "addi t6, x0, 31", "={t6}"()
667
668  %cmp = icmp eq i64 %t5, %t6
669  br i1 %cmp, label %branch_1, label %branch_2
670
671branch_1:
672  call void asm sideeffect ".space 1048576", ""()
673  br label %branch_2
674
675branch_2:
676  call void asm sideeffect "# reg use $0", "{ra}"(i64 %ra)
677  call void asm sideeffect "# reg use $0", "{t0}"(i64 %t0)
678  call void asm sideeffect "# reg use $0", "{t1}"(i64 %t1)
679  call void asm sideeffect "# reg use $0", "{t2}"(i64 %t2)
680  call void asm sideeffect "# reg use $0", "{s0}"(i64 %s0)
681  call void asm sideeffect "# reg use $0", "{s1}"(i64 %s1)
682  call void asm sideeffect "# reg use $0", "{a0}"(i64 %a0)
683  call void asm sideeffect "# reg use $0", "{a1}"(i64 %a1)
684  call void asm sideeffect "# reg use $0", "{a2}"(i64 %a2)
685  call void asm sideeffect "# reg use $0", "{a3}"(i64 %a3)
686  call void asm sideeffect "# reg use $0", "{a4}"(i64 %a4)
687  call void asm sideeffect "# reg use $0", "{a5}"(i64 %a5)
688  call void asm sideeffect "# reg use $0", "{a6}"(i64 %a6)
689  call void asm sideeffect "# reg use $0", "{a7}"(i64 %a7)
690  call void asm sideeffect "# reg use $0", "{s2}"(i64 %s2)
691  call void asm sideeffect "# reg use $0", "{s3}"(i64 %s3)
692  call void asm sideeffect "# reg use $0", "{s4}"(i64 %s4)
693  call void asm sideeffect "# reg use $0", "{s5}"(i64 %s5)
694  call void asm sideeffect "# reg use $0", "{s6}"(i64 %s6)
695  call void asm sideeffect "# reg use $0", "{s7}"(i64 %s7)
696  call void asm sideeffect "# reg use $0", "{s8}"(i64 %s8)
697  call void asm sideeffect "# reg use $0", "{s9}"(i64 %s9)
698  call void asm sideeffect "# reg use $0", "{s10}"(i64 %s10)
699  call void asm sideeffect "# reg use $0", "{s11}"(i64 %s11)
700  call void asm sideeffect "# reg use $0", "{t3}"(i64 %t3)
701  call void asm sideeffect "# reg use $0", "{t4}"(i64 %t4)
702  call void asm sideeffect "# reg use $0", "{t5}"(i64 %t5)
703  call void asm sideeffect "# reg use $0", "{t6}"(i64 %t6)
704
705  ret void
706}
707
708define void @relax_jal_spill_64_restore_block_correspondence() {
709;
710; CHECK-LABEL: relax_jal_spill_64_restore_block_correspondence:
711; CHECK:       # %bb.0: # %entry
712; CHECK-NEXT:    addi sp, sp, -112
713; CHECK-NEXT:    .cfi_def_cfa_offset 112
714; CHECK-NEXT:    sd ra, 104(sp) # 8-byte Folded Spill
715; CHECK-NEXT:    sd s0, 96(sp) # 8-byte Folded Spill
716; CHECK-NEXT:    sd s1, 88(sp) # 8-byte Folded Spill
717; CHECK-NEXT:    sd s2, 80(sp) # 8-byte Folded Spill
718; CHECK-NEXT:    sd s3, 72(sp) # 8-byte Folded Spill
719; CHECK-NEXT:    sd s4, 64(sp) # 8-byte Folded Spill
720; CHECK-NEXT:    sd s5, 56(sp) # 8-byte Folded Spill
721; CHECK-NEXT:    sd s6, 48(sp) # 8-byte Folded Spill
722; CHECK-NEXT:    sd s7, 40(sp) # 8-byte Folded Spill
723; CHECK-NEXT:    sd s8, 32(sp) # 8-byte Folded Spill
724; CHECK-NEXT:    sd s9, 24(sp) # 8-byte Folded Spill
725; CHECK-NEXT:    sd s10, 16(sp) # 8-byte Folded Spill
726; CHECK-NEXT:    sd s11, 8(sp) # 8-byte Folded Spill
727; CHECK-NEXT:    .cfi_offset ra, -8
728; CHECK-NEXT:    .cfi_offset s0, -16
729; CHECK-NEXT:    .cfi_offset s1, -24
730; CHECK-NEXT:    .cfi_offset s2, -32
731; CHECK-NEXT:    .cfi_offset s3, -40
732; CHECK-NEXT:    .cfi_offset s4, -48
733; CHECK-NEXT:    .cfi_offset s5, -56
734; CHECK-NEXT:    .cfi_offset s6, -64
735; CHECK-NEXT:    .cfi_offset s7, -72
736; CHECK-NEXT:    .cfi_offset s8, -80
737; CHECK-NEXT:    .cfi_offset s9, -88
738; CHECK-NEXT:    .cfi_offset s10, -96
739; CHECK-NEXT:    .cfi_offset s11, -104
740; CHECK-NEXT:    .cfi_remember_state
741; CHECK-NEXT:    #APP
742; CHECK-NEXT:    li ra, 1
743; CHECK-NEXT:    #NO_APP
744; CHECK-NEXT:    #APP
745; CHECK-NEXT:    li t0, 5
746; CHECK-NEXT:    #NO_APP
747; CHECK-NEXT:    #APP
748; CHECK-NEXT:    li t1, 6
749; CHECK-NEXT:    #NO_APP
750; CHECK-NEXT:    #APP
751; CHECK-NEXT:    li t2, 7
752; CHECK-NEXT:    #NO_APP
753; CHECK-NEXT:    #APP
754; CHECK-NEXT:    li s0, 8
755; CHECK-NEXT:    #NO_APP
756; CHECK-NEXT:    #APP
757; CHECK-NEXT:    li s1, 9
758; CHECK-NEXT:    #NO_APP
759; CHECK-NEXT:    #APP
760; CHECK-NEXT:    li a0, 10
761; CHECK-NEXT:    #NO_APP
762; CHECK-NEXT:    #APP
763; CHECK-NEXT:    li a1, 11
764; CHECK-NEXT:    #NO_APP
765; CHECK-NEXT:    #APP
766; CHECK-NEXT:    li a2, 12
767; CHECK-NEXT:    #NO_APP
768; CHECK-NEXT:    #APP
769; CHECK-NEXT:    li a3, 13
770; CHECK-NEXT:    #NO_APP
771; CHECK-NEXT:    #APP
772; CHECK-NEXT:    li a4, 14
773; CHECK-NEXT:    #NO_APP
774; CHECK-NEXT:    #APP
775; CHECK-NEXT:    li a5, 15
776; CHECK-NEXT:    #NO_APP
777; CHECK-NEXT:    #APP
778; CHECK-NEXT:    li a6, 16
779; CHECK-NEXT:    #NO_APP
780; CHECK-NEXT:    #APP
781; CHECK-NEXT:    li a7, 17
782; CHECK-NEXT:    #NO_APP
783; CHECK-NEXT:    #APP
784; CHECK-NEXT:    li s2, 18
785; CHECK-NEXT:    #NO_APP
786; CHECK-NEXT:    #APP
787; CHECK-NEXT:    li s3, 19
788; CHECK-NEXT:    #NO_APP
789; CHECK-NEXT:    #APP
790; CHECK-NEXT:    li s4, 20
791; CHECK-NEXT:    #NO_APP
792; CHECK-NEXT:    #APP
793; CHECK-NEXT:    li s5, 21
794; CHECK-NEXT:    #NO_APP
795; CHECK-NEXT:    #APP
796; CHECK-NEXT:    li s6, 22
797; CHECK-NEXT:    #NO_APP
798; CHECK-NEXT:    #APP
799; CHECK-NEXT:    li s7, 23
800; CHECK-NEXT:    #NO_APP
801; CHECK-NEXT:    #APP
802; CHECK-NEXT:    li s8, 24
803; CHECK-NEXT:    #NO_APP
804; CHECK-NEXT:    #APP
805; CHECK-NEXT:    li s9, 25
806; CHECK-NEXT:    #NO_APP
807; CHECK-NEXT:    #APP
808; CHECK-NEXT:    li s10, 26
809; CHECK-NEXT:    #NO_APP
810; CHECK-NEXT:    #APP
811; CHECK-NEXT:    li s11, 27
812; CHECK-NEXT:    #NO_APP
813; CHECK-NEXT:    #APP
814; CHECK-NEXT:    li t3, 28
815; CHECK-NEXT:    #NO_APP
816; CHECK-NEXT:    #APP
817; CHECK-NEXT:    li t4, 29
818; CHECK-NEXT:    #NO_APP
819; CHECK-NEXT:    #APP
820; CHECK-NEXT:    li t5, 30
821; CHECK-NEXT:    #NO_APP
822; CHECK-NEXT:    #APP
823; CHECK-NEXT:    li t6, 31
824; CHECK-NEXT:    #NO_APP
825; CHECK-NEXT:    bne t5, t6, .LBB4_2
826; CHECK-NEXT:    j .LBB4_1
827; CHECK-NEXT:  .LBB4_8: # %dest_1
828; CHECK-NEXT:    ld s11, 0(sp)
829; CHECK-NEXT:  .LBB4_1: # %dest_1
830; CHECK-NEXT:    #APP
831; CHECK-NEXT:    # dest 1
832; CHECK-NEXT:    #NO_APP
833; CHECK-NEXT:    j .LBB4_3
834; CHECK-NEXT:  .LBB4_2: # %cond_2
835; CHECK-NEXT:    bne t3, t4, .LBB4_5
836; CHECK-NEXT:  .LBB4_3: # %dest_2
837; CHECK-NEXT:    #APP
838; CHECK-NEXT:    # dest 2
839; CHECK-NEXT:    #NO_APP
840; CHECK-NEXT:  .LBB4_4: # %dest_3
841; CHECK-NEXT:    #APP
842; CHECK-NEXT:    # dest 3
843; CHECK-NEXT:    #NO_APP
844; CHECK-NEXT:    #APP
845; CHECK-NEXT:    # reg use ra
846; CHECK-NEXT:    #NO_APP
847; CHECK-NEXT:    #APP
848; CHECK-NEXT:    # reg use t0
849; CHECK-NEXT:    #NO_APP
850; CHECK-NEXT:    #APP
851; CHECK-NEXT:    # reg use t1
852; CHECK-NEXT:    #NO_APP
853; CHECK-NEXT:    #APP
854; CHECK-NEXT:    # reg use t2
855; CHECK-NEXT:    #NO_APP
856; CHECK-NEXT:    #APP
857; CHECK-NEXT:    # reg use s0
858; CHECK-NEXT:    #NO_APP
859; CHECK-NEXT:    #APP
860; CHECK-NEXT:    # reg use s1
861; CHECK-NEXT:    #NO_APP
862; CHECK-NEXT:    #APP
863; CHECK-NEXT:    # reg use a0
864; CHECK-NEXT:    #NO_APP
865; CHECK-NEXT:    #APP
866; CHECK-NEXT:    # reg use a1
867; CHECK-NEXT:    #NO_APP
868; CHECK-NEXT:    #APP
869; CHECK-NEXT:    # reg use a2
870; CHECK-NEXT:    #NO_APP
871; CHECK-NEXT:    #APP
872; CHECK-NEXT:    # reg use a3
873; CHECK-NEXT:    #NO_APP
874; CHECK-NEXT:    #APP
875; CHECK-NEXT:    # reg use a4
876; CHECK-NEXT:    #NO_APP
877; CHECK-NEXT:    #APP
878; CHECK-NEXT:    # reg use a5
879; CHECK-NEXT:    #NO_APP
880; CHECK-NEXT:    #APP
881; CHECK-NEXT:    # reg use a6
882; CHECK-NEXT:    #NO_APP
883; CHECK-NEXT:    #APP
884; CHECK-NEXT:    # reg use a7
885; CHECK-NEXT:    #NO_APP
886; CHECK-NEXT:    #APP
887; CHECK-NEXT:    # reg use s2
888; CHECK-NEXT:    #NO_APP
889; CHECK-NEXT:    #APP
890; CHECK-NEXT:    # reg use s3
891; CHECK-NEXT:    #NO_APP
892; CHECK-NEXT:    #APP
893; CHECK-NEXT:    # reg use s4
894; CHECK-NEXT:    #NO_APP
895; CHECK-NEXT:    #APP
896; CHECK-NEXT:    # reg use s5
897; CHECK-NEXT:    #NO_APP
898; CHECK-NEXT:    #APP
899; CHECK-NEXT:    # reg use s6
900; CHECK-NEXT:    #NO_APP
901; CHECK-NEXT:    #APP
902; CHECK-NEXT:    # reg use s7
903; CHECK-NEXT:    #NO_APP
904; CHECK-NEXT:    #APP
905; CHECK-NEXT:    # reg use s8
906; CHECK-NEXT:    #NO_APP
907; CHECK-NEXT:    #APP
908; CHECK-NEXT:    # reg use s9
909; CHECK-NEXT:    #NO_APP
910; CHECK-NEXT:    #APP
911; CHECK-NEXT:    # reg use s10
912; CHECK-NEXT:    #NO_APP
913; CHECK-NEXT:    #APP
914; CHECK-NEXT:    # reg use s11
915; CHECK-NEXT:    #NO_APP
916; CHECK-NEXT:    #APP
917; CHECK-NEXT:    # reg use t3
918; CHECK-NEXT:    #NO_APP
919; CHECK-NEXT:    #APP
920; CHECK-NEXT:    # reg use t4
921; CHECK-NEXT:    #NO_APP
922; CHECK-NEXT:    #APP
923; CHECK-NEXT:    # reg use t5
924; CHECK-NEXT:    #NO_APP
925; CHECK-NEXT:    #APP
926; CHECK-NEXT:    # reg use t6
927; CHECK-NEXT:    #NO_APP
928; CHECK-NEXT:    ld ra, 104(sp) # 8-byte Folded Reload
929; CHECK-NEXT:    ld s0, 96(sp) # 8-byte Folded Reload
930; CHECK-NEXT:    ld s1, 88(sp) # 8-byte Folded Reload
931; CHECK-NEXT:    ld s2, 80(sp) # 8-byte Folded Reload
932; CHECK-NEXT:    ld s3, 72(sp) # 8-byte Folded Reload
933; CHECK-NEXT:    ld s4, 64(sp) # 8-byte Folded Reload
934; CHECK-NEXT:    ld s5, 56(sp) # 8-byte Folded Reload
935; CHECK-NEXT:    ld s6, 48(sp) # 8-byte Folded Reload
936; CHECK-NEXT:    ld s7, 40(sp) # 8-byte Folded Reload
937; CHECK-NEXT:    ld s8, 32(sp) # 8-byte Folded Reload
938; CHECK-NEXT:    ld s9, 24(sp) # 8-byte Folded Reload
939; CHECK-NEXT:    ld s10, 16(sp) # 8-byte Folded Reload
940; CHECK-NEXT:    ld s11, 8(sp) # 8-byte Folded Reload
941; CHECK-NEXT:    .cfi_restore ra
942; CHECK-NEXT:    .cfi_restore s0
943; CHECK-NEXT:    .cfi_restore s1
944; CHECK-NEXT:    .cfi_restore s2
945; CHECK-NEXT:    .cfi_restore s3
946; CHECK-NEXT:    .cfi_restore s4
947; CHECK-NEXT:    .cfi_restore s5
948; CHECK-NEXT:    .cfi_restore s6
949; CHECK-NEXT:    .cfi_restore s7
950; CHECK-NEXT:    .cfi_restore s8
951; CHECK-NEXT:    .cfi_restore s9
952; CHECK-NEXT:    .cfi_restore s10
953; CHECK-NEXT:    .cfi_restore s11
954; CHECK-NEXT:    addi sp, sp, 112
955; CHECK-NEXT:    .cfi_def_cfa_offset 0
956; CHECK-NEXT:    ret
957; CHECK-NEXT:  .LBB4_5: # %cond_3
958; CHECK-NEXT:    .cfi_restore_state
959; CHECK-NEXT:    beq t1, t2, .LBB4_4
960; CHECK-NEXT:  # %bb.6: # %space
961; CHECK-NEXT:    #APP
962; CHECK-NEXT:    .zero 1048576
963; CHECK-NEXT:    #NO_APP
964; CHECK-NEXT:  # %bb.7: # %space
965; CHECK-NEXT:    sd s11, 0(sp)
966; CHECK-NEXT:    jump .LBB4_8, s11
967entry:
968  %ra = call i64 asm sideeffect "addi ra, x0, 1", "={ra}"()
969  %t0 = call i64 asm sideeffect "addi t0, x0, 5", "={t0}"()
970  %t1 = call i64 asm sideeffect "addi t1, x0, 6", "={t1}"()
971  %t2 = call i64 asm sideeffect "addi t2, x0, 7", "={t2}"()
972  %s0 = call i64 asm sideeffect "addi s0, x0, 8", "={s0}"()
973  %s1 = call i64 asm sideeffect "addi s1, x0, 9", "={s1}"()
974  %a0 = call i64 asm sideeffect "addi a0, x0, 10", "={a0}"()
975  %a1 = call i64 asm sideeffect "addi a1, x0, 11", "={a1}"()
976  %a2 = call i64 asm sideeffect "addi a2, x0, 12", "={a2}"()
977  %a3 = call i64 asm sideeffect "addi a3, x0, 13", "={a3}"()
978  %a4 = call i64 asm sideeffect "addi a4, x0, 14", "={a4}"()
979  %a5 = call i64 asm sideeffect "addi a5, x0, 15", "={a5}"()
980  %a6 = call i64 asm sideeffect "addi a6, x0, 16", "={a6}"()
981  %a7 = call i64 asm sideeffect "addi a7, x0, 17", "={a7}"()
982  %s2 = call i64 asm sideeffect "addi s2, x0, 18", "={s2}"()
983  %s3 = call i64 asm sideeffect "addi s3, x0, 19", "={s3}"()
984  %s4 = call i64 asm sideeffect "addi s4, x0, 20", "={s4}"()
985  %s5 = call i64 asm sideeffect "addi s5, x0, 21", "={s5}"()
986  %s6 = call i64 asm sideeffect "addi s6, x0, 22", "={s6}"()
987  %s7 = call i64 asm sideeffect "addi s7, x0, 23", "={s7}"()
988  %s8 = call i64 asm sideeffect "addi s8, x0, 24", "={s8}"()
989  %s9 = call i64 asm sideeffect "addi s9, x0, 25", "={s9}"()
990  %s10 = call i64 asm sideeffect "addi s10, x0, 26", "={s10}"()
991  %s11 = call i64 asm sideeffect "addi s11, x0, 27", "={s11}"()
992  %t3 = call i64 asm sideeffect "addi t3, x0, 28", "={t3}"()
993  %t4 = call i64 asm sideeffect "addi t4, x0, 29", "={t4}"()
994  %t5 = call i64 asm sideeffect "addi t5, x0, 30", "={t5}"()
995  %t6 = call i64 asm sideeffect "addi t6, x0, 31", "={t6}"()
996
997  br label %cond_1
998
999cond_1:
1000  %cmp1 = icmp eq i64 %t5, %t6
1001  br i1 %cmp1, label %dest_1, label %cond_2
1002
1003cond_2:
1004  %cmp2 = icmp eq i64 %t3, %t4
1005  br i1 %cmp2, label %dest_2, label %cond_3
1006
1007cond_3:
1008  %cmp3 = icmp eq i64 %t1, %t2
1009  br i1 %cmp3, label %dest_3, label %space
1010
1011space:
1012  call void asm sideeffect ".space 1048576", ""()
1013  br label %dest_1
1014
1015dest_1:
1016  call void asm sideeffect "# dest 1", ""()
1017  br label %dest_2
1018
1019dest_2:
1020  call void asm sideeffect "# dest 2", ""()
1021  br label %dest_3
1022
1023dest_3:
1024  call void asm sideeffect "# dest 3", ""()
1025  br label %tail
1026
1027tail:
1028  call void asm sideeffect "# reg use $0", "{ra}"(i64 %ra)
1029  call void asm sideeffect "# reg use $0", "{t0}"(i64 %t0)
1030  call void asm sideeffect "# reg use $0", "{t1}"(i64 %t1)
1031  call void asm sideeffect "# reg use $0", "{t2}"(i64 %t2)
1032  call void asm sideeffect "# reg use $0", "{s0}"(i64 %s0)
1033  call void asm sideeffect "# reg use $0", "{s1}"(i64 %s1)
1034  call void asm sideeffect "# reg use $0", "{a0}"(i64 %a0)
1035  call void asm sideeffect "# reg use $0", "{a1}"(i64 %a1)
1036  call void asm sideeffect "# reg use $0", "{a2}"(i64 %a2)
1037  call void asm sideeffect "# reg use $0", "{a3}"(i64 %a3)
1038  call void asm sideeffect "# reg use $0", "{a4}"(i64 %a4)
1039  call void asm sideeffect "# reg use $0", "{a5}"(i64 %a5)
1040  call void asm sideeffect "# reg use $0", "{a6}"(i64 %a6)
1041  call void asm sideeffect "# reg use $0", "{a7}"(i64 %a7)
1042  call void asm sideeffect "# reg use $0", "{s2}"(i64 %s2)
1043  call void asm sideeffect "# reg use $0", "{s3}"(i64 %s3)
1044  call void asm sideeffect "# reg use $0", "{s4}"(i64 %s4)
1045  call void asm sideeffect "# reg use $0", "{s5}"(i64 %s5)
1046  call void asm sideeffect "# reg use $0", "{s6}"(i64 %s6)
1047  call void asm sideeffect "# reg use $0", "{s7}"(i64 %s7)
1048  call void asm sideeffect "# reg use $0", "{s8}"(i64 %s8)
1049  call void asm sideeffect "# reg use $0", "{s9}"(i64 %s9)
1050  call void asm sideeffect "# reg use $0", "{s10}"(i64 %s10)
1051  call void asm sideeffect "# reg use $0", "{s11}"(i64 %s11)
1052  call void asm sideeffect "# reg use $0", "{t3}"(i64 %t3)
1053  call void asm sideeffect "# reg use $0", "{t4}"(i64 %t4)
1054  call void asm sideeffect "# reg use $0", "{t5}"(i64 %t5)
1055  call void asm sideeffect "# reg use $0", "{t6}"(i64 %t6)
1056
1057  ret void
1058}
1059