[llvm] r286911 - MIRParser: Add support for parsing vreg reg alloc hints
Tom Stellard via llvm-commits
llvm-commits at lists.llvm.org
Mon Nov 14 16:03:14 PST 2016
Author: tstellar
Date: Mon Nov 14 18:03:14 2016
New Revision: 286911
URL: http://llvm.org/viewvc/llvm-project?rev=286911&view=rev
Log:
MIRParser: Add support for parsing vreg reg alloc hints
Reviewers: qcolombet, MatzeB
Subscribers: wdng, llvm-commits
Differential Revision: https://reviews.llvm.org/D26573
Modified:
llvm/trunk/lib/CodeGen/MIRParser/MIParser.cpp
llvm/trunk/lib/CodeGen/MIRParser/MIParser.h
llvm/trunk/lib/CodeGen/MIRParser/MIRParser.cpp
llvm/trunk/test/CodeGen/MIR/X86/expected-named-register-in-allocation-hint.mir
Modified: llvm/trunk/lib/CodeGen/MIRParser/MIParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MIRParser/MIParser.cpp?rev=286911&r1=286910&r2=286911&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/MIRParser/MIParser.cpp (original)
+++ llvm/trunk/lib/CodeGen/MIRParser/MIParser.cpp Mon Nov 14 18:03:14 2016
@@ -125,6 +125,7 @@ public:
bool parseStandaloneMBB(MachineBasicBlock *&MBB);
bool parseStandaloneNamedRegister(unsigned &Reg);
bool parseStandaloneVirtualRegister(VRegInfo *&Info);
+ bool parseStandaloneRegister(unsigned &Reg);
bool parseStandaloneStackObject(int &FI);
bool parseStandaloneMDNode(MDNode *&Node);
@@ -728,6 +729,22 @@ bool MIParser::parseStandaloneVirtualReg
return false;
}
+bool MIParser::parseStandaloneRegister(unsigned &Reg) {
+ lex();
+ if (Token.isNot(MIToken::NamedRegister) &&
+ Token.isNot(MIToken::VirtualRegister))
+ return error("expected either a named or virtual register");
+
+ VRegInfo *Info;
+ if (parseRegister(Reg, Info))
+ return true;
+
+ lex();
+ if (Token.isNot(MIToken::Eof))
+ return error("expected end of string after the register reference");
+ return false;
+}
+
bool MIParser::parseStandaloneStackObject(int &FI) {
lex();
if (Token.isNot(MIToken::StackObject))
@@ -2230,6 +2247,12 @@ bool llvm::parseMBBReference(PerFunction
return MIParser(PFS, Error, Src).parseStandaloneMBB(MBB);
}
+bool llvm::parseRegisterReference(PerFunctionMIParsingState &PFS,
+ unsigned &Reg, StringRef Src,
+ SMDiagnostic &Error) {
+ return MIParser(PFS, Error, Src).parseStandaloneRegister(Reg);
+}
+
bool llvm::parseNamedRegisterReference(PerFunctionMIParsingState &PFS,
unsigned &Reg, StringRef Src,
SMDiagnostic &Error) {
Modified: llvm/trunk/lib/CodeGen/MIRParser/MIParser.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MIRParser/MIParser.h?rev=286911&r1=286910&r2=286911&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/MIRParser/MIParser.h (original)
+++ llvm/trunk/lib/CodeGen/MIRParser/MIParser.h Mon Nov 14 18:03:14 2016
@@ -96,6 +96,10 @@ bool parseMBBReference(PerFunctionMIPars
MachineBasicBlock *&MBB, StringRef Src,
SMDiagnostic &Error);
+bool parseRegisterReference(PerFunctionMIParsingState &PFS,
+ unsigned &Reg, StringRef Src,
+ SMDiagnostic &Error);
+
bool parseNamedRegisterReference(PerFunctionMIParsingState &PFS, unsigned &Reg,
StringRef Src, SMDiagnostic &Error);
Modified: llvm/trunk/lib/CodeGen/MIRParser/MIRParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MIRParser/MIRParser.cpp?rev=286911&r1=286910&r2=286911&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/MIRParser/MIRParser.cpp (original)
+++ llvm/trunk/lib/CodeGen/MIRParser/MIRParser.cpp Mon Nov 14 18:03:14 2016
@@ -439,8 +439,9 @@ bool MIRParserImpl::parseRegisterInfo(Pe
if (Info.Kind != VRegInfo::NORMAL)
return error(VReg.Class.SourceRange.Start,
Twine("preferred register can only be set for normal vregs"));
- if (parseNamedRegisterReference(PFS, Info.PreferredReg,
- VReg.PreferredRegister.Value, Error))
+
+ if (parseRegisterReference(PFS, Info.PreferredReg,
+ VReg.PreferredRegister.Value, Error))
return error(Error, VReg.PreferredRegister.SourceRange);
}
}
Modified: llvm/trunk/test/CodeGen/MIR/X86/expected-named-register-in-allocation-hint.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/MIR/X86/expected-named-register-in-allocation-hint.mir?rev=286911&r1=286910&r2=286911&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/MIR/X86/expected-named-register-in-allocation-hint.mir (original)
+++ llvm/trunk/test/CodeGen/MIR/X86/expected-named-register-in-allocation-hint.mir Mon Nov 14 18:03:14 2016
@@ -1,4 +1,4 @@
-# RUN: not llc -march=x86-64 -run-pass none -o /dev/null %s 2>&1 | FileCheck %s
+# RUN: llc -march=x86-64 -run-pass none -o - %s 2>&1 | FileCheck %s
--- |
@@ -14,7 +14,8 @@ name: test
tracksRegLiveness: true
registers:
- { id: 0, class: gr32 }
- # CHECK: [[@LINE+1]]:48: expected a named register
+ # CHECK: - { id: 1, class: gr32, preferred-register: '%0' }
+ # CHECK: - { id: 2, class: gr32, preferred-register: '%edi' }
- { id: 1, class: gr32, preferred-register: '%0' }
- { id: 2, class: gr32, preferred-register: '%edi' }
body: |
More information about the llvm-commits
mailing list