diff options
author | Devang Patel <dpatel@apple.com> | 2009-02-24 00:05:16 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2009-02-24 00:05:16 +0000 |
commit | e288082644eb45e09cbcab246adc942b0fe8a591 (patch) | |
tree | ba53b7a43f6e7fc306d7d99a36e5487478b23633 /llvm/lib/Transforms/Utils/BasicBlockUtils.cpp | |
parent | 6ced076e4c609496562b6daa7310c119db8d4713 (diff) | |
download | llvm-e288082644eb45e09cbcab246adc942b0fe8a591.zip llvm-e288082644eb45e09cbcab246adc942b0fe8a591.tar.gz llvm-e288082644eb45e09cbcab246adc942b0fe8a591.tar.bz2 |
While folding unconditional return move DbgRegionEndInst into the predecessor, instead of removing it. This fixes following tests from llvmgcc42 testsuite.
gcc.c-torture/execute/20000605-3.c
gcc.c-torture/execute/20020619-1.c
gcc.c-torture/execute/20030920-1.c
gcc.c-torture/execute/loop-ivopts-1.c
llvm-svn: 65353
Diffstat (limited to 'llvm/lib/Transforms/Utils/BasicBlockUtils.cpp')
-rw-r--r-- | llvm/lib/Transforms/Utils/BasicBlockUtils.cpp | 24 |
1 files changed, 2 insertions, 22 deletions
diff --git a/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp b/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp index 964fcc0..7b633b2 100644 --- a/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp +++ b/llvm/lib/Transforms/Utils/BasicBlockUtils.cpp @@ -15,7 +15,6 @@ #include "llvm/Transforms/Utils/BasicBlockUtils.h" #include "llvm/Function.h" #include "llvm/Instructions.h" -#include "llvm/IntrinsicInst.h" #include "llvm/Constant.h" #include "llvm/Type.h" #include "llvm/Analysis/AliasAnalysis.h" @@ -32,7 +31,7 @@ void llvm::DeleteDeadBlock(BasicBlock *BB) { // Can delete self loop. BB->getSinglePredecessor() == BB) && "Block is not dead!"); TerminatorInst *BBTerm = BB->getTerminator(); - Value *DbgRegionEndContext = NULL; + // Loop through all of our successors and make sure they know that one // of their predecessors is going away. for (unsigned i = 0, e = BBTerm->getNumSuccessors(); i != e; ++i) @@ -41,10 +40,6 @@ void llvm::DeleteDeadBlock(BasicBlock *BB) { // Zap all the instructions in the block. while (!BB->empty()) { Instruction &I = BB->back(); - // It is possible to have multiple llvm.dbg.region.end in a block. - if (DbgRegionEndInst *DREI = dyn_cast<DbgRegionEndInst>(&I)) - DbgRegionEndContext = DREI->getContext(); - // If this instruction is used, replace uses with an arbitrary value. // Because control flow can't get here, we don't care what we replace the // value with. Note that since this block is unreachable, and all values @@ -54,22 +49,7 @@ void llvm::DeleteDeadBlock(BasicBlock *BB) { I.replaceAllUsesWith(UndefValue::get(I.getType())); BB->getInstList().pop_back(); } - - if (DbgRegionEndContext) { - // Delete corresponding llvm.dbg.func.start from entry block. - BasicBlock &Entry = BB->getParent()->getEntryBlock(); - DbgFuncStartInst *DbgFuncStart = NULL; - for (BasicBlock::iterator BI = Entry.begin(), BE = Entry.end(); - BI != BE; ++BI) { - if (DbgFuncStartInst *DFSI = dyn_cast<DbgFuncStartInst>(BI)) { - DbgFuncStart = DFSI; - break; - } - } - if (DbgFuncStart && DbgFuncStart->getSubprogram() == DbgRegionEndContext) - DbgFuncStart->eraseFromParent(); - } - + // Zap the block! BB->eraseFromParent(); } |