我想實現以下功能之前;改變LLVM ::代碼生成功能後簽字,最後CreateRet
- 沒有明確的返回功能將默認返回最後的評估,在過去執行的塊
所以,我目前在做的過程是
1)創建功能
llvm::Function* result = llvm::Function::Create(Compiler::Detail::getAnonymousFunctionSignature(llvmContext),
llvm::GlobalValue::ExternalLinkage,
name,
module());
result->setCallingConv(llvm::CallingConv::C);
2)添加塊的d評估,以塊
builder.createFoo.....
然而,僅在第二階段我有LLVM ::值*(和編譯時類型),我想用默認的返回值來使用。問題是,我需要使用此類型來確定創建的函數的簽名
問:
我如何解決這個問題?
- 是否可以在創建函數後更改簽名?這是合法的嗎?
- 我是否需要創建一個新的功能與更新的簽名和複製/第一函數的入口塊分配給它,這就是它?還是我需要重新評估所有的表達式?
- 可能無法創建代碼生成前的功能?如果是這樣,我應該在什麼時候創建函數?
如何實現,這將是真棒的代碼示例。謝謝!
謝謝,我想這是將要變成作爲最終的答案,但我想是肯定 – lurscher 2011-03-21 00:59:32