[llvm] r221886 - IR: Create the Metadata class
Duncan P. N. Exon Smith
dexonsmith at apple.com
Thu Nov 13 05:17:48 PST 2014
Author: dexonsmith
Date: Thu Nov 13 07:17:47 2014
New Revision: 221886
URL: http://llvm.org/viewvc/llvm-project?rev=221886&view=rev
Log:
IR: Create the Metadata class
This will become the root of a new class hierarchy separate from
`Value`. As a first step, stick it between `Value` and `MDNode`.
This is part of PR21532.
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=221886&r1=221885&r2=221886&view=diff
==============================================================================
--- llvm/trunk/include/llvm/IR/Metadata.h (original)
+++ llvm/trunk/include/llvm/IR/Metadata.h Thu Nov 13 07:17:47 2014
@@ -34,11 +34,28 @@ enum LLVMConstants : uint32_t {
DEBUG_METADATA_VERSION = 2 // Current debug info version number.
};
+/// \brief Root of the metadata hierarchy.
+///
+/// This is a root class for typeless data in the IR.
+///
+/// TODO: Detach from the Value hierarchy.
+class Metadata : public Value {
+protected:
+ Metadata(Type *Type, unsigned ID) : Value(Type, ID) {}
+
+public:
+ static bool classof(const Value *V) {
+ return V->getValueID() == MDNodeVal;
+ }
+};
+
//===----------------------------------------------------------------------===//
/// \brief A single uniqued string.
///
/// These are used to efficiently contain a byte sequence for metadata.
/// MDString is always unnamed.
+///
+/// TODO: Inherit from Metadata.
class MDString : public Value {
virtual void anchor();
MDString(const MDString &) LLVM_DELETED_FUNCTION;
@@ -115,8 +132,8 @@ struct DenseMapInfo<AAMDNodes> {
class MDNodeOperand;
//===----------------------------------------------------------------------===//
-/// \brief A tuple of other values.
-class MDNode : public Value, public FoldingSetNode {
+/// \brief Generic tuple of metadata.
+class MDNode : public Metadata, public FoldingSetNode {
MDNode(const MDNode &) LLVM_DELETED_FUNCTION;
void operator=(const MDNode &) LLVM_DELETED_FUNCTION;
friend class MDNodeOperand;
@@ -241,6 +258,8 @@ private:
///
/// Despite its name, a NamedMDNode isn't itself an MDNode. NamedMDNodes belong
/// to modules, have names, and contain lists of MDNodes.
+///
+/// TODO: Inherit from Metadata.
class NamedMDNode : public ilist_node<NamedMDNode> {
friend class SymbolTableListTraits<NamedMDNode, Module>;
friend struct ilist_traits<NamedMDNode>;
Modified: llvm/trunk/lib/IR/Metadata.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Metadata.cpp?rev=221886&r1=221885&r2=221886&view=diff
==============================================================================
--- llvm/trunk/lib/IR/Metadata.cpp (original)
+++ llvm/trunk/lib/IR/Metadata.cpp Thu Nov 13 07:17:47 2014
@@ -109,8 +109,8 @@ void MDNode::replaceOperandWith(unsigned
replaceOperand(Op, Val);
}
-MDNode::MDNode(LLVMContext &C, ArrayRef<Value*> Vals, bool isFunctionLocal)
-: Value(Type::getMetadataTy(C), Value::MDNodeVal) {
+MDNode::MDNode(LLVMContext &C, ArrayRef<Value *> Vals, bool isFunctionLocal)
+ : Metadata(Type::getMetadataTy(C), Value::MDNodeVal) {
NumOperands = Vals.size();
if (isFunctionLocal)
More information about the llvm-commits
mailing list