|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
|
2 |
| -; RUN: llc -mtriple=aarch64-linux-gnu < %s | FileCheck %s |
| 2 | +; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2p1,+bf16 < %s | FileCheck %s --check-prefixes=CHECK,SVE |
| 3 | +; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sme2p1,+bf16 -force-streaming < %s | FileCheck %s --check-prefixes=CHECK,SME |
3 | 4 |
|
4 | 5 | define void @dupq_i8_256b(ptr %addr) #0 {
|
5 | 6 | ; CHECK-LABEL: dupq_i8_256b:
|
@@ -71,13 +72,43 @@ define void @dupq_f16_256b(ptr %addr) #0 {
|
71 | 72 | }
|
72 | 73 |
|
73 | 74 | define void @dupq_bf16_256b(ptr %addr) #0 {
|
74 |
| -; CHECK-LABEL: dupq_bf16_256b: |
75 |
| -; CHECK: // %bb.0: |
76 |
| -; CHECK-NEXT: ldp q0, q1, [x0] |
77 |
| -; CHECK-NEXT: dup v0.8h, v0.h[2] |
78 |
| -; CHECK-NEXT: dup v1.8h, v1.h[2] |
79 |
| -; CHECK-NEXT: stp q0, q1, [x0] |
80 |
| -; CHECK-NEXT: ret |
| 75 | +; SVE-LABEL: dupq_bf16_256b: |
| 76 | +; SVE: // %bb.0: |
| 77 | +; SVE-NEXT: ldp q0, q1, [x0] |
| 78 | +; SVE-NEXT: dup v0.8h, v0.h[2] |
| 79 | +; SVE-NEXT: dup v1.8h, v1.h[2] |
| 80 | +; SVE-NEXT: stp q0, q1, [x0] |
| 81 | +; SVE-NEXT: ret |
| 82 | +; |
| 83 | +; SME-LABEL: dupq_bf16_256b: |
| 84 | +; SME: // %bb.0: |
| 85 | +; SME-NEXT: ldp q1, q0, [x0] |
| 86 | +; SME-NEXT: str q0, [sp, #-64]! |
| 87 | +; SME-NEXT: .cfi_def_cfa_offset 64 |
| 88 | +; SME-NEXT: ldr h0, [sp, #4] |
| 89 | +; SME-NEXT: str q1, [sp, #32] |
| 90 | +; SME-NEXT: str h0, [sp, #30] |
| 91 | +; SME-NEXT: str h0, [sp, #28] |
| 92 | +; SME-NEXT: str h0, [sp, #26] |
| 93 | +; SME-NEXT: str h0, [sp, #24] |
| 94 | +; SME-NEXT: str h0, [sp, #22] |
| 95 | +; SME-NEXT: str h0, [sp, #20] |
| 96 | +; SME-NEXT: str h0, [sp, #18] |
| 97 | +; SME-NEXT: str h0, [sp, #16] |
| 98 | +; SME-NEXT: ldr h0, [sp, #36] |
| 99 | +; SME-NEXT: ldr q1, [sp, #16] |
| 100 | +; SME-NEXT: str h0, [sp, #62] |
| 101 | +; SME-NEXT: str h0, [sp, #60] |
| 102 | +; SME-NEXT: str h0, [sp, #58] |
| 103 | +; SME-NEXT: str h0, [sp, #56] |
| 104 | +; SME-NEXT: str h0, [sp, #54] |
| 105 | +; SME-NEXT: str h0, [sp, #52] |
| 106 | +; SME-NEXT: str h0, [sp, #50] |
| 107 | +; SME-NEXT: str h0, [sp, #48] |
| 108 | +; SME-NEXT: ldr q0, [sp, #48] |
| 109 | +; SME-NEXT: stp q0, q1, [x0] |
| 110 | +; SME-NEXT: add sp, sp, #64 |
| 111 | +; SME-NEXT: ret |
81 | 112 | %load = load <16 x bfloat>, ptr %addr
|
82 | 113 | %splat.lanes = shufflevector <16 x bfloat> %load, <16 x bfloat> poison, <16 x i32> <i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2, i32 2,
|
83 | 114 | i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10, i32 10>
|
@@ -112,4 +143,4 @@ define void @dupq_f64_256b(ptr %addr) #0 {
|
112 | 143 | ret void
|
113 | 144 | }
|
114 | 145 |
|
115 |
| -attributes #0 = { noinline vscale_range(2,2) "target-features"="+sve2p1,+bf16" } |
| 146 | +attributes #0 = { noinline vscale_range(2,2) } |
0 commit comments