summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorNikolay Haustov <Nikolay.Haustov@amd.com>2016-03-09 11:03:21 +0000
committerNikolay Haustov <Nikolay.Haustov@amd.com>2016-03-09 11:03:21 +0000
commit9b7577ed223dd4b2a30241f02605458aa6a510d8 (patch)
treefe1e09820731370e19de9e81f898136cb6b785c6 /llvm/lib
parent8e3f099497f113f964f34560c4d66e0fe72de313 (diff)
downloadbcm5719-llvm-9b7577ed223dd4b2a30241f02605458aa6a510d8.tar.gz
bcm5719-llvm-9b7577ed223dd4b2a30241f02605458aa6a510d8.zip
[AMDGPU] Assembler: Support abs() syntax.
Support legacy SP3 abs(v1) syntax. InstPrinter still uses |v1|. Add tests. Differential Revision: http://reviews.llvm.org/D17887 llvm-svn: 263006
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp21
1 files changed, 19 insertions, 2 deletions
diff --git a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
index 6277ff371ba..a4d2909e8a0 100644
--- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
+++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
@@ -1008,12 +1008,23 @@ AMDGPUAsmParser::parseOperand(OperandVector &Operands, StringRef Mnemonic) {
getLexer().is(AsmToken::EndOfStatement))
return ResTy;
- bool Negate = false, Abs = false;
+ bool Negate = false, Abs = false, Abs2 = false;
+
if (getLexer().getKind()== AsmToken::Minus) {
Parser.Lex();
Negate = true;
}
+ if (getLexer().getKind() == AsmToken::Identifier && Parser.getTok().getString() == "abs") {
+ Parser.Lex();
+ Abs2 = true;
+ if (getLexer().isNot(AsmToken::LParen)) {
+ Error(Parser.getTok().getLoc(), "expected left paren after abs");
+ return MatchOperand_ParseFail;
+ }
+ Parser.Lex();
+ }
+
if (getLexer().getKind() == AsmToken::Pipe) {
Parser.Lex();
Abs = true;
@@ -1065,7 +1076,13 @@ AMDGPUAsmParser::parseOperand(OperandVector &Operands, StringRef Mnemonic) {
Parser.Lex();
Modifiers |= 0x2;
}
-
+ if (Abs2) {
+ if (getLexer().isNot(AsmToken::RParen)) {
+ return MatchOperand_ParseFail;
+ }
+ Parser.Lex();
+ Modifiers |= 0x2;
+ }
Operands.push_back(AMDGPUOperand::CreateReg(
RegNo, S, E, getContext().getRegisterInfo(), &getSTI(),
isForcedVOP3()));
OpenPOWER on IntegriCloud