diff options
author | Dale Johannesen <dalej@apple.com> | 2007-08-24 22:09:56 +0000 |
---|---|---|
committer | Dale Johannesen <dalej@apple.com> | 2007-08-24 22:09:56 +0000 |
commit | 12595d7b165bf460b18f4ddd395dd29e6e6e68bc (patch) | |
tree | faf1eb03b939699d0d02ccffedb56e8ebf9b7230 /lib | |
parent | 8bb369b8072c919ef5802f639a52b17620201190 (diff) | |
download | external_llvm-12595d7b165bf460b18f4ddd395dd29e6e6e68bc.zip external_llvm-12595d7b165bf460b18f4ddd395dd29e6e6e68bc.tar.gz external_llvm-12595d7b165bf460b18f4ddd395dd29e6e6e68bc.tar.bz2 |
Poison APFloat::operator==. Replace existing uses with bitwiseIsEqual.
This means backing out the preceding change to Constants.cpp, alas.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41378 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 2 | ||||
-rw-r--r-- | lib/Support/APFloat.cpp | 2 | ||||
-rw-r--r-- | lib/VMCore/Constants.cpp | 31 |
3 files changed, 23 insertions, 12 deletions
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index 10ffdc4..6155ee1 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -49,7 +49,7 @@ static SDVTList makeVTList(const MVT::ValueType *VTs, unsigned NumVTs) { /// As such, this method can be used to do an exact bit-for-bit comparison of /// two floating point values. bool ConstantFPSDNode::isExactlyValue(double V) const { - return Value == APFloat(V); + return Value.bitwiseIsEqual(APFloat(V)); } //===----------------------------------------------------------------------===// diff --git a/lib/Support/APFloat.cpp b/lib/Support/APFloat.cpp index 8f1a566..d2e52ad 100644 --- a/lib/Support/APFloat.cpp +++ b/lib/Support/APFloat.cpp @@ -276,7 +276,7 @@ APFloat::operator=(const APFloat &rhs) } bool -APFloat::operator==(const APFloat &rhs) const { +APFloat::bitwiseIsEqual(const APFloat &rhs) const { if (this == &rhs) return true; if (semantics != rhs.semantics || diff --git a/lib/VMCore/Constants.cpp b/lib/VMCore/Constants.cpp index 36ba7c0..04689e4 100644 --- a/lib/VMCore/Constants.cpp +++ b/lib/VMCore/Constants.cpp @@ -248,19 +248,30 @@ bool ConstantFP::isNullValue() const { } bool ConstantFP::isExactlyValue(double V) const { - return Val == APFloat(V); + return Val.bitwiseIsEqual(APFloat(V)); } namespace { struct DenseMapAPFloatKeyInfo { - static inline APFloat getEmptyKey() { - return APFloat(APFloat::Bogus,1); + struct KeyTy { + APFloat val; + KeyTy(const APFloat& V) : val(V){} + KeyTy(const KeyTy& that) : val(that.val) {} + bool operator==(const KeyTy& that) const { + return this->val.bitwiseIsEqual(that.val); + } + bool operator!=(const KeyTy& that) const { + return !this->operator==(that); + } + }; + static inline KeyTy getEmptyKey() { + return KeyTy(APFloat(APFloat::Bogus,1)); } - static inline APFloat getTombstoneKey() { - return APFloat(APFloat::Bogus,2); + static inline KeyTy getTombstoneKey() { + return KeyTy(APFloat(APFloat::Bogus,2)); } - static unsigned getHashValue(const APFloat &Key) { - return Key.getHashValue(); + static unsigned getHashValue(const KeyTy &Key) { + return Key.val.getHashValue(); } static bool isPod() { return false; } }; @@ -268,21 +279,21 @@ namespace { //---- ConstantFP::get() implementation... // -typedef DenseMap<APFloat, ConstantFP*, +typedef DenseMap<DenseMapAPFloatKeyInfo::KeyTy, ConstantFP*, DenseMapAPFloatKeyInfo> FPMapTy; static ManagedStatic<FPMapTy> FPConstants; ConstantFP *ConstantFP::get(const Type *Ty, double V) { if (Ty == Type::FloatTy) { - APFloat Key(APFloat((float)V)); + DenseMapAPFloatKeyInfo::KeyTy Key(APFloat((float)V)); ConstantFP *&Slot = (*FPConstants)[Key]; if (Slot) return Slot; return Slot = new ConstantFP(Ty, (float)V); } else if (Ty == Type::DoubleTy) { // Without the redundant cast, the following is taken to be // a function declaration. What a language. - APFloat Key(APFloat((double)V)); + DenseMapAPFloatKeyInfo::KeyTy Key(APFloat((double)V)); ConstantFP *&Slot = (*FPConstants)[Key]; if (Slot) return Slot; return Slot = new ConstantFP(Ty, V); |