diff options
author | Alex Lorenz <arphaman@gmail.com> | 2015-07-16 23:37:45 +0000 |
---|---|---|
committer | Alex Lorenz <arphaman@gmail.com> | 2015-07-16 23:37:45 +0000 |
commit | 7feaf7c60be1557931549ec0f848090eb1e9da99 (patch) | |
tree | 31eabcfed68328262a73dd4a90d9d8115da6fc80 /llvm/lib/CodeGen/MIRParser/MILexer.cpp | |
parent | 9b4f6b2650fb7db7c09755dcb731a6d68e4ffe11 (diff) | |
download | bcm5719-llvm-7feaf7c60be1557931549ec0f848090eb1e9da99.tar.gz bcm5719-llvm-7feaf7c60be1557931549ec0f848090eb1e9da99.zip |
MIR Serialization: Serialize the frame index machine operands.
Reviewers: Duncan P. N. Exon Smith
llvm-svn: 242487
Diffstat (limited to 'llvm/lib/CodeGen/MIRParser/MILexer.cpp')
-rw-r--r-- | llvm/lib/CodeGen/MIRParser/MILexer.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/MIRParser/MILexer.cpp b/llvm/lib/CodeGen/MIRParser/MILexer.cpp index 9babb3b0a3d..53c393da45d 100644 --- a/llvm/lib/CodeGen/MIRParser/MILexer.cpp +++ b/llvm/lib/CodeGen/MIRParser/MILexer.cpp @@ -128,10 +128,39 @@ static Cursor maybeLexIndex(Cursor C, MIToken &Token, StringRef Rule, return C; } +static Cursor maybeLexIndexAndName(Cursor C, MIToken &Token, StringRef Rule, + MIToken::TokenKind Kind) { + if (!C.remaining().startswith(Rule) || !isdigit(C.peek(Rule.size()))) + return None; + auto Range = C; + C.advance(Rule.size()); + auto NumberRange = C; + while (isdigit(C.peek())) + C.advance(); + StringRef Number = NumberRange.upto(C); + unsigned StringOffset = Rule.size() + Number.size(); + if (C.peek() == '.') { + C.advance(); + ++StringOffset; + while (isIdentifierChar(C.peek())) + C.advance(); + } + Token = MIToken(Kind, Range.upto(C), APSInt(Number), StringOffset); + return C; +} + static Cursor maybeLexJumpTableIndex(Cursor C, MIToken &Token) { return maybeLexIndex(C, Token, "%jump-table.", MIToken::JumpTableIndex); } +static Cursor maybeLexStackObject(Cursor C, MIToken &Token) { + return maybeLexIndexAndName(C, Token, "%stack.", MIToken::StackObject); +} + +static Cursor maybeLexFixedStackObject(Cursor C, MIToken &Token) { + return maybeLexIndex(C, Token, "%fixed-stack.", MIToken::FixedStackObject); +} + static Cursor lexVirtualRegister(Cursor C, MIToken &Token) { auto Range = C; C.advance(); // Skip '%' @@ -228,6 +257,10 @@ StringRef llvm::lexMIToken( return R.remaining(); if (Cursor R = maybeLexJumpTableIndex(C, Token)) return R.remaining(); + if (Cursor R = maybeLexStackObject(C, Token)) + return R.remaining(); + if (Cursor R = maybeLexFixedStackObject(C, Token)) + return R.remaining(); if (Cursor R = maybeLexRegister(C, Token)) return R.remaining(); if (Cursor R = maybeLexGlobalValue(C, Token)) |