From cf2c4f8ae52d5f0a01ab40eda6d165f91b8de441 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 1 Feb 2004 22:48:09 +0000 Subject: [PATCH] The first half of a fix for PR218 & test/Regression/Assembler/2004-02-01-NegativeZero.llx git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11063 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Constants.h | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/include/llvm/Constants.h b/include/llvm/Constants.h index 8d0ec281f89..79b6322dbf9 100644 --- a/include/llvm/Constants.h +++ b/include/llvm/Constants.h @@ -258,7 +258,8 @@ public: /// class ConstantFP : public Constant { double Val; - friend struct ConstantCreator; + friend struct ConstantCreator; + friend struct ConstantCreator; ConstantFP(const ConstantFP &); // DO NOT IMPLEMENT protected: ConstantFP(const Type *Ty, double V); @@ -271,8 +272,16 @@ public: inline double getValue() const { return Val; } /// isNullValue - Return true if this is the value that would be returned by - /// getNullValue. - virtual bool isNullValue() const { return Val == 0; } + /// getNullValue. Don't depend on == for doubles to tell us it's zero, it + /// considers -0.0 to be null as well as 0.0. :( + virtual bool isNullValue() const { + union { + double V; + uint64_t I; + } T; + T.V = Val; + return T.I == 0; + } /// Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const ConstantFP *) { return true; }