我试图初始化,然后以下列方式转换一些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
的无效演员操作码
有人能解决这个问题吗?谢谢!
你可以从一个int到另一个trunc
,但不能从数组到int。这就是如何定义trunc
- 如果输入不是int,那么trunc需要做一些明显不同于“删除高阶位并保留低阶位”的东西。
我认为最常见的方法是转换指针,然后从已经与要加载/存储的类型匹配的指针加载/存储。
(请注意,%ttt2
等不是LLVM变量,它们是LLVM值。它们不会变化。)