【问题标题】:How to increment a Global Variable in a LLVM module?如何在 LLVM 模块中增加全局变量?
【发布时间】:2015-05-14 03:05:32
【问题描述】:

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

即使我加载变量(使用 LoadInst 构造函数),“添加”指令如何知道变量在哪里?

例如,看看这个 IR ocde:

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

add 指令知道要对哪个变量进行操作(cell_index)。但由于我将从 C++ 创建加载指令,所以我不知道将在哪里创建变量。

【问题讨论】:

    标签: c++ clang llvm


    【解决方案1】:

    是的,您必须创建加载、添加和存储指令。

    在 LLVM 的 C++ 类层次结构中,InstructionValue 的子类。当您创建LoadInst 时,您可以在创建新指令时直接引用它。例如:

    IRBuilder<> IR(SomeInsertionPoint);
    LoadInst *Load = IR.CreateLoad(MyGlobalVariable);
    Value *Inc = IR.CreateAdd(IR.getInt32(1), Load);
    StoreInst *Store = IR.CreateStore(Inc, MyGlobalVariable);
    

    【讨论】:

    • 谢谢,这正是我想知道的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 2011-05-14
    相关资源
    最近更新 更多