Lines Matching defs:MD

60 MetadataAsValue::MetadataAsValue(Type *Ty, Metadata *MD)
61 : Value(Ty, MetadataAsValueVal), MD(MD) {
66 getType()->getContext().pImpl->MetadataAsValues.erase(MD);
82 Metadata *MD) {
83 if (!MD)
88 auto *N = dyn_cast<MDNode>(MD);
90 return MD;
100 return MD;
103 MetadataAsValue *MetadataAsValue::get(LLVMContext &Context, Metadata *MD) {
104 MD = canonicalizeMetadataForValue(Context, MD);
105 auto *&Entry = Context.pImpl->MetadataAsValues[MD];
107 Entry = new MetadataAsValue(Type::getMetadataTy(Context), MD);
112 Metadata *MD) {
113 MD = canonicalizeMetadataForValue(Context, MD);
115 return Store.lookup(MD);
118 void MetadataAsValue::handleChangedMetadata(Metadata *MD) {
120 MD = canonicalizeMetadataForValue(Context, MD);
124 Store.erase(this->MD);
126 this->MD = nullptr;
128 // Start tracking MD, or RAUW if necessary.
129 auto *&Entry = Store[MD];
136 this->MD = MD;
142 if (MD)
143 MetadataTracking::track(&MD, *MD, *this);
147 if (MD)
148 MetadataTracking::untrack(MD);
174 Metadata *&MD = DebugValues[Idx];
175 if (MD)
176 MetadataTracking::track(&MD, *MD, *this);
180 for (Metadata *&MD : DebugValues)
181 if (MD)
182 MetadataTracking::track(&MD, *MD, *this);
187 Metadata *&MD = DebugValues[Idx];
188 if (MD)
189 MetadataTracking::untrack(MD);
193 for (Metadata *&MD : DebugValues)
194 if (MD)
195 MetadataTracking::untrack(MD);
200 for (const auto &[MD, XMD] : zip(DebugValues, X.DebugValues))
202 MetadataTracking::retrack(XMD, MD);
206 bool MetadataTracking::track(void *Ref, Metadata &MD, OwnerTy Owner) {
208 assert((Owner || *static_cast<Metadata **>(Ref) == &MD) &&
210 if (auto *R = ReplaceableMetadataImpl::getOrCreate(MD)) {
214 if (auto *PH = dyn_cast<DistinctMDOperandPlaceholder>(&MD)) {
223 void MetadataTracking::untrack(void *Ref, Metadata &MD) {
225 if (auto *R = ReplaceableMetadataImpl::getIfExists(MD))
227 else if (auto *PH = dyn_cast<DistinctMDOperandPlaceholder>(&MD))
231 bool MetadataTracking::retrack(void *Ref, Metadata &MD, void *New) {
235 if (auto *R = ReplaceableMetadataImpl::getIfExists(MD)) {
236 R->moveRef(Ref, New, MD);
239 assert(!isa<DistinctMDOperandPlaceholder>(MD) &&
241 assert(!isReplaceable(MD) &&
246 bool MetadataTracking::isReplaceable(const Metadata &MD) {
247 return ReplaceableMetadataImpl::isReplaceable(MD);
314 const Metadata &MD) {
324 (void)MD;
325 assert((OwnerAndIndex.first || *static_cast<Metadata **>(Ref) == &MD) &&
327 assert((OwnerAndIndex.first || *static_cast<Metadata **>(New) == &MD) &&
339 ValueAsMetadata *MD = I->second;
343 SmallVector<UseTy, 8> Uses(MD->UseMap.begin(), MD->UseMap.end());
367 void ReplaceableMetadataImpl::replaceAllUsesWith(Metadata *MD) {
387 Ref = MD;
388 if (MD)
396 cast<MetadataAsValue *>(Owner)->handleChangedMetadata(MD);
401 DVU->handleChangedValue(Pair.first, MD);
410 cast<CLASS>(OwnerMD)->handleChangedOperand(Pair.first, MD); \
456 ReplaceableMetadataImpl *ReplaceableMetadataImpl::getOrCreate(Metadata &MD) {
457 if (auto *N = dyn_cast<MDNode>(&MD)) {
462 if (auto ArgList = dyn_cast<DIArgList>(&MD))
464 return dyn_cast<ValueAsMetadata>(&MD);
467 ReplaceableMetadataImpl *ReplaceableMetadataImpl::getIfExists(Metadata &MD) {
468 if (auto *N = dyn_cast<MDNode>(&MD)) {
473 if (auto ArgList = dyn_cast<DIArgList>(&MD))
475 return dyn_cast<ValueAsMetadata>(&MD);
478 bool ReplaceableMetadataImpl::isReplaceable(const Metadata &MD) {
479 if (auto *N = dyn_cast<MDNode>(&MD))
481 return isa<ValueAsMetadata>(&MD) || isa<DIArgList>(&MD);
534 ValueAsMetadata *MD = I->second;
535 assert(MD && "Expected valid metadata");
536 assert(MD->getValue() == V && "Expected valid mapping");
540 MD->replaceAllUsesWith(nullptr);
541 delete MD;
561 ValueAsMetadata *MD = I->second;
562 assert(MD && "Expected valid metadata");
563 assert(MD->getValue() == From && "Expected valid mapping");
566 if (isa<LocalAsMetadata>(MD)) {
569 MD->replaceAllUsesWith(ConstantAsMetadata::get(C));
570 delete MD;
576 MD->replaceAllUsesWith(nullptr);
577 delete MD;
582 MD->replaceAllUsesWith(nullptr);
583 delete MD;
590 MD->replaceAllUsesWith(Entry);
591 delete MD;
595 // Update MD in place (and update the map entry).
598 MD->V = To;
599 Entry = MD;
654 for (Metadata *MD : Ops1)
655 setOperand(Op++, MD);
656 for (Metadata *MD : Ops2)
657 setOperand(Op++, MD);
1134 MDs.remove_if([&](Metadata *MD) { return !BSet.count(MD); });
1472 void MDAttachments::set(unsigned ID, MDNode *MD) {
1474 if (MD)
1475 insert(ID, *MD);
1478 void MDAttachments::insert(unsigned ID, MDNode &MD) {
1479 Attachments.push_back({ID, TrackingMDNodeRef(&MD)});
1565 void Value::addMetadata(unsigned KindID, MDNode &MD) {
1569 getContext().pImpl->ValueMetadata[this].insert(KindID, MD);
1572 void Value::addMetadata(StringRef Kind, MDNode &MD) {
1573 addMetadata(getContext().getMDKindID(Kind), MD);
1728 MDNode *MD = MDTuple::get(getContext(), Names);
1729 setMetadata(LLVMContext::MD_annotation, MD);
1746 MDNode *MD = MDTuple::get(getContext(), Names);
1747 setMetadata(LLVMContext::MD_annotation, MD);
1802 for (auto &MD : MDs) {
1804 if (Offset != 0 && MD.first == LLVMContext::MD_type) {
1806 cast<ConstantAsMetadata>(MD.second->getOperand(0))->getValue());
1807 Metadata *TypeId = MD.second->getOperand(1);
1817 auto *Attachment = MD.second;
1818 if (Offset != 0 && MD.first == LLVMContext::MD_dbg) {
1836 addMetadata(MD.first, *Attachment);
1860 if (MDNode *MD = getMetadata(LLVMContext::MD_vcall_visibility)) {
1862 cast<ConstantAsMetadata>(MD->getOperand(0))->getValue())
1895 for (MDNode *MD : MDs)
1896 GVs.push_back(cast<DIGlobalVariableExpression>(MD));