diff options
| author | Matthias Braun <matze@braunis.de> | 2016-07-26 21:49:34 +0000 | 
|---|---|---|
| committer | Matthias Braun <matze@braunis.de> | 2016-07-26 21:49:34 +0000 | 
| commit | 333e468d15dd0b41de1c1e490693a5fd9d4d62df (patch) | |
| tree | 5a354127a5a567a7ff5cf898e8d6e7d394c9d9fe /llvm/lib/CodeGen/MIRParser | |
| parent | 9fab64643dfce6481c5a4897b8b2238cf4e6a7cc (diff) | |
| download | bcm5719-llvm-333e468d15dd0b41de1c1e490693a5fd9d4d62df.tar.gz bcm5719-llvm-333e468d15dd0b41de1c1e490693a5fd9d4d62df.zip | |
MIRParser: Use dot instead of colon to mark subregisters
Change the syntax to use `%0.sub8` to denote a subregister.
This seems like a more natural fit to denote subregisters; I also plan
to introduce a new ":classname" syntax in upcoming patches to denote the
register class of a vreg.
Note that this commit disallows plain identifiers to start with a '.'
character.  This shouldn't affect anything as external names/IR
references are all prefixed with '$'/'%', plain identifiers are only
used for instruction names, register mask names and subreg indexes.
Differential Revision: https://reviews.llvm.org/D22390
llvm-svn: 276815
Diffstat (limited to 'llvm/lib/CodeGen/MIRParser')
| -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 | 
3 files changed, 13 insertions, 5 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)) | 

