在LLVM IR中设置指针值

时间:2015-03-19 13:54:05

标签: llvm llvm-ir

我在llvm IR中有一个int32_t *类型变量,它存储了存储int32的地方的地址。

我想在llvm ir

中设置此int32_t *变量的值

我们说地址是1223.然后我尝试了以下内容。它是否正确?它似乎无法运作

store i64 1223, i32** %1

我将地址1223存储在int64_t常量int中(因为这是一个64位机器),我正在创建一个存储指令,将该值存储在存储i32 *的内存中。

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

所有LLVM指令都是严格类型的,需要操作数来保持类型的正确性。虽然您的方法适用于C语言,它具有不太严格的类型规则,但它不适用于LLVM。您必须将整数常量显式转换为指针:

%2 = inttoptr i64 1223 to i32*
store i32* %2, i32** %1

将整数类型转换为指针会使程序" type-unsafe"通过inttoptr指令明确可见。

您可以在 3.6区分安全和不安全代码中阅读更多相关说明: LLVM指令集和编译策略中的转换指令http://llvm.org/pubs/2002-08-09-LLVMCompilationStrategy.html < / p>

答案 1 :(得分:0)

我认为Validate pass表示你做错了,而且StoreInst的类型不匹配。

您正在尝试将i64变量保存到i32内存区域,这显然是一个问题。 要使整数变量成为指针,必须使用inttoptr强制转换来转换地址:

store i32* inttoptr (i64 1223 to i32*), i32** %1