2011-09-11 9 views
0

に複数のリターンで関数からASTを構築する私はこの機能を持っています。 これをよく理解すれば、本体のノードはReturnInst *を返します。例えばLLVM

私のASTでは、このボディは2つのノード(式として)に含まれています.1つは最初のifともう1つはもう一方のノードです。

いくつかのトリックやデザインが間違っていますか?

編集:私はちょうどタフきたのかもしれない被-ソリューション:

  1. CreateAlloca体の開始で。
  2. CreateStoreを呼び出し、すべてのリターン時にエンドラベルにジャンプします。
  3. 最後のラベルで、varを返します。

いいですか?そしてllvmでジャンプ/ジャンプする方法は?

答えて

0

私が正しく理解しているならば、alloca + store + jumpを使ったあなたのアウトラインソリューションは間違いなく機能します。そして、はい、LLVMオプティマイザはそれをうまく処理します。あるいは、所定の関数内のret命令の数に制限はありません。

gotoを生成する際に何を求めているのか不明です。もしあなたがif文を書くことができたら、それはあなたが1つの終わりに必要とする同じ種類のbr命令です。一般的に、単純なコードの上に "clang -S -emit-llvm"を実行するのは、簡単な構文を生成する方法を見ておくのに良いテクニックです。また、 "llc -march = cpp"は、C++で命令を構築する方法を知る良い方法です。

1

オンラインデモを試すことができます:http://llvm.org/demo/あなたのやりたいことをCまたはC++で入力してください。これでLLVMの出力が表示されます。

+0

ありがとう私はそのサイトを使用します:) –

+0

いいね、リンクありがとう! – Stringer

+0

デモページのC++バックエンドは厳しく時代遅れであり、最近のバージョンのLLVM(3.0)では動作しないコードをレンダリングします。ただし、この特定の構造については問題はありませんが、 APIを理解するための – lurscher