我正在尝试通过以下方式初始化然后强制转换多个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
的强制转换操作码
有人可以在这个问题上阐明一些观点吗?谢谢!
答案 0 :(得分:2)
您可以trunc
从一个int转换为另一个int,但是不能从数组转换为int。这就是trunc
的定义方式-如果输入不是int,则trunc需要执行与“丢弃高阶位并保留低阶位”明显不同的操作。
我认为最常见的方法是先转换指针,然后从已经与要加载/存储的类型匹配的指针加载/存储。
(请注意,%ttt2
等不是LLVM变量,它们是LLVM值。它们永远不会变化。)