Types 如何创建llvm类型

Types 如何创建llvm类型,types,llvm,llvm-ir,bitcode,Types,Llvm,Llvm Ir,Bitcode,我正在尝试创建一个带有i8目标类型的TruncInst。 但是,我似乎找不到合适的类型构造函数 当我看的时候。我希望它应该是简单的,比如: if (val->getType()->isIntegerTy(32)) { TruncInst *ti = new TruncInst(val,new IntegerType(8)); } 但显然不是。我可能在API中查找了一些内容。 非常感谢您的帮助,谢谢 类型::getInt8Ty(getContext())将为您获取一个类型,前

我正在尝试创建一个带有
i8
目标类型的
TruncInst
。 但是,我似乎找不到合适的类型构造函数 当我看的时候。我希望它应该是简单的,比如:

if (val->getType()->isIntegerTy(32))
{
    TruncInst *ti = new TruncInst(val,new IntegerType(8));
}
但显然不是。我可能在API中查找了一些内容。 非常感谢您的帮助,谢谢

类型::getInt8Ty(getContext())将为您获取一个类型,前提是您有一种获取相关上下文的方法

您不能自己创建IntegerType,因为LLVM的设计表明,如果两种类型t1和t2相同(例如,它们都是8位整数类型)并且存在于相同的上下文中,那么
t1==t2
。许多LLVM代码希望使用
==
类型::getInt8Ty(getContext())测试相等性
将为您获取一个类型,前提是您有一种获取相关上下文的方法


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

测试相等性,您可能在main()中创建了一个;在使用LLVM执行几乎任何类型的工作之前,都必须这样做。或者您可以从中获取一个,例如,返回早期创建的代码。该代码实际上来自opt运行的LoopPass。所以我猜传球经理一定是创造了它,对吗?不,传球经理。通常先创建上下文,然后创建一个或多个模块,然后创建其他内容,如过程管理器;在使用LLVM执行几乎任何类型的工作之前,都必须这样做。或者您可以从中获取一个,例如,返回早期创建的代码。该代码实际上来自opt运行的LoopPass。所以我猜传球经理一定是创造了它,对吗?不,传球经理。通常首先创建上下文,然后创建一个或多个模块,然后创建其他内容,如pass管理器。