mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-21 18:29:46 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221886 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
18e1185ddf
commit
b89064f540
@ -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>;
|
||||
|
@ -109,8 +109,8 @@ void MDNode::replaceOperandWith(unsigned i, Value *Val) {
|
||||
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)
|
||||
|
Loading…
Reference in New Issue
Block a user