Now with less iterator invalidation, and other forms of crashing!
authorOwen Anderson <resistor@mac.com>
Fri, 12 Jun 2009 21:41:29 +0000 (21:41 +0000)
committerOwen Anderson <resistor@mac.com>
Fri, 12 Jun 2009 21:41:29 +0000 (21:41 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73256 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/LazyLiveness.cpp

index 3ccccd5f5cc6ef12bf669d882b423cb0f5495ab1..85817da2e4f21db05567d92f1ce6864a7b2c0d2c 100644 (file)
@@ -22,6 +22,7 @@
 using namespace llvm;
 
 char LazyLiveness::ID = 0;
+static RegisterPass<LazyLiveness> X("lazy-liveness", "Lazy Liveness Analysis");
 
 void LazyLiveness::computeBackedgeChain(MachineFunction& mf, 
                                         MachineBasicBlock* MBB) {
@@ -65,7 +66,7 @@ bool LazyLiveness::runOnMachineFunction(MachineFunction &mf) {
   // Step 0: Compute preorder numbering for all MBBs.
   unsigned num = 0;
   for (df_iterator<MachineBasicBlock*> DI = df_begin(&*mf.begin());
-       DI != df_end(&*mf.end()); ++DI) {
+       DI != df_end(&*mf.begin()); ++DI) {
     preorder[*DI] = num++;
     rev_preorder.push_back(*DI);
   }
@@ -103,8 +104,10 @@ bool LazyLiveness::runOnMachineFunction(MachineFunction &mf) {
     if (!backedge_target.test(preorder[*POI]))
       for (MachineBasicBlock::succ_iterator SI = (*POI)->succ_begin();
            SI != (*POI)->succ_end(); ++SI)
-        if (!backedges.count(std::make_pair(*POI, *SI)) && tv.count(*SI))
-          tv[*POI]= tv[*SI];
+        if (!backedges.count(std::make_pair(*POI, *SI)) && tv.count(*SI)) {
+          SparseBitVector<128>& PBV = tv[*POI];
+          PBV = tv[*SI];
+        }
   
   for (po_iterator<MachineBasicBlock*> POI = po_begin(&*mf.begin()),
        POE = po_end(&*mf.begin()); POI != POE; ++POI)