Avoid creating a metadata slot for all metadata that contains an instruction

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90581 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Victor Hernandez 2009-12-04 20:07:10 +00:00
parent 11572babb1
commit ff7707e983

View File

@ -695,13 +695,8 @@ void SlotTracker::processFunction() {
!I->hasName())
CreateFunctionSlot(I);
for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i)
if (MDNode *N = dyn_cast_or_null<MDNode>(I->getOperand(i))) {
// Create a metadata slot only if N contains no instructions.
for (unsigned n = 0, e = N->getNumElements(); n != e; ++n)
if (N->getElement(n) && isa<Instruction>(N->getElement(n)))
continue;
if (MDNode *N = dyn_cast_or_null<MDNode>(I->getOperand(i)))
CreateMetadataSlot(N);
}
// Process metadata attached with this instruction.
MDs.clear();
@ -818,6 +813,11 @@ void SlotTracker::CreateFunctionSlot(const Value *V) {
void SlotTracker::CreateMetadataSlot(const MDNode *N) {
assert(N && "Can't insert a null Value into SlotTracker!");
// Don't insert if N contains an instruction.
for (unsigned i = 0, e = N->getNumElements(); i != e; ++i)
if (N->getElement(i) && isa<Instruction>(N->getElement(i)))
return;
ValueMap::iterator I = mdnMap.find(N);
if (I != mdnMap.end())
return;