mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-21 20:26:41 +00:00
Remove unreachable basic blocks before "linking"
This commit is contained in:
parent
a6ce4ba7c5
commit
d95083ade4
1 changed files with 19 additions and 0 deletions
|
|
@ -875,6 +875,25 @@ void Compiler::compileBasicBlock(BasicBlock& basicBlock, bytesConstRef bytecode,
|
|||
|
||||
void Compiler::linkBasicBlocks(Stack& stack)
|
||||
{
|
||||
// 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);
|
||||
|
||||
struct BBInfo
|
||||
{
|
||||
BasicBlock& bblock;
|
||||
|
|
|
|||
Loading…
Reference in a new issue