summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/ARM/AsmParser
diff options
context:
space:
mode:
authorMikhail Maltsev <mikhail.maltsev@arm.com>2019-07-08 09:44:52 +0000
committerMikhail Maltsev <mikhail.maltsev@arm.com>2019-07-08 09:44:52 +0000
commitee81051fc96a6e1fe1c4efba75db8e368f918aa4 (patch)
treea4d5ca4238f6709e2f9da9dcab3ca73d8b6d92bf /llvm/lib/Target/ARM/AsmParser
parent77d4a8f9f7c99172105f184cbb71f052081ccf02 (diff)
downloadbcm5719-llvm-ee81051fc96a6e1fe1c4efba75db8e368f918aa4.tar.gz
bcm5719-llvm-ee81051fc96a6e1fe1c4efba75db8e368f918aa4.zip
[ARM] Relax constraints on operands of VQxDMLxDH instructions
Summary: According to a recently updated Armv8-M spec (https://static.docs.arm.com/ddi0553/bh/DDI0553B_h_armv8m_arm.pdf) the 32-bit width versions of the following instructions: * VQDMLADH * VQDMLADHX * VQRDMLADH * VQRDMLADHX * VQDMLSDH * VQDMLSDHX * VQRDMLSDH * VQRDMLSDHX are no longer unpredictable when their output register is the same as one of the input registers. This patch updates the assembler parser and the corresponding tests and also removes @earlyclobber from the instruction constraints. Reviewers: simon_tatham, ostannard, dmgreen, SjoerdMeijer, samparker Reviewed By: simon_tatham Subscribers: javed.absar, kristof.beyls, hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D64250 llvm-svn: 365306
Diffstat (limited to 'llvm/lib/Target/ARM/AsmParser')
-rw-r--r--llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp10
1 files changed, 1 insertions, 9 deletions
diff --git a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
index 3ff3af9dd58..1da9452f1d2 100644
--- a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
+++ b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
@@ -7865,15 +7865,7 @@ bool ARMAsmParser::validateInstruction(MCInst &Inst,
case ARM::MVE_VMULLs32bh:
case ARM::MVE_VMULLs32th:
case ARM::MVE_VMULLu32bh:
- case ARM::MVE_VMULLu32th:
- case ARM::MVE_VQDMLADHs32:
- case ARM::MVE_VQDMLADHXs32:
- case ARM::MVE_VQRDMLADHs32:
- case ARM::MVE_VQRDMLADHXs32:
- case ARM::MVE_VQDMLSDHs32:
- case ARM::MVE_VQDMLSDHXs32:
- case ARM::MVE_VQRDMLSDHs32:
- case ARM::MVE_VQRDMLSDHXs32: {
+ case ARM::MVE_VMULLu32th: {
if (Operands[3]->getReg() == Operands[4]->getReg()) {
return Error (Operands[3]->getStartLoc(),
"Qd register and Qn register can't be identical");
OpenPOWER on IntegriCloud