2017-05-30 5 views
0

このIRの関数内でIRを生成しました。呼び出し元関数の基本ブロックに戻りたいと思います。ext_callee関数は次のように呼び出されます。この:LLVM IRは別の関数内で基本ブロックにジャンプします

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

最後の2つのパラメータが、私はこのext_callee関数内にジャンプしたいbasicblockアドレスです。 blockaddressパラメータの1つを使ってindirectbr命令を使用しようとしましたが、IRを実行するとセグメントエラーが表示されます。私はLLVM文書を検索しましたが、別の機能の基本ブロックにジャンプする方法は見つかりませんでした。誰かが手掛かりを持っていますか?どうもありがとう!

答えて

0

これはできません。 http://llvm.org/docs/LangRef.html#i-indirectbrパー

:address引数で指定されたブロックに

コントロール転送。可能なすべての宛先ブロックがラベルリストにリストされていなければなりません。そうでない場合、この命令は未定義の動作をします。これは、他の関数で定義されたラベルへのジャンプが未定義の振る舞いも持つことを意味します。

+0

ありがとう、私は関数スコープルールが最初にIRで壊れている可能性があると考えました。それは少し難しいです。 :( – shikai

+0

例えば関数抽出を考えてみましょう。 –

関連する問題