================ @@ -3013,6 +3013,47 @@ def CIR_ComplexMulOp : CIR_Op<"complex.mul", [ }]; } +def CIR_ComplexDivOp : CIR_Op<"complex.div", [ + Pure, SameOperandsAndResultType +]> { + let summary = "Complex division"; + let description = [{ + The `cir.complex.div` operation takes two complex numbers and returns + their quotient. + + The `range` attribute is used to select the algorithm used when + the operation is lowered to the LLVM dialect. For division, 'improved' + producing the Smith's algorithms for Complex division with no special + handling for NaN values. If 'promoted' is used, the values are promoted + to a higher precision type, if possible, and the calculation is performed + using the algebraic formula. We only fall back on Smith's algorithm when + the target does not support a higher precision type. Also, this only + applies to floating-point types with no special handling for NaN values. ---------------- andykaylor wrote:
```suggestion using the algebraic formula, with no additional handling for NaN values. We fall back on Smith's algorithm when the target does not support a higher precision type. ``` The comment about floating-point types applies to this entire paragraph. For integer types, the `range` attribute is ignored and we always lower to the algebraic formula. It's probably best to say that in a separate paragraph. https://github.com/llvm/llvm-project/pull/153796 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits