基本ブロックの最後に命令を追加して、GlobalVariableをインクリメントしたいと思います(LLVM C ++ライブラリを使用)。私はLLVMにかなり慣れていませんが、これを直接行うことはできますか、それともグローバル変数をロードし、目的の値でインクリメントしてグローバル変数に書き戻す必要がありますか?
(LoadInstコンストラクターを使用して)変数をロードした場合でも、「Add」命令は変数がどこにあるかをどのように認識しますか?
たとえば、このIRocdeを見てください。
%cell_index = load i32* %cell_index_ptr
%new_cell_index = add i32 1, %cell_index
add命令は、操作する変数(cell_index)を認識しています。しかし、C ++からロード命令を作成するので、変数がどこに作成されるかわかりません。
はい、ロード、追加、保存の手順を作成する必要があります。
LLVMのC ++クラス階層では、Instruction
サブクラスValue
。を作成LoadInst
するときは、新しい命令を作成するときに直接参照できます。例えば:
IRBuilder<> IR(SomeInsertionPoint);
LoadInst *Load = IR.CreateLoad(MyGlobalVariable);
Value *Inc = IR.CreateAdd(IR.getInt32(1), Load);
StoreInst *Store = IR.CreateStore(Inc, MyGlobalVariable);
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加