[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