From: Jakob Stoklund Olesen Date: Thu, 15 Sep 2011 06:27:32 +0000 (+0000) Subject: Revert r139782, "RemoveCopyByCommutingDef doesn't need hasPHIKill()." X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=9b82d50d209adf915d3c7f871dc82cb73349db80;p=oota-llvm.git Revert r139782, "RemoveCopyByCommutingDef doesn't need hasPHIKill()." It does, after all. RemoveCopyByCommutingDef rewrites the uses of one particular value number in A. It doesn't know how to rewrite phi uses, so there can't be any. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@139787 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/RegisterCoalescer.cpp b/lib/CodeGen/RegisterCoalescer.cpp index 629e7c3e352..674d075c4f8 100644 --- a/lib/CodeGen/RegisterCoalescer.cpp +++ b/lib/CodeGen/RegisterCoalescer.cpp @@ -566,16 +566,14 @@ bool RegisterCoalescer::AdjustCopiesBackFrom(const CoalescerPair &CP, } /// HasOtherReachingDefs - Return true if there are definitions of IntB -/// other than BValNo val# that can reach uses of AValno val# of IntA, or any -/// of its phis. +/// other than BValNo val# that can reach uses of AValno val# of IntA. bool RegisterCoalescer::HasOtherReachingDefs(LiveInterval &IntA, - LiveInterval &IntB, - VNInfo *AValNo, - VNInfo *BValNo) { + LiveInterval &IntB, + VNInfo *AValNo, + VNInfo *BValNo) { for (LiveInterval::iterator AI = IntA.begin(), AE = IntA.end(); AI != AE; ++AI) { - if (AI->valno != AValNo && !AI->valno->isPHIDef()) - continue; + if (AI->valno != AValNo) continue; LiveInterval::Ranges::iterator BI = std::upper_bound(IntB.ranges.begin(), IntB.ranges.end(), AI->start); if (BI != IntB.ranges.begin()) @@ -647,7 +645,9 @@ bool RegisterCoalescer::RemoveCopyByCommutingDef(const CoalescerPair &CP, VNInfo *AValNo = IntA.getVNInfoAt(CopyIdx.getUseIndex()); assert(AValNo && "COPY source not live"); - if (AValNo->isPHIDef() || AValNo->isUnused()) + // If other defs can reach uses of this def, then it's not safe to perform + // the optimization. + if (AValNo->isPHIDef() || AValNo->isUnused() || AValNo->hasPHIKill()) return false; MachineInstr *DefMI = LIS->getInstructionFromIndex(AValNo->def); if (!DefMI)