[PATCH] D136076: [LoongArch] Report error in AsmParser when rd == rk or rd == rj for AM* instructions
Lu Weining via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 20 19:46:45 PDT 2022
This revision was automatically updated to reflect the committed changes.
Closed by commit rGc98add7a11ff: [LoongArch] Report error in AsmParser when rd == rk or rd == rj for AM*… (authored by SixWeining).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D136076/new/
https://reviews.llvm.org/D136076
Files:
llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
llvm/test/MC/LoongArch/Basic/Integer/invalid64.s
Index: llvm/test/MC/LoongArch/Basic/Integer/invalid64.s
===================================================================
--- llvm/test/MC/LoongArch/Basic/Integer/invalid64.s
+++ llvm/test/MC/LoongArch/Basic/Integer/invalid64.s
@@ -79,3 +79,17 @@
# CHECK: :[[#@LINE+1]]:22: error: msb is less than lsb
bstrpick.d $a0, $a0, 32, 63
# CHECK: ^~~~~~
+
+# CHECK: :[[#@LINE+1]]:10: error: $rd must be different from both $rk and $rj
+amadd.d $zero, $zero, $zero
+# CHECK: :[[#@LINE+1]]:10: error: $rd must be different from both $rk and $rj
+ammin.w $zero, $zero, $a0
+# CHECK: :[[#@LINE+1]]:10: error: $rd must be different from both $rk and $rj
+amxor.w $zero, $a0, $zero
+
+# CHECK: :[[#@LINE+1]]:10: error: $rd must be different from both $rk and $rj
+amadd.d $a0, $a0, $a0
+# CHECK: :[[#@LINE+1]]:10: error: $rd must be different from both $rk and $rj
+ammin.w $a0, $a0, $a1
+# CHECK: :[[#@LINE+1]]:10: error: $rd must be different from both $rk and $rj
+amxor.w $a0, $a1, $a0
Index: llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
===================================================================
--- llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
+++ llvm/lib/Target/LoongArch/AsmParser/LoongArchAsmParser.cpp
@@ -74,6 +74,7 @@
Match_Dummy = FIRST_TARGET_MATCH_RESULT_TY,
Match_RequiresMsbNotLessThanLsb,
Match_RequiresOpnd2NotR0R1,
+ Match_RequiresAMORdDifferRkRj,
#define GET_OPERAND_DIAGNOSTIC_TYPES
#include "LoongArchGenAsmMatcher.inc"
#undef GET_OPERAND_DIAGNOSTIC_TYPES
@@ -667,8 +668,16 @@
}
unsigned LoongArchAsmParser::checkTargetMatchPredicate(MCInst &Inst) {
- switch (Inst.getOpcode()) {
+ unsigned Opc = Inst.getOpcode();
+ switch (Opc) {
default:
+ if (Opc >= LoongArch::AMADD_D && Opc <= LoongArch::AMXOR_W) {
+ unsigned Rd = Inst.getOperand(0).getReg();
+ unsigned Rk = Inst.getOperand(1).getReg();
+ unsigned Rj = Inst.getOperand(2).getReg();
+ if (Rd == Rk || Rd == Rj)
+ return Match_RequiresAMORdDifferRkRj;
+ }
break;
case LoongArch::CSRXCHG: {
unsigned Rj = Inst.getOperand(2).getReg();
@@ -791,6 +800,9 @@
}
case Match_RequiresOpnd2NotR0R1:
return Error(Operands[2]->getStartLoc(), "must not be $r0 or $r1");
+ case Match_RequiresAMORdDifferRkRj:
+ return Error(Operands[1]->getStartLoc(),
+ "$rd must be different from both $rk and $rj");
case Match_InvalidUImm2:
return generateImmOutOfRangeError(Operands, ErrorInfo, /*Lower=*/0,
/*Upper=*/(1 << 2) - 1);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D136076.469454.patch
Type: text/x-patch
Size: 2580 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20221021/a6162901/attachment.bin>
More information about the llvm-commits
mailing list