diff options
| author | Nikolay Haustov <Nikolay.Haustov@amd.com> | 2016-03-09 11:03:21 +0000 |
|---|---|---|
| committer | Nikolay Haustov <Nikolay.Haustov@amd.com> | 2016-03-09 11:03:21 +0000 |
| commit | 9b7577ed223dd4b2a30241f02605458aa6a510d8 (patch) | |
| tree | fe1e09820731370e19de9e81f898136cb6b785c6 /llvm/lib | |
| parent | 8e3f099497f113f964f34560c4d66e0fe72de313 (diff) | |
| download | bcm5719-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.cpp | 21 |
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())); |

