mirror of
https://github.com/RPCSX/llvm.git
synced 2025-03-03 10:27:09 +00:00
MIRParser: Add support for parsing vreg reg alloc hints
Reviewers: qcolombet, MatzeB Subscribers: wdng, llvm-commits Differential Revision: https://reviews.llvm.org/D26573 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@286911 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
cc5f8faa1b
commit
5b9e507366
@ -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::parseStandaloneVirtualRegister(VRegInfo *&Info) {
|
||||
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(PerFunctionMIParsingState &PFS,
|
||||
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) {
|
||||
|
@ -96,6 +96,10 @@ bool parseMBBReference(PerFunctionMIParsingState &PFS,
|
||||
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);
|
||||
|
||||
|
@ -439,8 +439,9 @@ bool MIRParserImpl::parseRegisterInfo(PerFunctionMIParsingState &PFS,
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -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: |
|
||||
|
Loading…
x
Reference in New Issue
Block a user