summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
diff options
context:
space:
mode:
authorMon P Wang <wangmp@apple.com>2009-01-31 06:07:45 +0000
committerMon P Wang <wangmp@apple.com>2009-01-31 06:07:45 +0000
commitcf9ba823240ec6d3682ba2ddeab5cdcf04092c77 (patch)
tree01955ca4ac9d26f7b80c37f724ccf279d764065c /llvm/lib/CodeGen
parent3b585af0ecddfa8b09f0e2d329138094c689164f (diff)
downloadbcm5719-llvm-cf9ba823240ec6d3682ba2ddeab5cdcf04092c77.tar.gz
bcm5719-llvm-cf9ba823240ec6d3682ba2ddeab5cdcf04092c77.zip
If unsafe FP optimization is not set, don't allow -(A-B) => B-A because
when A==B, -0.0 != +0.0. llvm-svn: 63474
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r--llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index bda9d934a41..f5287b0cf2c 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -2357,7 +2357,8 @@ SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL,
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
OpenPOWER on IntegriCloud