私は、DSLとC/C++を統合するためのプログラミング言語コンパイラを作成しています。そのために私はいくつかの理由からLLVMを決めました。LLVMのboolのデータ型IR
メインプログラムがあります。このメインプログラムでは、clangによってコンパイルされたビットコードファイルをロードします。ロード可能なビットコードファイルは、REPL、パーサー、リンカー、およびASTを使用して、短くて完全なプログラミング言語環境を表します。
これまでのところ、ブール型のデータ型はIRでi1として表されていました。私は-O3で私のコードを最適化していると私は(生成されたビットコードファイルからLLVM-DISを分解して)ブール以下のIRコードを取得する:
%"class.tl::contrib::toy::ToyREPL" = type <{ %"class.tl::contrib::toy::InitLanguage"*, i8, [7 x i8] }>
クラスはToyREPLであり、それは別のクラスのInitLanguageを使用しています。奇妙なことに、ブール値はi8とi8の配列によって表されるようです。私は本当にそれを取得しません。
私はMakefileを定義しました。最初にファイルをコンパイルします。その後、それらをbcファイルにリンクし、最適化して他のライブラリとリンクします。
@cd $(BIN)/$(TARGET)/$(2); $(LINK) -o $(1).$(BITCODE_EXT) $(3)
@cd $(BIN)/$(TARGET)/$(2); $(OPT) -O3 $(1).$(BITCODE_EXT) -o $(1).$(OPT_NAME).$(BITCODE_EXT) $(OPTIMIZER_FLAGS)
@$(LINK) -o $(BIN)/$(TARGET)/$(2)/$(1).$(BITCODE_EXT) $(BIN)/$(TARGET)/$(2)/$(1).$(OPT_NAME).bc $(LINK_OPTION) $(4)
コンパイラフラグは次のとおりです。
-v -g -emit-llvm -I$(BOOST_INC_DIR) -std=c++11 -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS
オプティマイザフラグ-std-link-opts
リンクフラグが-v
です。
クラスToyREPLの関連部分はここにある:
class ToyREPL {
private:
InitLanguage *initLang;
bool runs = false;
今、私の質問:は私の仮定間違ったブール値I1にコンパイルビットコードする必要がありますか? i1にコンパイルするにはどのようなコンパイラスイッチが必要ですか?自分のビルドプロセスが何らかの形で間違っていると思ったら教えてください。生成ビットコードファイルは読み込み可能で、モジュールとクラスToyREPLをStructTypeとして取り出すことができます。
引用符で囲まれた引用符は、コンピュータではなく人間が書くことを意図したものを引用するときに最も適しています。;) – Yakk