问题描述
我正在构建一个提升器,将 armv7m 汇编指令提升到 LLVM IR。
我从程序集构建了一个控制流图,并为程序集中的每个函数、基本块和指令创建了等效的 LLVM 对象。全部在一个模块中。我的下一步是使用通行证管理器运行该模块。下面举个简单的例子。 我正在尝试制作然后运行一个简单的 llvm 模块。
C++代码如下:
using namespace llvm;
Module* makeLLVMModule() {
llvm::LLVMContext context;
// Module Construction
Module* modu = new Module("test",context);
FunctionType* type = FunctionType::get(Type::getInt64Ty(context),{},false);
FunctionCallee mul_add = modu->getorInsertFunction("mul_add",type,type);
Function* m_add = modu->getFunction("mul_add");
m_add->setCallingConv(CallingConv::C);
Function::arg_iterator args = m_add->arg_begin();
Value* x = args++;
x->setName("x");
Value* y = args++;
y->setName("y");
Value* z = args++;
z->setName("z");
BasicBlock* block = BasicBlock::Create(context,"entry",m_add);
IRBuilder<> builder(block);
Value* tmp = builder.CreateBinop(Instruction::Mul,x,y,"tmp");
Value* tmp2 = builder.CreateBinop(Instruction::Add,tmp,z,"tmp2");
Value* ret = builder.CreateRet(tmp2);
return modu;
}
int main()
{
PassManager <llvm::Module>PM;
llvm::ModuleAnalysisManager AM;
llvm::Module* modu = makeLLVMModule();
verifyModule(*modu);
llvm::ModulePass* print_pass = createPrintModulePass(outs());
PM.run(*modu,AM);
}
我正在使用命令:
$ c++ -g example.cpp `llvm-config --cxxflags --ldflags --libs core` -o example
$ ./example
我得到的输出是:
Segmentation fault (core dumped)
有什么关于我可能做错的提示吗?..这个例子看起来很简单。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)