Skip to content

Commit dc10ff2

Browse files
c-rhodeststellar
authored andcommitted
[AArch64][SME] Fix imm bug in mov vector to tile aliases
Also fixes a warning mentioned in D109359. Reviewed By: sdesmalen Differential Revision: https://reviews.llvm.org/D109363 (cherry picked from commit 89786c2)
1 parent b77c810 commit dc10ff2

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

llvm/lib/Target/AArch64/SMEInstrFormats.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,7 @@ multiclass sme_vector_to_tile_aliases<Instruction inst,
480480
MatrixTileVectorOperand tile_ty,
481481
ZPRRegOp zpr_ty, Operand imm_ty> {
482482
def : InstAlias<"mov\t$ZAd[$Rv, $imm], $Pg/m, $Zn",
483-
(inst tile_ty:$ZAd, MatrixIndexGPR32Op12_15:$Rv, imm0_15:$imm, PPR3bAny:$Pg, zpr_ty:$Zn), 1>;
483+
(inst tile_ty:$ZAd, MatrixIndexGPR32Op12_15:$Rv, imm_ty:$imm, PPR3bAny:$Pg, zpr_ty:$Zn), 1>;
484484
}
485485

486486
multiclass sme_vector_v_to_tile<string mnemonic, bit is_col> {

llvm/test/MC/AArch64/SME/mova-diagnostics.s

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,31 @@ mova z0.q, p0/m, za0h.q[w12, #0]
158158
// CHECK-NEXT: mova z0.q, p0/m, za0h.q[w12, #0]
159159
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
160160

161+
mov z0.b, p0/m, za0h.b[w12, #16]
162+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 15].
163+
// CHECK-NEXT: mov z0.b, p0/m, za0h.b[w12, #16]
164+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
165+
166+
mov z0.h, p0/m, za0h.h[w12, #8]
167+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7].
168+
// CHECK-NEXT: mov z0.h, p0/m, za0h.h[w12, #8]
169+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
170+
171+
mov z0.s, p0/m, za0h.s[w12, #4]
172+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 3].
173+
// CHECK-NEXT: mov z0.s, p0/m, za0h.s[w12, #4]
174+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
175+
176+
mov z0.d, p0/m, za0h.d[w12, #2]
177+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 1].
178+
// CHECK-NEXT: mov z0.d, p0/m, za0h.d[w12, #2]
179+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
180+
181+
mov z0.q, p0/m, za0h.q[w12, #0]
182+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
183+
// CHECK-NEXT: mov z0.q, p0/m, za0h.q[w12, #0]
184+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
185+
161186
// vector-to-tile
162187

163188
mova za0h.b[w12, #16], p0/m, z0.b
@@ -185,6 +210,31 @@ mova za0h.q[w12, #0], p0/m, z0.q
185210
// CHECK-NEXT: mova za0h.q[w12, #0], p0/m, z0.q
186211
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
187212

213+
mov za0h.b[w12, #16], p0/m, z0.b
214+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 15].
215+
// CHECK-NEXT: mov za0h.b[w12, #16], p0/m, z0.b
216+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
217+
218+
mov za0h.h[w12, #8], p0/m, z0.h
219+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 7].
220+
// CHECK-NEXT: mov za0h.h[w12, #8], p0/m, z0.h
221+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
222+
223+
mov za0h.s[w12, #4], p0/m, z0.s
224+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 3].
225+
// CHECK-NEXT: mov za0h.s[w12, #4], p0/m, z0.s
226+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
227+
228+
mov za0h.d[w12, #2], p0/m, z0.d
229+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: immediate must be an integer in range [0, 1].
230+
// CHECK-NEXT: mov za0h.d[w12, #2], p0/m, z0.d
231+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
232+
233+
mov za0h.q[w12, #0], p0/m, z0.q
234+
// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction
235+
// CHECK-NEXT: mov za0h.q[w12, #0], p0/m, z0.q
236+
// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}:
237+
188238
// ------------------------------------------------------------------------- //
189239
// Invalid ZPR element width
190240

0 commit comments

Comments
 (0)