diff options
| author | Bill Wendling <isanbard@gmail.com> | 2009-01-19 08:46:20 +0000 | 
|---|---|---|
| committer | Bill Wendling <isanbard@gmail.com> | 2009-01-19 08:46:20 +0000 | 
| commit | 534d2e0baef7cc58a780a928b3c083c3948c9dcc (patch) | |
| tree | 2dd903b6f3ee377ca2f95769cf3d35a46d3f3be7 /llvm/lib/Transforms/Utils | |
| parent | 8f367e53c7f5f54dc974304d1baa5e9640f79928 (diff) | |
| download | bcm5719-llvm-534d2e0baef7cc58a780a928b3c083c3948c9dcc.tar.gz bcm5719-llvm-534d2e0baef7cc58a780a928b3c083c3948c9dcc.zip | |
Temporarily revert r62487. It's causing this error during a release bootstrap of
llvm-gcc. Most likely, it's miscompiling one of the "gen*" programs:
/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm-gcc.obj/./prev-gcc/xgcc -B/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm-gcc.obj/./prev-gcc/ -B/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm-gcc.install/i386-apple-darwin9.6.0/bin/ -c -g -O2 -mdynamic-no-pic -DIN_GCC -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -mdynamic-no-pic -DHAVE_CONFIG_H -DGENERATOR_FILE -I. -Ibuild -I../../llvm-gcc.src/gcc -I../../llvm-gcc.src/gcc/build -I../../llvm-gcc.src/gcc/../include -I./../intl -I../../llvm-gcc.src/gcc/../libcpp/include  -I../../llvm-gcc.src/gcc/../libdecnumber -I../libdecnumber -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.obj/include -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/include -DENABLE_LLVM -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.obj/../llvm.src/include  -D_DEBUG  -D_GNU_SOURCE -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS   -o build/gencondmd.o build/gencondmd.c
../../llvm-gcc.src/gcc/config/i386/mmx.md:926: error: expected '}' before ')' token
../../llvm-gcc.src/gcc/config/i386/mmx.md:926: warning: excess elements in struct initializer
../../llvm-gcc.src/gcc/config/i386/mmx.md:926: warning: (near initialization for 'insn_conditions[4]')
../../llvm-gcc.src/gcc/config/i386/mmx.md:926: error: expected '}' before ')' token
../../llvm-gcc.src/gcc/config/i386/mmx.md:926: error: expected ',' or ';' before ')' token
../../llvm-gcc.src/gcc/config/i386/mmx.md:927: error: expected identifier or '(' before ',' token
../../llvm-gcc.src/gcc/config/i386/sse.md:3458: error: expected identifier or '(' before ',' token
...
llvm-svn: 62506
Diffstat (limited to 'llvm/lib/Transforms/Utils')
| -rw-r--r-- | llvm/lib/Transforms/Utils/SimplifyCFG.cpp | 79 | 
1 files changed, 2 insertions, 77 deletions
| diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp index fd3ca9e8439..b0feadffadd 100644 --- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp @@ -21,7 +21,6 @@  #include "llvm/Support/Debug.h"  #include "llvm/Analysis/ConstantFolding.h"  #include "llvm/Transforms/Utils/BasicBlockUtils.h" -#include "llvm/ADT/DenseMap.h"  #include "llvm/ADT/SmallVector.h"  #include "llvm/ADT/SmallPtrSet.h"  #include "llvm/ADT/Statistic.h" @@ -173,74 +172,6 @@ static bool CanPropagatePredecessorsForPHIs(BasicBlock *BB, BasicBlock *Succ) {    return true;  } -/// BlockIsReachableFrom - Return true if there is a path from StartBB to -/// DestBB.  We do this by recursively walking the CFG from DestBB up to StartBB -/// unwind we either reach StartBB or find an unreachable chunk of the CFG. -///  -/// Each entry in VisitedBlocks is either 0 -> not visited, 1 -> known reachable -/// 2 -> known unreachable, 3 -> visitation in progress. -static bool BlockIsReachableFrom(BasicBlock *StartBB, BasicBlock *DestBB, -                               DenseMap<BasicBlock*, unsigned> &VisitedBlocks) { -  if (StartBB == DestBB) return true; -   -  unsigned &BlockEntry = VisitedBlocks[DestBB]; -  if (BlockEntry == 1) return true;       // Known reachable! -  if (BlockEntry == 2 ||                  // Known unreachable. -      BlockEntry == 3)                    // Found a loop. -    return false; -   -  // If BlockEntry is 0, this is the first time we've seen this block.  Mark it -  // as being visited and recurse up predecessors. -  BlockEntry = 3; -   -  for (pred_iterator PI = pred_begin(DestBB), E = pred_end(DestBB); PI != E; -       ++PI) { -    if (BlockIsReachableFrom(StartBB, *PI, VisitedBlocks)) { -      VisitedBlocks[DestBB] = 1; -      return true; -    } -  } -   -  // If we scanned all of our predecessors and we couldn't find a path to  -  // StartBB, then this block must be unreachable for sure.  Record this to -  // prevent visitation of this block in the future. -  VisitedBlocks[DestBB] = 2; -  return false; -} - -/// RemoveUnreachableUsersOf - For each user of Inst, scan up the CFG until we -/// find Inst.  If Inst is found, then the user is live, otherwise it is dead. -/// Remove dead users.  This is basically a poor-man's dominance query, and is -/// worst-case linear time in the number of blocks in the function. -static void RemoveUnreachableUsersOf(Instruction *Inst) { -  DenseMap<BasicBlock*, unsigned> VisitedBlocks; -   -  BasicBlock *InstBB = Inst->getParent(); -  for (Instruction::use_iterator UI = Inst->use_begin(), E = Inst->use_end(); -       UI != E;) { -    Instruction *User = cast<Instruction>(*UI); -    Use &TheUse = UI.getUse(); -     -    if (PHINode *PN = dyn_cast<PHINode>(User)) { -      unsigned UseOp = UI.getOperandNo(); -      ++UI; -       -      if (BlockIsReachableFrom(InstBB, PN->getIncomingBlock(UseOp/2), -                               VisitedBlocks)) -        continue; -    } else { -      ++UI; -      if (BlockIsReachableFrom(InstBB, User->getParent(), -                               VisitedBlocks)) -        continue; -    } -    // If there is no path from Inst to this User, then this user is in dead -    // code.  Just replace uses of Inst with undef. -    TheUse = UndefValue::get(Inst->getType()); -  } -} - -  /// TryToSimplifyUncondBranchFromEmptyBlock - BB contains an unconditional  /// branch to Succ, and contains no instructions other than PHI nodes and the  /// branch.  If possible, eliminate BB. @@ -285,18 +216,12 @@ static bool TryToSimplifyUncondBranchFromEmptyBlock(BasicBlock *BB,    }    if (isa<PHINode>(&BB->front())) { -    SmallVector<BasicBlock*, 16> OldSuccPreds(pred_begin(Succ), -                                              pred_end(Succ)); +    SmallVector<BasicBlock*, 16> +    OldSuccPreds(pred_begin(Succ), pred_end(Succ));      // Move all PHI nodes in BB to Succ if they are alive, otherwise      // delete them.      while (PHINode *PN = dyn_cast<PHINode>(&BB->front())) { -      // The algorithm below will not work if there are users of PN that are in -      // unreachable blocks.  These users will not be properly dominated by the -      // instruction, but the IR is valid because dead code does not need to -      // obey dominance properties. -      RemoveUnreachableUsersOf(PN); -              if (PN->use_empty()) {          // Just remove the dead phi.  This happens if Succ's PHIs were the only          // users of the PHI nodes. | 

