mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-15 07:34:33 +00:00
IR: Add isUniqued() and isTemporary()
Change `MDNode::isDistinct()` to only apply to 'distinct' nodes (not temporaries), and introduce `MDNode::isUniqued()` and `MDNode::isTemporary()` for the other two possibilities. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226482 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5f50874b3d
commit
1d72e18caa
@ -646,13 +646,9 @@ public:
|
||||
/// \brief Check if node is fully resolved.
|
||||
bool isResolved() const;
|
||||
|
||||
/// \brief Check if node is distinct.
|
||||
///
|
||||
/// Distinct nodes are not uniqued, and will not be returned by \a
|
||||
/// MDNode::get().
|
||||
bool isDistinct() const {
|
||||
return isStoredDistinctInContext() || isa<MDNodeFwdDecl>(this);
|
||||
}
|
||||
bool isUniqued() const { return Storage == Uniqued; }
|
||||
bool isDistinct() const { return Storage == Distinct; }
|
||||
bool isTemporary() const { return Storage == Temporary; }
|
||||
|
||||
protected:
|
||||
/// \brief Set an operand.
|
||||
|
@ -750,7 +750,7 @@ void MDNode::replaceOperandWith(unsigned I, Metadata *New) {
|
||||
if (getOperand(I) == New)
|
||||
return;
|
||||
|
||||
if (isDistinct()) {
|
||||
if (!isUniqued()) {
|
||||
setOperand(I, New);
|
||||
return;
|
||||
}
|
||||
|
@ -282,7 +282,7 @@ static Metadata *mapUniquedNode(const UniquableMDNode *Node,
|
||||
ValueToValueMapTy &VM, RemapFlags Flags,
|
||||
ValueMapTypeRemapper *TypeMapper,
|
||||
ValueMaterializer *Materializer) {
|
||||
assert(!Node->isDistinct() && "Expected uniqued node");
|
||||
assert(Node->isUniqued() && "Expected uniqued node");
|
||||
|
||||
// Create a dummy node in case we have a metadata cycle.
|
||||
MDNodeFwdDecl *Dummy = MDNode::getTemporary(Node->getContext(), None);
|
||||
|
@ -274,9 +274,33 @@ TEST_F(MDNodeTest, getDistinct) {
|
||||
ASSERT_EQ(Empty, MDNode::get(Context, None));
|
||||
}
|
||||
|
||||
TEST_F(MDNodeTest, TempIsDistinct) {
|
||||
MDNode *T = MDNode::getTemporary(Context, None);
|
||||
EXPECT_TRUE(T->isDistinct());
|
||||
TEST_F(MDNodeTest, isUniqued) {
|
||||
MDNode *U = MDTuple::get(Context, None);
|
||||
MDNode *D = MDTuple::getDistinct(Context, None);
|
||||
MDNode *T = MDTuple::getTemporary(Context, None);
|
||||
EXPECT_TRUE(U->isUniqued());
|
||||
EXPECT_FALSE(D->isUniqued());
|
||||
EXPECT_FALSE(T->isUniqued());
|
||||
MDNode::deleteTemporary(T);
|
||||
}
|
||||
|
||||
TEST_F(MDNodeTest, isDistinct) {
|
||||
MDNode *U = MDTuple::get(Context, None);
|
||||
MDNode *D = MDTuple::getDistinct(Context, None);
|
||||
MDNode *T = MDTuple::getTemporary(Context, None);
|
||||
EXPECT_FALSE(U->isDistinct());
|
||||
EXPECT_TRUE(D->isDistinct());
|
||||
EXPECT_FALSE(T->isDistinct());
|
||||
MDNode::deleteTemporary(T);
|
||||
}
|
||||
|
||||
TEST_F(MDNodeTest, isTemporary) {
|
||||
MDNode *U = MDTuple::get(Context, None);
|
||||
MDNode *D = MDTuple::getDistinct(Context, None);
|
||||
MDNode *T = MDTuple::getTemporary(Context, None);
|
||||
EXPECT_FALSE(U->isTemporary());
|
||||
EXPECT_FALSE(D->isTemporary());
|
||||
EXPECT_TRUE(T->isTemporary());
|
||||
MDNode::deleteTemporary(T);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user