Browse Source

Do not remove dead blocks during compilation.

cl-refactor
Paweł Bylica 10 years ago
parent
commit
f4b79cfee7
  1. 32
      evmjit/libevmjit/Compiler.cpp
  2. 2
      evmjit/libevmjit/Compiler.h
  3. 1
      evmjit/libevmjit/Optimizer.cpp

32
evmjit/libevmjit/Compiler.cpp

@ -174,8 +174,6 @@ std::unique_ptr<llvm::Module> Compiler::compile(code_iterator _begin, code_itera
m_builder.SetInsertPoint(m_abortBB); m_builder.SetInsertPoint(m_abortBB);
runtimeManager.exit(ReturnCode::OutOfGas); runtimeManager.exit(ReturnCode::OutOfGas);
removeDeadBlocks();
// Link jump table target index // Link jump table target index
if (m_jumpTableBlock) if (m_jumpTableBlock)
{ {
@ -840,36 +838,6 @@ void Compiler::compileBasicBlock(BasicBlock& _basicBlock, RuntimeManager& _runti
} }
void Compiler::removeDeadBlocks()
{
// Remove dead basic blocks
auto sthErased = false;
do
{
sthErased = false;
for (auto it = m_basicBlocks.begin(); it != m_basicBlocks.end();)
{
auto llvmBB = it->second.llvm();
if (llvm::pred_begin(llvmBB) == llvm::pred_end(llvmBB))
{
llvmBB->eraseFromParent();
m_basicBlocks.erase(it++);
sthErased = true;
}
else
++it;
}
}
while (sthErased);
if (m_jumpTableBlock && llvm::pred_begin(m_jumpTableBlock->llvm()) == llvm::pred_end(m_jumpTableBlock->llvm()))
{
m_jumpTableBlock->llvm()->eraseFromParent();
m_jumpTableBlock.reset();
}
}
} }
} }
} }

2
evmjit/libevmjit/Compiler.h

@ -36,8 +36,6 @@ private:
llvm::BasicBlock* getJumpTableBlock(); llvm::BasicBlock* getJumpTableBlock();
void removeDeadBlocks();
/// Compiler options /// Compiler options
Options const& m_options; Options const& m_options;

1
evmjit/libevmjit/Optimizer.cpp

@ -114,6 +114,7 @@ bool LowerEVMPass::doFinalization(llvm::Module&)
bool prepare(llvm::Module& _module) bool prepare(llvm::Module& _module)
{ {
auto pm = llvm::legacy::PassManager{}; auto pm = llvm::legacy::PassManager{};
pm.add(llvm::createCFGSimplificationPass());
pm.add(llvm::createDeadCodeEliminationPass()); pm.add(llvm::createDeadCodeEliminationPass());
pm.add(new LowerEVMPass{}); pm.add(new LowerEVMPass{});
return pm.run(_module); return pm.run(_module);

Loading…
Cancel
Save