diff options
| author | Chris Lattner <sabre@nondot.org> | 2001-11-01 07:00:51 +0000 | 
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2001-11-01 07:00:51 +0000 | 
| commit | 71c842cddf53f1ba9e9add98a9792ddd5714867a (patch) | |
| tree | f20530315e029fd808513c1922abec45b5e8b2ea /llvm | |
| parent | 7567f6c15fd73a33c51e474fdf68ca8c4b80f3f4 (diff) | |
| download | bcm5719-llvm-71c842cddf53f1ba9e9add98a9792ddd5714867a.tar.gz bcm5719-llvm-71c842cddf53f1ba9e9add98a9792ddd5714867a.zip  | |
Add DCE as integral part of the level raising to avoid processing instructions that are dead
llvm-svn: 1084
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Transforms/LevelRaise.cpp | 13 | 
1 files changed, 9 insertions, 4 deletions
diff --git a/llvm/lib/Transforms/LevelRaise.cpp b/llvm/lib/Transforms/LevelRaise.cpp index 61610acae91..300224e3409 100644 --- a/llvm/lib/Transforms/LevelRaise.cpp +++ b/llvm/lib/Transforms/LevelRaise.cpp @@ -37,6 +37,7 @@  #include "llvm/ConstPoolVals.h"  #include "llvm/Target/TargetData.h"  #include "llvm/Optimizations/ConstantHandling.h" +#include "llvm/Optimizations/DCE.h"  #include <map>  #include <algorithm> @@ -137,7 +138,8 @@ static const Type *getStructOffsetType(const Type *Ty, unsigned &Offset,      if (Offset >= SL->MemberOffsets[i] && Offset <  SL->MemberOffsets[i+1])        break; -  assert(Offset >= SL->MemberOffsets[i] && Offset <  SL->MemberOffsets[i+1]); +  assert(Offset >= SL->MemberOffsets[i] && +         (i == SL->MemberOffsets.size()-1 || Offset <  SL->MemberOffsets[i+1]));    // Make sure to save the current index...    Offsets.push_back(ConstPoolUInt::get(Type::UByteTy, i)); @@ -459,8 +461,6 @@ static bool PeepholeMallocInst(BasicBlock *BB, BasicBlock::iterator &BI) {  static bool PeepholeOptimize(BasicBlock *BB, BasicBlock::iterator &BI) {    Instruction *I = *BI; -  // TODO: replace this with a DCE call -  if (I->use_size() == 0 && I->getType() != Type::VoidTy) return false;    if (CastInst *CI = dyn_cast<CastInst>(I)) {      Value       *Src    = CI->getOperand(0); @@ -642,7 +642,8 @@ static bool DoRaisePass(Method *M) {      BasicBlock::InstListType &BIL = BB->getInstList();      for (BasicBlock::iterator BI = BB->begin(); BI != BB->end();) { -      if (PeepholeOptimize(BB, BI)) +      if (opt::DeadCodeElimination::dceInstruction(BIL, BI) || +          PeepholeOptimize(BB, BI))          Changed = true;        else          ++BI; @@ -659,6 +660,10 @@ bool RaisePointerReferences::doit(Method *M) {    if (M->isExternal()) return false;    bool Changed = false; +#ifdef DEBUG_PEEPHOLE_INSTS +  cerr << "\n\n\nStarting to work on Method '" << M->getName() << "'\n"; +#endif +    while (DoRaisePass(M)) Changed = true;    // PtrCasts - Keep a mapping between the pointer values (the key of the   | 

