[PATCH] D67434: [InstCombine] Limit FMul constant folding for fma simplifications.
Philip Reames via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 11 09:14:03 PDT 2019
reames added inline comments.
================
Comment at: llvm/test/Transforms/InstCombine/fma.ll:502-511
+define <2 x double> @fmuladd_const_fmul(<2 x double> %b) {
+; CHECK-LABEL: @fmuladd_const_fmul(
+; CHECK-NEXT: entry:
+; CHECK-NEXT: [[RES:%.*]] = fadd nnan nsz <2 x double> [[B:%.*]], <double 0x3F8DB6C076AD949B, double 0x3FB75A405B6E6D69>
+; CHECK-NEXT: ret <2 x double> [[RES]]
+;
+entry:
----------------
lebedev.ri wrote:
> reames wrote:
> > lebedev.ri wrote:
> > > I don't think this restriction should apply to `@llvm.fmuladd`, as per https://llvm.org/docs/LangRef.html#llvm-fmuladd-intrinsic
> > I don't see why not? The rounding is specified exactly as described.
> I think my comment got garbled. I'm saying the current patch is correct in the sense that
> if we are simplifying `fmuladd`, we don't have any rounding concerns:
> As per LangRef, `fmuladd` can be arbitrarily expanded to `fmul`+`fadd`, unlike `fma`.
>
>From the langref: "is equivalent to the expression a * b + c, *except that rounding will not be performed* between the multiplication and addition steps if the code generator fuses the operations. "
Once fused, this implies the rounding is defined. We can consider changing the LangRef - I think we maybe should - but per the actual wording, we must do the rounding as per an fma, not the component operations.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D67434/new/
https://reviews.llvm.org/D67434
More information about the llvm-commits
mailing list