作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我定义了int a = 5
;在源代码中,我将源代码转换为 LLVM IR:
%a = alloca i32, align 4
store i32 5, i32* %a, align 4
我想通过写一个pass来插入int b = a;
。我编译 int a=5; int b=a
进入 LLVM IR,它首先加载“a”,然后存储它。我还检查了 doxygen,其中 LoadInst 是 LoadInst (Value *Ptr, const Twine &NameStr, Instruction *InsertBefore)
不过,我不知道如何获取 Value
“一个”。
如何获取变量值?
最佳答案
在 LLVM IR 中的序列
int a = 5;
int b = a;
没有任何优化,被翻译成
%a = alloca i32, align 4
%b = alloca i32, align 4
store i32 5, i32* %a, align 4
%0 = load i32* %a, align 4
store i32 %0, i32* %b, align 4
这对应两个AllocaInst
,两个StoreInst
和一个LoadInst
如下
警告:前面有未经测试/未编译的伪代码
ConstantInt* const_int_5 = ConstantInt::get(llvmContext, APInt(32, StringRef("5"), 10));
AllocaInst* a_alloc = new AllocaInst(IntegerType::get(llvmContext, 32), "a");
AllocaInst* b_alloc = new AllocaInst(IntegerType::get(llvmContext, 32), "b");
StoreInst* store_5 = new StoreInst(const_int_5, a_alloc, false);
LoadInst* load_from_a = new LoadInst(a_alloc, "", false);
StoreInst* store_b = new StoreInst(load_from_a, b_alloc, false);
由于精心设计的继承层次结构,您可能会感到困惑,因为在 LLVM API 中指令就是值。
关于llvm 通过 : How to insert a variable using existing variable value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26325698/
我是一名优秀的程序员,十分优秀!