OSDN Git Service

[MIPS GlobalISel] Select global address
[android-x86/external-llvm.git] / test / CodeGen / Mips / shrink-wrapping.ll
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 < %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 < %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 < %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 < %s | \
33 ; RUN:   FileCheck %s -check-prefix=NO-SHRINK-WRAP-64-PIC
34
35 declare void @f(i32 signext)
36
37 define 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
191 entry:
192   %cmp = icmp eq i32 %a, 0
193   br i1 %cmp, label %return, label %if.end
194
195 if.end:
196   %add = add nsw i32 %a, 1
197   tail call void @f(i32 signext %add)
198   br label %return
199
200 return:
201   ret i32 0
202 }
203
204 ; Test that long branch expansion works correctly with shrink-wrapping enabled.
205 define 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
380 if.then:
381   call void asm sideeffect ".space 1048576", "~{$1}"()
382   call void @f(i32 signext %a)
383   br label %if.end
384
385 if.end:
386   ret i32 0
387 }