LLVM IR:初始化和转换[20 x i8]

问题描述 投票:0回答:1

我试图初始化,然后以下列方式转换一些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的无效演员操作码

有人能解决这个问题吗?谢谢!

llvm llvm-ir
1个回答
2
投票

你可以从一个int到另一个trunc,但不能从数组到int。这就是如何定义trunc - 如果输入不是int,那么trunc需要做一些明显不同于“删除高阶位并保留低阶位”的东西。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.