diff --git a/llvm/lib/Target/AArch64/SMEInstrFormats.td b/llvm/lib/Target/AArch64/SMEInstrFormats.td --- a/llvm/lib/Target/AArch64/SMEInstrFormats.td +++ b/llvm/lib/Target/AArch64/SMEInstrFormats.td @@ -2766,7 +2766,7 @@ string mnemonic> : I<(outs tile_ty:$ZAd), (ins tile_ty:$_ZAd, MatrixIndexGPR32Op12_15:$Rs, index_ty:$imm, vector_ty:$Zn), - mnemonic, "\t$ZAd[$Rs, $imm, vgx2], $Zn", + mnemonic, "\t$ZAd[$Rs, $imm], $Zn", "", []>, Sched<[]> { bits<2> Rs; bits<4> Zn; @@ -2927,7 +2927,7 @@ (ins tile_ty:$_ZAd, MatrixIndexGPR32Op12_15:$Rs, index_ty:$imm, vector_ty:$Zn), mnemonic, - "\t$ZAd[$Rs, $imm, vgx4], $Zn", + "\t$ZAd[$Rs, $imm], $Zn", "", []>, Sched<[]> { bits<2> Rs; bits<3> Zn; @@ -3248,7 +3248,7 @@ : I, Sched<[]> { bits<4> Zd; bits<2> Rs; @@ -3445,7 +3445,7 @@ : I, Sched<[]> { bits<3> Zd; bits<2> Rs; diff --git a/llvm/test/MC/AArch64/SME2/mova-diagnostics.s b/llvm/test/MC/AArch64/SME2/mova-diagnostics.s --- a/llvm/test/MC/AArch64/SME2/mova-diagnostics.s +++ b/llvm/test/MC/AArch64/SME2/mova-diagnostics.s @@ -71,3 +71,47 @@ // CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid matrix operand, expected suffix .h // CHECK-NEXT: mov {z0.h-z3.h}, za.d[w8, 0] // CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + + +// --------------------------------------------------------------------------// +// Tile-to-vector and vector-to-tile should not accept the VG suffix + +mov za0h.b[w12, 0:1, vgx2], { z0.b, z1.b } +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction +// CHECK-NEXT: mov za0h.b[w12, 0:1, vgx2], { z0.b, z1.b } +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +mov { z0.b, z1.b }, za0h.b[w12, 0:1, vgx2] +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction +// CHECK-NEXT: mov { z0.b, z1.b }, za0h.b[w12, 0:1, vgx2] +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +mov za0h.b[w12, 0:3, vgx4], { z0.b - z3.b } +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction +// CHECK-NEXT: mov za0h.b[w12, 0:3, vgx4], { z0.b - z3.b } +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +mov { z0.b - z3.b }, za0h.b[w12, 0:3, vgx4] +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction +// CHECK-NEXT: mov { z0.b - z3.b }, za0h.b[w12, 0:3, vgx4] +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +mova za0h.b[w12, 0:1, vgx2], { z0.b, z1.b } +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction +// CHECK-NEXT: mova za0h.b[w12, 0:1, vgx2], { z0.b, z1.b } +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +mova { z0.b, z1.b }, za0h.b[w12, 0:1, vgx2] +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction +// CHECK-NEXT: mova { z0.b, z1.b }, za0h.b[w12, 0:1, vgx2] +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +mova za0h.b[w12, 0:3, vgx4], { z0.b - z3.b } +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction +// CHECK-NEXT: mova za0h.b[w12, 0:3, vgx4], { z0.b - z3.b } +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: + +mova { z0.b - z3.b }, za0h.b[w12, 0:3, vgx4] +// CHECK: [[@LINE-1]]:{{[0-9]+}}: error: invalid operand for instruction +// CHECK-NEXT: mova { z0.b - z3.b }, za0h.b[w12, 0:3, vgx4] +// CHECK-NOT: [[@LINE-1]]:{{[0-9]+}}: