|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 | 2 | ; RUN: llc < %s -mtriple=aarch64-eabi -aarch64-neon-syntax=apple | FileCheck %s --check-prefixes=CHECK,CHECK-SD
|
3 |
| -; RUN: llc < %s -mtriple=aarch64-eabi -aarch64-neon-syntax=apple -global-isel -global-isel-abort=2 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI |
4 |
| - |
5 |
| -; CHECK-GI: warning: Instruction selection used fallback path for test_vrev64D8 |
6 |
| -; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vrev64D16 |
7 |
| -; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vrev32D8 |
8 |
| -; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vrev32D16 |
9 |
| -; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vrev16D8 |
10 |
| -; CHECK-GI-NEXT: warning: Instruction selection used fallback path for test_vrev64D8_undef |
| 3 | +; RUN: llc < %s -mtriple=aarch64-eabi -aarch64-neon-syntax=apple -global-isel | FileCheck %s --check-prefixes=CHECK,CHECK-GI |
11 | 4 |
|
12 | 5 | define i32 @test_rev_w(i32 %a) nounwind {
|
13 | 6 | ; CHECK-LABEL: test_rev_w:
|
@@ -303,22 +296,42 @@ define <4 x float> @test_vrev64Qf(ptr %A) nounwind {
|
303 | 296 | }
|
304 | 297 |
|
305 | 298 | define <8 x i8> @test_vrev32D8(ptr %A) nounwind {
|
306 |
| -; CHECK-LABEL: test_vrev32D8: |
307 |
| -; CHECK: // %bb.0: |
308 |
| -; CHECK-NEXT: ldr d0, [x0] |
309 |
| -; CHECK-NEXT: rev32.8b v0, v0 |
310 |
| -; CHECK-NEXT: ret |
| 299 | +; CHECK-SD-LABEL: test_vrev32D8: |
| 300 | +; CHECK-SD: // %bb.0: |
| 301 | +; CHECK-SD-NEXT: ldr d0, [x0] |
| 302 | +; CHECK-SD-NEXT: rev32.8b v0, v0 |
| 303 | +; CHECK-SD-NEXT: ret |
| 304 | +; |
| 305 | +; CHECK-GI-LABEL: test_vrev32D8: |
| 306 | +; CHECK-GI: // %bb.0: |
| 307 | +; CHECK-GI-NEXT: ldr d0, [x0] |
| 308 | +; CHECK-GI-NEXT: adrp x8, .LCPI19_0 |
| 309 | +; CHECK-GI-NEXT: mov.d v0[1], v0[0] |
| 310 | +; CHECK-GI-NEXT: ldr d1, [x8, :lo12:.LCPI19_0] |
| 311 | +; CHECK-GI-NEXT: tbl.16b v0, { v0 }, v1 |
| 312 | +; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0 |
| 313 | +; CHECK-GI-NEXT: ret |
311 | 314 | %tmp1 = load <8 x i8>, ptr %A
|
312 | 315 | %tmp2 = shufflevector <8 x i8> %tmp1, <8 x i8> undef, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4>
|
313 | 316 | ret <8 x i8> %tmp2
|
314 | 317 | }
|
315 | 318 |
|
316 | 319 | define <4 x i16> @test_vrev32D16(ptr %A) nounwind {
|
317 |
| -; CHECK-LABEL: test_vrev32D16: |
318 |
| -; CHECK: // %bb.0: |
319 |
| -; CHECK-NEXT: ldr d0, [x0] |
320 |
| -; CHECK-NEXT: rev32.4h v0, v0 |
321 |
| -; CHECK-NEXT: ret |
| 320 | +; CHECK-SD-LABEL: test_vrev32D16: |
| 321 | +; CHECK-SD: // %bb.0: |
| 322 | +; CHECK-SD-NEXT: ldr d0, [x0] |
| 323 | +; CHECK-SD-NEXT: rev32.4h v0, v0 |
| 324 | +; CHECK-SD-NEXT: ret |
| 325 | +; |
| 326 | +; CHECK-GI-LABEL: test_vrev32D16: |
| 327 | +; CHECK-GI: // %bb.0: |
| 328 | +; CHECK-GI-NEXT: ldr d0, [x0] |
| 329 | +; CHECK-GI-NEXT: adrp x8, .LCPI20_0 |
| 330 | +; CHECK-GI-NEXT: mov.d v0[1], v0[0] |
| 331 | +; CHECK-GI-NEXT: ldr d1, [x8, :lo12:.LCPI20_0] |
| 332 | +; CHECK-GI-NEXT: tbl.16b v0, { v0 }, v1 |
| 333 | +; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0 |
| 334 | +; CHECK-GI-NEXT: ret |
322 | 335 | %tmp1 = load <4 x i16>, ptr %A
|
323 | 336 | %tmp2 = shufflevector <4 x i16> %tmp1, <4 x i16> undef, <4 x i32> <i32 1, i32 0, i32 3, i32 2>
|
324 | 337 | ret <4 x i16> %tmp2
|
@@ -363,11 +376,21 @@ define <8 x i16> @test_vrev32Q16(ptr %A) nounwind {
|
363 | 376 | }
|
364 | 377 |
|
365 | 378 | define <8 x i8> @test_vrev16D8(ptr %A) nounwind {
|
366 |
| -; CHECK-LABEL: test_vrev16D8: |
367 |
| -; CHECK: // %bb.0: |
368 |
| -; CHECK-NEXT: ldr d0, [x0] |
369 |
| -; CHECK-NEXT: rev16.8b v0, v0 |
370 |
| -; CHECK-NEXT: ret |
| 379 | +; CHECK-SD-LABEL: test_vrev16D8: |
| 380 | +; CHECK-SD: // %bb.0: |
| 381 | +; CHECK-SD-NEXT: ldr d0, [x0] |
| 382 | +; CHECK-SD-NEXT: rev16.8b v0, v0 |
| 383 | +; CHECK-SD-NEXT: ret |
| 384 | +; |
| 385 | +; CHECK-GI-LABEL: test_vrev16D8: |
| 386 | +; CHECK-GI: // %bb.0: |
| 387 | +; CHECK-GI-NEXT: ldr d0, [x0] |
| 388 | +; CHECK-GI-NEXT: adrp x8, .LCPI23_0 |
| 389 | +; CHECK-GI-NEXT: mov.d v0[1], v0[0] |
| 390 | +; CHECK-GI-NEXT: ldr d1, [x8, :lo12:.LCPI23_0] |
| 391 | +; CHECK-GI-NEXT: tbl.16b v0, { v0 }, v1 |
| 392 | +; CHECK-GI-NEXT: // kill: def $d0 killed $d0 killed $q0 |
| 393 | +; CHECK-GI-NEXT: ret |
371 | 394 | %tmp1 = load <8 x i8>, ptr %A
|
372 | 395 | %tmp2 = shufflevector <8 x i8> %tmp1, <8 x i8> undef, <8 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6>
|
373 | 396 | ret <8 x i8> %tmp2
|
|
0 commit comments