mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-02 10:33:53 +00:00
Do not mark instructions in unreachable sections of the function as live.
This fixes PR332 and ADCE/2004-05-04-UnreachableBlock.llx git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13349 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b71ebdf03c
commit
b9110c61fb
@ -215,8 +215,10 @@ bool ADCE::doADCE() {
|
||||
// instructions live in basic blocks that are unreachable. These blocks will
|
||||
// be eliminated later, along with the instructions inside.
|
||||
//
|
||||
for (df_iterator<Function*> BBI = df_begin(Func), BBE = df_end(Func);
|
||||
BBI != BBE; ++BBI) {
|
||||
std::set<BasicBlock*> ReachableBBs;
|
||||
for (df_ext_iterator<BasicBlock*>
|
||||
BBI = df_ext_begin(&Func->front(), ReachableBBs),
|
||||
BBE = df_ext_end(&Func->front(), ReachableBBs); BBI != BBE; ++BBI) {
|
||||
BasicBlock *BB = *BBI;
|
||||
for (BasicBlock::iterator II = BB->begin(), EI = BB->end(); II != EI; ) {
|
||||
Instruction *I = II++;
|
||||
@ -279,6 +281,7 @@ bool ADCE::doADCE() {
|
||||
WorkList.pop_back();
|
||||
|
||||
BasicBlock *BB = I->getParent();
|
||||
if (!ReachableBBs.count(BB)) continue;
|
||||
if (!AliveBlocks.count(BB)) { // Basic block not alive yet...
|
||||
AliveBlocks.insert(BB); // Block is now ALIVE!
|
||||
markBlockAlive(BB); // Make it so now!
|
||||
|
Loading…
x
Reference in New Issue
Block a user