forked from OSchip/llvm-project
[ARM][ASMParser] Refuse equal RdHi/RdLo for s/umlal, smlsl, s/umull, umaal
Differential Revision: https://reviews.llvm.org/D74120
This commit is contained in:
parent
39f50da2a3
commit
e8c3a6c260
llvm
|
@ -7947,6 +7947,40 @@ bool ARMAsmParser::validateInstruction(MCInst &Inst,
|
|||
return Error (Operands[3]->getStartLoc(), "Q-register indexes must be 2 and 0 or 3 and 1");
|
||||
break;
|
||||
}
|
||||
case ARM::UMAAL:
|
||||
case ARM::UMLAL:
|
||||
case ARM::UMULL:
|
||||
case ARM::t2UMAAL:
|
||||
case ARM::t2UMLAL:
|
||||
case ARM::t2UMULL:
|
||||
case ARM::SMLAL:
|
||||
case ARM::SMLALBB:
|
||||
case ARM::SMLALBT:
|
||||
case ARM::SMLALD:
|
||||
case ARM::SMLALDX:
|
||||
case ARM::SMLALTB:
|
||||
case ARM::SMLALTT:
|
||||
case ARM::SMLSLD:
|
||||
case ARM::SMLSLDX:
|
||||
case ARM::SMULL:
|
||||
case ARM::t2SMLAL:
|
||||
case ARM::t2SMLALBB:
|
||||
case ARM::t2SMLALBT:
|
||||
case ARM::t2SMLALD:
|
||||
case ARM::t2SMLALDX:
|
||||
case ARM::t2SMLALTB:
|
||||
case ARM::t2SMLALTT:
|
||||
case ARM::t2SMLSLD:
|
||||
case ARM::t2SMLSLDX:
|
||||
case ARM::t2SMULL: {
|
||||
unsigned RdHi = Inst.getOperand(0).getReg();
|
||||
unsigned RdLo = Inst.getOperand(1).getReg();
|
||||
if(RdHi == RdLo) {
|
||||
return Error(Loc,
|
||||
"unpredictable instruction, RdHi and RdLo must be different");
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
@ RUN: not llvm-mc -triple thumbv7m-eabi -mattr=+dsp < %s 2>&1 | FileCheck %s
|
||||
@ RUN: not llvm-mc -triple armv8 -mattr=+dsp < %s 2>&1 | FileCheck %s
|
||||
|
||||
smlal r1, r1, r3, r4
|
||||
@ CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unpredictable instruction, RdHi and RdLo must be different
|
||||
smlalbb r1, r1, r3, r4
|
||||
@ CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unpredictable instruction, RdHi and RdLo must be different
|
||||
smlalbt r1, r1, r3, r4
|
||||
@ CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unpredictable instruction, RdHi and RdLo must be different
|
||||
smlaltb r1, r1, r3, r4
|
||||
@ CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unpredictable instruction, RdHi and RdLo must be different
|
||||
smlaltt r1, r1, r3, r4
|
||||
@ CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unpredictable instruction, RdHi and RdLo must be different
|
||||
smlald r1, r1, r3, r4
|
||||
@ CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unpredictable instruction, RdHi and RdLo must be different
|
||||
smlaldx r1, r1, r3, r4
|
||||
@ CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unpredictable instruction, RdHi and RdLo must be different
|
||||
smlsld r1, r1, r3, r4
|
||||
@ CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unpredictable instruction, RdHi and RdLo must be different
|
||||
smlsldx r1, r1, r3, r4
|
||||
@ CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unpredictable instruction, RdHi and RdLo must be different
|
||||
smull r1, r1, r2, r3
|
||||
@ CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unpredictable instruction, RdHi and RdLo must be different
|
||||
umull r1, r1, r2, r3
|
||||
@ CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unpredictable instruction, RdHi and RdLo must be different
|
||||
umlal r1, r1, r2, r3
|
||||
@ CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unpredictable instruction, RdHi and RdLo must be different
|
||||
umaal r1, r1, r2, r3
|
||||
@ CHECK: [[@LINE-1]]:{{[0-9]+}}: error: unpredictable instruction, RdHi and RdLo must be different
|
|
@ -6557,169 +6557,169 @@ it ge
|
|||
mlage r0, lr, r0, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smullge r0, r0, r0, r0
|
||||
smullge r0, r1, r0, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smullge r0, r0, r1, r0
|
||||
smullge r0, r1, r1, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smullge r0, r0, r2, r0
|
||||
smullge r0, r1, r2, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smullge r0, r0, r3, r0
|
||||
smullge r0, r1, r3, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smullge r0, r0, r4, r0
|
||||
smullge r0, r1, r4, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smullge r0, r0, r5, r0
|
||||
smullge r0, r1, r5, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smullge r0, r0, r6, r0
|
||||
smullge r0, r1, r6, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smullge r0, r0, r7, r0
|
||||
smullge r0, r1, r7, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smullge r0, r0, r8, r0
|
||||
smullge r0, r1, r8, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smullge r0, r0, r9, r0
|
||||
smullge r0, r1, r9, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smullge r0, r0, r10, r0
|
||||
smullge r0, r1, r10, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smullge r0, r0, r11, r0
|
||||
smullge r0, r1, r11, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smullge r0, r0, r12, r0
|
||||
smullge r0, r1, r12, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smullge r0, r0, lr, r0
|
||||
smullge r0, r1, lr, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umullge r0, r0, r0, r0
|
||||
umullge r0, r1, r0, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umullge r0, r0, r1, r0
|
||||
umullge r0, r1, r1, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umullge r0, r0, r2, r0
|
||||
umullge r0, r1, r2, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umullge r0, r0, r3, r0
|
||||
umullge r0, r1, r3, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umullge r0, r0, r4, r0
|
||||
umullge r0, r1, r4, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umullge r0, r0, r5, r0
|
||||
umullge r0, r1, r5, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umullge r0, r0, r6, r0
|
||||
umullge r0, r1, r6, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umullge r0, r0, r7, r0
|
||||
umullge r0, r1, r7, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umullge r0, r0, r8, r0
|
||||
umullge r0, r1, r8, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umullge r0, r0, r9, r0
|
||||
umullge r0, r1, r9, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umullge r0, r0, r10, r0
|
||||
umullge r0, r1, r10, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umullge r0, r0, r11, r0
|
||||
umullge r0, r1, r11, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umullge r0, r0, r12, r0
|
||||
umullge r0, r1, r12, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umullge r0, r0, lr, r0
|
||||
umullge r0, r1, lr, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smlalge r0, r0, r0, r0
|
||||
smlalge r0, r1, r0, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smlalge r0, r0, r1, r0
|
||||
smlalge r0, r1, r1, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smlalge r0, r0, r2, r0
|
||||
smlalge r0, r1, r2, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smlalge r0, r0, r3, r0
|
||||
smlalge r0, r1, r3, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smlalge r0, r0, r4, r0
|
||||
smlalge r0, r1, r4, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smlalge r0, r0, r5, r0
|
||||
smlalge r0, r1, r5, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smlalge r0, r0, r6, r0
|
||||
smlalge r0, r1, r6, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smlalge r0, r0, r7, r0
|
||||
smlalge r0, r1, r7, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smlalge r0, r0, r8, r0
|
||||
smlalge r0, r1, r8, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smlalge r0, r0, r9, r0
|
||||
smlalge r0, r1, r9, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smlalge r0, r0, r10, r0
|
||||
smlalge r0, r1, r10, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smlalge r0, r0, r11, r0
|
||||
smlalge r0, r1, r11, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smlalge r0, r0, r12, r0
|
||||
smlalge r0, r1, r12, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
smlalge r0, r0, lr, r0
|
||||
smlalge r0, r1, lr, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umlalge r0, r0, r0, r0
|
||||
umlalge r0, r1, r0, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umlalge r0, r0, r1, r0
|
||||
umlalge r0, r1, r1, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umlalge r0, r0, r2, r0
|
||||
umlalge r0, r1, r2, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umlalge r0, r0, r3, r0
|
||||
umlalge r0, r1, r3, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umlalge r0, r0, r4, r0
|
||||
umlalge r0, r1, r4, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umlalge r0, r0, r5, r0
|
||||
umlalge r0, r1, r5, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umlalge r0, r0, r6, r0
|
||||
umlalge r0, r1, r6, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umlalge r0, r0, r7, r0
|
||||
umlalge r0, r1, r7, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umlalge r0, r0, r8, r0
|
||||
umlalge r0, r1, r8, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umlalge r0, r0, r9, r0
|
||||
umlalge r0, r1, r9, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umlalge r0, r0, r10, r0
|
||||
umlalge r0, r1, r10, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umlalge r0, r0, r11, r0
|
||||
umlalge r0, r1, r11, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umlalge r0, r0, r12, r0
|
||||
umlalge r0, r1, r12, r0
|
||||
@ CHECK: :[[@LINE+2]]:1: warning: deprecated instruction in IT block
|
||||
it ge
|
||||
umlalge r0, r0, lr, r0
|
||||
umlalge r0, r1, lr, r0
|
||||
|
|
Loading…
Reference in New Issue