1 //===- Metadata.cpp - Implement Metadata classes --------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file implements the Metadata classes. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #include "llvm/IR/Metadata.h" 14 #include "LLVMContextImpl.h" 15 #include "MetadataImpl.h" 16 #include "llvm/ADT/APFloat.h" 17 #include "llvm/ADT/APInt.h" 18 #include "llvm/ADT/ArrayRef.h" 19 #include "llvm/ADT/DenseSet.h" 20 #include "llvm/ADT/STLExtras.h" 21 #include "llvm/ADT/SetVector.h" 22 #include "llvm/ADT/SmallPtrSet.h" 23 #include "llvm/ADT/SmallSet.h" 24 #include "llvm/ADT/SmallVector.h" 25 #include "llvm/ADT/StringMap.h" 26 #include "llvm/ADT/StringRef.h" 27 #include "llvm/ADT/Twine.h" 28 #include "llvm/IR/Argument.h" 29 #include "llvm/IR/BasicBlock.h" 30 #include "llvm/IR/Constant.h" 31 #include "llvm/IR/ConstantRange.h" 32 #include "llvm/IR/Constants.h" 33 #include "llvm/IR/DebugInfoMetadata.h" 34 #include "llvm/IR/DebugLoc.h" 35 #include "llvm/IR/DebugProgramInstruction.h" 36 #include "llvm/IR/Function.h" 37 #include "llvm/IR/GlobalObject.h" 38 #include "llvm/IR/GlobalVariable.h" 39 #include "llvm/IR/Instruction.h" 40 #include "llvm/IR/LLVMContext.h" 41 #include "llvm/IR/MDBuilder.h" 42 #include "llvm/IR/Module.h" 43 #include "llvm/IR/ProfDataUtils.h" 44 #include "llvm/IR/TrackingMDRef.h" 45 #include "llvm/IR/Type.h" 46 #include "llvm/IR/Value.h" 47 #include "llvm/Support/Casting.h" 48 #include "llvm/Support/ErrorHandling.h" 49 #include "llvm/Support/MathExtras.h" 50 #include <algorithm> 51 #include <cassert> 52 #include <cstddef> 53 #include <cstdint> 54 #include <type_traits> 55 #include <utility> 56 #include <vector> 57 58 using namespace llvm; 59 60 MetadataAsValue::MetadataAsValue(Type *Ty, Metadata *MD) 61 : Value(Ty, MetadataAsValueVal), MD(MD) { 62 track(); 63 } 64 65 MetadataAsValue::~MetadataAsValue() { 66 getType()->getContext().pImpl->MetadataAsValues.erase(MD); 67 untrack(); 68 } 69 70 /// Canonicalize metadata arguments to intrinsics. 71 /// 72 /// To support bitcode upgrades (and assembly semantic sugar) for \a 73 /// MetadataAsValue, we need to canonicalize certain metadata. 74 /// 75 /// - nullptr is replaced by an empty MDNode. 76 /// - An MDNode with a single null operand is replaced by an empty MDNode. 77 /// - An MDNode whose only operand is a \a ConstantAsMetadata gets skipped. 78 /// 79 /// This maintains readability of bitcode from when metadata was a type of 80 /// value, and these bridges were unnecessary. 81 static Metadata *canonicalizeMetadataForValue(LLVMContext &Context, 82 Metadata *MD) { 83 if (!MD) 84 // !{} 85 return MDNode::get(Context, std::nullopt); 86 87 // Return early if this isn't a single-operand MDNode. 88 auto *N = dyn_cast<MDNode>(MD); 89 if (!N || N->getNumOperands() != 1) 90 return MD; 91 92 if (!N->getOperand(0)) 93 // !{} 94 return MDNode::get(Context, std::nullopt); 95 96 if (auto *C = dyn_cast<ConstantAsMetadata>(N->getOperand(0))) 97 // Look through the MDNode. 98 return C; 99 100 return MD; 101 } 102 103 MetadataAsValue *MetadataAsValue::get(LLVMContext &Context, Metadata *MD) { 104 MD = canonicalizeMetadataForValue(Context, MD); 105 auto *&Entry = Context.pImpl->MetadataAsValues[MD]; 106 if (!Entry) 107 Entry = new MetadataAsValue(Type::getMetadataTy(Context), MD); 108 return Entry; 109 } 110 111 MetadataAsValue *MetadataAsValue::getIfExists(LLVMContext &Context, 112 Metadata *MD) { 113 MD = canonicalizeMetadataForValue(Context, MD); 114 auto &Store = Context.pImpl->MetadataAsValues; 115 return Store.lookup(MD); 116 } 117 118 void MetadataAsValue::handleChangedMetadata(Metadata *MD) { 119 LLVMContext &Context = getContext(); 120 MD = canonicalizeMetadataForValue(Context, MD); 121 auto &Store = Context.pImpl->MetadataAsValues; 122 123 // Stop tracking the old metadata. 124 Store.erase(this->MD); 125 untrack(); 126 this->MD = nullptr; 127 128 // Start tracking MD, or RAUW if necessary. 129 auto *&Entry = Store[MD]; 130 if (Entry) { 131 replaceAllUsesWith(Entry); 132 delete this; 133 return; 134 } 135 136 this->MD = MD; 137 track(); 138 Entry = this; 139 } 140 141 void MetadataAsValue::track() { 142 if (MD) 143 MetadataTracking::track(&MD, *MD, *this); 144 } 145 146 void MetadataAsValue::untrack() { 147 if (MD) 148 MetadataTracking::untrack(MD); 149 } 150 151 DbgVariableRecord *DebugValueUser::getUser() { 152 return static_cast<DbgVariableRecord *>(this); 153 } 154 const DbgVariableRecord *DebugValueUser::getUser() const { 155 return static_cast<const DbgVariableRecord *>(this); 156 } 157 158 void DebugValueUser::handleChangedValue(void *Old, Metadata *New) { 159 // NOTE: We could inform the "owner" that a value has changed through 160 // getOwner, if needed. 161 auto OldMD = static_cast<Metadata **>(Old); 162 ptrdiff_t Idx = std::distance(&*DebugValues.begin(), OldMD); 163 // If replacing a ValueAsMetadata with a nullptr, replace it with a 164 // PoisonValue instead. 165 if (OldMD && isa<ValueAsMetadata>(*OldMD) && !New) { 166 auto *OldVAM = cast<ValueAsMetadata>(*OldMD); 167 New = ValueAsMetadata::get(PoisonValue::get(OldVAM->getValue()->getType())); 168 } 169 resetDebugValue(Idx, New); 170 } 171 172 void DebugValueUser::trackDebugValue(size_t Idx) { 173 assert(Idx < 3 && "Invalid debug value index."); 174 Metadata *&MD = DebugValues[Idx]; 175 if (MD) 176 MetadataTracking::track(&MD, *MD, *this); 177 } 178 179 void DebugValueUser::trackDebugValues() { 180 for (Metadata *&MD : DebugValues) 181 if (MD) 182 MetadataTracking::track(&MD, *MD, *this); 183 } 184 185 void DebugValueUser::untrackDebugValue(size_t Idx) { 186 assert(Idx < 3 && "Invalid debug value index."); 187 Metadata *&MD = DebugValues[Idx]; 188 if (MD) 189 MetadataTracking::untrack(MD); 190 } 191 192 void DebugValueUser::untrackDebugValues() { 193 for (Metadata *&MD : DebugValues) 194 if (MD) 195 MetadataTracking::untrack(MD); 196 } 197 198 void DebugValueUser::retrackDebugValues(DebugValueUser &X) { 199 assert(DebugValueUser::operator==(X) && "Expected values to match"); 200 for (const auto &[MD, XMD] : zip(DebugValues, X.DebugValues)) 201 if (XMD) 202 MetadataTracking::retrack(XMD, MD); 203 X.DebugValues.fill(nullptr); 204 } 205 206 bool MetadataTracking::track(void *Ref, Metadata &MD, OwnerTy Owner) { 207 assert(Ref && "Expected live reference"); 208 assert((Owner || *static_cast<Metadata **>(Ref) == &MD) && 209 "Reference without owner must be direct"); 210 if (auto *R = ReplaceableMetadataImpl::getOrCreate(MD)) { 211 R->addRef(Ref, Owner); 212 return true; 213 } 214 if (auto *PH = dyn_cast<DistinctMDOperandPlaceholder>(&MD)) { 215 assert(!PH->Use && "Placeholders can only be used once"); 216 assert(!Owner && "Unexpected callback to owner"); 217 PH->Use = static_cast<Metadata **>(Ref); 218 return true; 219 } 220 return false; 221 } 222 223 void MetadataTracking::untrack(void *Ref, Metadata &MD) { 224 assert(Ref && "Expected live reference"); 225 if (auto *R = ReplaceableMetadataImpl::getIfExists(MD)) 226 R->dropRef(Ref); 227 else if (auto *PH = dyn_cast<DistinctMDOperandPlaceholder>(&MD)) 228 PH->Use = nullptr; 229 } 230 231 bool MetadataTracking::retrack(void *Ref, Metadata &MD, void *New) { 232 assert(Ref && "Expected live reference"); 233 assert(New && "Expected live reference"); 234 assert(Ref != New && "Expected change"); 235 if (auto *R = ReplaceableMetadataImpl::getIfExists(MD)) { 236 R->moveRef(Ref, New, MD); 237 return true; 238 } 239 assert(!isa<DistinctMDOperandPlaceholder>(MD) && 240 "Unexpected move of an MDOperand"); 241 assert(!isReplaceable(MD) && 242 "Expected un-replaceable metadata, since we didn't move a reference"); 243 return false; 244 } 245 246 bool MetadataTracking::isReplaceable(const Metadata &MD) { 247 return ReplaceableMetadataImpl::isReplaceable(MD); 248 } 249 250 SmallVector<Metadata *> ReplaceableMetadataImpl::getAllArgListUsers() { 251 SmallVector<std::pair<OwnerTy, uint64_t> *> MDUsersWithID; 252 for (auto Pair : UseMap) { 253 OwnerTy Owner = Pair.second.first; 254 if (Owner.isNull()) 255 continue; 256 if (!isa<Metadata *>(Owner)) 257 continue; 258 Metadata *OwnerMD = cast<Metadata *>(Owner); 259 if (OwnerMD->getMetadataID() == Metadata::DIArgListKind) 260 MDUsersWithID.push_back(&UseMap[Pair.first]); 261 } 262 llvm::sort(MDUsersWithID, [](auto UserA, auto UserB) { 263 return UserA->second < UserB->second; 264 }); 265 SmallVector<Metadata *> MDUsers; 266 for (auto *UserWithID : MDUsersWithID) 267 MDUsers.push_back(cast<Metadata *>(UserWithID->first)); 268 return MDUsers; 269 } 270 271 SmallVector<DbgVariableRecord *> 272 ReplaceableMetadataImpl::getAllDbgVariableRecordUsers() { 273 SmallVector<std::pair<OwnerTy, uint64_t> *> DVRUsersWithID; 274 for (auto Pair : UseMap) { 275 OwnerTy Owner = Pair.second.first; 276 if (Owner.isNull()) 277 continue; 278 if (!Owner.is<DebugValueUser *>()) 279 continue; 280 DVRUsersWithID.push_back(&UseMap[Pair.first]); 281 } 282 // Order DbgVariableRecord users in reverse-creation order. Normal dbg.value 283 // users of MetadataAsValues are ordered by their UseList, i.e. reverse order 284 // of when they were added: we need to replicate that here. The structure of 285 // debug-info output depends on the ordering of intrinsics, thus we need 286 // to keep them consistent for comparisons sake. 287 llvm::sort(DVRUsersWithID, [](auto UserA, auto UserB) { 288 return UserA->second > UserB->second; 289 }); 290 SmallVector<DbgVariableRecord *> DVRUsers; 291 for (auto UserWithID : DVRUsersWithID) 292 DVRUsers.push_back(UserWithID->first.get<DebugValueUser *>()->getUser()); 293 return DVRUsers; 294 } 295 296 void ReplaceableMetadataImpl::addRef(void *Ref, OwnerTy Owner) { 297 bool WasInserted = 298 UseMap.insert(std::make_pair(Ref, std::make_pair(Owner, NextIndex))) 299 .second; 300 (void)WasInserted; 301 assert(WasInserted && "Expected to add a reference"); 302 303 ++NextIndex; 304 assert(NextIndex != 0 && "Unexpected overflow"); 305 } 306 307 void ReplaceableMetadataImpl::dropRef(void *Ref) { 308 bool WasErased = UseMap.erase(Ref); 309 (void)WasErased; 310 assert(WasErased && "Expected to drop a reference"); 311 } 312 313 void ReplaceableMetadataImpl::moveRef(void *Ref, void *New, 314 const Metadata &MD) { 315 auto I = UseMap.find(Ref); 316 assert(I != UseMap.end() && "Expected to move a reference"); 317 auto OwnerAndIndex = I->second; 318 UseMap.erase(I); 319 bool WasInserted = UseMap.insert(std::make_pair(New, OwnerAndIndex)).second; 320 (void)WasInserted; 321 assert(WasInserted && "Expected to add a reference"); 322 323 // Check that the references are direct if there's no owner. 324 (void)MD; 325 assert((OwnerAndIndex.first || *static_cast<Metadata **>(Ref) == &MD) && 326 "Reference without owner must be direct"); 327 assert((OwnerAndIndex.first || *static_cast<Metadata **>(New) == &MD) && 328 "Reference without owner must be direct"); 329 } 330 331 void ReplaceableMetadataImpl::SalvageDebugInfo(const Constant &C) { 332 if (!C.isUsedByMetadata()) { 333 return; 334 } 335 336 LLVMContext &Context = C.getType()->getContext(); 337 auto &Store = Context.pImpl->ValuesAsMetadata; 338 auto I = Store.find(&C); 339 ValueAsMetadata *MD = I->second; 340 using UseTy = 341 std::pair<void *, std::pair<MetadataTracking::OwnerTy, uint64_t>>; 342 // Copy out uses and update value of Constant used by debug info metadata with undef below 343 SmallVector<UseTy, 8> Uses(MD->UseMap.begin(), MD->UseMap.end()); 344 345 for (const auto &Pair : Uses) { 346 MetadataTracking::OwnerTy Owner = Pair.second.first; 347 if (!Owner) 348 continue; 349 if (!isa<Metadata *>(Owner)) 350 continue; 351 auto *OwnerMD = dyn_cast_if_present<MDNode>(cast<Metadata *>(Owner)); 352 if (!OwnerMD) 353 continue; 354 if (isa<DINode>(OwnerMD)) { 355 OwnerMD->handleChangedOperand( 356 Pair.first, ValueAsMetadata::get(UndefValue::get(C.getType()))); 357 } 358 } 359 } 360 361 void ReplaceableMetadataImpl::replaceAllUsesWith(Metadata *MD) { 362 if (UseMap.empty()) 363 return; 364 365 // Copy out uses since UseMap will get touched below. 366 using UseTy = std::pair<void *, std::pair<OwnerTy, uint64_t>>; 367 SmallVector<UseTy, 8> Uses(UseMap.begin(), UseMap.end()); 368 llvm::sort(Uses, [](const UseTy &L, const UseTy &R) { 369 return L.second.second < R.second.second; 370 }); 371 for (const auto &Pair : Uses) { 372 // Check that this Ref hasn't disappeared after RAUW (when updating a 373 // previous Ref). 374 if (!UseMap.count(Pair.first)) 375 continue; 376 377 OwnerTy Owner = Pair.second.first; 378 if (!Owner) { 379 // Update unowned tracking references directly. 380 Metadata *&Ref = *static_cast<Metadata **>(Pair.first); 381 Ref = MD; 382 if (MD) 383 MetadataTracking::track(Ref); 384 UseMap.erase(Pair.first); 385 continue; 386 } 387 388 // Check for MetadataAsValue. 389 if (isa<MetadataAsValue *>(Owner)) { 390 cast<MetadataAsValue *>(Owner)->handleChangedMetadata(MD); 391 continue; 392 } 393 394 if (Owner.is<DebugValueUser *>()) { 395 Owner.get<DebugValueUser *>()->handleChangedValue(Pair.first, MD); 396 continue; 397 } 398 399 // There's a Metadata owner -- dispatch. 400 Metadata *OwnerMD = cast<Metadata *>(Owner); 401 switch (OwnerMD->getMetadataID()) { 402 #define HANDLE_METADATA_LEAF(CLASS) \ 403 case Metadata::CLASS##Kind: \ 404 cast<CLASS>(OwnerMD)->handleChangedOperand(Pair.first, MD); \ 405 continue; 406 #include "llvm/IR/Metadata.def" 407 default: 408 llvm_unreachable("Invalid metadata subclass"); 409 } 410 } 411 assert(UseMap.empty() && "Expected all uses to be replaced"); 412 } 413 414 void ReplaceableMetadataImpl::resolveAllUses(bool ResolveUsers) { 415 if (UseMap.empty()) 416 return; 417 418 if (!ResolveUsers) { 419 UseMap.clear(); 420 return; 421 } 422 423 // Copy out uses since UseMap could get touched below. 424 using UseTy = std::pair<void *, std::pair<OwnerTy, uint64_t>>; 425 SmallVector<UseTy, 8> Uses(UseMap.begin(), UseMap.end()); 426 llvm::sort(Uses, [](const UseTy &L, const UseTy &R) { 427 return L.second.second < R.second.second; 428 }); 429 UseMap.clear(); 430 for (const auto &Pair : Uses) { 431 auto Owner = Pair.second.first; 432 if (!Owner) 433 continue; 434 if (!Owner.is<Metadata *>()) 435 continue; 436 437 // Resolve MDNodes that point at this. 438 auto *OwnerMD = dyn_cast_if_present<MDNode>(cast<Metadata *>(Owner)); 439 if (!OwnerMD) 440 continue; 441 if (OwnerMD->isResolved()) 442 continue; 443 OwnerMD->decrementUnresolvedOperandCount(); 444 } 445 } 446 447 // Special handing of DIArgList is required in the RemoveDIs project, see 448 // commentry in DIArgList::handleChangedOperand for details. Hidden behind 449 // conditional compilation to avoid a compile time regression. 450 ReplaceableMetadataImpl *ReplaceableMetadataImpl::getOrCreate(Metadata &MD) { 451 if (auto *N = dyn_cast<MDNode>(&MD)) { 452 return !N->isResolved() || N->isAlwaysReplaceable() 453 ? N->Context.getOrCreateReplaceableUses() 454 : nullptr; 455 } 456 if (auto ArgList = dyn_cast<DIArgList>(&MD)) 457 return ArgList; 458 return dyn_cast<ValueAsMetadata>(&MD); 459 } 460 461 ReplaceableMetadataImpl *ReplaceableMetadataImpl::getIfExists(Metadata &MD) { 462 if (auto *N = dyn_cast<MDNode>(&MD)) { 463 return !N->isResolved() || N->isAlwaysReplaceable() 464 ? N->Context.getReplaceableUses() 465 : nullptr; 466 } 467 if (auto ArgList = dyn_cast<DIArgList>(&MD)) 468 return ArgList; 469 return dyn_cast<ValueAsMetadata>(&MD); 470 } 471 472 bool ReplaceableMetadataImpl::isReplaceable(const Metadata &MD) { 473 if (auto *N = dyn_cast<MDNode>(&MD)) 474 return !N->isResolved() || N->isAlwaysReplaceable(); 475 return isa<ValueAsMetadata>(&MD) || isa<DIArgList>(&MD); 476 } 477 478 static DISubprogram *getLocalFunctionMetadata(Value *V) { 479 assert(V && "Expected value"); 480 if (auto *A = dyn_cast<Argument>(V)) { 481 if (auto *Fn = A->getParent()) 482 return Fn->getSubprogram(); 483 return nullptr; 484 } 485 486 if (BasicBlock *BB = cast<Instruction>(V)->getParent()) { 487 if (auto *Fn = BB->getParent()) 488 return Fn->getSubprogram(); 489 return nullptr; 490 } 491 492 return nullptr; 493 } 494 495 ValueAsMetadata *ValueAsMetadata::get(Value *V) { 496 assert(V && "Unexpected null Value"); 497 498 auto &Context = V->getContext(); 499 auto *&Entry = Context.pImpl->ValuesAsMetadata[V]; 500 if (!Entry) { 501 assert((isa<Constant>(V) || isa<Argument>(V) || isa<Instruction>(V)) && 502 "Expected constant or function-local value"); 503 assert(!V->IsUsedByMD && "Expected this to be the only metadata use"); 504 V->IsUsedByMD = true; 505 if (auto *C = dyn_cast<Constant>(V)) 506 Entry = new ConstantAsMetadata(C); 507 else 508 Entry = new LocalAsMetadata(V); 509 } 510 511 return Entry; 512 } 513 514 ValueAsMetadata *ValueAsMetadata::getIfExists(Value *V) { 515 assert(V && "Unexpected null Value"); 516 return V->getContext().pImpl->ValuesAsMetadata.lookup(V); 517 } 518 519 void ValueAsMetadata::handleDeletion(Value *V) { 520 assert(V && "Expected valid value"); 521 522 auto &Store = V->getType()->getContext().pImpl->ValuesAsMetadata; 523 auto I = Store.find(V); 524 if (I == Store.end()) 525 return; 526 527 // Remove old entry from the map. 528 ValueAsMetadata *MD = I->second; 529 assert(MD && "Expected valid metadata"); 530 assert(MD->getValue() == V && "Expected valid mapping"); 531 Store.erase(I); 532 533 // Delete the metadata. 534 MD->replaceAllUsesWith(nullptr); 535 delete MD; 536 } 537 538 void ValueAsMetadata::handleRAUW(Value *From, Value *To) { 539 assert(From && "Expected valid value"); 540 assert(To && "Expected valid value"); 541 assert(From != To && "Expected changed value"); 542 assert(&From->getContext() == &To->getContext() && "Expected same context"); 543 544 LLVMContext &Context = From->getType()->getContext(); 545 auto &Store = Context.pImpl->ValuesAsMetadata; 546 auto I = Store.find(From); 547 if (I == Store.end()) { 548 assert(!From->IsUsedByMD && "Expected From not to be used by metadata"); 549 return; 550 } 551 552 // Remove old entry from the map. 553 assert(From->IsUsedByMD && "Expected From to be used by metadata"); 554 From->IsUsedByMD = false; 555 ValueAsMetadata *MD = I->second; 556 assert(MD && "Expected valid metadata"); 557 assert(MD->getValue() == From && "Expected valid mapping"); 558 Store.erase(I); 559 560 if (isa<LocalAsMetadata>(MD)) { 561 if (auto *C = dyn_cast<Constant>(To)) { 562 // Local became a constant. 563 MD->replaceAllUsesWith(ConstantAsMetadata::get(C)); 564 delete MD; 565 return; 566 } 567 if (getLocalFunctionMetadata(From) && getLocalFunctionMetadata(To) && 568 getLocalFunctionMetadata(From) != getLocalFunctionMetadata(To)) { 569 // DISubprogram changed. 570 MD->replaceAllUsesWith(nullptr); 571 delete MD; 572 return; 573 } 574 } else if (!isa<Constant>(To)) { 575 // Changed to function-local value. 576 MD->replaceAllUsesWith(nullptr); 577 delete MD; 578 return; 579 } 580 581 auto *&Entry = Store[To]; 582 if (Entry) { 583 // The target already exists. 584 MD->replaceAllUsesWith(Entry); 585 delete MD; 586 return; 587 } 588 589 // Update MD in place (and update the map entry). 590 assert(!To->IsUsedByMD && "Expected this to be the only metadata use"); 591 To->IsUsedByMD = true; 592 MD->V = To; 593 Entry = MD; 594 } 595 596 //===----------------------------------------------------------------------===// 597 // MDString implementation. 598 // 599 600 MDString *MDString::get(LLVMContext &Context, StringRef Str) { 601 auto &Store = Context.pImpl->MDStringCache; 602 auto I = Store.try_emplace(Str); 603 auto &MapEntry = I.first->getValue(); 604 if (!I.second) 605 return &MapEntry; 606 MapEntry.Entry = &*I.first; 607 return &MapEntry; 608 } 609 610 StringRef MDString::getString() const { 611 assert(Entry && "Expected to find string map entry"); 612 return Entry->first(); 613 } 614 615 //===----------------------------------------------------------------------===// 616 // MDNode implementation. 617 // 618 619 // Assert that the MDNode types will not be unaligned by the objects 620 // prepended to them. 621 #define HANDLE_MDNODE_LEAF(CLASS) \ 622 static_assert( \ 623 alignof(uint64_t) >= alignof(CLASS), \ 624 "Alignment is insufficient after objects prepended to " #CLASS); 625 #include "llvm/IR/Metadata.def" 626 627 void *MDNode::operator new(size_t Size, size_t NumOps, StorageType Storage) { 628 // uint64_t is the most aligned type we need support (ensured by static_assert 629 // above) 630 size_t AllocSize = 631 alignTo(Header::getAllocSize(Storage, NumOps), alignof(uint64_t)); 632 char *Mem = reinterpret_cast<char *>(::operator new(AllocSize + Size)); 633 Header *H = new (Mem + AllocSize - sizeof(Header)) Header(NumOps, Storage); 634 return reinterpret_cast<void *>(H + 1); 635 } 636 637 void MDNode::operator delete(void *N) { 638 Header *H = reinterpret_cast<Header *>(N) - 1; 639 void *Mem = H->getAllocation(); 640 H->~Header(); 641 ::operator delete(Mem); 642 } 643 644 MDNode::MDNode(LLVMContext &Context, unsigned ID, StorageType Storage, 645 ArrayRef<Metadata *> Ops1, ArrayRef<Metadata *> Ops2) 646 : Metadata(ID, Storage), Context(Context) { 647 unsigned Op = 0; 648 for (Metadata *MD : Ops1) 649 setOperand(Op++, MD); 650 for (Metadata *MD : Ops2) 651 setOperand(Op++, MD); 652 653 if (!isUniqued()) 654 return; 655 656 // Count the unresolved operands. If there are any, RAUW support will be 657 // added lazily on first reference. 658 countUnresolvedOperands(); 659 } 660 661 TempMDNode MDNode::clone() const { 662 switch (getMetadataID()) { 663 default: 664 llvm_unreachable("Invalid MDNode subclass"); 665 #define HANDLE_MDNODE_LEAF(CLASS) \ 666 case CLASS##Kind: \ 667 return cast<CLASS>(this)->cloneImpl(); 668 #include "llvm/IR/Metadata.def" 669 } 670 } 671 672 MDNode::Header::Header(size_t NumOps, StorageType Storage) { 673 IsLarge = isLarge(NumOps); 674 IsResizable = isResizable(Storage); 675 SmallSize = getSmallSize(NumOps, IsResizable, IsLarge); 676 if (IsLarge) { 677 SmallNumOps = 0; 678 new (getLargePtr()) LargeStorageVector(); 679 getLarge().resize(NumOps); 680 return; 681 } 682 SmallNumOps = NumOps; 683 MDOperand *O = reinterpret_cast<MDOperand *>(this) - SmallSize; 684 for (MDOperand *E = O + SmallSize; O != E;) 685 (void)new (O++) MDOperand(); 686 } 687 688 MDNode::Header::~Header() { 689 if (IsLarge) { 690 getLarge().~LargeStorageVector(); 691 return; 692 } 693 MDOperand *O = reinterpret_cast<MDOperand *>(this); 694 for (MDOperand *E = O - SmallSize; O != E; --O) 695 (void)(O - 1)->~MDOperand(); 696 } 697 698 void *MDNode::Header::getSmallPtr() { 699 static_assert(alignof(MDOperand) <= alignof(Header), 700 "MDOperand too strongly aligned"); 701 return reinterpret_cast<char *>(const_cast<Header *>(this)) - 702 sizeof(MDOperand) * SmallSize; 703 } 704 705 void MDNode::Header::resize(size_t NumOps) { 706 assert(IsResizable && "Node is not resizable"); 707 if (operands().size() == NumOps) 708 return; 709 710 if (IsLarge) 711 getLarge().resize(NumOps); 712 else if (NumOps <= SmallSize) 713 resizeSmall(NumOps); 714 else 715 resizeSmallToLarge(NumOps); 716 } 717 718 void MDNode::Header::resizeSmall(size_t NumOps) { 719 assert(!IsLarge && "Expected a small MDNode"); 720 assert(NumOps <= SmallSize && "NumOps too large for small resize"); 721 722 MutableArrayRef<MDOperand> ExistingOps = operands(); 723 assert(NumOps != ExistingOps.size() && "Expected a different size"); 724 725 int NumNew = (int)NumOps - (int)ExistingOps.size(); 726 MDOperand *O = ExistingOps.end(); 727 for (int I = 0, E = NumNew; I < E; ++I) 728 (O++)->reset(); 729 for (int I = 0, E = NumNew; I > E; --I) 730 (--O)->reset(); 731 SmallNumOps = NumOps; 732 assert(O == operands().end() && "Operands not (un)initialized until the end"); 733 } 734 735 void MDNode::Header::resizeSmallToLarge(size_t NumOps) { 736 assert(!IsLarge && "Expected a small MDNode"); 737 assert(NumOps > SmallSize && "Expected NumOps to be larger than allocation"); 738 LargeStorageVector NewOps; 739 NewOps.resize(NumOps); 740 llvm::move(operands(), NewOps.begin()); 741 resizeSmall(0); 742 new (getLargePtr()) LargeStorageVector(std::move(NewOps)); 743 IsLarge = true; 744 } 745 746 static bool isOperandUnresolved(Metadata *Op) { 747 if (auto *N = dyn_cast_or_null<MDNode>(Op)) 748 return !N->isResolved(); 749 return false; 750 } 751 752 void MDNode::countUnresolvedOperands() { 753 assert(getNumUnresolved() == 0 && "Expected unresolved ops to be uncounted"); 754 assert(isUniqued() && "Expected this to be uniqued"); 755 setNumUnresolved(count_if(operands(), isOperandUnresolved)); 756 } 757 758 void MDNode::makeUniqued() { 759 assert(isTemporary() && "Expected this to be temporary"); 760 assert(!isResolved() && "Expected this to be unresolved"); 761 762 // Enable uniquing callbacks. 763 for (auto &Op : mutable_operands()) 764 Op.reset(Op.get(), this); 765 766 // Make this 'uniqued'. 767 Storage = Uniqued; 768 countUnresolvedOperands(); 769 if (!getNumUnresolved()) { 770 dropReplaceableUses(); 771 assert(isResolved() && "Expected this to be resolved"); 772 } 773 774 assert(isUniqued() && "Expected this to be uniqued"); 775 } 776 777 void MDNode::makeDistinct() { 778 assert(isTemporary() && "Expected this to be temporary"); 779 assert(!isResolved() && "Expected this to be unresolved"); 780 781 // Drop RAUW support and store as a distinct node. 782 dropReplaceableUses(); 783 storeDistinctInContext(); 784 785 assert(isDistinct() && "Expected this to be distinct"); 786 assert(isResolved() && "Expected this to be resolved"); 787 } 788 789 void MDNode::resolve() { 790 assert(isUniqued() && "Expected this to be uniqued"); 791 assert(!isResolved() && "Expected this to be unresolved"); 792 793 setNumUnresolved(0); 794 dropReplaceableUses(); 795 796 assert(isResolved() && "Expected this to be resolved"); 797 } 798 799 void MDNode::dropReplaceableUses() { 800 assert(!getNumUnresolved() && "Unexpected unresolved operand"); 801 802 // Drop any RAUW support. 803 if (Context.hasReplaceableUses()) 804 Context.takeReplaceableUses()->resolveAllUses(); 805 } 806 807 void MDNode::resolveAfterOperandChange(Metadata *Old, Metadata *New) { 808 assert(isUniqued() && "Expected this to be uniqued"); 809 assert(getNumUnresolved() != 0 && "Expected unresolved operands"); 810 811 // Check if an operand was resolved. 812 if (!isOperandUnresolved(Old)) { 813 if (isOperandUnresolved(New)) 814 // An operand was un-resolved! 815 setNumUnresolved(getNumUnresolved() + 1); 816 } else if (!isOperandUnresolved(New)) 817 decrementUnresolvedOperandCount(); 818 } 819 820 void MDNode::decrementUnresolvedOperandCount() { 821 assert(!isResolved() && "Expected this to be unresolved"); 822 if (isTemporary()) 823 return; 824 825 assert(isUniqued() && "Expected this to be uniqued"); 826 setNumUnresolved(getNumUnresolved() - 1); 827 if (getNumUnresolved()) 828 return; 829 830 // Last unresolved operand has just been resolved. 831 dropReplaceableUses(); 832 assert(isResolved() && "Expected this to become resolved"); 833 } 834 835 void MDNode::resolveCycles() { 836 if (isResolved()) 837 return; 838 839 // Resolve this node immediately. 840 resolve(); 841 842 // Resolve all operands. 843 for (const auto &Op : operands()) { 844 auto *N = dyn_cast_or_null<MDNode>(Op); 845 if (!N) 846 continue; 847 848 assert(!N->isTemporary() && 849 "Expected all forward declarations to be resolved"); 850 if (!N->isResolved()) 851 N->resolveCycles(); 852 } 853 } 854 855 static bool hasSelfReference(MDNode *N) { 856 return llvm::is_contained(N->operands(), N); 857 } 858 859 MDNode *MDNode::replaceWithPermanentImpl() { 860 switch (getMetadataID()) { 861 default: 862 // If this type isn't uniquable, replace with a distinct node. 863 return replaceWithDistinctImpl(); 864 865 #define HANDLE_MDNODE_LEAF_UNIQUABLE(CLASS) \ 866 case CLASS##Kind: \ 867 break; 868 #include "llvm/IR/Metadata.def" 869 } 870 871 // Even if this type is uniquable, self-references have to be distinct. 872 if (hasSelfReference(this)) 873 return replaceWithDistinctImpl(); 874 return replaceWithUniquedImpl(); 875 } 876 877 MDNode *MDNode::replaceWithUniquedImpl() { 878 // Try to uniquify in place. 879 MDNode *UniquedNode = uniquify(); 880 881 if (UniquedNode == this) { 882 makeUniqued(); 883 return this; 884 } 885 886 // Collision, so RAUW instead. 887 replaceAllUsesWith(UniquedNode); 888 deleteAsSubclass(); 889 return UniquedNode; 890 } 891 892 MDNode *MDNode::replaceWithDistinctImpl() { 893 makeDistinct(); 894 return this; 895 } 896 897 void MDTuple::recalculateHash() { 898 setHash(MDTupleInfo::KeyTy::calculateHash(this)); 899 } 900 901 void MDNode::dropAllReferences() { 902 for (unsigned I = 0, E = getNumOperands(); I != E; ++I) 903 setOperand(I, nullptr); 904 if (Context.hasReplaceableUses()) { 905 Context.getReplaceableUses()->resolveAllUses(/* ResolveUsers */ false); 906 (void)Context.takeReplaceableUses(); 907 } 908 } 909 910 void MDNode::handleChangedOperand(void *Ref, Metadata *New) { 911 unsigned Op = static_cast<MDOperand *>(Ref) - op_begin(); 912 assert(Op < getNumOperands() && "Expected valid operand"); 913 914 if (!isUniqued()) { 915 // This node is not uniqued. Just set the operand and be done with it. 916 setOperand(Op, New); 917 return; 918 } 919 920 // This node is uniqued. 921 eraseFromStore(); 922 923 Metadata *Old = getOperand(Op); 924 setOperand(Op, New); 925 926 // Drop uniquing for self-reference cycles and deleted constants. 927 if (New == this || (!New && Old && isa<ConstantAsMetadata>(Old))) { 928 if (!isResolved()) 929 resolve(); 930 storeDistinctInContext(); 931 return; 932 } 933 934 // Re-unique the node. 935 auto *Uniqued = uniquify(); 936 if (Uniqued == this) { 937 if (!isResolved()) 938 resolveAfterOperandChange(Old, New); 939 return; 940 } 941 942 // Collision. 943 if (!isResolved()) { 944 // Still unresolved, so RAUW. 945 // 946 // First, clear out all operands to prevent any recursion (similar to 947 // dropAllReferences(), but we still need the use-list). 948 for (unsigned O = 0, E = getNumOperands(); O != E; ++O) 949 setOperand(O, nullptr); 950 if (Context.hasReplaceableUses()) 951 Context.getReplaceableUses()->replaceAllUsesWith(Uniqued); 952 deleteAsSubclass(); 953 return; 954 } 955 956 // Store in non-uniqued form if RAUW isn't possible. 957 storeDistinctInContext(); 958 } 959 960 void MDNode::deleteAsSubclass() { 961 switch (getMetadataID()) { 962 default: 963 llvm_unreachable("Invalid subclass of MDNode"); 964 #define HANDLE_MDNODE_LEAF(CLASS) \ 965 case CLASS##Kind: \ 966 delete cast<CLASS>(this); \ 967 break; 968 #include "llvm/IR/Metadata.def" 969 } 970 } 971 972 template <class T, class InfoT> 973 static T *uniquifyImpl(T *N, DenseSet<T *, InfoT> &Store) { 974 if (T *U = getUniqued(Store, N)) 975 return U; 976 977 Store.insert(N); 978 return N; 979 } 980 981 template <class NodeTy> struct MDNode::HasCachedHash { 982 using Yes = char[1]; 983 using No = char[2]; 984 template <class U, U Val> struct SFINAE {}; 985 986 template <class U> 987 static Yes &check(SFINAE<void (U::*)(unsigned), &U::setHash> *); 988 template <class U> static No &check(...); 989 990 static const bool value = sizeof(check<NodeTy>(nullptr)) == sizeof(Yes); 991 }; 992 993 MDNode *MDNode::uniquify() { 994 assert(!hasSelfReference(this) && "Cannot uniquify a self-referencing node"); 995 996 // Try to insert into uniquing store. 997 switch (getMetadataID()) { 998 default: 999 llvm_unreachable("Invalid or non-uniquable subclass of MDNode"); 1000 #define HANDLE_MDNODE_LEAF_UNIQUABLE(CLASS) \ 1001 case CLASS##Kind: { \ 1002 CLASS *SubclassThis = cast<CLASS>(this); \ 1003 std::integral_constant<bool, HasCachedHash<CLASS>::value> \ 1004 ShouldRecalculateHash; \ 1005 dispatchRecalculateHash(SubclassThis, ShouldRecalculateHash); \ 1006 return uniquifyImpl(SubclassThis, getContext().pImpl->CLASS##s); \ 1007 } 1008 #include "llvm/IR/Metadata.def" 1009 } 1010 } 1011 1012 void MDNode::eraseFromStore() { 1013 switch (getMetadataID()) { 1014 default: 1015 llvm_unreachable("Invalid or non-uniquable subclass of MDNode"); 1016 #define HANDLE_MDNODE_LEAF_UNIQUABLE(CLASS) \ 1017 case CLASS##Kind: \ 1018 getContext().pImpl->CLASS##s.erase(cast<CLASS>(this)); \ 1019 break; 1020 #include "llvm/IR/Metadata.def" 1021 } 1022 } 1023 1024 MDTuple *MDTuple::getImpl(LLVMContext &Context, ArrayRef<Metadata *> MDs, 1025 StorageType Storage, bool ShouldCreate) { 1026 unsigned Hash = 0; 1027 if (Storage == Uniqued) { 1028 MDTupleInfo::KeyTy Key(MDs); 1029 if (auto *N = getUniqued(Context.pImpl->MDTuples, Key)) 1030 return N; 1031 if (!ShouldCreate) 1032 return nullptr; 1033 Hash = Key.getHash(); 1034 } else { 1035 assert(ShouldCreate && "Expected non-uniqued nodes to always be created"); 1036 } 1037 1038 return storeImpl(new (MDs.size(), Storage) 1039 MDTuple(Context, Storage, Hash, MDs), 1040 Storage, Context.pImpl->MDTuples); 1041 } 1042 1043 void MDNode::deleteTemporary(MDNode *N) { 1044 assert(N->isTemporary() && "Expected temporary node"); 1045 N->replaceAllUsesWith(nullptr); 1046 N->deleteAsSubclass(); 1047 } 1048 1049 void MDNode::storeDistinctInContext() { 1050 assert(!Context.hasReplaceableUses() && "Unexpected replaceable uses"); 1051 assert(!getNumUnresolved() && "Unexpected unresolved nodes"); 1052 Storage = Distinct; 1053 assert(isResolved() && "Expected this to be resolved"); 1054 1055 // Reset the hash. 1056 switch (getMetadataID()) { 1057 default: 1058 llvm_unreachable("Invalid subclass of MDNode"); 1059 #define HANDLE_MDNODE_LEAF(CLASS) \ 1060 case CLASS##Kind: { \ 1061 std::integral_constant<bool, HasCachedHash<CLASS>::value> ShouldResetHash; \ 1062 dispatchResetHash(cast<CLASS>(this), ShouldResetHash); \ 1063 break; \ 1064 } 1065 #include "llvm/IR/Metadata.def" 1066 } 1067 1068 getContext().pImpl->DistinctMDNodes.push_back(this); 1069 } 1070 1071 void MDNode::replaceOperandWith(unsigned I, Metadata *New) { 1072 if (getOperand(I) == New) 1073 return; 1074 1075 if (!isUniqued()) { 1076 setOperand(I, New); 1077 return; 1078 } 1079 1080 handleChangedOperand(mutable_begin() + I, New); 1081 } 1082 1083 void MDNode::setOperand(unsigned I, Metadata *New) { 1084 assert(I < getNumOperands()); 1085 mutable_begin()[I].reset(New, isUniqued() ? this : nullptr); 1086 } 1087 1088 /// Get a node or a self-reference that looks like it. 1089 /// 1090 /// Special handling for finding self-references, for use by \a 1091 /// MDNode::concatenate() and \a MDNode::intersect() to maintain behaviour from 1092 /// when self-referencing nodes were still uniqued. If the first operand has 1093 /// the same operands as \c Ops, return the first operand instead. 1094 static MDNode *getOrSelfReference(LLVMContext &Context, 1095 ArrayRef<Metadata *> Ops) { 1096 if (!Ops.empty()) 1097 if (MDNode *N = dyn_cast_or_null<MDNode>(Ops[0])) 1098 if (N->getNumOperands() == Ops.size() && N == N->getOperand(0)) { 1099 for (unsigned I = 1, E = Ops.size(); I != E; ++I) 1100 if (Ops[I] != N->getOperand(I)) 1101 return MDNode::get(Context, Ops); 1102 return N; 1103 } 1104 1105 return MDNode::get(Context, Ops); 1106 } 1107 1108 MDNode *MDNode::concatenate(MDNode *A, MDNode *B) { 1109 if (!A) 1110 return B; 1111 if (!B) 1112 return A; 1113 1114 SmallSetVector<Metadata *, 4> MDs(A->op_begin(), A->op_end()); 1115 MDs.insert(B->op_begin(), B->op_end()); 1116 1117 // FIXME: This preserves long-standing behaviour, but is it really the right 1118 // behaviour? Or was that an unintended side-effect of node uniquing? 1119 return getOrSelfReference(A->getContext(), MDs.getArrayRef()); 1120 } 1121 1122 MDNode *MDNode::intersect(MDNode *A, MDNode *B) { 1123 if (!A || !B) 1124 return nullptr; 1125 1126 SmallSetVector<Metadata *, 4> MDs(A->op_begin(), A->op_end()); 1127 SmallPtrSet<Metadata *, 4> BSet(B->op_begin(), B->op_end()); 1128 MDs.remove_if([&](Metadata *MD) { return !BSet.count(MD); }); 1129 1130 // FIXME: This preserves long-standing behaviour, but is it really the right 1131 // behaviour? Or was that an unintended side-effect of node uniquing? 1132 return getOrSelfReference(A->getContext(), MDs.getArrayRef()); 1133 } 1134 1135 MDNode *MDNode::getMostGenericAliasScope(MDNode *A, MDNode *B) { 1136 if (!A || !B) 1137 return nullptr; 1138 1139 // Take the intersection of domains then union the scopes 1140 // within those domains 1141 SmallPtrSet<const MDNode *, 16> ADomains; 1142 SmallPtrSet<const MDNode *, 16> IntersectDomains; 1143 SmallSetVector<Metadata *, 4> MDs; 1144 for (const MDOperand &MDOp : A->operands()) 1145 if (const MDNode *NAMD = dyn_cast<MDNode>(MDOp)) 1146 if (const MDNode *Domain = AliasScopeNode(NAMD).getDomain()) 1147 ADomains.insert(Domain); 1148 1149 for (const MDOperand &MDOp : B->operands()) 1150 if (const MDNode *NAMD = dyn_cast<MDNode>(MDOp)) 1151 if (const MDNode *Domain = AliasScopeNode(NAMD).getDomain()) 1152 if (ADomains.contains(Domain)) { 1153 IntersectDomains.insert(Domain); 1154 MDs.insert(MDOp); 1155 } 1156 1157 for (const MDOperand &MDOp : A->operands()) 1158 if (const MDNode *NAMD = dyn_cast<MDNode>(MDOp)) 1159 if (const MDNode *Domain = AliasScopeNode(NAMD).getDomain()) 1160 if (IntersectDomains.contains(Domain)) 1161 MDs.insert(MDOp); 1162 1163 return MDs.empty() ? nullptr 1164 : getOrSelfReference(A->getContext(), MDs.getArrayRef()); 1165 } 1166 1167 MDNode *MDNode::getMostGenericFPMath(MDNode *A, MDNode *B) { 1168 if (!A || !B) 1169 return nullptr; 1170 1171 APFloat AVal = mdconst::extract<ConstantFP>(A->getOperand(0))->getValueAPF(); 1172 APFloat BVal = mdconst::extract<ConstantFP>(B->getOperand(0))->getValueAPF(); 1173 if (AVal < BVal) 1174 return A; 1175 return B; 1176 } 1177 1178 // Call instructions with branch weights are only used in SamplePGO as 1179 // documented in 1180 /// https://llvm.org/docs/BranchWeightMetadata.html#callinst). 1181 MDNode *MDNode::mergeDirectCallProfMetadata(MDNode *A, MDNode *B, 1182 const Instruction *AInstr, 1183 const Instruction *BInstr) { 1184 assert(A && B && AInstr && BInstr && "Caller should guarantee"); 1185 auto &Ctx = AInstr->getContext(); 1186 MDBuilder MDHelper(Ctx); 1187 1188 // LLVM IR verifier verifies !prof metadata has at least 2 operands. 1189 assert(A->getNumOperands() >= 2 && B->getNumOperands() >= 2 && 1190 "!prof annotations should have no less than 2 operands"); 1191 MDString *AMDS = dyn_cast<MDString>(A->getOperand(0)); 1192 MDString *BMDS = dyn_cast<MDString>(B->getOperand(0)); 1193 // LLVM IR verfier verifies first operand is MDString. 1194 assert(AMDS != nullptr && BMDS != nullptr && 1195 "first operand should be a non-null MDString"); 1196 StringRef AProfName = AMDS->getString(); 1197 StringRef BProfName = BMDS->getString(); 1198 if (AProfName == "branch_weights" && BProfName == "branch_weights") { 1199 ConstantInt *AInstrWeight = mdconst::dyn_extract<ConstantInt>( 1200 A->getOperand(getBranchWeightOffset(A))); 1201 ConstantInt *BInstrWeight = mdconst::dyn_extract<ConstantInt>( 1202 B->getOperand(getBranchWeightOffset(B))); 1203 assert(AInstrWeight && BInstrWeight && "verified by LLVM verifier"); 1204 return MDNode::get(Ctx, 1205 {MDHelper.createString("branch_weights"), 1206 MDHelper.createConstant(ConstantInt::get( 1207 Type::getInt64Ty(Ctx), 1208 SaturatingAdd(AInstrWeight->getZExtValue(), 1209 BInstrWeight->getZExtValue())))}); 1210 } 1211 return nullptr; 1212 } 1213 1214 // Pass in both instructions and nodes. Instruction information (e.g., 1215 // instruction type) helps interpret profiles and make implementation clearer. 1216 MDNode *MDNode::getMergedProfMetadata(MDNode *A, MDNode *B, 1217 const Instruction *AInstr, 1218 const Instruction *BInstr) { 1219 if (!(A && B)) { 1220 return A ? A : B; 1221 } 1222 1223 assert(AInstr->getMetadata(LLVMContext::MD_prof) == A && 1224 "Caller should guarantee"); 1225 assert(BInstr->getMetadata(LLVMContext::MD_prof) == B && 1226 "Caller should guarantee"); 1227 1228 const CallInst *ACall = dyn_cast<CallInst>(AInstr); 1229 const CallInst *BCall = dyn_cast<CallInst>(BInstr); 1230 1231 // Both ACall and BCall are direct callsites. 1232 if (ACall && BCall && ACall->getCalledFunction() && 1233 BCall->getCalledFunction()) 1234 return mergeDirectCallProfMetadata(A, B, AInstr, BInstr); 1235 1236 // The rest of the cases are not implemented but could be added 1237 // when there are use cases. 1238 return nullptr; 1239 } 1240 1241 static bool isContiguous(const ConstantRange &A, const ConstantRange &B) { 1242 return A.getUpper() == B.getLower() || A.getLower() == B.getUpper(); 1243 } 1244 1245 static bool canBeMerged(const ConstantRange &A, const ConstantRange &B) { 1246 return !A.intersectWith(B).isEmptySet() || isContiguous(A, B); 1247 } 1248 1249 static bool tryMergeRange(SmallVectorImpl<ConstantInt *> &EndPoints, 1250 ConstantInt *Low, ConstantInt *High) { 1251 ConstantRange NewRange(Low->getValue(), High->getValue()); 1252 unsigned Size = EndPoints.size(); 1253 APInt LB = EndPoints[Size - 2]->getValue(); 1254 APInt LE = EndPoints[Size - 1]->getValue(); 1255 ConstantRange LastRange(LB, LE); 1256 if (canBeMerged(NewRange, LastRange)) { 1257 ConstantRange Union = LastRange.unionWith(NewRange); 1258 Type *Ty = High->getType(); 1259 EndPoints[Size - 2] = 1260 cast<ConstantInt>(ConstantInt::get(Ty, Union.getLower())); 1261 EndPoints[Size - 1] = 1262 cast<ConstantInt>(ConstantInt::get(Ty, Union.getUpper())); 1263 return true; 1264 } 1265 return false; 1266 } 1267 1268 static void addRange(SmallVectorImpl<ConstantInt *> &EndPoints, 1269 ConstantInt *Low, ConstantInt *High) { 1270 if (!EndPoints.empty()) 1271 if (tryMergeRange(EndPoints, Low, High)) 1272 return; 1273 1274 EndPoints.push_back(Low); 1275 EndPoints.push_back(High); 1276 } 1277 1278 MDNode *MDNode::getMostGenericRange(MDNode *A, MDNode *B) { 1279 // Given two ranges, we want to compute the union of the ranges. This 1280 // is slightly complicated by having to combine the intervals and merge 1281 // the ones that overlap. 1282 1283 if (!A || !B) 1284 return nullptr; 1285 1286 if (A == B) 1287 return A; 1288 1289 // First, walk both lists in order of the lower boundary of each interval. 1290 // At each step, try to merge the new interval to the last one we added. 1291 SmallVector<ConstantInt *, 4> EndPoints; 1292 unsigned AI = 0; 1293 unsigned BI = 0; 1294 unsigned AN = A->getNumOperands() / 2; 1295 unsigned BN = B->getNumOperands() / 2; 1296 while (AI < AN && BI < BN) { 1297 ConstantInt *ALow = mdconst::extract<ConstantInt>(A->getOperand(2 * AI)); 1298 ConstantInt *BLow = mdconst::extract<ConstantInt>(B->getOperand(2 * BI)); 1299 1300 if (ALow->getValue().slt(BLow->getValue())) { 1301 addRange(EndPoints, ALow, 1302 mdconst::extract<ConstantInt>(A->getOperand(2 * AI + 1))); 1303 ++AI; 1304 } else { 1305 addRange(EndPoints, BLow, 1306 mdconst::extract<ConstantInt>(B->getOperand(2 * BI + 1))); 1307 ++BI; 1308 } 1309 } 1310 while (AI < AN) { 1311 addRange(EndPoints, mdconst::extract<ConstantInt>(A->getOperand(2 * AI)), 1312 mdconst::extract<ConstantInt>(A->getOperand(2 * AI + 1))); 1313 ++AI; 1314 } 1315 while (BI < BN) { 1316 addRange(EndPoints, mdconst::extract<ConstantInt>(B->getOperand(2 * BI)), 1317 mdconst::extract<ConstantInt>(B->getOperand(2 * BI + 1))); 1318 ++BI; 1319 } 1320 1321 // We haven't handled wrap in the previous merge, 1322 // if we have at least 2 ranges (4 endpoints) we have to try to merge 1323 // the last and first ones. 1324 unsigned Size = EndPoints.size(); 1325 if (Size > 2) { 1326 ConstantInt *FB = EndPoints[0]; 1327 ConstantInt *FE = EndPoints[1]; 1328 if (tryMergeRange(EndPoints, FB, FE)) { 1329 for (unsigned i = 0; i < Size - 2; ++i) { 1330 EndPoints[i] = EndPoints[i + 2]; 1331 } 1332 EndPoints.resize(Size - 2); 1333 } 1334 } 1335 1336 // If in the end we have a single range, it is possible that it is now the 1337 // full range. Just drop the metadata in that case. 1338 if (EndPoints.size() == 2) { 1339 ConstantRange Range(EndPoints[0]->getValue(), EndPoints[1]->getValue()); 1340 if (Range.isFullSet()) 1341 return nullptr; 1342 } 1343 1344 SmallVector<Metadata *, 4> MDs; 1345 MDs.reserve(EndPoints.size()); 1346 for (auto *I : EndPoints) 1347 MDs.push_back(ConstantAsMetadata::get(I)); 1348 return MDNode::get(A->getContext(), MDs); 1349 } 1350 1351 MDNode *MDNode::getMostGenericAlignmentOrDereferenceable(MDNode *A, MDNode *B) { 1352 if (!A || !B) 1353 return nullptr; 1354 1355 ConstantInt *AVal = mdconst::extract<ConstantInt>(A->getOperand(0)); 1356 ConstantInt *BVal = mdconst::extract<ConstantInt>(B->getOperand(0)); 1357 if (AVal->getZExtValue() < BVal->getZExtValue()) 1358 return A; 1359 return B; 1360 } 1361 1362 //===----------------------------------------------------------------------===// 1363 // NamedMDNode implementation. 1364 // 1365 1366 static SmallVector<TrackingMDRef, 4> &getNMDOps(void *Operands) { 1367 return *(SmallVector<TrackingMDRef, 4> *)Operands; 1368 } 1369 1370 NamedMDNode::NamedMDNode(const Twine &N) 1371 : Name(N.str()), Operands(new SmallVector<TrackingMDRef, 4>()) {} 1372 1373 NamedMDNode::~NamedMDNode() { 1374 dropAllReferences(); 1375 delete &getNMDOps(Operands); 1376 } 1377 1378 unsigned NamedMDNode::getNumOperands() const { 1379 return (unsigned)getNMDOps(Operands).size(); 1380 } 1381 1382 MDNode *NamedMDNode::getOperand(unsigned i) const { 1383 assert(i < getNumOperands() && "Invalid Operand number!"); 1384 auto *N = getNMDOps(Operands)[i].get(); 1385 return cast_or_null<MDNode>(N); 1386 } 1387 1388 void NamedMDNode::addOperand(MDNode *M) { getNMDOps(Operands).emplace_back(M); } 1389 1390 void NamedMDNode::setOperand(unsigned I, MDNode *New) { 1391 assert(I < getNumOperands() && "Invalid operand number"); 1392 getNMDOps(Operands)[I].reset(New); 1393 } 1394 1395 void NamedMDNode::eraseFromParent() { getParent()->eraseNamedMetadata(this); } 1396 1397 void NamedMDNode::clearOperands() { getNMDOps(Operands).clear(); } 1398 1399 StringRef NamedMDNode::getName() const { return StringRef(Name); } 1400 1401 //===----------------------------------------------------------------------===// 1402 // Instruction Metadata method implementations. 1403 // 1404 1405 MDNode *MDAttachments::lookup(unsigned ID) const { 1406 for (const auto &A : Attachments) 1407 if (A.MDKind == ID) 1408 return A.Node; 1409 return nullptr; 1410 } 1411 1412 void MDAttachments::get(unsigned ID, SmallVectorImpl<MDNode *> &Result) const { 1413 for (const auto &A : Attachments) 1414 if (A.MDKind == ID) 1415 Result.push_back(A.Node); 1416 } 1417 1418 void MDAttachments::getAll( 1419 SmallVectorImpl<std::pair<unsigned, MDNode *>> &Result) const { 1420 for (const auto &A : Attachments) 1421 Result.emplace_back(A.MDKind, A.Node); 1422 1423 // Sort the resulting array so it is stable with respect to metadata IDs. We 1424 // need to preserve the original insertion order though. 1425 if (Result.size() > 1) 1426 llvm::stable_sort(Result, less_first()); 1427 } 1428 1429 void MDAttachments::set(unsigned ID, MDNode *MD) { 1430 erase(ID); 1431 if (MD) 1432 insert(ID, *MD); 1433 } 1434 1435 void MDAttachments::insert(unsigned ID, MDNode &MD) { 1436 Attachments.push_back({ID, TrackingMDNodeRef(&MD)}); 1437 } 1438 1439 bool MDAttachments::erase(unsigned ID) { 1440 if (empty()) 1441 return false; 1442 1443 // Common case is one value. 1444 if (Attachments.size() == 1 && Attachments.back().MDKind == ID) { 1445 Attachments.pop_back(); 1446 return true; 1447 } 1448 1449 auto OldSize = Attachments.size(); 1450 llvm::erase_if(Attachments, 1451 [ID](const Attachment &A) { return A.MDKind == ID; }); 1452 return OldSize != Attachments.size(); 1453 } 1454 1455 MDNode *Value::getMetadata(StringRef Kind) const { 1456 if (!hasMetadata()) 1457 return nullptr; 1458 unsigned KindID = getContext().getMDKindID(Kind); 1459 return getMetadataImpl(KindID); 1460 } 1461 1462 MDNode *Value::getMetadataImpl(unsigned KindID) const { 1463 const LLVMContext &Ctx = getContext(); 1464 const MDAttachments &Attachements = Ctx.pImpl->ValueMetadata.at(this); 1465 return Attachements.lookup(KindID); 1466 } 1467 1468 void Value::getMetadata(unsigned KindID, SmallVectorImpl<MDNode *> &MDs) const { 1469 if (hasMetadata()) 1470 getContext().pImpl->ValueMetadata.at(this).get(KindID, MDs); 1471 } 1472 1473 void Value::getMetadata(StringRef Kind, SmallVectorImpl<MDNode *> &MDs) const { 1474 if (hasMetadata()) 1475 getMetadata(getContext().getMDKindID(Kind), MDs); 1476 } 1477 1478 void Value::getAllMetadata( 1479 SmallVectorImpl<std::pair<unsigned, MDNode *>> &MDs) const { 1480 if (hasMetadata()) { 1481 assert(getContext().pImpl->ValueMetadata.count(this) && 1482 "bit out of sync with hash table"); 1483 const MDAttachments &Info = getContext().pImpl->ValueMetadata.at(this); 1484 Info.getAll(MDs); 1485 } 1486 } 1487 1488 void Value::setMetadata(unsigned KindID, MDNode *Node) { 1489 assert(isa<Instruction>(this) || isa<GlobalObject>(this)); 1490 1491 // Handle the case when we're adding/updating metadata on a value. 1492 if (Node) { 1493 MDAttachments &Info = getContext().pImpl->ValueMetadata[this]; 1494 assert(!Info.empty() == HasMetadata && "bit out of sync with hash table"); 1495 if (Info.empty()) 1496 HasMetadata = true; 1497 Info.set(KindID, Node); 1498 return; 1499 } 1500 1501 // Otherwise, we're removing metadata from an instruction. 1502 assert((HasMetadata == (getContext().pImpl->ValueMetadata.count(this) > 0)) && 1503 "bit out of sync with hash table"); 1504 if (!HasMetadata) 1505 return; // Nothing to remove! 1506 MDAttachments &Info = getContext().pImpl->ValueMetadata.find(this)->second; 1507 1508 // Handle removal of an existing value. 1509 Info.erase(KindID); 1510 if (!Info.empty()) 1511 return; 1512 getContext().pImpl->ValueMetadata.erase(this); 1513 HasMetadata = false; 1514 } 1515 1516 void Value::setMetadata(StringRef Kind, MDNode *Node) { 1517 if (!Node && !HasMetadata) 1518 return; 1519 setMetadata(getContext().getMDKindID(Kind), Node); 1520 } 1521 1522 void Value::addMetadata(unsigned KindID, MDNode &MD) { 1523 assert(isa<Instruction>(this) || isa<GlobalObject>(this)); 1524 if (!HasMetadata) 1525 HasMetadata = true; 1526 getContext().pImpl->ValueMetadata[this].insert(KindID, MD); 1527 } 1528 1529 void Value::addMetadata(StringRef Kind, MDNode &MD) { 1530 addMetadata(getContext().getMDKindID(Kind), MD); 1531 } 1532 1533 bool Value::eraseMetadata(unsigned KindID) { 1534 // Nothing to unset. 1535 if (!HasMetadata) 1536 return false; 1537 1538 MDAttachments &Store = getContext().pImpl->ValueMetadata.find(this)->second; 1539 bool Changed = Store.erase(KindID); 1540 if (Store.empty()) 1541 clearMetadata(); 1542 return Changed; 1543 } 1544 1545 void Value::eraseMetadataIf(function_ref<bool(unsigned, MDNode *)> Pred) { 1546 if (!HasMetadata) 1547 return; 1548 1549 auto &MetadataStore = getContext().pImpl->ValueMetadata; 1550 MDAttachments &Info = MetadataStore.find(this)->second; 1551 assert(!Info.empty() && "bit out of sync with hash table"); 1552 Info.remove_if([Pred](const MDAttachments::Attachment &I) { 1553 return Pred(I.MDKind, I.Node); 1554 }); 1555 1556 if (Info.empty()) 1557 clearMetadata(); 1558 } 1559 1560 void Value::clearMetadata() { 1561 if (!HasMetadata) 1562 return; 1563 assert(getContext().pImpl->ValueMetadata.count(this) && 1564 "bit out of sync with hash table"); 1565 getContext().pImpl->ValueMetadata.erase(this); 1566 HasMetadata = false; 1567 } 1568 1569 void Instruction::setMetadata(StringRef Kind, MDNode *Node) { 1570 if (!Node && !hasMetadata()) 1571 return; 1572 setMetadata(getContext().getMDKindID(Kind), Node); 1573 } 1574 1575 MDNode *Instruction::getMetadataImpl(StringRef Kind) const { 1576 const LLVMContext &Ctx = getContext(); 1577 unsigned KindID = Ctx.getMDKindID(Kind); 1578 if (KindID == LLVMContext::MD_dbg) 1579 return DbgLoc.getAsMDNode(); 1580 return Value::getMetadata(KindID); 1581 } 1582 1583 void Instruction::eraseMetadataIf(function_ref<bool(unsigned, MDNode *)> Pred) { 1584 if (DbgLoc && Pred(LLVMContext::MD_dbg, DbgLoc.getAsMDNode())) 1585 DbgLoc = {}; 1586 1587 Value::eraseMetadataIf(Pred); 1588 } 1589 1590 void Instruction::dropUnknownNonDebugMetadata(ArrayRef<unsigned> KnownIDs) { 1591 if (!Value::hasMetadata()) 1592 return; // Nothing to remove! 1593 1594 SmallSet<unsigned, 32> KnownSet; 1595 KnownSet.insert(KnownIDs.begin(), KnownIDs.end()); 1596 1597 // A DIAssignID attachment is debug metadata, don't drop it. 1598 KnownSet.insert(LLVMContext::MD_DIAssignID); 1599 1600 Value::eraseMetadataIf([&KnownSet](unsigned MDKind, MDNode *Node) { 1601 return !KnownSet.count(MDKind); 1602 }); 1603 } 1604 1605 void Instruction::updateDIAssignIDMapping(DIAssignID *ID) { 1606 auto &IDToInstrs = getContext().pImpl->AssignmentIDToInstrs; 1607 if (const DIAssignID *CurrentID = 1608 cast_or_null<DIAssignID>(getMetadata(LLVMContext::MD_DIAssignID))) { 1609 // Nothing to do if the ID isn't changing. 1610 if (ID == CurrentID) 1611 return; 1612 1613 // Unmap this instruction from its current ID. 1614 auto InstrsIt = IDToInstrs.find(CurrentID); 1615 assert(InstrsIt != IDToInstrs.end() && 1616 "Expect existing attachment to be mapped"); 1617 1618 auto &InstVec = InstrsIt->second; 1619 auto *InstIt = llvm::find(InstVec, this); 1620 assert(InstIt != InstVec.end() && 1621 "Expect instruction to be mapped to attachment"); 1622 // The vector contains a ptr to this. If this is the only element in the 1623 // vector, remove the ID:vector entry, otherwise just remove the 1624 // instruction from the vector. 1625 if (InstVec.size() == 1) 1626 IDToInstrs.erase(InstrsIt); 1627 else 1628 InstVec.erase(InstIt); 1629 } 1630 1631 // Map this instruction to the new ID. 1632 if (ID) 1633 IDToInstrs[ID].push_back(this); 1634 } 1635 1636 void Instruction::setMetadata(unsigned KindID, MDNode *Node) { 1637 if (!Node && !hasMetadata()) 1638 return; 1639 1640 // Handle 'dbg' as a special case since it is not stored in the hash table. 1641 if (KindID == LLVMContext::MD_dbg) { 1642 DbgLoc = DebugLoc(Node); 1643 return; 1644 } 1645 1646 // Update DIAssignID to Instruction(s) mapping. 1647 if (KindID == LLVMContext::MD_DIAssignID) { 1648 // The DIAssignID tracking infrastructure doesn't support RAUWing temporary 1649 // nodes with DIAssignIDs. The cast_or_null below would also catch this, but 1650 // having a dedicated assert helps make this obvious. 1651 assert((!Node || !Node->isTemporary()) && 1652 "Temporary DIAssignIDs are invalid"); 1653 updateDIAssignIDMapping(cast_or_null<DIAssignID>(Node)); 1654 } 1655 1656 Value::setMetadata(KindID, Node); 1657 } 1658 1659 void Instruction::addAnnotationMetadata(SmallVector<StringRef> Annotations) { 1660 SmallVector<Metadata *, 4> Names; 1661 if (auto *Existing = getMetadata(LLVMContext::MD_annotation)) { 1662 SmallSetVector<StringRef, 2> AnnotationsSet(Annotations.begin(), 1663 Annotations.end()); 1664 auto *Tuple = cast<MDTuple>(Existing); 1665 for (auto &N : Tuple->operands()) { 1666 if (isa<MDString>(N.get())) { 1667 Names.push_back(N); 1668 continue; 1669 } 1670 auto *MDAnnotationTuple = cast<MDTuple>(N); 1671 if (any_of(MDAnnotationTuple->operands(), [&AnnotationsSet](auto &Op) { 1672 return AnnotationsSet.contains(cast<MDString>(Op)->getString()); 1673 })) 1674 return; 1675 Names.push_back(N); 1676 } 1677 } 1678 1679 MDBuilder MDB(getContext()); 1680 SmallVector<Metadata *> MDAnnotationStrings; 1681 for (StringRef Annotation : Annotations) 1682 MDAnnotationStrings.push_back(MDB.createString(Annotation)); 1683 MDNode *InfoTuple = MDTuple::get(getContext(), MDAnnotationStrings); 1684 Names.push_back(InfoTuple); 1685 MDNode *MD = MDTuple::get(getContext(), Names); 1686 setMetadata(LLVMContext::MD_annotation, MD); 1687 } 1688 1689 void Instruction::addAnnotationMetadata(StringRef Name) { 1690 SmallVector<Metadata *, 4> Names; 1691 if (auto *Existing = getMetadata(LLVMContext::MD_annotation)) { 1692 auto *Tuple = cast<MDTuple>(Existing); 1693 for (auto &N : Tuple->operands()) { 1694 if (isa<MDString>(N.get()) && 1695 cast<MDString>(N.get())->getString() == Name) 1696 return; 1697 Names.push_back(N.get()); 1698 } 1699 } 1700 1701 MDBuilder MDB(getContext()); 1702 Names.push_back(MDB.createString(Name)); 1703 MDNode *MD = MDTuple::get(getContext(), Names); 1704 setMetadata(LLVMContext::MD_annotation, MD); 1705 } 1706 1707 AAMDNodes Instruction::getAAMetadata() const { 1708 AAMDNodes Result; 1709 // Not using Instruction::hasMetadata() because we're not interested in 1710 // DebugInfoMetadata. 1711 if (Value::hasMetadata()) { 1712 const MDAttachments &Info = getContext().pImpl->ValueMetadata.at(this); 1713 Result.TBAA = Info.lookup(LLVMContext::MD_tbaa); 1714 Result.TBAAStruct = Info.lookup(LLVMContext::MD_tbaa_struct); 1715 Result.Scope = Info.lookup(LLVMContext::MD_alias_scope); 1716 Result.NoAlias = Info.lookup(LLVMContext::MD_noalias); 1717 } 1718 return Result; 1719 } 1720 1721 void Instruction::setAAMetadata(const AAMDNodes &N) { 1722 setMetadata(LLVMContext::MD_tbaa, N.TBAA); 1723 setMetadata(LLVMContext::MD_tbaa_struct, N.TBAAStruct); 1724 setMetadata(LLVMContext::MD_alias_scope, N.Scope); 1725 setMetadata(LLVMContext::MD_noalias, N.NoAlias); 1726 } 1727 1728 void Instruction::setNoSanitizeMetadata() { 1729 setMetadata(llvm::LLVMContext::MD_nosanitize, 1730 llvm::MDNode::get(getContext(), std::nullopt)); 1731 } 1732 1733 void Instruction::getAllMetadataImpl( 1734 SmallVectorImpl<std::pair<unsigned, MDNode *>> &Result) const { 1735 Result.clear(); 1736 1737 // Handle 'dbg' as a special case since it is not stored in the hash table. 1738 if (DbgLoc) { 1739 Result.push_back( 1740 std::make_pair((unsigned)LLVMContext::MD_dbg, DbgLoc.getAsMDNode())); 1741 } 1742 Value::getAllMetadata(Result); 1743 } 1744 1745 bool Instruction::extractProfTotalWeight(uint64_t &TotalVal) const { 1746 assert( 1747 (getOpcode() == Instruction::Br || getOpcode() == Instruction::Select || 1748 getOpcode() == Instruction::Call || getOpcode() == Instruction::Invoke || 1749 getOpcode() == Instruction::IndirectBr || 1750 getOpcode() == Instruction::Switch) && 1751 "Looking for branch weights on something besides branch"); 1752 1753 return ::extractProfTotalWeight(*this, TotalVal); 1754 } 1755 1756 void GlobalObject::copyMetadata(const GlobalObject *Other, unsigned Offset) { 1757 SmallVector<std::pair<unsigned, MDNode *>, 8> MDs; 1758 Other->getAllMetadata(MDs); 1759 for (auto &MD : MDs) { 1760 // We need to adjust the type metadata offset. 1761 if (Offset != 0 && MD.first == LLVMContext::MD_type) { 1762 auto *OffsetConst = cast<ConstantInt>( 1763 cast<ConstantAsMetadata>(MD.second->getOperand(0))->getValue()); 1764 Metadata *TypeId = MD.second->getOperand(1); 1765 auto *NewOffsetMD = ConstantAsMetadata::get(ConstantInt::get( 1766 OffsetConst->getType(), OffsetConst->getValue() + Offset)); 1767 addMetadata(LLVMContext::MD_type, 1768 *MDNode::get(getContext(), {NewOffsetMD, TypeId})); 1769 continue; 1770 } 1771 // If an offset adjustment was specified we need to modify the DIExpression 1772 // to prepend the adjustment: 1773 // !DIExpression(DW_OP_plus, Offset, [original expr]) 1774 auto *Attachment = MD.second; 1775 if (Offset != 0 && MD.first == LLVMContext::MD_dbg) { 1776 DIGlobalVariable *GV = dyn_cast<DIGlobalVariable>(Attachment); 1777 DIExpression *E = nullptr; 1778 if (!GV) { 1779 auto *GVE = cast<DIGlobalVariableExpression>(Attachment); 1780 GV = GVE->getVariable(); 1781 E = GVE->getExpression(); 1782 } 1783 ArrayRef<uint64_t> OrigElements; 1784 if (E) 1785 OrigElements = E->getElements(); 1786 std::vector<uint64_t> Elements(OrigElements.size() + 2); 1787 Elements[0] = dwarf::DW_OP_plus_uconst; 1788 Elements[1] = Offset; 1789 llvm::copy(OrigElements, Elements.begin() + 2); 1790 E = DIExpression::get(getContext(), Elements); 1791 Attachment = DIGlobalVariableExpression::get(getContext(), GV, E); 1792 } 1793 addMetadata(MD.first, *Attachment); 1794 } 1795 } 1796 1797 void GlobalObject::addTypeMetadata(unsigned Offset, Metadata *TypeID) { 1798 addMetadata( 1799 LLVMContext::MD_type, 1800 *MDTuple::get(getContext(), 1801 {ConstantAsMetadata::get(ConstantInt::get( 1802 Type::getInt64Ty(getContext()), Offset)), 1803 TypeID})); 1804 } 1805 1806 void GlobalObject::setVCallVisibilityMetadata(VCallVisibility Visibility) { 1807 // Remove any existing vcall visibility metadata first in case we are 1808 // updating. 1809 eraseMetadata(LLVMContext::MD_vcall_visibility); 1810 addMetadata(LLVMContext::MD_vcall_visibility, 1811 *MDNode::get(getContext(), 1812 {ConstantAsMetadata::get(ConstantInt::get( 1813 Type::getInt64Ty(getContext()), Visibility))})); 1814 } 1815 1816 GlobalObject::VCallVisibility GlobalObject::getVCallVisibility() const { 1817 if (MDNode *MD = getMetadata(LLVMContext::MD_vcall_visibility)) { 1818 uint64_t Val = cast<ConstantInt>( 1819 cast<ConstantAsMetadata>(MD->getOperand(0))->getValue()) 1820 ->getZExtValue(); 1821 assert(Val <= 2 && "unknown vcall visibility!"); 1822 return (VCallVisibility)Val; 1823 } 1824 return VCallVisibility::VCallVisibilityPublic; 1825 } 1826 1827 void Function::setSubprogram(DISubprogram *SP) { 1828 setMetadata(LLVMContext::MD_dbg, SP); 1829 } 1830 1831 DISubprogram *Function::getSubprogram() const { 1832 return cast_or_null<DISubprogram>(getMetadata(LLVMContext::MD_dbg)); 1833 } 1834 1835 bool Function::shouldEmitDebugInfoForProfiling() const { 1836 if (DISubprogram *SP = getSubprogram()) { 1837 if (DICompileUnit *CU = SP->getUnit()) { 1838 return CU->getDebugInfoForProfiling(); 1839 } 1840 } 1841 return false; 1842 } 1843 1844 void GlobalVariable::addDebugInfo(DIGlobalVariableExpression *GV) { 1845 addMetadata(LLVMContext::MD_dbg, *GV); 1846 } 1847 1848 void GlobalVariable::getDebugInfo( 1849 SmallVectorImpl<DIGlobalVariableExpression *> &GVs) const { 1850 SmallVector<MDNode *, 1> MDs; 1851 getMetadata(LLVMContext::MD_dbg, MDs); 1852 for (MDNode *MD : MDs) 1853 GVs.push_back(cast<DIGlobalVariableExpression>(MD)); 1854 } 1855