diff options
author | Alex Bradbury <asb@lowrisc.org> | 2018-09-18 15:13:29 +0000 |
---|---|---|
committer | Alex Bradbury <asb@lowrisc.org> | 2018-09-18 15:13:29 +0000 |
commit | 7d0e18d0dd287eefcd379c2f3693c373ae927071 (patch) | |
tree | 872640b71d6d4a7083c328ae5ab2e8f3b1149b7a /llvm/lib | |
parent | 74340f1805443cdc356c8fd7c8e4a25eb396b2b4 (diff) | |
download | bcm5719-llvm-7d0e18d0dd287eefcd379c2f3693c373ae927071.tar.gz bcm5719-llvm-7d0e18d0dd287eefcd379c2f3693c373ae927071.zip |
[RISCV][MC] Reject bare symbols for the simm12 operand type
addi a0, a0, foo and lw a0, foo(a0) and similar are now rejected. An explicit
%lo and %pcrel_lo modifier is required. This matches gas behaviour.
llvm-svn: 342487
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp index f54d4a58627..f66127a3874 100644 --- a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp +++ b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp @@ -415,7 +415,7 @@ public: IsValid = RISCVAsmParser::classifySymbolRef(getImm(), VK, Imm); else IsValid = isInt<12>(Imm); - return IsValid && (VK == RISCVMCExpr::VK_RISCV_None || + return IsValid && ((IsConstantImm && VK == RISCVMCExpr::VK_RISCV_None) || VK == RISCVMCExpr::VK_RISCV_LO || VK == RISCVMCExpr::VK_RISCV_PCREL_LO); } @@ -785,8 +785,10 @@ bool RISCVAsmParser::MatchAndEmitInstruction(SMLoc IDLoc, unsigned &Opcode, Operands, ErrorInfo, -(1 << 9), (1 << 9) - 16, "immediate must be a multiple of 16 bytes and non-zero in the range"); case Match_InvalidSImm12: - return generateImmOutOfRangeError(Operands, ErrorInfo, -(1 << 11), - (1 << 11) - 1); + return generateImmOutOfRangeError( + Operands, ErrorInfo, -(1 << 11), (1 << 11) - 1, + "operand must be a symbol with %lo/%pcrel_lo modifier or an integer in " + "the range"); case Match_InvalidSImm12Lsb0: return generateImmOutOfRangeError( Operands, ErrorInfo, -(1 << 11), (1 << 11) - 2, |