[llvm-commits] [llvm] r91376 - in /llvm/trunk: include/llvm/CodeGen/MachineBasicBlock.h lib/CodeGen/BranchFolding.cpp lib/CodeGen/MachineBasicBlock.cpp

Bill Wendling isanbard at gmail.com
Mon Dec 14 16:39:25 PST 2009


Author: void
Date: Mon Dec 14 18:39:24 2009
New Revision: 91376

URL: http://llvm.org/viewvc/llvm-project?rev=91376&view=rev
Log:
Revert these. They may have been causing 483_xalancbmk to fail:

$ svn merge -c -91161 https://llvm.org/svn/llvm-project/llvm/trunk
--- Reverse-merging r91161 into '.':
U    lib/CodeGen/BranchFolding.cpp
U    lib/CodeGen/MachineBasicBlock.cpp
$ svn merge -c -91113 https://llvm.org/svn/llvm-project/llvm/trunk
--- Reverse-merging r91113 into '.':
G    lib/CodeGen/MachineBasicBlock.cpp
$ svn merge -c -91101 https://llvm.org/svn/llvm-project/llvm/trunk
--- Reverse-merging r91101 into '.':
U    include/llvm/CodeGen/MachineBasicBlock.h
G    lib/CodeGen/MachineBasicBlock.cpp
$ svn merge -c -91092 https://llvm.org/svn/llvm-project/llvm/trunk
--- Reverse-merging r91092 into '.':
G    include/llvm/CodeGen/MachineBasicBlock.h
G    lib/CodeGen/MachineBasicBlock.cpp


Modified:
    llvm/trunk/include/llvm/CodeGen/MachineBasicBlock.h
    llvm/trunk/lib/CodeGen/BranchFolding.cpp
    llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp

Modified: llvm/trunk/include/llvm/CodeGen/MachineBasicBlock.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/MachineBasicBlock.h?rev=91376&r1=91375&r2=91376&view=diff

==============================================================================
--- llvm/trunk/include/llvm/CodeGen/MachineBasicBlock.h (original)
+++ llvm/trunk/include/llvm/CodeGen/MachineBasicBlock.h Mon Dec 14 18:39:24 2009
@@ -327,11 +327,6 @@
   /// 'Old', change the code and CFG so that it branches to 'New' instead.
   void ReplaceUsesOfBlockWith(MachineBasicBlock *Old, MachineBasicBlock *New);
 
-  /// BranchesToLandingPad - The basic block is a landing pad or branches only
-  /// to a landing pad. No other instructions are present other than the
-  /// unconditional branch.
-  bool BranchesToLandingPad(const MachineBasicBlock *MBB) const;
-
   /// CorrectExtraCFGEdges - Various pieces of code can cause excess edges in
   /// the CFG to be inserted.  If we have proven that MBB can only branch to
   /// DestA and DestB, remove any other MBB successors from the CFG. DestA and

Modified: llvm/trunk/lib/CodeGen/BranchFolding.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/BranchFolding.cpp?rev=91376&r1=91375&r2=91376&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/BranchFolding.cpp (original)
+++ llvm/trunk/lib/CodeGen/BranchFolding.cpp Mon Dec 14 18:39:24 2009
@@ -1205,11 +1205,11 @@
     }
   }
 
-  // If the prior block doesn't fall through into this block and if this block
-  // doesn't fall through into some other block and it's not branching only to a
-  // landing pad, then see if we can find a place to move this block where a
-  // fall-through will happen.
-  if (!PrevBB.canFallThrough() && !MBB->BranchesToLandingPad(MBB)) {
+  // If the prior block doesn't fall through into this block, and if this
+  // block doesn't fall through into some other block, see if we can find a
+  // place to move this block where a fall-through will happen.
+  if (!PrevBB.canFallThrough()) {
+
     // Now we know that there was no fall-through into this block, check to
     // see if it has a fall-through into its successor.
     bool CurFallsThru = MBB->canFallThrough();
@@ -1221,32 +1221,28 @@
            E = MBB->pred_end(); PI != E; ++PI) {
         // Analyze the branch at the end of the pred.
         MachineBasicBlock *PredBB = *PI;
-        MachineFunction::iterator PredNextBB = PredBB; ++PredNextBB;
+        MachineFunction::iterator PredFallthrough = PredBB; ++PredFallthrough;
         MachineBasicBlock *PredTBB, *PredFBB;
         SmallVector<MachineOperand, 4> PredCond;
-        if (PredBB != MBB && !PredBB->canFallThrough()
-            && !TII->AnalyzeBranch(*PredBB, PredTBB, PredFBB, PredCond, true)
+        if (PredBB != MBB && !PredBB->canFallThrough() &&
+            !TII->AnalyzeBranch(*PredBB, PredTBB, PredFBB, PredCond, true)
             && (!CurFallsThru || !CurTBB || !CurFBB)
             && (!CurFallsThru || MBB->getNumber() >= PredBB->getNumber())) {
-          // If the current block doesn't fall through, just move it.  If the
-          // current block can fall through and does not end with a conditional
-          // branch, we need to append an unconditional jump to the (current)
-          // next block.  To avoid a possible compile-time infinite loop, move
-          // blocks only backward in this case.
-          // 
-          // Also, if there are already 2 branches here, we cannot add a third.
-          // I.e. we have the case:
-          // 
-          //     Bcc next
-          //     B elsewhere
-          //   next:
+          // If the current block doesn't fall through, just move it.
+          // If the current block can fall through and does not end with a
+          // conditional branch, we need to append an unconditional jump to
+          // the (current) next block.  To avoid a possible compile-time
+          // infinite loop, move blocks only backward in this case.
+          // Also, if there are already 2 branches here, we cannot add a third;
+          // this means we have the case
+          // Bcc next
+          // B elsewhere
+          // next:
           if (CurFallsThru) {
-            MachineBasicBlock *NextBB =
-              llvm::next(MachineFunction::iterator(MBB));
+            MachineBasicBlock *NextBB = llvm::next(MachineFunction::iterator(MBB));
             CurCond.clear();
             TII->InsertBranch(*MBB, NextBB, 0, CurCond);
           }
-
           MBB->moveAfter(PredBB);
           MadeChange = true;
           goto ReoptimizeBlock;

Modified: llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp?rev=91376&r1=91375&r2=91376&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp (original)
+++ llvm/trunk/lib/CodeGen/MachineBasicBlock.cpp Mon Dec 14 18:39:24 2009
@@ -13,16 +13,15 @@
 
 #include "llvm/CodeGen/MachineBasicBlock.h"
 #include "llvm/BasicBlock.h"
-#include "llvm/ADT/SmallSet.h"
-#include "llvm/Assembly/Writer.h"
 #include "llvm/CodeGen/MachineFunction.h"
+#include "llvm/Target/TargetRegisterInfo.h"
 #include "llvm/Target/TargetData.h"
 #include "llvm/Target/TargetInstrDesc.h"
 #include "llvm/Target/TargetInstrInfo.h"
 #include "llvm/Target/TargetMachine.h"
-#include "llvm/Target/TargetRegisterInfo.h"
 #include "llvm/Support/LeakDetector.h"
 #include "llvm/Support/raw_ostream.h"
+#include "llvm/Assembly/Writer.h"
 #include <algorithm>
 using namespace llvm;
 
@@ -449,28 +448,10 @@
   addSuccessor(New);
 }
 
-/// BranchesToLandingPad - The basic block is a landing pad or branches only to
-/// a landing pad. No other instructions are present other than the
-/// unconditional branch.
-bool
-MachineBasicBlock::BranchesToLandingPad(const MachineBasicBlock *MBB) const {
-  SmallSet<const MachineBasicBlock*, 32> Visited;
-  const MachineBasicBlock *CurMBB = MBB;
-
-  while (!CurMBB->isLandingPad()) {
-    if (CurMBB->succ_size() != 1) break;
-    if (!Visited.insert(CurMBB)) break;
-    CurMBB = *CurMBB->succ_begin();
-  }
-
-  return CurMBB->isLandingPad();
-}
-
 /// CorrectExtraCFGEdges - Various pieces of code can cause excess edges in the
 /// CFG to be inserted.  If we have proven that MBB can only branch to DestA and
 /// DestB, remove any other MBB successors from the CFG.  DestA and DestB can
 /// be null.
-/// 
 /// Besides DestA and DestB, retain other edges leading to LandingPads
 /// (currently there can be only one; we don't check or require that here).
 /// Note it is possible that DestA and/or DestB are LandingPads.
@@ -500,17 +481,16 @@
   }
   
   MachineBasicBlock::succ_iterator SI = succ_begin();
-  const MachineBasicBlock *OrigDestA = DestA, *OrigDestB = DestB;
+  MachineBasicBlock *OrigDestA = DestA, *OrigDestB = DestB;
   while (SI != succ_end()) {
-    const MachineBasicBlock *MBB = *SI;
-    if (MBB == DestA) {
+    if (*SI == DestA) {
       DestA = 0;
       ++SI;
-    } else if (MBB == DestB) {
+    } else if (*SI == DestB) {
       DestB = 0;
       ++SI;
-    } else if (MBB != OrigDestA && MBB != OrigDestB &&
-               BranchesToLandingPad(MBB)) {
+    } else if ((*SI)->isLandingPad() && 
+               *SI!=OrigDestA && *SI!=OrigDestB) {
       ++SI;
     } else {
       // Otherwise, this is a superfluous edge, remove it.
@@ -518,14 +498,12 @@
       MadeChange = true;
     }
   }
-
   if (!AddedFallThrough) {
     assert(DestA == 0 && DestB == 0 &&
            "MachineCFG is missing edges!");
   } else if (isCond) {
     assert(DestA == 0 && "MachineCFG is missing edges!");
   }
-
   return MadeChange;
 }
 





More information about the llvm-commits mailing list