mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-26 23:32:58 +00:00
IR: Don't drop MDNode uniquing on null operands
Now that `LLVMContextImpl` can call `MDNode::dropAllReferences()` to prevent teardown madness, stop dropping uniquing just because an operand drops to null. Part of PR21532. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225223 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2f7982026d
commit
97d1c07c15
@ -515,13 +515,8 @@ void GenericMDNode::handleChangedOperand(void *Ref, Metadata *New) {
|
||||
Metadata *Old = getOperand(Op);
|
||||
setOperand(Op, New);
|
||||
|
||||
// Drop uniquing for self-reference cycles or if an operand drops to null.
|
||||
//
|
||||
// FIXME: Stop dropping uniquing when an operand drops to null. The original
|
||||
// motivation was to prevent madness during teardown of LLVMContextImpl, but
|
||||
// dropAllReferences() fixes that problem in a better way. (It's just here
|
||||
// now for better staging of semantic changes.)
|
||||
if (New == this || !New) {
|
||||
// Drop uniquing for self-reference cycles.
|
||||
if (New == this) {
|
||||
storeDistinctInContext();
|
||||
setHash(0);
|
||||
if (!isResolved())
|
||||
|
@ -202,6 +202,26 @@ TEST_F(MDNodeTest, Print) {
|
||||
EXPECT_EQ(Expected, Actual);
|
||||
}
|
||||
|
||||
TEST_F(MDNodeTest, NullOperand) {
|
||||
// metadata !{}
|
||||
MDNode *Empty = MDNode::get(Context, None);
|
||||
|
||||
// metadata !{metadata !{}}
|
||||
Metadata *Ops[] = {Empty};
|
||||
MDNode *N = MDNode::get(Context, Ops);
|
||||
ASSERT_EQ(Empty, N->getOperand(0));
|
||||
|
||||
// metadata !{metadata !{}} => metadata !{null}
|
||||
N->replaceOperandWith(0, nullptr);
|
||||
ASSERT_EQ(nullptr, N->getOperand(0));
|
||||
|
||||
// metadata !{null}
|
||||
Ops[0] = nullptr;
|
||||
MDNode *NullOp = MDNode::get(Context, Ops);
|
||||
ASSERT_EQ(nullptr, NullOp->getOperand(0));
|
||||
EXPECT_EQ(N, NullOp);
|
||||
}
|
||||
|
||||
typedef MetadataTest MetadataAsValueTest;
|
||||
|
||||
TEST_F(MetadataAsValueTest, MDNode) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user