[llvm] r225685 - IR: Move creation logic down to MDTuple, NFC
Duncan P. N. Exon Smith
dexonsmith at apple.com
Mon Jan 12 12:13:56 PST 2015
Author: dexonsmith
Date: Mon Jan 12 14:13:56 2015
New Revision: 225685
URL: http://llvm.org/viewvc/llvm-project?rev=225685&view=rev
Log:
IR: Move creation logic down to MDTuple, NFC
Move creation logic for `MDTuple`s down where it belongs. Once there
are a few more subclasses, these functions really won't make much sense
here (the `friend` relationship was already awkward). For now, leave
the `MDNode` versions around, but have it forward down.
Modified:
llvm/trunk/include/llvm/IR/Metadata.h
llvm/trunk/lib/IR/Metadata.cpp
Modified: llvm/trunk/include/llvm/IR/Metadata.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Metadata.h?rev=225685&r1=225684&r2=225685&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/Metadata.h (original)
+++ llvm/trunk/include/llvm/IR/Metadata.h Mon Jan 12 14:13:56 2015
@@ -604,25 +604,15 @@ protected:
void dropAllReferences();
- static MDNode *getMDNode(LLVMContext &C, ArrayRef<Metadata *> MDs,
- bool Insert = true);
-
MDOperand *mutable_begin() { return mutable_end() - NumOperands; }
MDOperand *mutable_end() { return reinterpret_cast<MDOperand *>(this); }
public:
- static MDNode *get(LLVMContext &Context, ArrayRef<Metadata *> MDs) {
- return getMDNode(Context, MDs, true);
- }
-
- static MDNode *getIfExists(LLVMContext &Context, ArrayRef<Metadata *> MDs) {
- return getMDNode(Context, MDs, false);
- }
-
- /// \brief Return a distinct node.
- ///
- /// Return a distinct node -- i.e., a node that is not uniqued.
- static MDNode *getDistinct(LLVMContext &Context, ArrayRef<Metadata *> MDs);
+ static inline MDNode *get(LLVMContext &Context, ArrayRef<Metadata *> MDs);
+ static inline MDNode *getIfExists(LLVMContext &Context,
+ ArrayRef<Metadata *> MDs);
+ static inline MDNode *getDistinct(LLVMContext &Context,
+ ArrayRef<Metadata *> MDs);
/// \brief Return a temporary MDNode
///
@@ -774,7 +764,6 @@ private:
class MDTuple : public UniquableMDNode {
friend class LLVMContextImpl;
friend class UniquableMDNode;
- friend class MDNode;
MDTuple(LLVMContext &C, ArrayRef<Metadata *> Vals, bool AllowRAUW)
: UniquableMDNode(C, MDTupleKind, Vals, AllowRAUW) {}
@@ -783,15 +772,40 @@ class MDTuple : public UniquableMDNode {
void setHash(unsigned Hash) { MDNodeSubclassData = Hash; }
void recalculateHash();
+ static MDTuple *getImpl(LLVMContext &Context, ArrayRef<Metadata *> MDs,
+ bool ShouldCreate);
+
public:
/// \brief Get the hash, if any.
unsigned getHash() const { return MDNodeSubclassData; }
+ static MDTuple *get(LLVMContext &Context, ArrayRef<Metadata *> MDs) {
+ return getImpl(Context, MDs, /* ShouldCreate */ true);
+ }
+ static MDTuple *getIfExists(LLVMContext &Context, ArrayRef<Metadata *> MDs) {
+ return getImpl(Context, MDs, /* ShouldCreate */ false);
+ }
+
+ /// \brief Return a distinct node.
+ ///
+ /// Return a distinct node -- i.e., a node that is not uniqued.
+ static MDTuple *getDistinct(LLVMContext &Context, ArrayRef<Metadata *> MDs);
+
static bool classof(const Metadata *MD) {
return MD->getMetadataID() == MDTupleKind;
}
};
+MDNode *MDNode::get(LLVMContext &Context, ArrayRef<Metadata *> MDs) {
+ return MDTuple::get(Context, MDs);
+}
+MDNode *MDNode::getIfExists(LLVMContext &Context, ArrayRef<Metadata *> MDs) {
+ return MDTuple::getIfExists(Context, MDs);
+}
+MDNode *MDNode::getDistinct(LLVMContext &Context, ArrayRef<Metadata *> MDs) {
+ return MDTuple::getDistinct(Context, MDs);
+}
+
/// \brief Forward declaration of metadata.
///
/// Forward declaration of metadata, in the form of a basic tuple. Unlike \a
Modified: llvm/trunk/lib/IR/Metadata.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Metadata.cpp?rev=225685&r1=225684&r2=225685&view=diff
==============================================================================
--- llvm/trunk/lib/IR/Metadata.cpp (original)
+++ llvm/trunk/lib/IR/Metadata.cpp Mon Jan 12 14:13:56 2015
@@ -581,15 +581,15 @@ void UniquableMDNode::handleChangedOpera
storeDistinctInContext();
}
-MDNode *MDNode::getMDNode(LLVMContext &Context, ArrayRef<Metadata *> MDs,
- bool Insert) {
- auto &Store = Context.pImpl->MDTuples;
-
+MDTuple *MDTuple::getImpl(LLVMContext &Context, ArrayRef<Metadata *> MDs,
+ bool ShouldCreate) {
MDTupleInfo::KeyTy Key(MDs);
+
+ auto &Store = Context.pImpl->MDTuples;
auto I = Store.find_as(Key);
if (I != Store.end())
return *I;
- if (!Insert)
+ if (!ShouldCreate)
return nullptr;
// Coallocate space for the node and Operands together, then placement new.
@@ -599,7 +599,7 @@ MDNode *MDNode::getMDNode(LLVMContext &C
return N;
}
-MDNode *MDNode::getDistinct(LLVMContext &Context, ArrayRef<Metadata *> MDs) {
+MDTuple *MDTuple::getDistinct(LLVMContext &Context, ArrayRef<Metadata *> MDs) {
auto *N = new (MDs.size()) MDTuple(Context, MDs, /* AllowRAUW */ false);
N->storeDistinctInContext();
return N;
More information about the llvm-commits
mailing list