如何在LLVM模块中增加全局变量?

时间:2015-05-14 03:05:32

标签: c++ clang llvm

我想在基本块的末尾添加一条指令来增加GlobalVariable(使用LLVM C ++库)。我对LLVM很新,我可以直接执行此操作,还是需要加载全局变量,将其递增所需的值并写回全局变量?

即使我加载变量(使用LoadInst构造函数)," Add"指令知道变量在哪里?

例如,看看这个IR ocde:

%cell_index = load i32* %cell_index_ptr
%new_cell_index = add i32 1, %cell_index

add指令知道要操作的变量(cell_index)。但是因为我将从C ++创建加载指令,所以我不知道将在何处创建变量。

1 个答案:

答案 0 :(得分:5)

是的,您必须创建加载,添加和存储说明。

在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);