diff options
Diffstat (limited to 'llvm/lib/CodeGen/MIRParser/MILexer.cpp')
-rw-r--r-- | llvm/lib/CodeGen/MIRParser/MILexer.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/llvm/lib/CodeGen/MIRParser/MILexer.cpp b/llvm/lib/CodeGen/MIRParser/MILexer.cpp index 5976f5da15691..98af46dc4872e 100644 --- a/llvm/lib/CodeGen/MIRParser/MILexer.cpp +++ b/llvm/lib/CodeGen/MIRParser/MILexer.cpp @@ -11,12 +11,9 @@ //===----------------------------------------------------------------------===// #include "MILexer.h" -#include "llvm/ADT/APSInt.h" #include "llvm/ADT/None.h" -#include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringSwitch.h" -#include "llvm/ADT/StringRef.h" #include "llvm/ADT/Twine.h" #include <algorithm> #include <cassert> @@ -104,6 +101,20 @@ static Cursor skipComment(Cursor C) { return C; } +/// Machine operands can have comments, enclosed between /* and */. +/// This eats up all tokens, including /* and */. +static Cursor skipMachineOperandComment(Cursor C) { + if (C.peek() != '/' || C.peek(1) != '*') + return C; + + while (C.peek() != '*' || C.peek(1) != '/') + C.advance(); + + C.advance(); + C.advance(); + return C; +} + /// Return true if the given character satisfies the following regular /// expression: [-a-zA-Z$._0-9] static bool isIdentifierChar(char C) { @@ -246,6 +257,7 @@ static MIToken::TokenKind getIdentifierKind(StringRef Identifier) { .Case("liveout", MIToken::kw_liveout) .Case("address-taken", MIToken::kw_address_taken) .Case("landing-pad", MIToken::kw_landing_pad) + .Case("ehfunclet-entry", MIToken::kw_ehfunclet_entry) .Case("liveins", MIToken::kw_liveins) .Case("successors", MIToken::kw_successors) .Case("floatpred", MIToken::kw_floatpred) @@ -254,6 +266,7 @@ static MIToken::TokenKind getIdentifierKind(StringRef Identifier) { .Case("pre-instr-symbol", MIToken::kw_pre_instr_symbol) .Case("post-instr-symbol", MIToken::kw_post_instr_symbol) .Case("heap-alloc-marker", MIToken::kw_heap_alloc_marker) + .Case("bbsections", MIToken::kw_bbsections) .Case("unknown-size", MIToken::kw_unknown_size) .Default(MIToken::Identifier); } @@ -518,7 +531,7 @@ static Cursor maybeLexMCSymbol(Cursor C, MIToken &Token, } static bool isValidHexFloatingPointPrefix(char C) { - return C == 'H' || C == 'K' || C == 'L' || C == 'M'; + return C == 'H' || C == 'K' || C == 'L' || C == 'M' || C == 'R'; } static Cursor lexFloatingPointLiteral(Cursor Range, Cursor C, MIToken &Token) { @@ -691,6 +704,8 @@ StringRef llvm::lexMIToken(StringRef Source, MIToken &Token, return C.remaining(); } + C = skipMachineOperandComment(C); + if (Cursor R = maybeLexMachineBasicBlock(C, Token, ErrorCallback)) return R.remaining(); if (Cursor R = maybeLexIdentifier(C, Token)) |