mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-17 20:23:59 +00:00
IR: Split GenericMDNode into MDTuple and UniquableMDNode
Split `GenericMDNode` into two classes (with more descriptive names). - `UniquableMDNode` will be a common subclass for `MDNode`s that are sometimes uniqued like constants, and sometimes 'distinct'. This class gets the (short-lived) RAUW support and related API. - `MDTuple` is the basic tuple that has always been returned by `MDNode::get()`. This is as opposed to more specific nodes to be added soon, which have additional fields, custom assembly syntax, and extra semantics. This class gets the hash-related logic, since other sublcasses of `UniquableMDNode` may need to hash based on other fields. To keep this diff from getting too big, I've added casts to `MDTuple` that won't really scale as new subclasses of `UniquableMDNode` are added, but I'll clean those up incrementally. (No functionality change intended.) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225682 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -135,17 +135,17 @@ LLVMContextImpl::~LLVMContextImpl() {
|
||||
for (auto &Pair : ValuesAsMetadata)
|
||||
delete Pair.second;
|
||||
|
||||
// Destroy MDNodes. ~MDNode can move and remove nodes between the MDNodeSet
|
||||
// and the NonUniquedMDNodes sets, so copy the values out first.
|
||||
SmallVector<GenericMDNode *, 8> MDNodes;
|
||||
MDNodes.reserve(MDNodeSet.size() + NonUniquedMDNodes.size());
|
||||
MDNodes.append(MDNodeSet.begin(), MDNodeSet.end());
|
||||
MDNodes.append(NonUniquedMDNodes.begin(), NonUniquedMDNodes.end());
|
||||
for (GenericMDNode *I : MDNodes)
|
||||
// Destroy MDNodes. ~MDNode can move and remove nodes between the MDTuples
|
||||
// and the DistinctMDNodes sets, so copy the values out first.
|
||||
SmallVector<UniquableMDNode *, 8> Uniquables;
|
||||
Uniquables.reserve(MDTuples.size() + DistinctMDNodes.size());
|
||||
Uniquables.append(MDTuples.begin(), MDTuples.end());
|
||||
Uniquables.append(DistinctMDNodes.begin(), DistinctMDNodes.end());
|
||||
for (UniquableMDNode *I : Uniquables)
|
||||
I->dropAllReferences();
|
||||
for (GenericMDNode *I : MDNodes)
|
||||
delete I;
|
||||
assert(MDNodeSet.empty() && NonUniquedMDNodes.empty() &&
|
||||
for (UniquableMDNode *I : Uniquables)
|
||||
delete cast<MDTuple>(I);
|
||||
assert(MDTuples.empty() && DistinctMDNodes.empty() &&
|
||||
"Destroying all MDNodes didn't empty the Context's sets.");
|
||||
|
||||
// Destroy MDStrings.
|
||||
|
Reference in New Issue
Block a user