C++ 自动提升LLVM指令的输入值

C++ 自动提升LLVM指令的输入值,c++,llvm,C++,Llvm,使用IR Builder时,显然我可以构建无效的IR,例如,通过添加两个类型不兼容的值,如i32和float。是否有一种工具可以根据指令的语义自动提升值(或更好的用户)?比如: Value * CreateSafeFAdd (Value *LHS, Value *RHS, const Twine &Name="", MDNode *FPMathTag=0) 这将提升输入值,例如,如果它们是整数。如果一个输入参数的类型是float,另一个类型是double,它将提升到更高的浮点精度 如果

使用IR Builder时,显然我可以构建无效的IR,例如,通过添加两个类型不兼容的值,如
i32
float
。是否有一种工具可以根据指令的语义自动提升值(或更好的用户)?比如:

Value * CreateSafeFAdd (Value *LHS, Value *RHS, const Twine &Name="", MDNode *FPMathTag=0)
这将提升输入值,例如,如果它们是整数。如果一个输入参数的类型是
float
,另一个类型是
double
,它将提升到更高的浮点精度


如果没有,我假设我必须进行所有类型转换才能构建有效的IR。

类型对话必须由构建IR的人处理,但您可以使用
Value::getType()
创建自己的CreateSafefad函数。类型对话必须由构建IR的人处理,但是您可以使用
Value::getType()