当使用IR Builder时,我可以建立无效的IR,例如通过添加两个具有不兼容类型的值,例如i32
和float
。是否有一种设施可以根据指令的语义自动提升价值(或更好的用户)?类似的东西:
Value * CreateSafeFAdd (Value *LHS, Value *RHS, const Twine &Name="", MDNode *FPMathTag=0)
会促进输入值,例如如果他们是整数。如果其中一个输入参数类型为float
而另一个为double
,则会提升到更高的浮点精度。
如果没有,我认为我必须采取所有类型转换才能构建有效的IR。
答案 0 :(得分:1)
类型对话必须由构建IR的人处理,但您可以使用Value::getType()