regpressure: Fix getMaxUpwardPressureDelta.
[oota-llvm.git] / lib / CodeGen / RegisterPressure.cpp
index 53036c7b84d95cff8277927b7f16a84f6ffbb732..fbd08cb575aa29638d2bd01fb0883b22a1e66ec9 100644 (file)
@@ -629,13 +629,17 @@ getMaxUpwardPressureDelta(const MachineInstr *MI, RegPressureDelta &Delta) {
   // Generate liveness for uses.
   for (unsigned i = 0, e = PhysRegOpers.Uses.size(); i < e; ++i) {
     unsigned Reg = PhysRegOpers.Uses[i];
-    if (!hasRegAlias(Reg, LivePhysRegs, TRI)) {
+    if (!hasRegAlias(Reg, LivePhysRegs, TRI)
+        && (findRegAlias(Reg, PhysRegOpers.Defs, TRI)
+            == PhysRegOpers.Defs.end())) {
       increasePhysRegPressure(Reg);
     }
   }
   for (unsigned i = 0, e = VirtRegOpers.Uses.size(); i < e; ++i) {
     unsigned Reg = VirtRegOpers.Uses[i];
-    if (!LiveVirtRegs.count(Reg)) {
+    if (!LiveVirtRegs.count(Reg)
+        && (std::find(VirtRegOpers.Defs.begin(), VirtRegOpers.Defs.end(), Reg)
+            != VirtRegOpers.Defs.end())) {
       increaseVirtRegPressure(Reg);
     }
   }