If a virtual register is already marked alive in this block, that means it is
authorEvan Cheng <evan.cheng@apple.com>
Fri, 9 Mar 2007 09:48:56 +0000 (09:48 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Fri, 9 Mar 2007 09:48:56 +0000 (09:48 +0000)
alive in one of the successor block. Do not add it to the kill list.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35041 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/LiveVariables.cpp

index aec62dfcdf6f0e839d53e4bab23a62bcf14b036f..539799ec585ea992cc7cca69e02fd1e9f140e9d7 100644 (file)
@@ -152,7 +152,12 @@ void LiveVariables::HandleVirtRegUse(VarInfo &VRInfo, MachineBasicBlock *MBB,
          "Should have kill for defblock!");
 
   // Add a new kill entry for this basic block.
-  VRInfo.Kills.push_back(MI);
+  unsigned BBNum = MBB->getNumber();
+  // If this virtual register is already marked as alive in this basic block,
+  // that means it is alive in at least one of the successor block, it's not
+  // a kill.
+  if (VRInfo.AliveBlocks.size() <= BBNum || !VRInfo.AliveBlocks[BBNum])
+    VRInfo.Kills.push_back(MI);
 
   // Update all dominating blocks to mark them known live.
   for (MachineBasicBlock::const_pred_iterator PI = MBB->pred_begin(),