[llvm] r374832 - [ARM][AsmParser] handles offset expression in parentheses
Jian Cai via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 14 15:22:26 PDT 2019
Author: jcai19
Date: Mon Oct 14 15:22:26 2019
New Revision: 374832
URL: http://llvm.org/viewvc/llvm-project?rev=374832&view=rev
Log:
[ARM][AsmParser] handles offset expression in parentheses
Summary:
Integrated assembler does not accept offset expressions surrounded by
parenthesis. Handle this case for GAS compability.
https://bugs.llvm.org/show_bug.cgi?id=43631
Subscribers: kristof.beyls, hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D68764
Added:
llvm/trunk/test/MC/ARM/gas-compl-mem-offset-paren.s
Modified:
llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
Modified: llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp?rev=374832&r1=374831&r2=374832&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Mon Oct 14 15:22:26 2019
@@ -5733,14 +5733,16 @@ bool ARMAsmParser::parseMemory(OperandVe
return false;
}
- // If we have a '#', it's an immediate offset, else assume it's a register
- // offset. Be friendly and also accept a plain integer (without a leading
- // hash) for gas compatibility.
+ // If we have a '#' or '$', it's an immediate offset, else assume it's a
+ // register offset. Be friendly and also accept a plain integer or expression
+ // (without a leading hash) for gas compatibility.
if (Parser.getTok().is(AsmToken::Hash) ||
Parser.getTok().is(AsmToken::Dollar) ||
+ Parser.getTok().is(AsmToken::LParen) ||
Parser.getTok().is(AsmToken::Integer)) {
- if (Parser.getTok().isNot(AsmToken::Integer))
- Parser.Lex(); // Eat '#' or '$'.
+ if (Parser.getTok().is(AsmToken::Hash) ||
+ Parser.getTok().is(AsmToken::Dollar))
+ Parser.Lex(); // Eat '#' or '$'
E = Parser.getTok().getLoc();
bool isNegative = getParser().getTok().is(AsmToken::Minus);
Added: llvm/trunk/test/MC/ARM/gas-compl-mem-offset-paren.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/gas-compl-mem-offset-paren.s?rev=374832&view=auto
==============================================================================
--- llvm/trunk/test/MC/ARM/gas-compl-mem-offset-paren.s (added)
+++ llvm/trunk/test/MC/ARM/gas-compl-mem-offset-paren.s Mon Oct 14 15:22:26 2019
@@ -0,0 +1,20 @@
+@ RUN: llvm-mc -triple=arm-linux-gnueabi < %s | FileCheck %s
+
+@ CHECK: ldr r12, [sp, #15]
+ldr r12, [sp, (15)]
+
+@ CHECK: ldr r12, [sp, #15]
+ldr r12, [sp, #(15)]
+
+@ CHECK: ldr r12, [sp, #15]
+ldr r12, [sp, $(15)]
+
+@ CHECK: ldr r12, [sp, #100]
+ldr r12, [sp, (((15+5)*5))]
+
+@ CHECK: ldr r12, [sp, #100]
+ldr r12, [sp, #(((15+5)*5))]
+
+
+@ CHECK: ldr r12, [sp, #100]
+ldr r12, [sp, $(((15+5)*5))]
More information about the llvm-commits
mailing list