mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-07 21:20:18 +00:00
Modify getRegisterValueType() to allow for a register being in mutliple
register classes. Before, MVT::Other would be returned anytime a reg was in multiple register classes. Now, MVT::Other is only returned if the types for those register classes differ. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67714 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e597282fe5
commit
54f302272c
@ -175,12 +175,33 @@ struct PatternSortingPredicate {
|
||||
}
|
||||
};
|
||||
|
||||
/// getRegisterValueType - Look up and return the first ValueType of specified
|
||||
/// RegisterClass record
|
||||
/// getRegisterValueType - Look up and return the ValueType of the specified
|
||||
/// register. If the register is a member of multiple register classes which
|
||||
/// have different associated types, return MVT::Other.
|
||||
static MVT::SimpleValueType getRegisterValueType(Record *R, const CodeGenTarget &T) {
|
||||
if (const CodeGenRegisterClass *RC = T.getRegisterClassForRegister(R))
|
||||
return RC->getValueTypeNum(0);
|
||||
return MVT::Other;
|
||||
int FoundRC = 0;
|
||||
MVT::SimpleValueType VT = MVT::Other;
|
||||
const std::vector<CodeGenRegisterClass> &RCs = T.getRegisterClasses();
|
||||
std::vector<CodeGenRegisterClass>::const_iterator RC;
|
||||
std::vector<Record*>::const_iterator Element;
|
||||
|
||||
for (RC = RCs.begin() ; RC != RCs.end() ; RC++) {
|
||||
Element = find((*RC).Elements.begin(), (*RC).Elements.end(), R);
|
||||
if (Element != (*RC).Elements.end()) {
|
||||
if (!FoundRC) {
|
||||
FoundRC = 1;
|
||||
VT = (*RC).getValueTypeNum(0);
|
||||
} else {
|
||||
// In multiple RC's
|
||||
if (VT != (*RC).getValueTypeNum(0)) {
|
||||
// Types of the RC's do not agree. Return MVT::Other. The
|
||||
// target is responsible for handling this.
|
||||
return MVT::Other;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return VT;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user