mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 11:42:57 +01:00
Fix a logic error. An instruction that has a live physical register def cannot be CSE'ed, but it *can* be used to replace a common subexpression.
llvm-svn: 97688
This commit is contained in:
parent
7310728cf9
commit
9729f2a2b4
@ -128,8 +128,6 @@ bool MachineCSE::ProcessBlock(MachineDomTreeNode *Node) {
|
||||
if (TII->isMoveInstr(*MI, SrcReg, DstReg, SrcSubIdx, DstSubIdx) ||
|
||||
MI->isExtractSubreg() || MI->isInsertSubreg() || MI->isSubregToReg())
|
||||
continue;
|
||||
if (hasLivePhysRegDefUse(MI))
|
||||
continue;
|
||||
|
||||
bool FoundCSE = VNT.count(MI);
|
||||
if (!FoundCSE) {
|
||||
@ -138,6 +136,11 @@ bool MachineCSE::ProcessBlock(MachineDomTreeNode *Node) {
|
||||
FoundCSE = VNT.count(MI);
|
||||
}
|
||||
|
||||
// If the instruction defines a physical register and the value *may* be
|
||||
// used, then it's not safe to replace it with a common subexpression.
|
||||
if (FoundCSE && hasLivePhysRegDefUse(MI))
|
||||
FoundCSE = false;
|
||||
|
||||
if (!FoundCSE) {
|
||||
VNT.insert(MI, CurrVN++);
|
||||
Exps.push_back(MI);
|
||||
|
Loading…
Reference in New Issue
Block a user