問題タブ [llvm-ir]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
1784 参照

llvm - 関数からデバッグ情報を取得するにはどうすればよいですか?

Clang を使用して、デバッグ情報を有効にして関数をコンパイルしました。Instructions には便利ながありますが、s にはそのgetDebugLoc()ようなものはありませんFunction。インスタンスが与えられたFunction場合、デバッグ情報を取得するにはどうすればよいDISubProgramですか (フォームで推測しています)。

デバッグ情報がどのように表現されるかを説明するガイド エントリを見たことがあります。メタデータには関数へのリンクが含まれていますが、明らかにリンクはありません。モジュール内のすべてのメタデータを反復処理する必要がありますか?

0 投票する
1 に答える
888 参照

c++ - 複数の LLVM C++ モジュールをリンクすると、lli で segfaults が発生する

LLVM/clang で非常に単純な例を試していますが、失敗しているようです。

私は次のことを試します:

  1. clang++ -emit-llvm -c -x c++ -o main.bc -isystem include/ main.cc
  2. clang++ -emit-llvm -c -x c++ -o test_class.bc -isystem include/ test_class.cc
  3. llvm-link main.bc test_class.bc -o all.bc
  4. lli all.bc

ただし、 4. 失敗 (セグメンテーション違反):

これがどのように機能するかについて根本的な誤解がありますか? 私の最終的な目標は、libclang API を使用してコンパイルの部分を行うことですが、今のところ、ここで何が間違っているかを理解することは素晴らしいことです! ありがとう!

以下の例のソースコードを添付しました。

インクルード/test_class.h:

test_class.cc:

main.cc:

0 投票する
1 に答える
971 参照

llvm - LLVM の SelectInst の利点

LLVM には、 のSelectInstような式を表すために使用される がありsomething = cond ? true-part : false-partます。

コンパイラによって?:常に a に下げられる可能性があるため、IR でのこの命令の利点は何ですか? BranchInstそのような命令をサポートする CPU はありますか? とにかくCodeGeneratorselectによってジャンプに下げられますか?

selectは暗黙の 2 つの「分岐」を保証するため、分析パスには利点があると思いますif。しかし一方で、コンパイラは命令をまったく使用する必要がないため、これらのパスはいずれにbrせよ s を処理できなければなりません。

0 投票する
2 に答える
786 参照

c - LLVM IR 構造体の関数ポインタ フィールドが {}* に置き換えられるのはなぜですか?

Clang 3.3 を使用して MUSL C ライブラリをコンパイルし、生成された LLVM IR ファイルをダンプしました。FILE 構造体であることがわかりました

としてコンパイルされました

いくつかのIRファイルに含まれていますが、次のようにコンパイルされました

他のソース ファイルで。これら 2 つの IR 構造体の唯一の違いは、最初の形式の関数ポインター型フィールドが完全な型ではなく {}* に置き換えられていることです。なぜこれが起こるのか、また {}* 置換を無効にする方法を誰か教えてもらえますか?

0 投票する
1 に答える
2132 参照

c - LLVM-IR を C のような言語に変換する

私は、LLVM-IR を C のような言語に変換するためのコードを書かなければならないプロジェクトに取り組んでいます。この言語は、C と非常によく似た構造を持っています。少し調べてみたところ、LLVM のバージョン 3.0 までは、LLVM-IR から C コードへの変換を担当する CBackend.cpp という名前のファイルが存在することがわかりました。確認したいのは、LLVM-IR の入力ファイルに対してこの CBackend.cpp ファイルを実行し、C コードを生成することです。

このコマンドは次のとおりです: llc -march=c -o code.c code.ll

ここで、code.ll ファイルは入力 llvm-ir を含む入力ファイルであり、code.c は結果の C コードを含む出力ファイルです。

私が直面しているのは、ubuntu システムに LLVM バージョン 3.4svn がインストールされており、ファイルが CppBackend.cpp (LLVM-IR を C++ に変換する) にアップグレードされているため、このバージョンには CBackend.cpp ファイルがありません。この CBackend.cpp ファイルを LLVM-IR 入力ファイルで実行して、LLVM のバージョン 3.4svn で対応する C コードを取得するには、どのコマンドを使用できますか?

前もって感謝します。

0 投票する
0 に答える
142 参照

llvm - LLVM による変換

最初にLLVM IRに変換してから別の言語に変換することにより、C + ACSL言語を別の言語に変換するプロジェクトに取り組んでいました。開示したくない一部の人々のグループに関連しているため、それについては言えません。それについては触れませんが、C に非常に近いものです。私は LLVM IR までの作業を完了し、 CBackend の助けを借りて、それを元に戻すように書かれていますが、私はそれを使用する方法を本当に知りません。それを行うためのLLVMのコマンド、または私を助けることができるものはありますか?

更新 1 私の入力は LLVM IR であり、出力は C とは異なる構文に従うため、C ではなく C のようなコードになります。