1

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

Value * CreateSafeFAdd (Value *LHS, Value *RHS, const Twine &Name="", MDNode *FPMathTag=0)

这将提升输入值,例如,如果它们是整数。float如果输入参数的类型之一是,另一个是,它将提升到更高的浮点精度double

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

4

1 回答 1

1

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

于 2015-06-27T18:56:27.413 回答