diff options
author | Ted Kremenek <kremenek@apple.com> | 2008-02-11 17:24:50 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2008-02-11 17:24:50 +0000 |
commit | 1f801fa5ada9cb40fb97ae755c282e91af54a1bc (patch) | |
tree | 892502fb68fc883c8ed89d9185f8cd586e8ef8a9 /lib | |
parent | 04feb51886805046e8b1af10b7d21bc1ef85f457 (diff) | |
download | external_llvm-1f801fa5ada9cb40fb97ae755c282e91af54a1bc.zip external_llvm-1f801fa5ada9cb40fb97ae755c282e91af54a1bc.tar.gz external_llvm-1f801fa5ada9cb40fb97ae755c282e91af54a1bc.tar.bz2 |
Added "Profile" method to APFloat for use with FoldingSet.
Added member template "Add" to FoldingSetNodeID that allows "adding" arbitrary
objects to a profile via dispatch to FoldingSetTrait<T>::Profile().
Removed FoldingSetNodeID::AddAPFloat and FoldingSetNodeID::APInt, as their
functionality is now replaced using the above mentioned member template.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46957 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/CodeGen/SelectionDAG/SelectionDAG.cpp | 6 | ||||
-rw-r--r-- | lib/Support/APFloat.cpp | 6 | ||||
-rw-r--r-- | lib/Support/FoldingSet.cpp | 11 |
3 files changed, 9 insertions, 14 deletions
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp index c0351bb..62584a5 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAG.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAG.cpp @@ -344,7 +344,7 @@ static void AddNodeIDNode(FoldingSetNodeID &ID, SDNode *N) { break; case ISD::TargetConstantFP: case ISD::ConstantFP: { - ID.AddAPFloat(cast<ConstantFPSDNode>(N)->getValueAPF()); + ID.Add(cast<ConstantFPSDNode>(N)->getValueAPF()); break; } case ISD::TargetGlobalAddress: @@ -724,7 +724,7 @@ SDOperand SelectionDAG::getConstant(const APInt &Val, MVT::ValueType VT, bool is unsigned Opc = isT ? ISD::TargetConstant : ISD::Constant; FoldingSetNodeID ID; AddNodeIDNode(ID, Opc, getVTList(EltVT), 0, 0); - ID.AddAPInt(Val); + ID.Add(Val); void *IP = 0; SDNode *N = NULL; if ((N = CSEMap.FindNodeOrInsertPos(ID, IP))) @@ -763,7 +763,7 @@ SDOperand SelectionDAG::getConstantFP(const APFloat& V, MVT::ValueType VT, unsigned Opc = isTarget ? ISD::TargetConstantFP : ISD::ConstantFP; FoldingSetNodeID ID; AddNodeIDNode(ID, Opc, getVTList(EltVT), 0, 0); - ID.AddAPFloat(V); + ID.Add(V); void *IP = 0; SDNode *N = NULL; if ((N = CSEMap.FindNodeOrInsertPos(ID, IP))) diff --git a/lib/Support/APFloat.cpp b/lib/Support/APFloat.cpp index 3de709c..cc86e79 100644 --- a/lib/Support/APFloat.cpp +++ b/lib/Support/APFloat.cpp @@ -13,6 +13,7 @@ //===----------------------------------------------------------------------===// #include "llvm/ADT/APFloat.h" +#include "llvm/ADT/FoldingSet.h" #include <cassert> #include <cstring> #include "llvm/Support/MathExtras.h" @@ -691,6 +692,11 @@ APFloat::~APFloat() freeSignificand(); } +// Profile - This method 'profiles' an APFloat for use with FoldingSet. +void APFloat::Profile(FoldingSetNodeID& ID) const { + ID.Add(convertToAPInt()); +} + unsigned int APFloat::partCount() const { diff --git a/lib/Support/FoldingSet.cpp b/lib/Support/FoldingSet.cpp index b2d3483..2d2279c 100644 --- a/lib/Support/FoldingSet.cpp +++ b/lib/Support/FoldingSet.cpp @@ -15,8 +15,6 @@ //===----------------------------------------------------------------------===// #include "llvm/ADT/FoldingSet.h" -#include "llvm/ADT/APFloat.h" -#include "llvm/ADT/APInt.h" #include "llvm/Support/MathExtras.h" #include <cassert> using namespace llvm; @@ -58,15 +56,6 @@ void FoldingSetNodeID::AddFloat(float F) { void FoldingSetNodeID::AddDouble(double D) { AddInteger(DoubleToBits(D)); } -void FoldingSetNodeID::AddAPFloat(const APFloat& apf) { - APInt api = apf.convertToAPInt(); - AddAPInt(api); -} -void FoldingSetNodeID::AddAPInt(const APInt& api) { - const uint64_t *p = api.getRawData(); - for (unsigned i=0; i<api.getNumWords(); i++) - AddInteger(*p++); -} void FoldingSetNodeID::AddString(const std::string &String) { unsigned Size = String.size(); Bits.push_back(Size); |