diff options
author | Alex Lorenz <arphaman@gmail.com> | 2015-06-26 22:56:48 +0000 |
---|---|---|
committer | Alex Lorenz <arphaman@gmail.com> | 2015-06-26 22:56:48 +0000 |
commit | 5d6108e4ed5c80a52bb66d4cb870eb5d1477c572 (patch) | |
tree | 94fa2a0ace9fb401526cac4b29c0cd26a6698757 /llvm/lib/CodeGen/MIRParser/MILexer.cpp | |
parent | 8fe7f13af88e6cbd8a31f90373bd1e3db307926b (diff) | |
download | bcm5719-llvm-5d6108e4ed5c80a52bb66d4cb870eb5d1477c572.tar.gz bcm5719-llvm-5d6108e4ed5c80a52bb66d4cb870eb5d1477c572.zip |
MIR Serialization: Serialize global address machine operands.
This commit serializes the global address machine operands.
This commit doesn't serialize the operand's offset and target
flags, it serializes only the global value reference.
Reviewers: Duncan P. N. Exon Smith
Differential Revision: http://reviews.llvm.org/D10671
llvm-svn: 240851
Diffstat (limited to 'llvm/lib/CodeGen/MIRParser/MILexer.cpp')
-rw-r--r-- | llvm/lib/CodeGen/MIRParser/MILexer.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/MIRParser/MILexer.cpp b/llvm/lib/CodeGen/MIRParser/MILexer.cpp index 57e5ffe4353..d15b6909f1c 100644 --- a/llvm/lib/CodeGen/MIRParser/MILexer.cpp +++ b/llvm/lib/CodeGen/MIRParser/MILexer.cpp @@ -106,6 +106,25 @@ static Cursor lexPercent(Cursor C, MIToken &Token) { return C; } +static Cursor lexGlobalValue(Cursor C, MIToken &Token) { + auto Range = C; + C.advance(); // Skip the '@' + // TODO: add support for quoted names. + if (!isdigit(C.peek())) { + while (isIdentifierChar(C.peek())) + C.advance(); + Token = MIToken(MIToken::NamedGlobalValue, Range.upto(C), + /*StringOffset=*/1); // Drop the '@' + return C; + } + auto NumberRange = C; + while (isdigit(C.peek())) + C.advance(); + Token = + MIToken(MIToken::GlobalValue, Range.upto(C), APSInt(NumberRange.upto(C))); + return C; +} + static Cursor lexIntegerLiteral(Cursor C, MIToken &Token) { auto Range = C; C.advance(); @@ -151,6 +170,8 @@ StringRef llvm::lexMIToken( return lexMachineBasicBlock(C, Token, ErrorCallback).remaining(); return lexPercent(C, Token).remaining(); } + if (Char == '@') + return lexGlobalValue(C, Token).remaining(); if (isdigit(Char) || (Char == '-' && isdigit(C.peek(1)))) return lexIntegerLiteral(C, Token).remaining(); MIToken::TokenKind Kind = symbolToken(Char); |