我正在写一个传递来做常数折叠。 喜欢这个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?
答案 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;