diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/CodeGen/MIRParser/MILexer.cpp | 11 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MIRParser/MILexer.h | 1 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MIRParser/MIParser.cpp | 6 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/MIRPrinter.cpp | 2 | 
4 files changed, 14 insertions, 6 deletions
| diff --git a/llvm/lib/CodeGen/MIRParser/MILexer.cpp b/llvm/lib/CodeGen/MIRParser/MILexer.cpp index 6770df9ac18..de9b773b6b5 100644 --- a/llvm/lib/CodeGen/MIRParser/MILexer.cpp +++ b/llvm/lib/CodeGen/MIRParser/MILexer.cpp @@ -237,7 +237,7 @@ static MIToken::TokenKind getIdentifierKind(StringRef Identifier) {  }  static Cursor maybeLexIdentifier(Cursor C, MIToken &Token) { -  if (!isalpha(C.peek()) && C.peek() != '_' && C.peek() != '.') +  if (!isalpha(C.peek()) && C.peek() != '_')      return None;    auto Range = C;    while (isIdentifierChar(C.peek())) @@ -372,6 +372,11 @@ static Cursor lexVirtualRegister(Cursor C, MIToken &Token) {    return C;  } +/// Returns true for a character allowed in a register name. +static bool isRegisterChar(char C) { +  return isIdentifierChar(C) && C != '.'; +} +  static Cursor maybeLexRegister(Cursor C, MIToken &Token) {    if (C.peek() != '%')      return None; @@ -379,7 +384,7 @@ static Cursor maybeLexRegister(Cursor C, MIToken &Token) {      return lexVirtualRegister(C, Token);    auto Range = C;    C.advance(); // Skip '%' -  while (isIdentifierChar(C.peek())) +  while (isRegisterChar(C.peek()))      C.advance();    Token.reset(MIToken::NamedRegister, Range.upto(C))        .setStringValue(Range.upto(C).drop_front(1)); // Drop the '%' @@ -491,6 +496,8 @@ static MIToken::TokenKind symbolToken(char C) {    switch (C) {    case ',':      return MIToken::comma; +  case '.': +    return MIToken::dot;    case '=':      return MIToken::equal;    case ':': diff --git a/llvm/lib/CodeGen/MIRParser/MILexer.h b/llvm/lib/CodeGen/MIRParser/MILexer.h index ea155c3ae2f..6f90612a640 100644 --- a/llvm/lib/CodeGen/MIRParser/MILexer.h +++ b/llvm/lib/CodeGen/MIRParser/MILexer.h @@ -38,6 +38,7 @@ struct MIToken {      underscore,      colon,      coloncolon, +    dot,      exclaim,      lparen,      rparen, diff --git a/llvm/lib/CodeGen/MIRParser/MIParser.cpp b/llvm/lib/CodeGen/MIRParser/MIParser.cpp index 170f9735d1f..1ec3680d9d2 100644 --- a/llvm/lib/CodeGen/MIRParser/MIParser.cpp +++ b/llvm/lib/CodeGen/MIRParser/MIParser.cpp @@ -882,10 +882,10 @@ bool MIParser::parseRegisterFlag(unsigned &Flags) {  }  bool MIParser::parseSubRegisterIndex(unsigned &SubReg) { -  assert(Token.is(MIToken::colon)); +  assert(Token.is(MIToken::dot));    lex();    if (Token.isNot(MIToken::Identifier)) -    return error("expected a subregister index after ':'"); +    return error("expected a subregister index after '.'");    auto Name = Token.stringValue();    SubReg = getSubRegIndex(Name);    if (!SubReg) @@ -970,7 +970,7 @@ bool MIParser::parseRegisterOperand(MachineOperand &Dest,      return true;    lex();    unsigned SubReg = 0; -  if (Token.is(MIToken::colon)) { +  if (Token.is(MIToken::dot)) {      if (parseSubRegisterIndex(SubReg))        return true;      if (!TargetRegisterInfo::isVirtualRegister(Reg)) diff --git a/llvm/lib/CodeGen/MIRPrinter.cpp b/llvm/lib/CodeGen/MIRPrinter.cpp index b5c4008e55b..940f2cd5b3a 100644 --- a/llvm/lib/CodeGen/MIRPrinter.cpp +++ b/llvm/lib/CodeGen/MIRPrinter.cpp @@ -779,7 +779,7 @@ void MIPrinter::print(const MachineOperand &Op, const TargetRegisterInfo *TRI,      printReg(Op.getReg(), OS, TRI);      // Print the sub register.      if (Op.getSubReg() != 0) -      OS << ':' << TRI->getSubRegIndexName(Op.getSubReg()); +      OS << '.' << TRI->getSubRegIndexName(Op.getSubReg());      if (ShouldPrintRegisterTies && Op.isTied() && !Op.isDef())        OS << "(tied-def " << Op.getParent()->findTiedOperandIdx(I) << ")";      assert((!IsDef || MRI) && "for IsDef, MRI must be provided"); | 

