|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4 |
2 | | -; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s |
| 2 | +; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck --check-prefix CHECK-NO-STRICT-ALIGN %s |
3 | 3 | ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve,+strict-align < %s | FileCheck %s |
4 | 4 |
|
5 | 5 | define void @nxv16i8(ptr %ldptr, ptr %stptr) { |
| 6 | +; CHECK-NO-STRICT-ALIGN-LABEL: nxv16i8: |
| 7 | +; CHECK-NO-STRICT-ALIGN: // %bb.0: |
| 8 | +; CHECK-NO-STRICT-ALIGN-NEXT: ldr z0, [x0] |
| 9 | +; CHECK-NO-STRICT-ALIGN-NEXT: str z0, [x1] |
| 10 | +; CHECK-NO-STRICT-ALIGN-NEXT: ret |
| 11 | +; |
6 | 12 | ; CHECK-LABEL: nxv16i8: |
7 | 13 | ; CHECK: // %bb.0: |
8 | | -; CHECK-NEXT: ldr z0, [x0] |
9 | | -; CHECK-NEXT: str z0, [x1] |
| 14 | +; CHECK-NEXT: ptrue p0.b |
| 15 | +; CHECK-NEXT: ld1b { z0.b }, p0/z, [x0] |
| 16 | +; CHECK-NEXT: st1b { z0.b }, p0, [x1] |
10 | 17 | ; CHECK-NEXT: ret |
11 | 18 | %l3 = load <vscale x 16 x i8>, ptr %ldptr, align 1 |
12 | 19 | store <vscale x 16 x i8> %l3, ptr %stptr, align 1 |
13 | 20 | ret void |
14 | 21 | } |
15 | 22 |
|
16 | 23 | define void @nxv8i16(ptr %ldptr, ptr %stptr) { |
| 24 | +; CHECK-NO-STRICT-ALIGN-LABEL: nxv8i16: |
| 25 | +; CHECK-NO-STRICT-ALIGN: // %bb.0: |
| 26 | +; CHECK-NO-STRICT-ALIGN-NEXT: ldr z0, [x0] |
| 27 | +; CHECK-NO-STRICT-ALIGN-NEXT: str z0, [x1] |
| 28 | +; CHECK-NO-STRICT-ALIGN-NEXT: ret |
| 29 | +; |
17 | 30 | ; CHECK-LABEL: nxv8i16: |
18 | 31 | ; CHECK: // %bb.0: |
19 | | -; CHECK-NEXT: ldr z0, [x0] |
20 | | -; CHECK-NEXT: str z0, [x1] |
| 32 | +; CHECK-NEXT: ptrue p0.h |
| 33 | +; CHECK-NEXT: ld1h { z0.h }, p0/z, [x0] |
| 34 | +; CHECK-NEXT: st1h { z0.h }, p0, [x1] |
21 | 35 | ; CHECK-NEXT: ret |
22 | 36 | %l3 = load <vscale x 8 x i16>, ptr %ldptr, align 2 |
23 | 37 | store <vscale x 8 x i16> %l3, ptr %stptr, align 2 |
24 | 38 | ret void |
25 | 39 | } |
26 | 40 |
|
27 | 41 | define void @nxv4i32(ptr %ldptr, ptr %stptr) { |
| 42 | +; CHECK-NO-STRICT-ALIGN-LABEL: nxv4i32: |
| 43 | +; CHECK-NO-STRICT-ALIGN: // %bb.0: |
| 44 | +; CHECK-NO-STRICT-ALIGN-NEXT: ldr z0, [x0] |
| 45 | +; CHECK-NO-STRICT-ALIGN-NEXT: str z0, [x1] |
| 46 | +; CHECK-NO-STRICT-ALIGN-NEXT: ret |
| 47 | +; |
28 | 48 | ; CHECK-LABEL: nxv4i32: |
29 | 49 | ; CHECK: // %bb.0: |
30 | | -; CHECK-NEXT: ldr z0, [x0] |
31 | | -; CHECK-NEXT: str z0, [x1] |
| 50 | +; CHECK-NEXT: ptrue p0.s |
| 51 | +; CHECK-NEXT: ld1w { z0.s }, p0/z, [x0] |
| 52 | +; CHECK-NEXT: st1w { z0.s }, p0, [x1] |
32 | 53 | ; CHECK-NEXT: ret |
33 | 54 | %l3 = load <vscale x 4 x i32>, ptr %ldptr, align 4 |
34 | 55 | store <vscale x 4 x i32> %l3, ptr %stptr, align 4 |
35 | 56 | ret void |
36 | 57 | } |
37 | 58 |
|
38 | 59 | define void @nxv2i64(ptr %ldptr, ptr %stptr) { |
| 60 | +; CHECK-NO-STRICT-ALIGN-LABEL: nxv2i64: |
| 61 | +; CHECK-NO-STRICT-ALIGN: // %bb.0: |
| 62 | +; CHECK-NO-STRICT-ALIGN-NEXT: ldr z0, [x0] |
| 63 | +; CHECK-NO-STRICT-ALIGN-NEXT: str z0, [x1] |
| 64 | +; CHECK-NO-STRICT-ALIGN-NEXT: ret |
| 65 | +; |
39 | 66 | ; CHECK-LABEL: nxv2i64: |
40 | 67 | ; CHECK: // %bb.0: |
41 | | -; CHECK-NEXT: ldr z0, [x0] |
42 | | -; CHECK-NEXT: str z0, [x1] |
| 68 | +; CHECK-NEXT: ptrue p0.d |
| 69 | +; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] |
| 70 | +; CHECK-NEXT: st1d { z0.d }, p0, [x1] |
43 | 71 | ; CHECK-NEXT: ret |
44 | 72 | %l3 = load <vscale x 2 x i64>, ptr %ldptr, align 8 |
45 | 73 | store <vscale x 2 x i64> %l3, ptr %stptr, align 8 |
46 | 74 | ret void |
47 | 75 | } |
48 | 76 |
|
49 | 77 | define void @nxv16i1(ptr %ldptr, ptr %stptr) { |
| 78 | +; CHECK-NO-STRICT-ALIGN-LABEL: nxv16i1: |
| 79 | +; CHECK-NO-STRICT-ALIGN: // %bb.0: |
| 80 | +; CHECK-NO-STRICT-ALIGN-NEXT: ldr p0, [x0] |
| 81 | +; CHECK-NO-STRICT-ALIGN-NEXT: str p0, [x1] |
| 82 | +; CHECK-NO-STRICT-ALIGN-NEXT: ret |
| 83 | +; |
50 | 84 | ; CHECK-LABEL: nxv16i1: |
51 | 85 | ; CHECK: // %bb.0: |
52 | 86 | ; CHECK-NEXT: ldr p0, [x0] |
|
0 commit comments