Skip to content

Commit

Permalink
easing the constraint for isNegatibleForFree and GetNegatedExpression
Browse files Browse the repository at this point in the history
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

llvm-svn: 334769
  • Loading branch information
Michael Berg committed Jun 14, 2018
1 parent d1e0365 commit 0c20447
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 11 deletions.
4 changes: 0 additions & 4 deletions llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
Expand Up @@ -729,8 +729,6 @@ static char isNegatibleForFree(SDValue Op, bool LegalOperations,

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))
Expand Down Expand Up @@ -792,8 +790,6 @@ static SDValue GetNegatedExpression(SDValue Op, SelectionDAG &DAG,

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))
Expand Down
12 changes: 5 additions & 7 deletions llvm/test/CodeGen/ARM/fnmul.ll
@@ -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

0 comments on commit 0c20447

Please sign in to comment.