LLVM IR:初始化并投射[20 x i8]

时间:2019-02-28 08:52:31

标签: llvm llvm-ir

我正在尝试通过以下方式初始化然后强制转换多个LLVM IR变量:

store i64 %content, i64* %5
%tt2 = load i64, i64* %5
%ttt2 = trunc i64 %tt2 to i32

虽然这看起来微不足道并且可以正常工作,但我还是被困为[20 * i8]类型的变量做同样的事情。像这样:

store [20 x i8] %content, [20 x i8]* %5
%tt2 = load [20 x i8], [20 x i8]* %5
%ttt2 = trunc [20 x i8] %tt2 to i32

当前,第三行出现以下错误消息:

  

[20 x i8]i32的强制转换操作码

有人可以在这个问题上阐明一些观点吗?谢谢!

1 个答案:

答案 0 :(得分:2)

您可以trunc从一个int转换为另一个int,但是不能从数组转换为int。这就是trunc的定义方式-如果输入不是int,则trunc需要执行与“丢弃高阶位并保留低阶位”明显不同的操作。

我认为最常见的方法是先转换指针,然后从已经与要加载/存储的类型匹配的指针加载/存储。

(请注意,%ttt2等不是LLVM变量,它们是LLVM值。它们永远不会变化。)