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:
Duncan P. N. Exon Smith 2015-01-19 19:03:18 +00:00
parent 641414a6c0
commit c9a780aec5
2 changed files with 11 additions and 17 deletions

View File

@ -721,7 +721,17 @@ public:
void replaceOperandWith(unsigned I, Metadata *New);
/// \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 isDistinct() const { return Storage == Distinct; }
@ -811,16 +821,6 @@ public:
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.
///
/// Once all forward declarations have been resolved, force cycles to be

View File

@ -407,12 +407,6 @@ MDNode::MDNode(LLVMContext &Context, unsigned ID, StorageType Storage,
make_unique<ReplaceableMetadataImpl>(Context));
}
bool MDNode::isResolved() const {
if (isa<MDNodeFwdDecl>(this))
return false;
return cast<UniquableMDNode>(this)->isResolved();
}
static bool isOperandUnresolved(Metadata *Op) {
if (auto *N = dyn_cast_or_null<MDNode>(Op))
return !N->isResolved();