summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/MIRParser/MILexer.cpp
diff options
context:
space:
mode:
authorAlex Lorenz <arphaman@gmail.com>2015-08-21 21:54:12 +0000
committerAlex Lorenz <arphaman@gmail.com>2015-08-21 21:54:12 +0000
commitc1136ef3b843a6b0ced314f29e85aa88ca0cf7fd (patch)
treecba603cbb279cc5d4b19c8bc277a0ea14d3e5692 /llvm/lib/CodeGen/MIRParser/MILexer.cpp
parent366dd9fd2b0b39d6649de0ff29f9097c14a1d616 (diff)
downloadbcm5719-llvm-c1136ef3b843a6b0ced314f29e85aa88ca0cf7fd.tar.gz
bcm5719-llvm-c1136ef3b843a6b0ced314f29e85aa88ca0cf7fd.zip
MIR Serialization: Serialize the pointer IR expression values in the machine
memory operands. llvm-svn: 245745
Diffstat (limited to 'llvm/lib/CodeGen/MIRParser/MILexer.cpp')
-rw-r--r--llvm/lib/CodeGen/MIRParser/MILexer.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/MIRParser/MILexer.cpp b/llvm/lib/CodeGen/MIRParser/MILexer.cpp
index 8346ff294e4..28f9d4e298f 100644
--- a/llvm/lib/CodeGen/MIRParser/MILexer.cpp
+++ b/llvm/lib/CodeGen/MIRParser/MILexer.cpp
@@ -527,6 +527,30 @@ static Cursor maybeLexNewline(Cursor C, MIToken &Token) {
return C;
}
+static Cursor maybeLexEscapedIRValue(
+ Cursor C, MIToken &Token,
+ function_ref<void(StringRef::iterator Loc, const Twine &)> ErrorCallback) {
+ if (C.peek() != '`')
+ return None;
+ auto Range = C;
+ C.advance();
+ auto StrRange = C;
+ while (C.peek() != '`') {
+ if (C.isEOF() || isNewlineChar(C.peek())) {
+ ErrorCallback(
+ C.location(),
+ "end of machine instruction reached before the closing '`'");
+ Token.reset(MIToken::Error, Range.remaining());
+ return C;
+ }
+ C.advance();
+ }
+ StringRef Value = StrRange.upto(C);
+ C.advance();
+ Token.reset(MIToken::QuotedIRValue, Range.upto(C)).setStringValue(Value);
+ return C;
+}
+
StringRef llvm::lexMIToken(
StringRef Source, MIToken &Token,
function_ref<void(StringRef::iterator Loc, const Twine &)> ErrorCallback) {
@@ -570,6 +594,8 @@ StringRef llvm::lexMIToken(
return R.remaining();
if (Cursor R = maybeLexNewline(C, Token))
return R.remaining();
+ if (Cursor R = maybeLexEscapedIRValue(C, Token, ErrorCallback))
+ return R.remaining();
Token.reset(MIToken::Error, C.remaining());
ErrorCallback(C.location(),
OpenPOWER on IntegriCloud