Lines Matching refs:MD

60 MetadataAsValue::MetadataAsValue(Type *Ty, Metadata *MD)  in MetadataAsValue()  argument
61 : Value(Ty, MetadataAsValueVal), MD(MD) { in MetadataAsValue()
66 getType()->getContext().pImpl->MetadataAsValues.erase(MD); in ~MetadataAsValue()
82 Metadata *MD) { in canonicalizeMetadataForValue() argument
83 if (!MD) in canonicalizeMetadataForValue()
88 auto *N = dyn_cast<MDNode>(MD); in canonicalizeMetadataForValue()
90 return MD; in canonicalizeMetadataForValue()
100 return MD; in canonicalizeMetadataForValue()
103 MetadataAsValue *MetadataAsValue::get(LLVMContext &Context, Metadata *MD) { in get() argument
104 MD = canonicalizeMetadataForValue(Context, MD); in get()
105 auto *&Entry = Context.pImpl->MetadataAsValues[MD]; in get()
107 Entry = new MetadataAsValue(Type::getMetadataTy(Context), MD); in get()
112 Metadata *MD) { in getIfExists() argument
113 MD = canonicalizeMetadataForValue(Context, MD); in getIfExists()
115 return Store.lookup(MD); in getIfExists()
118 void MetadataAsValue::handleChangedMetadata(Metadata *MD) { in handleChangedMetadata() argument
120 MD = canonicalizeMetadataForValue(Context, MD); in handleChangedMetadata()
124 Store.erase(this->MD); in handleChangedMetadata()
126 this->MD = nullptr; in handleChangedMetadata()
129 auto *&Entry = Store[MD]; in handleChangedMetadata()
136 this->MD = MD; in handleChangedMetadata()
142 if (MD) in track()
143 MetadataTracking::track(&MD, *MD, *this); in track()
147 if (MD) in untrack()
148 MetadataTracking::untrack(MD); in untrack()
166 Metadata *&MD = DebugValues[Idx]; in trackDebugValue() local
167 if (MD) in trackDebugValue()
168 MetadataTracking::track(&MD, *MD, *this); in trackDebugValue()
172 for (Metadata *&MD : DebugValues) in trackDebugValues()
173 if (MD) in trackDebugValues()
174 MetadataTracking::track(&MD, *MD, *this); in trackDebugValues()
179 Metadata *&MD = DebugValues[Idx]; in untrackDebugValue() local
180 if (MD) in untrackDebugValue()
181 MetadataTracking::untrack(MD); in untrackDebugValue()
185 for (Metadata *&MD : DebugValues) in untrackDebugValues()
186 if (MD) in untrackDebugValues()
187 MetadataTracking::untrack(MD); in untrackDebugValues()
192 for (const auto &[MD, XMD] : zip(DebugValues, X.DebugValues)) in retrackDebugValues()
194 MetadataTracking::retrack(XMD, MD); in retrackDebugValues()
198 bool MetadataTracking::track(void *Ref, Metadata &MD, OwnerTy Owner) { in track() argument
200 assert((Owner || *static_cast<Metadata **>(Ref) == &MD) && in track()
202 if (auto *R = ReplaceableMetadataImpl::getOrCreate(MD)) { in track()
206 if (auto *PH = dyn_cast<DistinctMDOperandPlaceholder>(&MD)) { in track()
215 void MetadataTracking::untrack(void *Ref, Metadata &MD) { in untrack() argument
217 if (auto *R = ReplaceableMetadataImpl::getIfExists(MD)) in untrack()
219 else if (auto *PH = dyn_cast<DistinctMDOperandPlaceholder>(&MD)) in untrack()
223 bool MetadataTracking::retrack(void *Ref, Metadata &MD, void *New) { in retrack() argument
227 if (auto *R = ReplaceableMetadataImpl::getIfExists(MD)) { in retrack()
228 R->moveRef(Ref, New, MD); in retrack()
231 assert(!isa<DistinctMDOperandPlaceholder>(MD) && in retrack()
233 assert(!isReplaceable(MD) && in retrack()
238 bool MetadataTracking::isReplaceable(const Metadata &MD) { in isReplaceable() argument
239 return ReplaceableMetadataImpl::isReplaceable(MD); in isReplaceable()
305 const Metadata &MD) { in moveRef() argument
315 (void)MD; in moveRef()
316 assert((OwnerAndIndex.first || *static_cast<Metadata **>(Ref) == &MD) && in moveRef()
318 assert((OwnerAndIndex.first || *static_cast<Metadata **>(New) == &MD) && in moveRef()
330 ValueAsMetadata *MD = I->second; in SalvageDebugInfo() local
334 SmallVector<UseTy, 8> Uses(MD->UseMap.begin(), MD->UseMap.end()); in SalvageDebugInfo()
352 void ReplaceableMetadataImpl::replaceAllUsesWith(Metadata *MD) { in replaceAllUsesWith() argument
372 Ref = MD; in replaceAllUsesWith()
373 if (MD) in replaceAllUsesWith()
381 cast<MetadataAsValue *>(Owner)->handleChangedMetadata(MD); in replaceAllUsesWith()
386 Owner.get<DebugValueUser *>()->handleChangedValue(Pair.first, MD); in replaceAllUsesWith()
395 cast<CLASS>(OwnerMD)->handleChangedOperand(Pair.first, MD); \ in replaceAllUsesWith()
441 ReplaceableMetadataImpl *ReplaceableMetadataImpl::getOrCreate(Metadata &MD) { in getOrCreate() argument
442 if (auto *N = dyn_cast<MDNode>(&MD)) { in getOrCreate()
447 if (auto ArgList = dyn_cast<DIArgList>(&MD)) in getOrCreate()
449 return dyn_cast<ValueAsMetadata>(&MD); in getOrCreate()
452 ReplaceableMetadataImpl *ReplaceableMetadataImpl::getIfExists(Metadata &MD) { in getIfExists() argument
453 if (auto *N = dyn_cast<MDNode>(&MD)) { in getIfExists()
458 if (auto ArgList = dyn_cast<DIArgList>(&MD)) in getIfExists()
460 return dyn_cast<ValueAsMetadata>(&MD); in getIfExists()
463 bool ReplaceableMetadataImpl::isReplaceable(const Metadata &MD) { in isReplaceable() argument
464 if (auto *N = dyn_cast<MDNode>(&MD)) in isReplaceable()
466 return isa<ValueAsMetadata>(&MD) || isa<DIArgList>(&MD); in isReplaceable()
519 ValueAsMetadata *MD = I->second; in handleDeletion() local
520 assert(MD && "Expected valid metadata"); in handleDeletion()
521 assert(MD->getValue() == V && "Expected valid mapping"); in handleDeletion()
525 MD->replaceAllUsesWith(nullptr); in handleDeletion()
526 delete MD; in handleDeletion()
546 ValueAsMetadata *MD = I->second; in handleRAUW() local
547 assert(MD && "Expected valid metadata"); in handleRAUW()
548 assert(MD->getValue() == From && "Expected valid mapping"); in handleRAUW()
551 if (isa<LocalAsMetadata>(MD)) { in handleRAUW()
554 MD->replaceAllUsesWith(ConstantAsMetadata::get(C)); in handleRAUW()
555 delete MD; in handleRAUW()
561 MD->replaceAllUsesWith(nullptr); in handleRAUW()
562 delete MD; in handleRAUW()
567 MD->replaceAllUsesWith(nullptr); in handleRAUW()
568 delete MD; in handleRAUW()
575 MD->replaceAllUsesWith(Entry); in handleRAUW()
576 delete MD; in handleRAUW()
583 MD->V = To; in handleRAUW()
584 Entry = MD; in handleRAUW()
639 for (Metadata *MD : Ops1) in MDNode()
640 setOperand(Op++, MD); in MDNode()
641 for (Metadata *MD : Ops2) in MDNode()
642 setOperand(Op++, MD); in MDNode()
1119 MDs.remove_if([&](Metadata *MD) { return !BSet.count(MD); }); in intersect() argument
1420 void MDAttachments::set(unsigned ID, MDNode *MD) { in set() argument
1422 if (MD) in set()
1423 insert(ID, *MD); in set()
1426 void MDAttachments::insert(unsigned ID, MDNode &MD) { in insert() argument
1427 Attachments.push_back({ID, TrackingMDNodeRef(&MD)}); in insert()
1513 void Value::addMetadata(unsigned KindID, MDNode &MD) { in addMetadata() argument
1517 getContext().pImpl->ValueMetadata[this].insert(KindID, MD); in addMetadata()
1520 void Value::addMetadata(StringRef Kind, MDNode &MD) { in addMetadata() argument
1521 addMetadata(getContext().getMDKindID(Kind), MD); in addMetadata()
1676 MDNode *MD = MDTuple::get(getContext(), Names); in addAnnotationMetadata() local
1677 setMetadata(LLVMContext::MD_annotation, MD); in addAnnotationMetadata()
1694 MDNode *MD = MDTuple::get(getContext(), Names); in addAnnotationMetadata() local
1695 setMetadata(LLVMContext::MD_annotation, MD); in addAnnotationMetadata()
1750 for (auto &MD : MDs) { in copyMetadata() local
1752 if (Offset != 0 && MD.first == LLVMContext::MD_type) { in copyMetadata()
1754 cast<ConstantAsMetadata>(MD.second->getOperand(0))->getValue()); in copyMetadata()
1755 Metadata *TypeId = MD.second->getOperand(1); in copyMetadata()
1765 auto *Attachment = MD.second; in copyMetadata()
1766 if (Offset != 0 && MD.first == LLVMContext::MD_dbg) { in copyMetadata()
1784 addMetadata(MD.first, *Attachment); in copyMetadata()
1808 if (MDNode *MD = getMetadata(LLVMContext::MD_vcall_visibility)) { in getVCallVisibility() local
1810 cast<ConstantAsMetadata>(MD->getOperand(0))->getValue()) in getVCallVisibility()
1843 for (MDNode *MD : MDs) in getDebugInfo()
1844 GVs.push_back(cast<DIGlobalVariableExpression>(MD)); in getDebugInfo()