Lines Matching refs:MD
59 MetadataAsValue::MetadataAsValue(Type *Ty, Metadata *MD) in MetadataAsValue() argument
60 : Value(Ty, MetadataAsValueVal), MD(MD) { in MetadataAsValue()
65 getType()->getContext().pImpl->MetadataAsValues.erase(MD); in ~MetadataAsValue()
81 Metadata *MD) { in canonicalizeMetadataForValue() argument
82 if (!MD) in canonicalizeMetadataForValue()
87 auto *N = dyn_cast<MDNode>(MD); in canonicalizeMetadataForValue()
89 return MD; in canonicalizeMetadataForValue()
99 return MD; in canonicalizeMetadataForValue()
102 MetadataAsValue *MetadataAsValue::get(LLVMContext &Context, Metadata *MD) { in get() argument
103 MD = canonicalizeMetadataForValue(Context, MD); in get()
104 auto *&Entry = Context.pImpl->MetadataAsValues[MD]; in get()
106 Entry = new MetadataAsValue(Type::getMetadataTy(Context), MD); in get()
111 Metadata *MD) { in getIfExists() argument
112 MD = canonicalizeMetadataForValue(Context, MD); in getIfExists()
114 return Store.lookup(MD); in getIfExists()
117 void MetadataAsValue::handleChangedMetadata(Metadata *MD) { in handleChangedMetadata() argument
119 MD = canonicalizeMetadataForValue(Context, MD); in handleChangedMetadata()
123 Store.erase(this->MD); in handleChangedMetadata()
125 this->MD = nullptr; in handleChangedMetadata()
128 auto *&Entry = Store[MD]; in handleChangedMetadata()
135 this->MD = MD; in handleChangedMetadata()
141 if (MD) in track()
142 MetadataTracking::track(&MD, *MD, *this); in track()
146 if (MD) in untrack()
147 MetadataTracking::untrack(MD); in untrack()
150 bool MetadataTracking::track(void *Ref, Metadata &MD, OwnerTy Owner) { in track() argument
152 assert((Owner || *static_cast<Metadata **>(Ref) == &MD) && in track()
154 if (auto *R = ReplaceableMetadataImpl::getOrCreate(MD)) { in track()
158 if (auto *PH = dyn_cast<DistinctMDOperandPlaceholder>(&MD)) { in track()
167 void MetadataTracking::untrack(void *Ref, Metadata &MD) { in untrack() argument
169 if (auto *R = ReplaceableMetadataImpl::getIfExists(MD)) in untrack()
171 else if (auto *PH = dyn_cast<DistinctMDOperandPlaceholder>(&MD)) in untrack()
175 bool MetadataTracking::retrack(void *Ref, Metadata &MD, void *New) { in retrack() argument
179 if (auto *R = ReplaceableMetadataImpl::getIfExists(MD)) { in retrack()
180 R->moveRef(Ref, New, MD); in retrack()
183 assert(!isa<DistinctMDOperandPlaceholder>(MD) && in retrack()
185 assert(!isReplaceable(MD) && in retrack()
190 bool MetadataTracking::isReplaceable(const Metadata &MD) { in isReplaceable() argument
191 return ReplaceableMetadataImpl::isReplaceable(MD); in isReplaceable()
231 const Metadata &MD) { in moveRef() argument
241 (void)MD; in moveRef()
242 assert((OwnerAndIndex.first || *static_cast<Metadata **>(Ref) == &MD) && in moveRef()
244 assert((OwnerAndIndex.first || *static_cast<Metadata **>(New) == &MD) && in moveRef()
256 ValueAsMetadata *MD = I->second; in SalvageDebugInfo() local
260 SmallVector<UseTy, 8> Uses(MD->UseMap.begin(), MD->UseMap.end()); in SalvageDebugInfo()
278 void ReplaceableMetadataImpl::replaceAllUsesWith(Metadata *MD) { in replaceAllUsesWith() argument
296 Ref = MD; in replaceAllUsesWith()
297 if (MD) in replaceAllUsesWith()
305 Owner.get<MetadataAsValue *>()->handleChangedMetadata(MD); in replaceAllUsesWith()
314 cast<CLASS>(OwnerMD)->handleChangedOperand(Pair.first, MD); \ in replaceAllUsesWith()
357 ReplaceableMetadataImpl *ReplaceableMetadataImpl::getOrCreate(Metadata &MD) { in getOrCreate() argument
358 if (auto *N = dyn_cast<MDNode>(&MD)) in getOrCreate()
360 return dyn_cast<ValueAsMetadata>(&MD); in getOrCreate()
363 ReplaceableMetadataImpl *ReplaceableMetadataImpl::getIfExists(Metadata &MD) { in getIfExists() argument
364 if (auto *N = dyn_cast<MDNode>(&MD)) in getIfExists()
366 return dyn_cast<ValueAsMetadata>(&MD); in getIfExists()
369 bool ReplaceableMetadataImpl::isReplaceable(const Metadata &MD) { in isReplaceable() argument
370 if (auto *N = dyn_cast<MDNode>(&MD)) in isReplaceable()
372 return isa<ValueAsMetadata>(&MD); in isReplaceable()
425 ValueAsMetadata *MD = I->second; in handleDeletion() local
426 assert(MD && "Expected valid metadata"); in handleDeletion()
427 assert(MD->getValue() == V && "Expected valid mapping"); in handleDeletion()
431 MD->replaceAllUsesWith(nullptr); in handleDeletion()
432 delete MD; in handleDeletion()
452 ValueAsMetadata *MD = I->second; in handleRAUW() local
453 assert(MD && "Expected valid metadata"); in handleRAUW()
454 assert(MD->getValue() == From && "Expected valid mapping"); in handleRAUW()
457 if (isa<LocalAsMetadata>(MD)) { in handleRAUW()
460 MD->replaceAllUsesWith(ConstantAsMetadata::get(C)); in handleRAUW()
461 delete MD; in handleRAUW()
467 MD->replaceAllUsesWith(nullptr); in handleRAUW()
468 delete MD; in handleRAUW()
473 MD->replaceAllUsesWith(nullptr); in handleRAUW()
474 delete MD; in handleRAUW()
481 MD->replaceAllUsesWith(Entry); in handleRAUW()
482 delete MD; in handleRAUW()
489 MD->V = To; in handleRAUW()
490 Entry = MD; in handleRAUW()
545 for (Metadata *MD : Ops1) in MDNode()
546 setOperand(Op++, MD); in MDNode()
547 for (Metadata *MD : Ops2) in MDNode()
548 setOperand(Op++, MD); in MDNode()
1025 MDs.remove_if([&](Metadata *MD) { return !BSet.count(MD); }); in intersect() argument
1262 void MDAttachments::set(unsigned ID, MDNode *MD) { in set() argument
1264 if (MD) in set()
1265 insert(ID, *MD); in set()
1268 void MDAttachments::insert(unsigned ID, MDNode &MD) { in insert() argument
1269 Attachments.push_back({ID, TrackingMDNodeRef(&MD)}); in insert()
1359 void Value::addMetadata(unsigned KindID, MDNode &MD) { in addMetadata() argument
1363 getContext().pImpl->ValueMetadata[this].insert(KindID, MD); in addMetadata()
1366 void Value::addMetadata(StringRef Kind, MDNode &MD) { in addMetadata() argument
1367 addMetadata(getContext().getMDKindID(Kind), MD); in addMetadata()
1457 MDNode *MD = MDTuple::get(getContext(), Names); in addAnnotationMetadata() local
1458 setMetadata(LLVMContext::MD_annotation, MD); in addAnnotationMetadata()
1560 for (auto &MD : MDs) { in copyMetadata() local
1562 if (Offset != 0 && MD.first == LLVMContext::MD_type) { in copyMetadata()
1564 cast<ConstantAsMetadata>(MD.second->getOperand(0))->getValue()); in copyMetadata()
1565 Metadata *TypeId = MD.second->getOperand(1); in copyMetadata()
1575 auto *Attachment = MD.second; in copyMetadata()
1576 if (Offset != 0 && MD.first == LLVMContext::MD_dbg) { in copyMetadata()
1594 addMetadata(MD.first, *Attachment); in copyMetadata()
1618 if (MDNode *MD = getMetadata(LLVMContext::MD_vcall_visibility)) { in getVCallVisibility() local
1620 cast<ConstantAsMetadata>(MD->getOperand(0))->getValue()) in getVCallVisibility()
1653 for (MDNode *MD : MDs) in getDebugInfo()
1654 GVs.push_back(cast<DIGlobalVariableExpression>(MD)); in getDebugInfo()