diff options
-rw-r--r-- | llvm/lib/Target/ARM/ARMInstrNEON.td | 2 | ||||
-rw-r--r-- | llvm/test/MC/ARM/armv8.2a-dotprod-error.s | 22 |
2 files changed, 23 insertions, 1 deletions
diff --git a/llvm/lib/Target/ARM/ARMInstrNEON.td b/llvm/lib/Target/ARM/ARMInstrNEON.td index 9c729bd2c9f..86c90efce2c 100644 --- a/llvm/lib/Target/ARM/ARMInstrNEON.td +++ b/llvm/lib/Target/ARM/ARMInstrNEON.td @@ -4710,7 +4710,7 @@ def VSDOTQ : N3Vnp<0b11000, 0b10, 0b1101, 0b1, 0b0, // Indexed dot product instructions: class DOTI<string opc, string dt, bit Q, bit U, RegisterClass Ty> : N3Vnp<0b11100, 0b10, 0b1101, Q, U, - (outs Ty:$Vd), (ins Ty:$Vn, DPR:$Vm, VectorIndex32:$lane), + (outs Ty:$Vd), (ins Ty:$Vn, DPR_VFP2:$Vm, VectorIndex32:$lane), N3RegFrm, IIC_VDOTPROD, opc, dt, []> { bit lane; let Inst{5} = lane; diff --git a/llvm/test/MC/ARM/armv8.2a-dotprod-error.s b/llvm/test/MC/ARM/armv8.2a-dotprod-error.s index 424fa5a12c9..c8497c30a00 100644 --- a/llvm/test/MC/ARM/armv8.2a-dotprod-error.s +++ b/llvm/test/MC/ARM/armv8.2a-dotprod-error.s @@ -3,12 +3,34 @@ // RUN: not llvm-mc -triple thumb -mattr=+dotprod -show-encoding < %s 2> %t // RUN: FileCheck --check-prefix=CHECK-ERROR < %t %s +// Only indices 0 an 1 should be accepted: + vudot.u8 d0, d1, d2[2] vsdot.s8 d0, d1, d2[2] vudot.u8 q0, q1, d4[2] vsdot.s8 q0, q1, d4[2] // CHECK-ERROR: error: invalid operand for instruction +// CHECK-ERROR: vudot.u8 d0, d1, d2[2] +// CHECK-ERROR: ^ +// CHECK-ERROR: error: invalid operand for instruction +// CHECK-ERROR: vsdot.s8 d0, d1, d2[2] +// CHECK-ERROR: ^ +// CHECK-ERROR: error: invalid operand for instruction +// CHECK-ERROR: vudot.u8 q0, q1, d4[2] +// CHECK-ERROR: ^ // CHECK-ERROR: error: invalid operand for instruction +// CHECK-ERROR: vsdot.s8 q0, q1, d4[2] +// CHECK-ERROR: ^ + +// Only the lower 16 D-registers should be accepted: + +vudot.u8 q0, q1, d16[0] +vsdot.s8 q0, q1, d16[0] + // CHECK-ERROR: error: invalid operand for instruction +// CHECK-ERROR: vudot.u8 q0, q1, d16[0] +// CHECK-ERROR: ^ // CHECK-ERROR: error: invalid operand for instruction +// CHECK-ERROR: vsdot.s8 q0, q1, d16[0] +// CHECK-ERROR: ^ |