diff options
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/MIRParser/MILexer.cpp | 23 | ||||
| -rw-r--r-- | llvm/lib/CodeGen/TargetRegisterInfo.cpp | 6 |
2 files changed, 19 insertions, 10 deletions
diff --git a/llvm/lib/CodeGen/MIRParser/MILexer.cpp b/llvm/lib/CodeGen/MIRParser/MILexer.cpp index 9f41660684a..7104c020912 100644 --- a/llvm/lib/CodeGen/MIRParser/MILexer.cpp +++ b/llvm/lib/CodeGen/MIRParser/MILexer.cpp @@ -410,17 +410,26 @@ static bool isRegisterChar(char C) { return isIdentifierChar(C) && C != '.'; } -static Cursor maybeLexRegister(Cursor C, MIToken &Token) { - if (C.peek() != '%') +static Cursor maybeLexRegister(Cursor C, MIToken &Token, + ErrorCallbackType ErrorCallback) { + if (C.peek() != '%' && C.peek() != '$') return None; - if (isdigit(C.peek(1))) - return lexVirtualRegister(C, Token); + + if (C.peek() == '%') { + if (isdigit(C.peek(1))) + return lexVirtualRegister(C, Token); + + // ErrorCallback(Token.location(), "Named vregs are not yet supported."); + return None; + } + + assert(C.peek() == '$'); auto Range = C; - C.advance(); // Skip '%' + C.advance(); // Skip '$' while (isRegisterChar(C.peek())) C.advance(); Token.reset(MIToken::NamedRegister, Range.upto(C)) - .setStringValue(Range.upto(C).drop_front(1)); // Drop the '%' + .setStringValue(Range.upto(C).drop_front(1)); // Drop the '$' return C; } @@ -642,7 +651,7 @@ StringRef llvm::lexMIToken(StringRef Source, MIToken &Token, return R.remaining(); if (Cursor R = maybeLexIRValue(C, Token, ErrorCallback)) return R.remaining(); - if (Cursor R = maybeLexRegister(C, Token)) + if (Cursor R = maybeLexRegister(C, Token, ErrorCallback)) return R.remaining(); if (Cursor R = maybeLexGlobalValue(C, Token, ErrorCallback)) return R.remaining(); diff --git a/llvm/lib/CodeGen/TargetRegisterInfo.cpp b/llvm/lib/CodeGen/TargetRegisterInfo.cpp index f03c3b8300f..d6064ca6b6f 100644 --- a/llvm/lib/CodeGen/TargetRegisterInfo.cpp +++ b/llvm/lib/CodeGen/TargetRegisterInfo.cpp @@ -89,15 +89,15 @@ Printable printReg(unsigned Reg, const TargetRegisterInfo *TRI, unsigned SubIdx) { return Printable([Reg, TRI, SubIdx](raw_ostream &OS) { if (!Reg) - OS << "%noreg"; + OS << "$noreg"; else if (TargetRegisterInfo::isStackSlot(Reg)) OS << "SS#" << TargetRegisterInfo::stackSlot2Index(Reg); else if (TargetRegisterInfo::isVirtualRegister(Reg)) OS << '%' << TargetRegisterInfo::virtReg2Index(Reg); else if (!TRI) - OS << '%' << "physreg" << Reg; + OS << '$' << "physreg" << Reg; else if (Reg < TRI->getNumRegs()) { - OS << '%'; + OS << '$'; printLowerCase(TRI->getName(Reg), OS); } else llvm_unreachable("Register kind is unsupported."); |

