mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
IR: Unify code for MDNode::isResolved(), NFC
Unify the definitions of `MDNode::isResolved()` and `UniquableMDNode::isResolved()`. Previously, `UniquableMDNode` could answer this question more efficiently, but now that RAUW support has been unified with `MDNodeFwdDecl`, `MDNode` doesn't need any casts to figure out the answer. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226485 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
641414a6c0
commit
c9a780aec5
@ -721,7 +721,17 @@ public:
|
|||||||
void replaceOperandWith(unsigned I, Metadata *New);
|
void replaceOperandWith(unsigned I, Metadata *New);
|
||||||
|
|
||||||
/// \brief Check if node is fully resolved.
|
/// \brief Check if node is fully resolved.
|
||||||
bool isResolved() const;
|
///
|
||||||
|
/// If \a isTemporary(), this always returns \c false; if \a isDistinct(),
|
||||||
|
/// this always returns \c true.
|
||||||
|
///
|
||||||
|
/// If \a isUniqued(), returns \c true if this has already dropped RAUW
|
||||||
|
/// support (because all operands are resolved).
|
||||||
|
///
|
||||||
|
/// As forward declarations are resolved, their containers should get
|
||||||
|
/// resolved automatically. However, if this (or one of its operands) is
|
||||||
|
/// involved in a cycle, \a resolveCycles() needs to be called explicitly.
|
||||||
|
bool isResolved() const { return !Context.hasReplaceableUses(); }
|
||||||
|
|
||||||
bool isUniqued() const { return Storage == Uniqued; }
|
bool isUniqued() const { return Storage == Uniqued; }
|
||||||
bool isDistinct() const { return Storage == Distinct; }
|
bool isDistinct() const { return Storage == Distinct; }
|
||||||
@ -811,16 +821,6 @@ public:
|
|||||||
MD->getMetadataID() == MDLocationKind;
|
MD->getMetadataID() == MDLocationKind;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// \brief Check whether any operands are forward declarations.
|
|
||||||
///
|
|
||||||
/// Returns \c true as long as any operands (or their operands, etc.) are \a
|
|
||||||
/// MDNodeFwdDecl.
|
|
||||||
///
|
|
||||||
/// As forward declarations are resolved, their containers should get
|
|
||||||
/// resolved automatically. However, if this (or one of its operands) is
|
|
||||||
/// involved in a cycle, \a resolveCycles() needs to be called explicitly.
|
|
||||||
bool isResolved() const { return !Context.hasReplaceableUses(); }
|
|
||||||
|
|
||||||
/// \brief Resolve cycles.
|
/// \brief Resolve cycles.
|
||||||
///
|
///
|
||||||
/// Once all forward declarations have been resolved, force cycles to be
|
/// Once all forward declarations have been resolved, force cycles to be
|
||||||
|
@ -407,12 +407,6 @@ MDNode::MDNode(LLVMContext &Context, unsigned ID, StorageType Storage,
|
|||||||
make_unique<ReplaceableMetadataImpl>(Context));
|
make_unique<ReplaceableMetadataImpl>(Context));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MDNode::isResolved() const {
|
|
||||||
if (isa<MDNodeFwdDecl>(this))
|
|
||||||
return false;
|
|
||||||
return cast<UniquableMDNode>(this)->isResolved();
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool isOperandUnresolved(Metadata *Op) {
|
static bool isOperandUnresolved(Metadata *Op) {
|
||||||
if (auto *N = dyn_cast_or_null<MDNode>(Op))
|
if (auto *N = dyn_cast_or_null<MDNode>(Op))
|
||||||
return !N->isResolved();
|
return !N->isResolved();
|
||||||
|
Loading…
Reference in New Issue
Block a user