1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=corei7 | FileCheck %s
3 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=znver1 | FileCheck --check-prefix=CHECK-AMD %s
5 ; Check that we get a fast sequence of nops on each platform.
7 define void @nop_test() {
8 ; CHECK-LABEL: nop_test:
9 ; CHECK: ## %bb.0: ## %entry
10 ; CHECK-NEXT: pushq %rbp
11 ; CHECK-NEXT: .cfi_def_cfa_offset 16
12 ; CHECK-NEXT: .cfi_offset %rbp, -16
13 ; CHECK-NEXT: movq %rsp, %rbp
14 ; CHECK-NEXT: .cfi_def_cfa_register %rbp
19 ; CHECK-NEXT: xchgw %ax, %ax
21 ; CHECK-NEXT: nopl (%rax)
23 ; CHECK-NEXT: nopl 8(%rax)
25 ; CHECK-NEXT: nopl 8(%rax,%rax)
27 ; CHECK-NEXT: nopw 8(%rax,%rax)
29 ; CHECK-NEXT: nopl 512(%rax)
31 ; CHECK-NEXT: nopl 512(%rax,%rax)
33 ; CHECK-NEXT: nopw 512(%rax,%rax)
35 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
37 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
40 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
41 ; CHECK-NEXT: xchgw %ax, %ax
43 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
44 ; CHECK-NEXT: nopl (%rax)
46 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
47 ; CHECK-NEXT: nopl 8(%rax)
49 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
50 ; CHECK-NEXT: nopl 8(%rax,%rax)
52 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
53 ; CHECK-NEXT: nopw 8(%rax,%rax)
55 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
56 ; CHECK-NEXT: nopl 512(%rax)
58 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
59 ; CHECK-NEXT: nopl 512(%rax,%rax)
61 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
62 ; CHECK-NEXT: nopw 512(%rax,%rax)
64 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
65 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
67 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
68 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
71 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
72 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
73 ; CHECK-NEXT: xchgw %ax, %ax
75 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
76 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
77 ; CHECK-NEXT: nopl (%rax)
79 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
80 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
81 ; CHECK-NEXT: nopl 8(%rax)
83 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
84 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
85 ; CHECK-NEXT: nopl 8(%rax,%rax)
87 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
88 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
89 ; CHECK-NEXT: nopw 8(%rax,%rax)
91 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
92 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
93 ; CHECK-NEXT: nopl 512(%rax)
95 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
96 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
97 ; CHECK-NEXT: nopl 512(%rax,%rax)
99 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
100 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
101 ; CHECK-NEXT: nopw 512(%rax,%rax)
102 ; CHECK-NEXT: Ltmp30:
103 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
104 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
105 ; CHECK-NEXT: nopw %cs:512(%rax,%rax)
106 ; CHECK-NEXT: Ltmp31:
107 ; CHECK-NEXT: popq %rbp
110 ; CHECK-AMD-LABEL: nop_test:
111 ; CHECK-AMD: ## %bb.0: ## %entry
112 ; CHECK-AMD-NEXT: pushq %rbp
113 ; CHECK-AMD-NEXT: .cfi_def_cfa_offset 16
114 ; CHECK-AMD-NEXT: .cfi_offset %rbp, -16
115 ; CHECK-AMD-NEXT: movq %rsp, %rbp
116 ; CHECK-AMD-NEXT: .cfi_def_cfa_register %rbp
117 ; CHECK-AMD-NEXT: Ltmp0:
118 ; CHECK-AMD-NEXT: Ltmp1:
119 ; CHECK-AMD-NEXT: nop
120 ; CHECK-AMD-NEXT: Ltmp2:
121 ; CHECK-AMD-NEXT: xchgw %ax, %ax
122 ; CHECK-AMD-NEXT: Ltmp3:
123 ; CHECK-AMD-NEXT: nopl (%rax)
124 ; CHECK-AMD-NEXT: Ltmp4:
125 ; CHECK-AMD-NEXT: nopl 8(%rax)
126 ; CHECK-AMD-NEXT: Ltmp5:
127 ; CHECK-AMD-NEXT: nopl 8(%rax,%rax)
128 ; CHECK-AMD-NEXT: Ltmp6:
129 ; CHECK-AMD-NEXT: nopw 8(%rax,%rax)
130 ; CHECK-AMD-NEXT: Ltmp7:
131 ; CHECK-AMD-NEXT: nopl 512(%rax)
132 ; CHECK-AMD-NEXT: Ltmp8:
133 ; CHECK-AMD-NEXT: nopl 512(%rax,%rax)
134 ; CHECK-AMD-NEXT: Ltmp9:
135 ; CHECK-AMD-NEXT: nopw 512(%rax,%rax)
136 ; CHECK-AMD-NEXT: Ltmp10:
137 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
138 ; CHECK-AMD-NEXT: Ltmp11:
139 ; CHECK-AMD-NEXT: .byte 102
140 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
141 ; CHECK-AMD-NEXT: Ltmp12:
142 ; CHECK-AMD-NEXT: .byte 102
143 ; CHECK-AMD-NEXT: .byte 102
144 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
145 ; CHECK-AMD-NEXT: Ltmp13:
146 ; CHECK-AMD-NEXT: .byte 102
147 ; CHECK-AMD-NEXT: .byte 102
148 ; CHECK-AMD-NEXT: .byte 102
149 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
150 ; CHECK-AMD-NEXT: Ltmp14:
151 ; CHECK-AMD-NEXT: .byte 102
152 ; CHECK-AMD-NEXT: .byte 102
153 ; CHECK-AMD-NEXT: .byte 102
154 ; CHECK-AMD-NEXT: .byte 102
155 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
156 ; CHECK-AMD-NEXT: Ltmp15:
157 ; CHECK-AMD-NEXT: .byte 102
158 ; CHECK-AMD-NEXT: .byte 102
159 ; CHECK-AMD-NEXT: .byte 102
160 ; CHECK-AMD-NEXT: .byte 102
161 ; CHECK-AMD-NEXT: .byte 102
162 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
163 ; CHECK-AMD-NEXT: Ltmp16:
164 ; CHECK-AMD-NEXT: .byte 102
165 ; CHECK-AMD-NEXT: .byte 102
166 ; CHECK-AMD-NEXT: .byte 102
167 ; CHECK-AMD-NEXT: .byte 102
168 ; CHECK-AMD-NEXT: .byte 102
169 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
170 ; CHECK-AMD-NEXT: nop
171 ; CHECK-AMD-NEXT: Ltmp17:
172 ; CHECK-AMD-NEXT: .byte 102
173 ; CHECK-AMD-NEXT: .byte 102
174 ; CHECK-AMD-NEXT: .byte 102
175 ; CHECK-AMD-NEXT: .byte 102
176 ; CHECK-AMD-NEXT: .byte 102
177 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
178 ; CHECK-AMD-NEXT: xchgw %ax, %ax
179 ; CHECK-AMD-NEXT: Ltmp18:
180 ; CHECK-AMD-NEXT: .byte 102
181 ; CHECK-AMD-NEXT: .byte 102
182 ; CHECK-AMD-NEXT: .byte 102
183 ; CHECK-AMD-NEXT: .byte 102
184 ; CHECK-AMD-NEXT: .byte 102
185 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
186 ; CHECK-AMD-NEXT: nopl (%rax)
187 ; CHECK-AMD-NEXT: Ltmp19:
188 ; CHECK-AMD-NEXT: .byte 102
189 ; CHECK-AMD-NEXT: .byte 102
190 ; CHECK-AMD-NEXT: .byte 102
191 ; CHECK-AMD-NEXT: .byte 102
192 ; CHECK-AMD-NEXT: .byte 102
193 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
194 ; CHECK-AMD-NEXT: nopl 8(%rax)
195 ; CHECK-AMD-NEXT: Ltmp20:
196 ; CHECK-AMD-NEXT: .byte 102
197 ; CHECK-AMD-NEXT: .byte 102
198 ; CHECK-AMD-NEXT: .byte 102
199 ; CHECK-AMD-NEXT: .byte 102
200 ; CHECK-AMD-NEXT: .byte 102
201 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
202 ; CHECK-AMD-NEXT: nopl 8(%rax,%rax)
203 ; CHECK-AMD-NEXT: Ltmp21:
204 ; CHECK-AMD-NEXT: .byte 102
205 ; CHECK-AMD-NEXT: .byte 102
206 ; CHECK-AMD-NEXT: .byte 102
207 ; CHECK-AMD-NEXT: .byte 102
208 ; CHECK-AMD-NEXT: .byte 102
209 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
210 ; CHECK-AMD-NEXT: nopw 8(%rax,%rax)
211 ; CHECK-AMD-NEXT: Ltmp22:
212 ; CHECK-AMD-NEXT: .byte 102
213 ; CHECK-AMD-NEXT: .byte 102
214 ; CHECK-AMD-NEXT: .byte 102
215 ; CHECK-AMD-NEXT: .byte 102
216 ; CHECK-AMD-NEXT: .byte 102
217 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
218 ; CHECK-AMD-NEXT: nopl 512(%rax)
219 ; CHECK-AMD-NEXT: Ltmp23:
220 ; CHECK-AMD-NEXT: .byte 102
221 ; CHECK-AMD-NEXT: .byte 102
222 ; CHECK-AMD-NEXT: .byte 102
223 ; CHECK-AMD-NEXT: .byte 102
224 ; CHECK-AMD-NEXT: .byte 102
225 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
226 ; CHECK-AMD-NEXT: nopl 512(%rax,%rax)
227 ; CHECK-AMD-NEXT: Ltmp24:
228 ; CHECK-AMD-NEXT: .byte 102
229 ; CHECK-AMD-NEXT: .byte 102
230 ; CHECK-AMD-NEXT: .byte 102
231 ; CHECK-AMD-NEXT: .byte 102
232 ; CHECK-AMD-NEXT: .byte 102
233 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
234 ; CHECK-AMD-NEXT: nopw 512(%rax,%rax)
235 ; CHECK-AMD-NEXT: Ltmp25:
236 ; CHECK-AMD-NEXT: .byte 102
237 ; CHECK-AMD-NEXT: .byte 102
238 ; CHECK-AMD-NEXT: .byte 102
239 ; CHECK-AMD-NEXT: .byte 102
240 ; CHECK-AMD-NEXT: .byte 102
241 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
242 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
243 ; CHECK-AMD-NEXT: Ltmp26:
244 ; CHECK-AMD-NEXT: .byte 102
245 ; CHECK-AMD-NEXT: .byte 102
246 ; CHECK-AMD-NEXT: .byte 102
247 ; CHECK-AMD-NEXT: .byte 102
248 ; CHECK-AMD-NEXT: .byte 102
249 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
250 ; CHECK-AMD-NEXT: .byte 102
251 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
252 ; CHECK-AMD-NEXT: Ltmp27:
253 ; CHECK-AMD-NEXT: .byte 102
254 ; CHECK-AMD-NEXT: .byte 102
255 ; CHECK-AMD-NEXT: .byte 102
256 ; CHECK-AMD-NEXT: .byte 102
257 ; CHECK-AMD-NEXT: .byte 102
258 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
259 ; CHECK-AMD-NEXT: .byte 102
260 ; CHECK-AMD-NEXT: .byte 102
261 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
262 ; CHECK-AMD-NEXT: Ltmp28:
263 ; CHECK-AMD-NEXT: .byte 102
264 ; CHECK-AMD-NEXT: .byte 102
265 ; CHECK-AMD-NEXT: .byte 102
266 ; CHECK-AMD-NEXT: .byte 102
267 ; CHECK-AMD-NEXT: .byte 102
268 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
269 ; CHECK-AMD-NEXT: .byte 102
270 ; CHECK-AMD-NEXT: .byte 102
271 ; CHECK-AMD-NEXT: .byte 102
272 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
273 ; CHECK-AMD-NEXT: Ltmp29:
274 ; CHECK-AMD-NEXT: .byte 102
275 ; CHECK-AMD-NEXT: .byte 102
276 ; CHECK-AMD-NEXT: .byte 102
277 ; CHECK-AMD-NEXT: .byte 102
278 ; CHECK-AMD-NEXT: .byte 102
279 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
280 ; CHECK-AMD-NEXT: .byte 102
281 ; CHECK-AMD-NEXT: .byte 102
282 ; CHECK-AMD-NEXT: .byte 102
283 ; CHECK-AMD-NEXT: .byte 102
284 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
285 ; CHECK-AMD-NEXT: Ltmp30:
286 ; CHECK-AMD-NEXT: .byte 102
287 ; CHECK-AMD-NEXT: .byte 102
288 ; CHECK-AMD-NEXT: .byte 102
289 ; CHECK-AMD-NEXT: .byte 102
290 ; CHECK-AMD-NEXT: .byte 102
291 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
292 ; CHECK-AMD-NEXT: .byte 102
293 ; CHECK-AMD-NEXT: .byte 102
294 ; CHECK-AMD-NEXT: .byte 102
295 ; CHECK-AMD-NEXT: .byte 102
296 ; CHECK-AMD-NEXT: .byte 102
297 ; CHECK-AMD-NEXT: nopw %cs:512(%rax,%rax)
298 ; CHECK-AMD-NEXT: Ltmp31:
299 ; CHECK-AMD-NEXT: popq %rbp
300 ; CHECK-AMD-NEXT: retq
302 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 0, i32 0)
303 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 1, i32 1)
304 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 2, i32 2)
305 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 3, i32 3)
306 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 4, i32 4)
307 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 5, i32 5)
308 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 6, i32 6)
309 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 7, i32 7)
310 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 8, i32 8)
311 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 9, i32 9)
312 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 10, i32 10)
313 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 11, i32 11)
314 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 12, i32 12)
315 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 13, i32 13)
316 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 14, i32 14)
317 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 15, i32 15)
318 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 16, i32 16)
319 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 17, i32 17)
320 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 18, i32 18)
321 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 19, i32 19)
322 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 20, i32 20)
323 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 21, i32 21)
324 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 22, i32 22)
325 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 23, i32 23)
326 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 24, i32 24)
327 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 25, i32 25)
328 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 26, i32 26)
329 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 27, i32 27)
330 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 28, i32 28)
331 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 29, i32 29)
332 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 30, i32 30)
333 ; Add an extra stackmap with a zero-length shadow to thwart the shadow
334 ; optimization. This will force all 15 bytes of the previous shadow to be
336 tail call void (i64, i32, ...) @llvm.experimental.stackmap(i64 31, i32 0)
340 declare void @llvm.experimental.stackmap(i64, i32, ...)