我想要開始使用LLVM,以便爲我的代碼添加實時編譯,但發現它非常困難找到有關如何在LLVM中執行所需操作的參考,儘管有通過萬花筒教程,語言參考手冊,程序員手冊和doxygen文檔進行檢查。是否有更多的LLVM的C++ API比這些更引用?訪問LLVM數組中的元素
現在爲具體問題。我已分配的數組對象,具有兩個元素(我用C假設對應於double[2]
++):
const llvm::Type* double_t = llvm::Type::getDoubleTy(llvm::getGlobalContext());
const llvm::Type* array_t = llvm::ArrayType::get(double_t,2)
在代碼後來我創建一個函數,其中,該陣列是其中一個參數。然後,在我的功能我提取的第一個元素數組中,並返回給用戶:
llvm::Function::arg_iterator AI = jit_function_->arg_begin();
llvm::Value *x = AI;
llvm::Value *x0 = Builder.CreateExtractValue(x,0);
Builder.CreateRet(x0);
代碼即時編譯器很好,但是當我嘗試運行它,它不工作。例如:
typedef double (*GenType)(double[2]);
GenType FP = GenType(intptr_t(TheExecutionEngine->getPointerToFunction(jit_function_)));
double y[2] = {10,20};
double r = FP(y);
printf("r = %g\n", r);
返回值只是無稽之談,我看不出我做錯了什麼。如果我將數組中的值(10和20)作爲標量參數傳遞給函數,那麼它工作正常。
是的,我知道(它用於上面的代碼中)。但它並沒有真正回答這個問題。 – Joel 2012-03-11 12:12:54