2017-05-30 86 views
0

我用我的pass生成了一個IR,在這個IR的函數內部,我想跳回到調用者函數的basicblock,在調用者函數內部調用ext_callee函數這個:LLVM IR跳轉到另一個函數內的基本塊

%4 = call i1 @ext_callee(i32 32, i32 %3, i32 -4, i8* blockaddress(@tobecalled, %5), i8* blockaddress(@tobecalled, %7)). 

最後兩個參數是我想跳到這個ext_callee函數內的基本塊地址。 我嘗試使用帶有blockaddress參數之一的indirectbr指令,但是當我運行IR時它會提示段錯誤。我搜索了LLVM文檔,但沒有找到如何跳轉到另一個函數的基本塊。有人有線索嗎?非常感謝!

回答

0

你不能這樣做。

http://llvm.org/docs/LangRef.html#i-indirectbr

控制轉移到在地址參數中指定的塊。所有可能的目標塊必須列在標籤列表中,否則該指令具有未定義的行爲。這意味着跳轉到其他函數中定義的標籤也具有未定義的行爲。

+0

謝謝,我認爲功能範圍規則可能首先在IR中被打破。那有點棘手。 :( – shikai

+0

考慮例如函數提取。它會如何工作呢? –