[llvm-commits] [llvm] r139782 - /llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp

Jakob Stoklund Olesen stoklund at 2pi.dk
Wed Sep 14 22:03:50 PDT 2011


Author: stoklund
Date: Thu Sep 15 00:03:50 2011
New Revision: 139782

URL: http://llvm.org/viewvc/llvm-project?rev=139782&view=rev
Log:
RemoveCopyByCommutingDef doesn't need hasPHIKill().

Instead, let HasOtherReachingDefs() test for defs in B that overlap any
phi-defs in A as well.  This test is slightly different, but almost
identical.

A perfectly precise test would only check those phi-defs in A that are
reachable from AValNo.

Modified:
    llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp

Modified: llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp?rev=139782&r1=139781&r2=139782&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp (original)
+++ llvm/trunk/lib/CodeGen/RegisterCoalescer.cpp Thu Sep 15 00:03:50 2011
@@ -566,14 +566,16 @@
 }
 
 /// HasOtherReachingDefs - Return true if there are definitions of IntB
-/// other than BValNo val# that can reach uses of AValno val# of IntA.
+/// other than BValNo val# that can reach uses of AValno val# of IntA, or any
+/// of its phis.
 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) continue;
+    if (AI->valno != AValNo && !AI->valno->isPHIDef())
+      continue;
     LiveInterval::Ranges::iterator BI =
       std::upper_bound(IntB.ranges.begin(), IntB.ranges.end(), AI->start);
     if (BI != IntB.ranges.begin())
@@ -645,9 +647,7 @@
   VNInfo *AValNo = IntA.getVNInfoAt(CopyIdx.getUseIndex());
   assert(AValNo && "COPY source not live");
 
-  // 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())
+  if (AValNo->isPHIDef() || AValNo->isUnused())
     return false;
   MachineInstr *DefMI = LIS->getInstructionFromIndex(AValNo->def);
   if (!DefMI)





More information about the llvm-commits mailing list