xref: /llvm-project/llvm/test/CodeGen/Mips/shrink-wrapping.ll (revision 3daf8bc96a121279030e93f4462ff4daa1ffa8e4)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
3; RUN: llc -mtriple=mips-unknown-linux-gnu -enable-shrink-wrap=true \
4; RUN:   -relocation-model=static < %s | \
5; RUN:   FileCheck %s -check-prefix=SHRINK-WRAP-STATIC
6
7; RUN: llc -mtriple=mips-unknown-linux-gnu -enable-shrink-wrap=false \
8; RUN:   -relocation-model=static < %s | \
9; RUN:   FileCheck %s -check-prefix=NO-SHRINK-WRAP-STATIC
10
11; RUN: llc -mtriple=mips-unknown-linux-gnu -enable-shrink-wrap=true \
12; RUN:   -relocation-model=pic -mips-jalr-reloc=false < %s | \
13; RUN:   FileCheck %s -check-prefix=SHRINK-WRAP-PIC
14
15; RUN: llc -mtriple=mips-unknown-linux-gnu -enable-shrink-wrap=false \
16; RUN:   -relocation-model=pic -mips-jalr-reloc=false < %s | \
17; RUN:   FileCheck %s -check-prefix=NO-SHRINK-WRAP-PIC
18
19; RUN: llc -mtriple=mips64-unknown-linux-gnu -enable-shrink-wrap=true \
20; RUN:   -relocation-model=static < %s | \
21; RUN:   FileCheck %s -check-prefix=SHRINK-WRAP-64-STATIC
22
23; RUN: llc -mtriple=mips64-unknown-linux-gnu -enable-shrink-wrap=false \
24; RUN:   -relocation-model=static < %s | \
25; RUN:   FileCheck %s -check-prefix=NO-SHRINK-WRAP-64-STATIC
26
27; RUN: llc -mtriple=mips64-unknown-linux-gnu -enable-shrink-wrap=true \
28; RUN:   -relocation-model=pic -mips-jalr-reloc=false < %s | \
29; RUN:   FileCheck %s -check-prefix=SHRINK-WRAP-64-PIC
30
31; RUN: llc -mtriple=mips64-unknown-linux-gnu -enable-shrink-wrap=false \
32; RUN:   -relocation-model=pic -mips-jalr-reloc=false < %s | \
33; RUN:   FileCheck %s -check-prefix=NO-SHRINK-WRAP-64-PIC
34
35declare void @f(i32 signext)
36
37define i32 @foo(i32 signext %a) {
38; SHRINK-WRAP-STATIC-LABEL: foo:
39; SHRINK-WRAP-STATIC:       # %bb.0: # %entry
40; SHRINK-WRAP-STATIC-NEXT:    beqz $4, $BB0_2
41; SHRINK-WRAP-STATIC-NEXT:    nop
42; SHRINK-WRAP-STATIC-NEXT:  # %bb.1: # %if.end
43; SHRINK-WRAP-STATIC-NEXT:    addiu $sp, $sp, -24
44; SHRINK-WRAP-STATIC-NEXT:    .cfi_def_cfa_offset 24
45; SHRINK-WRAP-STATIC-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
46; SHRINK-WRAP-STATIC-NEXT:    .cfi_offset 31, -4
47; SHRINK-WRAP-STATIC-NEXT:    jal f
48; SHRINK-WRAP-STATIC-NEXT:    addiu $4, $4, 1
49; SHRINK-WRAP-STATIC-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
50; SHRINK-WRAP-STATIC-NEXT:    addiu $sp, $sp, 24
51; SHRINK-WRAP-STATIC-NEXT:  $BB0_2: # %return
52; SHRINK-WRAP-STATIC-NEXT:    jr $ra
53; SHRINK-WRAP-STATIC-NEXT:    addiu $2, $zero, 0
54;
55; NO-SHRINK-WRAP-STATIC-LABEL: foo:
56; NO-SHRINK-WRAP-STATIC:       # %bb.0: # %entry
57; NO-SHRINK-WRAP-STATIC-NEXT:    addiu $sp, $sp, -24
58; NO-SHRINK-WRAP-STATIC-NEXT:    .cfi_def_cfa_offset 24
59; NO-SHRINK-WRAP-STATIC-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
60; NO-SHRINK-WRAP-STATIC-NEXT:    .cfi_offset 31, -4
61; NO-SHRINK-WRAP-STATIC-NEXT:    beqz $4, $BB0_2
62; NO-SHRINK-WRAP-STATIC-NEXT:    nop
63; NO-SHRINK-WRAP-STATIC-NEXT:  # %bb.1: # %if.end
64; NO-SHRINK-WRAP-STATIC-NEXT:    jal f
65; NO-SHRINK-WRAP-STATIC-NEXT:    addiu $4, $4, 1
66; NO-SHRINK-WRAP-STATIC-NEXT:  $BB0_2: # %return
67; NO-SHRINK-WRAP-STATIC-NEXT:    addiu $2, $zero, 0
68; NO-SHRINK-WRAP-STATIC-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
69; NO-SHRINK-WRAP-STATIC-NEXT:    jr $ra
70; NO-SHRINK-WRAP-STATIC-NEXT:    addiu $sp, $sp, 24
71;
72; SHRINK-WRAP-PIC-LABEL: foo:
73; SHRINK-WRAP-PIC:       # %bb.0: # %entry
74; SHRINK-WRAP-PIC-NEXT:    lui $2, %hi(_gp_disp)
75; SHRINK-WRAP-PIC-NEXT:    addiu $2, $2, %lo(_gp_disp)
76; SHRINK-WRAP-PIC-NEXT:    beqz $4, $BB0_2
77; SHRINK-WRAP-PIC-NEXT:    addu $gp, $2, $25
78; SHRINK-WRAP-PIC-NEXT:  # %bb.1: # %if.end
79; SHRINK-WRAP-PIC-NEXT:    addiu $sp, $sp, -24
80; SHRINK-WRAP-PIC-NEXT:    .cfi_def_cfa_offset 24
81; SHRINK-WRAP-PIC-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
82; SHRINK-WRAP-PIC-NEXT:    .cfi_offset 31, -4
83; SHRINK-WRAP-PIC-NEXT:    lw $25, %call16(f)($gp)
84; SHRINK-WRAP-PIC-NEXT:    jalr $25
85; SHRINK-WRAP-PIC-NEXT:    addiu $4, $4, 1
86; SHRINK-WRAP-PIC-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
87; SHRINK-WRAP-PIC-NEXT:    addiu $sp, $sp, 24
88; SHRINK-WRAP-PIC-NEXT:  $BB0_2: # %return
89; SHRINK-WRAP-PIC-NEXT:    jr $ra
90; SHRINK-WRAP-PIC-NEXT:    addiu $2, $zero, 0
91;
92; NO-SHRINK-WRAP-PIC-LABEL: foo:
93; NO-SHRINK-WRAP-PIC:       # %bb.0: # %entry
94; NO-SHRINK-WRAP-PIC-NEXT:    lui $2, %hi(_gp_disp)
95; NO-SHRINK-WRAP-PIC-NEXT:    addiu $2, $2, %lo(_gp_disp)
96; NO-SHRINK-WRAP-PIC-NEXT:    addiu $sp, $sp, -24
97; NO-SHRINK-WRAP-PIC-NEXT:    .cfi_def_cfa_offset 24
98; NO-SHRINK-WRAP-PIC-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
99; NO-SHRINK-WRAP-PIC-NEXT:    .cfi_offset 31, -4
100; NO-SHRINK-WRAP-PIC-NEXT:    beqz $4, $BB0_2
101; NO-SHRINK-WRAP-PIC-NEXT:    addu $gp, $2, $25
102; NO-SHRINK-WRAP-PIC-NEXT:  # %bb.1: # %if.end
103; NO-SHRINK-WRAP-PIC-NEXT:    lw $25, %call16(f)($gp)
104; NO-SHRINK-WRAP-PIC-NEXT:    jalr $25
105; NO-SHRINK-WRAP-PIC-NEXT:    addiu $4, $4, 1
106; NO-SHRINK-WRAP-PIC-NEXT:  $BB0_2: # %return
107; NO-SHRINK-WRAP-PIC-NEXT:    addiu $2, $zero, 0
108; NO-SHRINK-WRAP-PIC-NEXT:    lw $ra, 20($sp) # 4-byte Folded Reload
109; NO-SHRINK-WRAP-PIC-NEXT:    jr $ra
110; NO-SHRINK-WRAP-PIC-NEXT:    addiu $sp, $sp, 24
111;
112; SHRINK-WRAP-64-STATIC-LABEL: foo:
113; SHRINK-WRAP-64-STATIC:       # %bb.0: # %entry
114; SHRINK-WRAP-64-STATIC-NEXT:    beqz $4, .LBB0_2
115; SHRINK-WRAP-64-STATIC-NEXT:    nop
116; SHRINK-WRAP-64-STATIC-NEXT:  # %bb.1: # %if.end
117; SHRINK-WRAP-64-STATIC-NEXT:    daddiu $sp, $sp, -16
118; SHRINK-WRAP-64-STATIC-NEXT:    .cfi_def_cfa_offset 16
119; SHRINK-WRAP-64-STATIC-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
120; SHRINK-WRAP-64-STATIC-NEXT:    .cfi_offset 31, -8
121; SHRINK-WRAP-64-STATIC-NEXT:    jal f
122; SHRINK-WRAP-64-STATIC-NEXT:    addiu $4, $4, 1
123; SHRINK-WRAP-64-STATIC-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
124; SHRINK-WRAP-64-STATIC-NEXT:    daddiu $sp, $sp, 16
125; SHRINK-WRAP-64-STATIC-NEXT:  .LBB0_2: # %return
126; SHRINK-WRAP-64-STATIC-NEXT:    jr $ra
127; SHRINK-WRAP-64-STATIC-NEXT:    addiu $2, $zero, 0
128;
129; NO-SHRINK-WRAP-64-STATIC-LABEL: foo:
130; NO-SHRINK-WRAP-64-STATIC:       # %bb.0: # %entry
131; NO-SHRINK-WRAP-64-STATIC-NEXT:    daddiu $sp, $sp, -16
132; NO-SHRINK-WRAP-64-STATIC-NEXT:    .cfi_def_cfa_offset 16
133; NO-SHRINK-WRAP-64-STATIC-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
134; NO-SHRINK-WRAP-64-STATIC-NEXT:    .cfi_offset 31, -8
135; NO-SHRINK-WRAP-64-STATIC-NEXT:    beqz $4, .LBB0_2
136; NO-SHRINK-WRAP-64-STATIC-NEXT:    nop
137; NO-SHRINK-WRAP-64-STATIC-NEXT:  # %bb.1: # %if.end
138; NO-SHRINK-WRAP-64-STATIC-NEXT:    jal f
139; NO-SHRINK-WRAP-64-STATIC-NEXT:    addiu $4, $4, 1
140; NO-SHRINK-WRAP-64-STATIC-NEXT:  .LBB0_2: # %return
141; NO-SHRINK-WRAP-64-STATIC-NEXT:    addiu $2, $zero, 0
142; NO-SHRINK-WRAP-64-STATIC-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
143; NO-SHRINK-WRAP-64-STATIC-NEXT:    jr $ra
144; NO-SHRINK-WRAP-64-STATIC-NEXT:    daddiu $sp, $sp, 16
145;
146; SHRINK-WRAP-64-PIC-LABEL: foo:
147; SHRINK-WRAP-64-PIC:       # %bb.0: # %entry
148; SHRINK-WRAP-64-PIC-NEXT:    lui $1, %hi(%neg(%gp_rel(foo)))
149; SHRINK-WRAP-64-PIC-NEXT:    beqz $4, .LBB0_2
150; SHRINK-WRAP-64-PIC-NEXT:    daddu $2, $1, $25
151; SHRINK-WRAP-64-PIC-NEXT:  # %bb.1: # %if.end
152; SHRINK-WRAP-64-PIC-NEXT:    daddiu $sp, $sp, -16
153; SHRINK-WRAP-64-PIC-NEXT:    .cfi_def_cfa_offset 16
154; SHRINK-WRAP-64-PIC-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
155; SHRINK-WRAP-64-PIC-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
156; SHRINK-WRAP-64-PIC-NEXT:    .cfi_offset 31, -8
157; SHRINK-WRAP-64-PIC-NEXT:    .cfi_offset 28, -16
158; SHRINK-WRAP-64-PIC-NEXT:    daddiu $gp, $2, %lo(%neg(%gp_rel(foo)))
159; SHRINK-WRAP-64-PIC-NEXT:    ld $25, %call16(f)($gp)
160; SHRINK-WRAP-64-PIC-NEXT:    jalr $25
161; SHRINK-WRAP-64-PIC-NEXT:    addiu $4, $4, 1
162; SHRINK-WRAP-64-PIC-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
163; SHRINK-WRAP-64-PIC-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
164; SHRINK-WRAP-64-PIC-NEXT:    daddiu $sp, $sp, 16
165; SHRINK-WRAP-64-PIC-NEXT:  .LBB0_2: # %return
166; SHRINK-WRAP-64-PIC-NEXT:    jr $ra
167; SHRINK-WRAP-64-PIC-NEXT:    addiu $2, $zero, 0
168;
169; NO-SHRINK-WRAP-64-PIC-LABEL: foo:
170; NO-SHRINK-WRAP-64-PIC:       # %bb.0: # %entry
171; NO-SHRINK-WRAP-64-PIC-NEXT:    daddiu $sp, $sp, -16
172; NO-SHRINK-WRAP-64-PIC-NEXT:    .cfi_def_cfa_offset 16
173; NO-SHRINK-WRAP-64-PIC-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
174; NO-SHRINK-WRAP-64-PIC-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
175; NO-SHRINK-WRAP-64-PIC-NEXT:    .cfi_offset 31, -8
176; NO-SHRINK-WRAP-64-PIC-NEXT:    .cfi_offset 28, -16
177; NO-SHRINK-WRAP-64-PIC-NEXT:    lui $1, %hi(%neg(%gp_rel(foo)))
178; NO-SHRINK-WRAP-64-PIC-NEXT:    beqz $4, .LBB0_2
179; NO-SHRINK-WRAP-64-PIC-NEXT:    daddu $2, $1, $25
180; NO-SHRINK-WRAP-64-PIC-NEXT:  # %bb.1: # %if.end
181; NO-SHRINK-WRAP-64-PIC-NEXT:    daddiu $gp, $2, %lo(%neg(%gp_rel(foo)))
182; NO-SHRINK-WRAP-64-PIC-NEXT:    ld $25, %call16(f)($gp)
183; NO-SHRINK-WRAP-64-PIC-NEXT:    jalr $25
184; NO-SHRINK-WRAP-64-PIC-NEXT:    addiu $4, $4, 1
185; NO-SHRINK-WRAP-64-PIC-NEXT:  .LBB0_2: # %return
186; NO-SHRINK-WRAP-64-PIC-NEXT:    addiu $2, $zero, 0
187; NO-SHRINK-WRAP-64-PIC-NEXT:    ld $gp, 0($sp) # 8-byte Folded Reload
188; NO-SHRINK-WRAP-64-PIC-NEXT:    ld $ra, 8($sp) # 8-byte Folded Reload
189; NO-SHRINK-WRAP-64-PIC-NEXT:    jr $ra
190; NO-SHRINK-WRAP-64-PIC-NEXT:    daddiu $sp, $sp, 16
191entry:
192  %cmp = icmp eq i32 %a, 0
193  br i1 %cmp, label %return, label %if.end
194
195if.end:
196  %add = add nsw i32 %a, 1
197  tail call void @f(i32 signext %add)
198  br label %return
199
200return:
201  ret i32 0
202}
203
204; Test that long branch expansion works correctly with shrink-wrapping enabled.
205define i32 @foo2(i32 signext %a) {
206; SHRINK-WRAP-STATIC-LABEL: foo2:
207; SHRINK-WRAP-STATIC:       # %bb.0:
208; SHRINK-WRAP-STATIC-NEXT:    addiu $1, $zero, 4
209; SHRINK-WRAP-STATIC-NEXT:    bne $4, $1, $BB1_2
210; SHRINK-WRAP-STATIC-NEXT:    nop
211; SHRINK-WRAP-STATIC-NEXT:  # %bb.1:
212; SHRINK-WRAP-STATIC-NEXT:    j $BB1_3
213; SHRINK-WRAP-STATIC-NEXT:    nop
214; SHRINK-WRAP-STATIC-NEXT:  $BB1_2: # %if.then
215; SHRINK-WRAP-STATIC-NEXT:    addiu $sp, $sp, -24
216; SHRINK-WRAP-STATIC-NEXT:    .cfi_def_cfa_offset 24
217; SHRINK-WRAP-STATIC-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
218; SHRINK-WRAP-STATIC-NEXT:    .cfi_offset 31, -4
219; SHRINK-WRAP-STATIC-NEXT:    #APP
220;
221; NO-SHRINK-WRAP-STATIC-LABEL: foo2:
222; NO-SHRINK-WRAP-STATIC:       # %bb.0:
223; NO-SHRINK-WRAP-STATIC-NEXT:    addiu $sp, $sp, -24
224; NO-SHRINK-WRAP-STATIC-NEXT:    .cfi_def_cfa_offset 24
225; NO-SHRINK-WRAP-STATIC-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
226; NO-SHRINK-WRAP-STATIC-NEXT:    .cfi_offset 31, -4
227; NO-SHRINK-WRAP-STATIC-NEXT:    addiu $1, $zero, 4
228; NO-SHRINK-WRAP-STATIC-NEXT:    bne $4, $1, $BB1_2
229; NO-SHRINK-WRAP-STATIC-NEXT:    nop
230; NO-SHRINK-WRAP-STATIC-NEXT:  # %bb.1:
231; NO-SHRINK-WRAP-STATIC-NEXT:    j $BB1_3
232; NO-SHRINK-WRAP-STATIC-NEXT:    nop
233; NO-SHRINK-WRAP-STATIC-NEXT:  $BB1_2: # %if.then
234; NO-SHRINK-WRAP-STATIC-NEXT:    #APP
235;
236; SHRINK-WRAP-PIC-LABEL: foo2:
237; SHRINK-WRAP-PIC:       # %bb.0:
238; SHRINK-WRAP-PIC-NEXT:    lui $2, %hi(_gp_disp)
239; SHRINK-WRAP-PIC-NEXT:    addiu $2, $2, %lo(_gp_disp)
240; SHRINK-WRAP-PIC-NEXT:    addiu $1, $zero, 4
241; SHRINK-WRAP-PIC-NEXT:    bne $4, $1, $BB1_3
242; SHRINK-WRAP-PIC-NEXT:    addu $gp, $2, $25
243; SHRINK-WRAP-PIC-NEXT:  # %bb.1:
244; SHRINK-WRAP-PIC-NEXT:    addiu $sp, $sp, -8
245; SHRINK-WRAP-PIC-NEXT:    sw $ra, 0($sp)
246; SHRINK-WRAP-PIC-NEXT:    lui $1, %hi(($BB1_4)-($BB1_2))
247; SHRINK-WRAP-PIC-NEXT:    bal $BB1_2
248; SHRINK-WRAP-PIC-NEXT:    addiu $1, $1, %lo(($BB1_4)-($BB1_2))
249; SHRINK-WRAP-PIC-NEXT:  $BB1_2:
250; SHRINK-WRAP-PIC-NEXT:    addu $1, $ra, $1
251; SHRINK-WRAP-PIC-NEXT:    lw $ra, 0($sp)
252; SHRINK-WRAP-PIC-NEXT:    jr $1
253; SHRINK-WRAP-PIC-NEXT:    addiu $sp, $sp, 8
254; SHRINK-WRAP-PIC-NEXT:  $BB1_3: # %if.then
255; SHRINK-WRAP-PIC-NEXT:    addiu $sp, $sp, -24
256; SHRINK-WRAP-PIC-NEXT:    .cfi_def_cfa_offset 24
257; SHRINK-WRAP-PIC-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
258; SHRINK-WRAP-PIC-NEXT:    .cfi_offset 31, -4
259; SHRINK-WRAP-PIC-NEXT:    #APP
260;
261; NO-SHRINK-WRAP-PIC-LABEL: foo2:
262; NO-SHRINK-WRAP-PIC:       # %bb.0:
263; NO-SHRINK-WRAP-PIC-NEXT:    lui $2, %hi(_gp_disp)
264; NO-SHRINK-WRAP-PIC-NEXT:    addiu $2, $2, %lo(_gp_disp)
265; NO-SHRINK-WRAP-PIC-NEXT:    addiu $sp, $sp, -24
266; NO-SHRINK-WRAP-PIC-NEXT:    .cfi_def_cfa_offset 24
267; NO-SHRINK-WRAP-PIC-NEXT:    sw $ra, 20($sp) # 4-byte Folded Spill
268; NO-SHRINK-WRAP-PIC-NEXT:    .cfi_offset 31, -4
269; NO-SHRINK-WRAP-PIC-NEXT:    addiu $1, $zero, 4
270; NO-SHRINK-WRAP-PIC-NEXT:    bne $4, $1, $BB1_3
271; NO-SHRINK-WRAP-PIC-NEXT:    addu $gp, $2, $25
272; NO-SHRINK-WRAP-PIC-NEXT:  # %bb.1:
273; NO-SHRINK-WRAP-PIC-NEXT:    addiu $sp, $sp, -8
274; NO-SHRINK-WRAP-PIC-NEXT:    sw $ra, 0($sp)
275; NO-SHRINK-WRAP-PIC-NEXT:    lui $1, %hi(($BB1_4)-($BB1_2))
276; NO-SHRINK-WRAP-PIC-NEXT:    bal $BB1_2
277; NO-SHRINK-WRAP-PIC-NEXT:    addiu $1, $1, %lo(($BB1_4)-($BB1_2))
278; NO-SHRINK-WRAP-PIC-NEXT:  $BB1_2:
279; NO-SHRINK-WRAP-PIC-NEXT:    addu $1, $ra, $1
280; NO-SHRINK-WRAP-PIC-NEXT:    lw $ra, 0($sp)
281; NO-SHRINK-WRAP-PIC-NEXT:    jr $1
282; NO-SHRINK-WRAP-PIC-NEXT:    addiu $sp, $sp, 8
283; NO-SHRINK-WRAP-PIC-NEXT:  $BB1_3: # %if.then
284; NO-SHRINK-WRAP-PIC-NEXT:    #APP
285;
286; SHRINK-WRAP-64-STATIC-LABEL: foo2:
287; SHRINK-WRAP-64-STATIC:       # %bb.0:
288; SHRINK-WRAP-64-STATIC-NEXT:    addiu $1, $zero, 4
289; SHRINK-WRAP-64-STATIC-NEXT:    bne $4, $1, .LBB1_2
290; SHRINK-WRAP-64-STATIC-NEXT:    nop
291; SHRINK-WRAP-64-STATIC-NEXT:  # %bb.1:
292; SHRINK-WRAP-64-STATIC-NEXT:    j .LBB1_3
293; SHRINK-WRAP-64-STATIC-NEXT:    nop
294; SHRINK-WRAP-64-STATIC-NEXT:  .LBB1_2: # %if.then
295; SHRINK-WRAP-64-STATIC-NEXT:    daddiu $sp, $sp, -16
296; SHRINK-WRAP-64-STATIC-NEXT:    .cfi_def_cfa_offset 16
297; SHRINK-WRAP-64-STATIC-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
298; SHRINK-WRAP-64-STATIC-NEXT:    .cfi_offset 31, -8
299; SHRINK-WRAP-64-STATIC-NEXT:    sll $4, $4, 0
300; SHRINK-WRAP-64-STATIC-NEXT:    #APP
301;
302; NO-SHRINK-WRAP-64-STATIC-LABEL: foo2:
303; NO-SHRINK-WRAP-64-STATIC:       # %bb.0:
304; NO-SHRINK-WRAP-64-STATIC-NEXT:    daddiu $sp, $sp, -16
305; NO-SHRINK-WRAP-64-STATIC-NEXT:    .cfi_def_cfa_offset 16
306; NO-SHRINK-WRAP-64-STATIC-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
307; NO-SHRINK-WRAP-64-STATIC-NEXT:    .cfi_offset 31, -8
308; NO-SHRINK-WRAP-64-STATIC-NEXT:    addiu $1, $zero, 4
309; NO-SHRINK-WRAP-64-STATIC-NEXT:    bne $4, $1, .LBB1_2
310; NO-SHRINK-WRAP-64-STATIC-NEXT:    nop
311; NO-SHRINK-WRAP-64-STATIC-NEXT:  # %bb.1:
312; NO-SHRINK-WRAP-64-STATIC-NEXT:    j .LBB1_3
313; NO-SHRINK-WRAP-64-STATIC-NEXT:    nop
314; NO-SHRINK-WRAP-64-STATIC-NEXT:  .LBB1_2: # %if.then
315; NO-SHRINK-WRAP-64-STATIC-NEXT:    sll $4, $4, 0
316; NO-SHRINK-WRAP-64-STATIC-NEXT:    #APP
317;
318; SHRINK-WRAP-64-PIC-LABEL: foo2:
319; SHRINK-WRAP-64-PIC:       # %bb.0:
320; SHRINK-WRAP-64-PIC-NEXT:    lui $1, %hi(%neg(%gp_rel(foo2)))
321; SHRINK-WRAP-64-PIC-NEXT:    daddu $2, $1, $25
322; SHRINK-WRAP-64-PIC-NEXT:    addiu $1, $zero, 4
323; SHRINK-WRAP-64-PIC-NEXT:    bne $4, $1, .LBB1_3
324; SHRINK-WRAP-64-PIC-NEXT:    nop
325; SHRINK-WRAP-64-PIC-NEXT:  # %bb.1:
326; SHRINK-WRAP-64-PIC-NEXT:    daddiu $sp, $sp, -16
327; SHRINK-WRAP-64-PIC-NEXT:    sd $ra, 0($sp)
328; SHRINK-WRAP-64-PIC-NEXT:    daddiu $1, $zero, %hi(.LBB1_4-.LBB1_2)
329; SHRINK-WRAP-64-PIC-NEXT:    dsll $1, $1, 16
330; SHRINK-WRAP-64-PIC-NEXT:    bal .LBB1_2
331; SHRINK-WRAP-64-PIC-NEXT:    daddiu $1, $1, %lo(.LBB1_4-.LBB1_2)
332; SHRINK-WRAP-64-PIC-NEXT:  .LBB1_2:
333; SHRINK-WRAP-64-PIC-NEXT:    daddu $1, $ra, $1
334; SHRINK-WRAP-64-PIC-NEXT:    ld $ra, 0($sp)
335; SHRINK-WRAP-64-PIC-NEXT:    jr $1
336; SHRINK-WRAP-64-PIC-NEXT:    daddiu $sp, $sp, 16
337; SHRINK-WRAP-64-PIC-NEXT:  .LBB1_3: # %if.then
338; SHRINK-WRAP-64-PIC-NEXT:    daddiu $sp, $sp, -16
339; SHRINK-WRAP-64-PIC-NEXT:    .cfi_def_cfa_offset 16
340; SHRINK-WRAP-64-PIC-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
341; SHRINK-WRAP-64-PIC-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
342; SHRINK-WRAP-64-PIC-NEXT:    .cfi_offset 31, -8
343; SHRINK-WRAP-64-PIC-NEXT:    .cfi_offset 28, -16
344; SHRINK-WRAP-64-PIC-NEXT:    daddiu $gp, $2, %lo(%neg(%gp_rel(foo2)))
345; SHRINK-WRAP-64-PIC-NEXT:    sll $4, $4, 0
346; SHRINK-WRAP-64-PIC-NEXT:    #APP
347;
348; NO-SHRINK-WRAP-64-PIC-LABEL: foo2:
349; NO-SHRINK-WRAP-64-PIC:       # %bb.0:
350; NO-SHRINK-WRAP-64-PIC-NEXT:    daddiu $sp, $sp, -16
351; NO-SHRINK-WRAP-64-PIC-NEXT:    .cfi_def_cfa_offset 16
352; NO-SHRINK-WRAP-64-PIC-NEXT:    sd $ra, 8($sp) # 8-byte Folded Spill
353; NO-SHRINK-WRAP-64-PIC-NEXT:    sd $gp, 0($sp) # 8-byte Folded Spill
354; NO-SHRINK-WRAP-64-PIC-NEXT:    .cfi_offset 31, -8
355; NO-SHRINK-WRAP-64-PIC-NEXT:    .cfi_offset 28, -16
356; NO-SHRINK-WRAP-64-PIC-NEXT:    lui $1, %hi(%neg(%gp_rel(foo2)))
357; NO-SHRINK-WRAP-64-PIC-NEXT:    daddu $2, $1, $25
358; NO-SHRINK-WRAP-64-PIC-NEXT:    addiu $1, $zero, 4
359; NO-SHRINK-WRAP-64-PIC-NEXT:    bne $4, $1, .LBB1_3
360; NO-SHRINK-WRAP-64-PIC-NEXT:    nop
361; NO-SHRINK-WRAP-64-PIC-NEXT:  # %bb.1:
362; NO-SHRINK-WRAP-64-PIC-NEXT:    daddiu $sp, $sp, -16
363; NO-SHRINK-WRAP-64-PIC-NEXT:    sd $ra, 0($sp)
364; NO-SHRINK-WRAP-64-PIC-NEXT:    daddiu $1, $zero, %hi(.LBB1_4-.LBB1_2)
365; NO-SHRINK-WRAP-64-PIC-NEXT:    dsll $1, $1, 16
366; NO-SHRINK-WRAP-64-PIC-NEXT:    bal .LBB1_2
367; NO-SHRINK-WRAP-64-PIC-NEXT:    daddiu $1, $1, %lo(.LBB1_4-.LBB1_2)
368; NO-SHRINK-WRAP-64-PIC-NEXT:  .LBB1_2:
369; NO-SHRINK-WRAP-64-PIC-NEXT:    daddu $1, $ra, $1
370; NO-SHRINK-WRAP-64-PIC-NEXT:    ld $ra, 0($sp)
371; NO-SHRINK-WRAP-64-PIC-NEXT:    jr $1
372; NO-SHRINK-WRAP-64-PIC-NEXT:    daddiu $sp, $sp, 16
373; NO-SHRINK-WRAP-64-PIC-NEXT:  .LBB1_3: # %if.then
374; NO-SHRINK-WRAP-64-PIC-NEXT:    daddiu $gp, $2, %lo(%neg(%gp_rel(foo2)))
375; NO-SHRINK-WRAP-64-PIC-NEXT:    sll $4, $4, 0
376; NO-SHRINK-WRAP-64-PIC-NEXT:    #APP
377  %1 = icmp ne i32 %a, 4
378  br i1 %1, label %if.then, label %if.end
379
380if.then:
381  call void asm sideeffect ".space 1048576", "~{$1}"()
382  call void @f(i32 signext %a)
383  br label %if.end
384
385if.end:
386  ret i32 0
387}
388