mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 19:52:54 +01:00
Prevent unnecessary CopyToReg when the same HW register appears in two spots
in the pattern. llvm-svn: 25437
This commit is contained in:
parent
ddb170b73e
commit
49fa8f2cea
@ -1835,6 +1835,7 @@ private:
|
||||
std::map<std::string, Record*> OperatorMap;
|
||||
// Names of all the folded nodes which produce chains.
|
||||
std::vector<std::pair<std::string, unsigned> > FoldedChains;
|
||||
std::set<std::string> Duplicates;
|
||||
unsigned TmpNo;
|
||||
|
||||
public:
|
||||
@ -1952,6 +1953,7 @@ public:
|
||||
// previously named thing.
|
||||
OS << " if (" << VarMapEntry << " != " << RootName << OpNo
|
||||
<< ") goto P" << PatternNo << "Fail;\n";
|
||||
Duplicates.insert(RootName + utostr(OpNo));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@ -2351,6 +2353,13 @@ private:
|
||||
EmitCopyToRegs(Child, RootName + utostr(OpNo), ChainEmitted);
|
||||
} else {
|
||||
if (DefInit *DI = dynamic_cast<DefInit*>(Child->getLeafValue())) {
|
||||
if (!Child->getName().empty()) {
|
||||
std::string Name = RootName + utostr(OpNo);
|
||||
if (Duplicates.find(Name) != Duplicates.end())
|
||||
// A duplicate! Do not emit a copy for this node.
|
||||
continue;
|
||||
}
|
||||
|
||||
Record *RR = DI->getDef();
|
||||
if (RR->isSubClassOf("Register")) {
|
||||
MVT::ValueType RVT = getRegisterValueType(RR, T);
|
||||
|
Loading…
Reference in New Issue
Block a user