使用MinGW成功構建LLVM我現在試圖使用C API來實現該程序。LLVM構建,將字符串傳遞給LLVMSetValueName的問題C API
作爲一個初學者的應用程序,看看構建是否成功我已經將這裏發現的llvmpy例子http://www.llvmpy.org/llvmpy-doc/0.9/doc/firstexample.html轉換成(我認爲是)C等價物,但是我沒有得到我期望從打印函數得到的輸出。
我的C程序是:
#include "llvm-c/Core.h"
#include "stdio.h"
int main(int argc, char* argv[])
{
LLVMInitializeCore(LLVMGetGlobalPassRegistry());
LLVMModuleRef my_module = LLVMModuleCreateWithName("my_module");
LLVMTypeRef ty_int = LLVMInt32Type();
LLVMTypeRef* ParamTypes = new LLVMTypeRef[2];
ParamTypes[0] = ty_int;
ParamTypes[1] = ty_int;
LLVMTypeRef ty_func = LLVMFunctionType(ty_int, ParamTypes, 2, false);
delete[] ParamTypes;
LLVMValueRef f_sum = LLVMAddFunction(my_module, "sum", ty_func);
LLVMValueRef* Params = new LLVMValueRef[2];
LLVMGetParams(f_sum, Params);
LLVMSetValueName(Params[0], "a");
LLVMSetValueName(Params[1], "b");
LLVMBasicBlockRef bb = LLVMAppendBasicBlock(f_sum, "entry");
LLVMBuilderRef builder = LLVMCreateBuilder();
LLVMPositionBuilderAtEnd(builder, bb);
LLVMValueRef tmp = LLVMBuildAdd(builder, Params[0], Params[1], "tmp");
delete[] Params;
LLVMBuildRet(builder, tmp);
printf(LLVMPrintModuleToString(my_module));
//do shutdown
LLVMDisposeBuilder(builder);
LLVMDisposeModule(my_module);
LLVMShutdown();
return 0;
}
我得到的輸出是:
; ModuleID = 'my_module'
define i32 @sum(i32 0x1.74bb00p-1012, i32 b) {
entry:
tmp = add i32 0x1.95bc40p+876, b
ret i32 tmp
}
注意0x1.74bb00p-1012和0x1.95bc40p + 876應改爲 「%一個」
我只能認爲這是某種內存腐敗,但我不知道可能的原因。我怎麼能改變代碼,所以這個工作?
實際上它應該讀取'%a',而不是'a' - 同樣這些應該是'%b'和'%tmp'。所以無論你的問題是什麼,它實際上影響到所有當地人。 – Oak
是的好點沒有發現! – ceorron