[clang] [CIR] Upstream DivOp for ComplexType (PR #153796)
Andy Kaylor via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 22 11:27:56 PDT 2025
================
@@ -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
More information about the cfe-commits
mailing list