[llvm-commits] [llvm] r63474 - in /llvm/trunk: lib/CodeGen/SelectionDAG/SelectionDAG.cpp test/CodeGen/X86/neg_fp.ll
Mon P Wang
wangmp at apple.com
Fri Jan 30 22:07:51 PST 2009
Author: wangmp
Date: Sat Jan 31 00:07:45 2009
New Revision: 63474
URL: http://llvm.org/viewvc/llvm-project?rev=63474&view=rev
Log:
If unsafe FP optimization is not set, don't allow -(A-B) => B-A because
when A==B, -0.0 != +0.0.
Added:
llvm/trunk/test/CodeGen/X86/neg_fp.ll
Modified:
llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp?rev=63474&r1=63473&r2=63474&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp (original)
+++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAG.cpp Sat Jan 31 00:07:45 2009
@@ -2357,7 +2357,8 @@
return Operand.getOperand(0);
break;
case ISD::FNEG:
- if (OpOpcode == ISD::FSUB) // -(X-Y) -> (Y-X)
+ // -(X-Y) -> (Y-X) is unsafe because when X==Y, -0.0 != +0.0
+ if (UnsafeFPMath && OpOpcode == ISD::FSUB)
return getNode(ISD::FSUB, VT, Operand.getNode()->getOperand(1),
Operand.getNode()->getOperand(0));
if (OpOpcode == ISD::FNEG) // --X -> X
Added: llvm/trunk/test/CodeGen/X86/neg_fp.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/neg_fp.ll?rev=63474&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/X86/neg_fp.ll (added)
+++ llvm/trunk/test/CodeGen/X86/neg_fp.ll Sat Jan 31 00:07:45 2009
@@ -0,0 +1,12 @@
+; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse41 -o %t -f
+; RUN: grep xorps %t | count 1
+
+; Test that when we don't -enable-unsafe-fp-math, we don't do the optimization
+; -0 - (A - B) to (B - A) because A==B, -0 != 0
+
+define float @negfp(float %a, float %b) {
+entry:
+ %sub = sub float %a, %b ; <float> [#uses=1]
+ %neg = sub float -0.000000e+00, %sub ; <float> [#uses=1]
+ ret float %neg
+}
\ No newline at end of file
More information about the llvm-commits
mailing list