単子葉類プログラマーのメモ

プログラミング関連の自分用メモだけど他の人の役に立つかもしれないので公開しておく感じのブログ

LLVM C++ API 学習メモ(2) - オブジェクトファイルの出力

前回C++LLVM APIで戻り値を返すだけのプログラムを作成し、文字列形式のLLVM IRを出力した。

今回はそれをオブジェクトファイルとして出力する方法と、それをリンクしてexeファイルを作成する方法についてのメモ。

この手順LLVM 10.0.0をビルドした環境で、Visual Studioのプロジェクトをこの内容に設定してビルド確認している。

目次

  • オブジェクトファイル出力部分のC++コード
  • 解説
    • target tripleを取得
    • Targetを取得
    • TargetMachineの作成
    • オブジェクトファイルの出力ストリームをオープン
    • PassManagerを作成
    • 出力
  • 実行可能ファイルの作成(リンク)
  • 今後の課題
    • リンカ
    • LegacyでないPassManager
続きを読む

LLVM C++ API 学習メモ(1) - LLVM IRの生成と文字列形式での出力

戻り値を返すだけのLLVM IRの作成、LLVM IR文字列の出力方法についてのメモ。

この手順LLVM 10.0.0をビルドした環境で、Visual Studioのプロジェクトをこの内容に設定してビルド確認している。

目次

  • 目的のLLVM IRコード
  • C++ソースコード
  • 解説
    • Moduleの作成
    • 関数の型の作成
    • 関数の作成
    • BasicBlockの作成
    • 命令の作成
    • LLVM IRの出力
  • 参考
  • 愚痴
続きを読む

LLVM言語 学習メモ (4) - 識別子、型、定数

LLVMLLVM言語識別子定数リテラル)の仕様についてのメモ。

LLVMのバージョンは10.0.0

目次

  • 識別子
    • Void型
    • 関数型
    • ファーストクラス型
  • 定数
    • 単純な定数
    • 複雑な定数
続きを読む

LLVM API利用時のVisual Studio C++のプロジェクトのプロパティの設定

LLVM APIを使うためのコンパイルオプション(Visual Studioのプロジェクトのプロパティ)の設定内容についてのメモ。

マクロ、インクルードディレクトリや追加の依存ファイル(libファイル)の指定は当然必要だが、ほかにもLLVM API独自のクセのある設定が必要。

※動作確認環境はLLVM 10.0.0、Visual Studio 2019 Community (Version 16.5.4)

続きを読む

LLVM言語 学習メモ (3) - phiによる条件分岐、ループの効率化

LLVMphi命令についてのメモ。

内容は、phi命令がなぜ必要なのかという説明、使い方、phi命令を使わない場合の条件分岐やループの例と使った場合の例。

LLVMのバージョンは10.0.0。

目次

  • なぜphi命令が必要なのか
  • phi命令とは
  • phi命令を使った場合の分岐
  • phi命令を使った場合のループ
  • phi命令を使った場合のFIzzBuzz
  • optコマンド
続きを読む

Windows環境でLLVM、Clang、lld(Ver10.0.0)をビルド(インストール・環境構築)する手順

LLVM Ver11向けの手順を投稿しました。 https://shining-corn.hatenablog.jp/entry/2020/10/31/142333

LLVM Ver10は最新のVisual Studio 2019ではビルドが失敗するようになったので、ここに書いていた手順は消しました。

LLVM言語 学習メモ (2) - FIzzBuzz

前回の続き。

今回はFizzBuzzを作る。

そのために、ローカル変数、制御構文(if、while)、数値の文字列化が必要になる。

LLVMのバージョンは9.0.1。

目次

  • ローカル変数
  • 制御構文
    • 条件分岐
    • 条件式
    • 無条件分岐
    • 繰り返し
  • 数値の文字列化
    • putchar
    • 複数桁の数値の文字列化
  • FizzBuzz
続きを読む