/ libevmjit / CompilerHelper.cpp
CompilerHelper.cpp
 1  #include "CompilerHelper.h"
 2  
 3  #include "preprocessor/llvm_includes_start.h"
 4  #include <llvm/IR/Module.h>
 5  #include "preprocessor/llvm_includes_end.h"
 6  
 7  #include "RuntimeManager.h"
 8  
 9  namespace dev
10  {
11  namespace eth
12  {
13  namespace jit
14  {
15  
16  CompilerHelper::CompilerHelper(IRBuilder& _builder) :
17  	m_builder(_builder)
18  {}
19  
20  llvm::Module* CompilerHelper::getModule()
21  {
22  	assert(m_builder.GetInsertBlock());
23  	assert(m_builder.GetInsertBlock()->getParent()); // BB must be in a function
24  	return m_builder.GetInsertBlock()->getParent()->getParent();
25  }
26  
27  llvm::Function* CompilerHelper::getMainFunction()
28  {
29  	// TODO: Rename or change semantics of getMainFunction() function
30  	assert(m_builder.GetInsertBlock());
31  	auto mainFunc = m_builder.GetInsertBlock()->getParent();
32  	assert(mainFunc);
33  	if (mainFunc == &mainFunc->getParent()->getFunctionList().front())  // Main function is the first one in module
34  		return mainFunc;
35  	return nullptr;
36  }
37  
38  
39  RuntimeHelper::RuntimeHelper(RuntimeManager& _runtimeManager):
40  	CompilerHelper(_runtimeManager.m_builder),
41  	m_runtimeManager(_runtimeManager)
42  {}
43  
44  }
45  }
46  }