summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis
diff options
context:
space:
mode:
authorMichael Ilseman <milseman@apple.com>2012-12-06 00:07:09 +0000
committerMichael Ilseman <milseman@apple.com>2012-12-06 00:07:09 +0000
commit0f12837be0a736623c51c8a6499cda66ccc64c26 (patch)
tree7952bd434f57cc0a44d7a04ada8be6b64c784627 /llvm/lib/Analysis
parentfaa0bb3fa1ec71cf5edbad4e8da42dafbcf936bd (diff)
downloadbcm5719-llvm-0f12837be0a736623c51c8a6499cda66ccc64c26.tar.gz
bcm5719-llvm-0f12837be0a736623c51c8a6499cda66ccc64c26.zip
Have CannotBeNegativeZero() be aware of the nsz fast-math flag
llvm-svn: 169452
Diffstat (limited to 'llvm/lib/Analysis')
-rw-r--r--llvm/lib/Analysis/ValueTracking.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 47b1db6425b..eee231df8c9 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -1312,7 +1312,12 @@ bool llvm::CannotBeNegativeZero(const Value *V, unsigned Depth) {
const Operator *I = dyn_cast<Operator>(V);
if (I == 0) return false;
-
+
+ // Check if the nsz fast-math flag is set
+ if (const FPMathOperator *FPO = dyn_cast<FPMathOperator>(I))
+ if (FPO->hasNoSignedZeros())
+ return true;
+
// (add x, 0.0) is guaranteed to return +0.0, not -0.0.
if (I->getOpcode() == Instruction::FAdd &&
isa<ConstantFP>(I->getOperand(1)) &&
OpenPOWER on IntegriCloud