[PATCH] D91668: [RISCV]Add register constraint on riscv vector instruction
eric tang via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 17 16:48:25 PST 2020
tangxingxin1008 created this revision.
tangxingxin1008 added a reviewer: HsiangKai.
Herald added subscribers: llvm-commits, frasercrmck, NickHung, luismarques, apazos, sameer.abuasal, pzheng, s.egerton, lenary, Jim, benna, psnobl, jocewei, PkmX, the_o, brucehoult, MartinMosbeck, rogfer01, edward-jones, zzheng, jrtc27, shiva0217, kito-cheng, niosHD, sabuasal, simoncook, johnrusso, rbar, asb, hiraditya.
Herald added a project: LLVM.
tangxingxin1008 requested review of this revision.
Herald added a subscriber: MaskRay.
On vector instruction, if the operand is a vector, it should be from
vector register groups.
Signed-off-by: tangxingxin <tangxingxin1008 at gmail.com>
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D91668
Files:
llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
llvm/lib/Target/RISCV/RISCVInstrInfoV.td
llvm/test/MC/RISCV/rvv/invalid.s
Index: llvm/test/MC/RISCV/rvv/invalid.s
===================================================================
--- llvm/test/MC/RISCV/rvv/invalid.s
+++ llvm/test/MC/RISCV/rvv/invalid.s
@@ -37,6 +37,9 @@
vadd.vv v1, v3, v2, v0
# CHECK-ERROR: expected '.t' suffix
+vadd.vv v1, v3, a0
+# CHECK-ERROR: invalid operand for instruction
+
vmslt.vi v1, v2, -16
# CHECK-ERROR: immediate must be in the range [-15, 16]
Index: llvm/lib/Target/RISCV/RISCVInstrInfoV.td
===================================================================
--- llvm/lib/Target/RISCV/RISCVInstrInfoV.td
+++ llvm/lib/Target/RISCV/RISCVInstrInfoV.td
@@ -34,7 +34,7 @@
def VRegAsmOperand : AsmOperandClass {
let Name = "RVVRegOpOperand";
let RenderMethod = "addRegOperands";
- let PredicateMethod = "isReg";
+ let PredicateMethod = "isVR";
let ParserMethod = "parseRegister";
}
Index: llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
===================================================================
--- llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
+++ llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
@@ -357,6 +357,11 @@
RISCVMCRegisterClasses[RISCV::GPRRegClassID].contains(Reg.RegNum);
}
+ bool isVR() const {
+ return Kind == KindTy::Register &&
+ RISCVMCRegisterClasses[RISCV::VRRegClassID].contains(Reg.RegNum);
+ }
+
static bool evaluateConstantImm(const MCExpr *Expr, int64_t &Imm,
RISCVMCExpr::VariantKind &VK) {
if (auto *RE = dyn_cast<RISCVMCExpr>(Expr)) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D91668.305927.patch
Type: text/x-patch
Size: 1540 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201118/e57745b1/attachment.bin>
More information about the llvm-commits
mailing list