在LLVM IR中,如何获取指针类型的指针值?

时间:2016-01-27 14:41:21

标签: llvm

我正在写一个传递来做常数折叠。 喜欢这个C代码:

int a = 4;
int b = a + 5;

我想将其转换为:

int b = 4 + 5;

但是第一段代码将生成int a的指令:

store i32 4, i32* %a, align 4

如何从我的Pass中的指针“i32 *%a”获取值“%a”? 这样我就可以将Value%a的所有使用替换为ConstantInt?

2 个答案:

答案 0 :(得分:2)

使用load指令:

%1 = load i32* %a, align 4

答案 1 :(得分:0)

为此,首先需要使用Value%a

的所有用途
Val.user_begin() to val.user_end() via Value::const_user_iterator it

并检查是否存在存储指令且仅存储const

 if (const StoreInst* store = dyn_cast<StoreInst>(*it))

然后您可以用该const替换所有实例。 注意:这是你给出的简单算法

a = 5; b = a +4;