Browse Source

Remove unreachable basic blocks before "linking"

cl-refactor
Paweł Bylica 10 years ago
parent
commit
a4416e563d
  1. 21
      libevmjit/Compiler.cpp

21
libevmjit/Compiler.cpp

@ -911,7 +911,26 @@ void Compiler::linkBasicBlocks()
}
};
// Remove dead basic blocks
auto sthErased = false;
do
{
sthErased = false;
for (auto it = basicBlocks.begin(); it != basicBlocks.end();)
{
auto llvmBB = it->second.llvm();
if (llvm::pred_begin(llvmBB) == llvm::pred_end(llvmBB))
{
llvmBB->eraseFromParent();
basicBlocks.erase(it++);
sthErased = true;
}
else
++it;
}
}
while (sthErased);
// TODO: It is crappy visiting of basic blocks.
llvm::SmallPtrSet<llvm::BasicBlock*, 32> visitSet;
for (auto&& bb : basicBlocks) // TODO: External loop is to visit unreable blocks that can also have phi nodes

Loading…
Cancel
Save