summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/RISCV/AsmParser
diff options
context:
space:
mode:
authorAlex Bradbury <asb@lowrisc.org>2019-01-10 15:33:17 +0000
committerAlex Bradbury <asb@lowrisc.org>2019-01-10 15:33:17 +0000
commit6f302b8a69ee54e00d3629bf465b051ecde58273 (patch)
treed13465154a050bfd23292958bf69bbcff929ca3c /llvm/lib/Target/RISCV/AsmParser
parent87ae1460f713600235973be2e10a084660ea541b (diff)
downloadbcm5719-llvm-6f302b8a69ee54e00d3629bf465b051ecde58273.tar.gz
bcm5719-llvm-6f302b8a69ee54e00d3629bf465b051ecde58273.zip
[RISCV][MC] Add support for evaluating constant symbols as immediates
This further improves compatibility with GNU as, allowing input such as the following to be assembled: .equ CONST, 0x123456 li a0, CONST addi a0, a0, %lo(CONST) .equ CONST, 1 slli a0, a0, CONST Note that we don't have perfect compatibility with gas, as it will avoid emitting a relocation in this case: addi a0, a0, %lo(CONST2) .equ CONST2, 0x123456 Thanks to Shiva Chen for suggesting a better way to approach this during review. Differential Revision: https://reviews.llvm.org/D52298 llvm-svn: 350831
Diffstat (limited to 'llvm/lib/Target/RISCV/AsmParser')
-rw-r--r--llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp9
1 files changed, 1 insertions, 8 deletions
diff --git a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
index d7fc2b2fbdb..1d1112cc512 100644
--- a/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
+++ b/llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp
@@ -1033,17 +1033,10 @@ OperandMatchResultTy RISCVAsmParser::parseImmediate(OperandVector &Operands) {
case AsmToken::Plus:
case AsmToken::Integer:
case AsmToken::String:
+ case AsmToken::Identifier:
if (getParser().parseExpression(Res))
return MatchOperand_ParseFail;
break;
- case AsmToken::Identifier: {
- StringRef Identifier;
- if (getParser().parseIdentifier(Identifier))
- return MatchOperand_ParseFail;
- MCSymbol *Sym = getContext().getOrCreateSymbol(Identifier);
- Res = MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_None, getContext());
- break;
- }
case AsmToken::Percent:
return parseOperandWithModifier(Operands);
}
OpenPOWER on IntegriCloud