如何创建 llvm 类型

how to create an llvm Type

我正在尝试创建具有 i8 目标类型的 TruncInst。 但是,我 似乎找不到合适的类型构造函数 当我看 here。我希望它应该像这样简单:

if (val->getType()->isIntegerTy(32))
{
    TruncInst *ti = new TruncInst(val,new IntegerType(8));
}

但显然不是。我可能没看过 API 中的某些内容。 非常感谢任何帮助,谢谢!

Type::getInt8Ty(getContext()); 将为您获取一个类型,假设您有办法获取相关上下文。

您不能自己创建 IntegerType,因为 LLVM 的设计表明如果两种类型 t1 和 t2 相同(例如,两者都是 8 位整数类型)并且存在于相同的上下文中,那么 t1==t2。许多 LLVM 代码期望使用 ==.

来测试相等性