[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