From: Bill Wendling Date: Tue, 15 Dec 2009 00:39:24 +0000 (+0000) Subject: Revert these. They may have been causing 483_xalancbmk to fail: X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=43cf6c3939176e8d87719516f0b2e4c6c346f340;p=oota-llvm.git 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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91376 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/CodeGen/MachineBasicBlock.h b/include/llvm/CodeGen/MachineBasicBlock.h index 7e3ce6bd7c9..6b4c64055bf 100644 --- a/include/llvm/CodeGen/MachineBasicBlock.h +++ b/include/llvm/CodeGen/MachineBasicBlock.h @@ -327,11 +327,6 @@ public: /// '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 diff --git a/lib/CodeGen/BranchFolding.cpp b/lib/CodeGen/BranchFolding.cpp index 7ac8bda7a35..3887e6d44e4 100644 --- a/lib/CodeGen/BranchFolding.cpp +++ b/lib/CodeGen/BranchFolding.cpp @@ -1205,11 +1205,11 @@ ReoptimizeBlock: } } - // 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 @@ ReoptimizeBlock: 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 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; diff --git a/lib/CodeGen/MachineBasicBlock.cpp b/lib/CodeGen/MachineBasicBlock.cpp index 3b4b080c63c..a58286d61b8 100644 --- a/lib/CodeGen/MachineBasicBlock.cpp +++ b/lib/CodeGen/MachineBasicBlock.cpp @@ -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 using namespace llvm; @@ -449,28 +448,10 @@ void MachineBasicBlock::ReplaceUsesOfBlockWith(MachineBasicBlock *Old, 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 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 @@ bool MachineBasicBlock::CorrectExtraCFGEdges(MachineBasicBlock *DestA, } 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 @@ bool MachineBasicBlock::CorrectExtraCFGEdges(MachineBasicBlock *DestA, 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; }