显然,当使用 IR Builder 时,我可以构建无效的 IR,例如通过添加两个类型不兼容的值,例如i32
和float
。是否有一种工具可以根据指令的语义自动提升价值(或更好的用户)?就像是:
Value * CreateSafeFAdd (Value *LHS, Value *RHS, const Twine &Name="", MDNode *FPMathTag=0)
这将提升输入值,例如,如果它们是整数。float
如果输入参数的类型之一是,另一个是,它将提升到更高的浮点精度double
。
如果不是,我假设我必须进行所有类型转换才能构建有效的 IR。