[llvm] r334769 - easing the constraint for isNegatibleForFree and GetNegatedExpression
Michael Berg via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 14 13:54:13 PDT 2018
Author: mcberg2017
Date: Thu Jun 14 13:54:13 2018
New Revision: 334769
URL: http://llvm.org/viewvc/llvm-project?rev=334769&view=rev
Log:
easing the constraint for isNegatibleForFree and GetNegatedExpression
Summary:
Here we relax the old constraint which utilized unsafe with the TargetOption flag HonorSignDependentRoundingFPMathOption, with the assertion that unsafe is no longer needed or never was required for correctness on FDIV/FMUL.
Reviewers: spatel, hfinkel, wristow, arsenm, javed.absar
Reviewed By: spatel
Subscribers: efriedma, wdng, tpr
Differential Revision: https://reviews.llvm.org/D48057
Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
llvm/trunk/test/CodeGen/ARM/fnmul.ll
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp?rev=334769&r1=334768&r2=334769&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Thu Jun 14 13:54:13 2018
@@ -729,8 +729,6 @@ static char isNegatibleForFree(SDValue O
case ISD::FMUL:
case ISD::FDIV:
- if (Options->HonorSignDependentRoundingFPMath()) return 0;
-
// fold (fneg (fmul X, Y)) -> (fmul (fneg X), Y) or (fmul X, (fneg Y))
if (char V = isNegatibleForFree(Op.getOperand(0), LegalOperations, TLI,
Options, Depth + 1))
@@ -792,8 +790,6 @@ static SDValue GetNegatedExpression(SDVa
case ISD::FMUL:
case ISD::FDIV:
- assert(!Options.HonorSignDependentRoundingFPMath());
-
// fold (fneg (fmul X, Y)) -> (fmul (fneg X), Y)
if (isNegatibleForFree(Op.getOperand(0), LegalOperations,
DAG.getTargetLoweringInfo(), &Options, Depth+1))
Modified: llvm/trunk/test/CodeGen/ARM/fnmul.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/fnmul.ll?rev=334769&r1=334768&r2=334769&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/fnmul.ll (original)
+++ llvm/trunk/test/CodeGen/ARM/fnmul.ll Thu Jun 14 13:54:13 2018
@@ -1,17 +1,15 @@
-; RUN: llc -mtriple=arm-eabi -mattr=+v6,+vfp2 %s -o - | FileCheck %s
-
-; RUN: llc -mtriple=arm-eabi -mattr=+v6,+vfp2 -enable-sign-dependent-rounding-fp-math %s -o - \
-; RUN: | FileCheck %s -check-prefix CHECK-ROUNDING
-
+; RUN: llc -mtriple=arm-eabi -mattr=+v6,+vfp2 %s -o - | FileCheck %s -check-prefix STRICT
+; RUN: llc -mtriple=arm-eabi -mattr=+v6,+vfp2 -enable-unsafe-fp-math %s -o - | FileCheck %s -check-prefix UNSAFE
define double @t1(double %a, double %b) {
+; STRICT: vnmul.f64
+;
+; UNSAFE: vnmul.f64
entry:
%tmp2 = fsub double -0.000000e+00, %a ; <double> [#uses=1]
%tmp4 = fmul double %tmp2, %b ; <double> [#uses=1]
ret double %tmp4
}
-; CHECK: vnmul.f64
-; CHECK-ROUNDING: vmul.f64
More information about the llvm-commits
mailing list