10

ここで説明されているように、LLVM プロジェクトは符号付き整数と符号なし整数を区別しません。ただし、サイズが拡張されている場合や除算で使用されている場合など、特定の変数を符号付きまたは符号なしとして解釈する必要があるかどうかを知る必要がある状況があります。これに対する私の解決策は、変数が整数型かカーディナル型かを説明する変数ごとに個別の型情報を保持することです。

しかし、LLVMで型をそのように「属性」する方法はありませんか? タイプに追加できるある種の「ユーザーデータ」を探していましたが、何もないようです。LLVM では等しい型は 1 回しか生成されないため、これは型の作成時に何らかの形で発生する必要があります。

したがって、私の質問は次のとおりです。

整数変数を LLVM インフラストラクチャ内で符号付きまたは符号なしとして解釈する必要があるかどうかを追跡する方法はありますか、それとも私のように個別の情報を保持する唯一の方法ですか?

ありがとう

4

1 に答える 1

5

まず第一に、追加の型メタデータを挿入する必要があることを確認する必要があります。Clang は、たとえばsdivandsremではなくudevandを使用して、符号付き整数操作を適切に処理しているためuremです。

さらに、それを利用して、IR での変数へのアクセス方法に基づいて軽量の型推論を実装することもできます。のような操作addは、2 の補数表現に基づいているため、符号情報を必要としないことに注意してください。

それ以外の場合は、フロントエンド (Clang) を変更してカスタム DWARF デバッグ情報を追加するのが最善の方法だと思います。これは、あなたが始めるためのリンクです。

更新: LLVM IR に静的分析を直接実装することが目標の場合。この論文は、徹底的な議論を提供することができます。

Navas, JA, Schachte, P., Søndergaard, H., Stuckey, PJ: Signedness -agnostic program analysis: Precise integer bounds for low-level code . In: Jhala, R., Igarashi, A. (eds.) APLAS 2012. LNCS, vol. 7705、pp。115–130。スプリンガー、ハイデルベルク (2012)

于 2015-05-29T10:49:55.957 に答える