1 //===-- Metadata.cpp - Implement Metadata classes -------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file implements the Metadata classes. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "llvm/IR/Metadata.h" 15 #include "LLVMContextImpl.h" 16 #include "SymbolTableListTraitsImpl.h" 17 #include "llvm/ADT/DenseMap.h" 18 #include "llvm/ADT/STLExtras.h" 19 #include "llvm/ADT/SmallSet.h" 20 #include "llvm/ADT/SmallString.h" 21 #include "llvm/ADT/StringMap.h" 22 #include "llvm/IR/ConstantRange.h" 23 #include "llvm/IR/Instruction.h" 24 #include "llvm/IR/LLVMContext.h" 25 #include "llvm/IR/LeakDetector.h" 26 #include "llvm/IR/Module.h" 27 #include "llvm/IR/ValueHandle.h" 28 29 using namespace llvm; 30 31 MetadataAsValue::MetadataAsValue(Type *Ty, Metadata *MD) 32 : Value(Ty, MetadataAsValueVal), MD(MD) { 33 track(); 34 } 35 36 MetadataAsValue::~MetadataAsValue() { 37 getType()->getContext().pImpl->MetadataAsValues.erase(MD); 38 untrack(); 39 } 40 41 /// \brief Canonicalize metadata arguments to intrinsics. 42 /// 43 /// To support bitcode upgrades (and assembly semantic sugar) for \a 44 /// MetadataAsValue, we need to canonicalize certain metadata. 45 /// 46 /// - nullptr is replaced by an empty MDNode. 47 /// - An MDNode with a single null operand is replaced by an empty MDNode. 48 /// - An MDNode whose only operand is a \a ConstantAsMetadata gets skipped. 49 /// 50 /// This maintains readability of bitcode from when metadata was a type of 51 /// value, and these bridges were unnecessary. 52 static Metadata *canonicalizeMetadataForValue(LLVMContext &Context, 53 Metadata *MD) { 54 if (!MD) 55 // !{} 56 return MDNode::get(Context, None); 57 58 // Return early if this isn't a single-operand MDNode. 59 auto *N = dyn_cast<MDNode>(MD); 60 if (!N || N->getNumOperands() != 1) 61 return MD; 62 63 if (!N->getOperand(0)) 64 // !{} 65 return MDNode::get(Context, None); 66 67 if (auto *C = dyn_cast<ConstantAsMetadata>(N->getOperand(0))) 68 // Look through the MDNode. 69 return C; 70 71 return MD; 72 } 73 74 MetadataAsValue *MetadataAsValue::get(LLVMContext &Context, Metadata *MD) { 75 MD = canonicalizeMetadataForValue(Context, MD); 76 auto *&Entry = Context.pImpl->MetadataAsValues[MD]; 77 if (!Entry) 78 Entry = new MetadataAsValue(Type::getMetadataTy(Context), MD); 79 return Entry; 80 } 81 82 MetadataAsValue *MetadataAsValue::getIfExists(LLVMContext &Context, 83 Metadata *MD) { 84 MD = canonicalizeMetadataForValue(Context, MD); 85 auto &Store = Context.pImpl->MetadataAsValues; 86 auto I = Store.find(MD); 87 return I == Store.end() ? nullptr : I->second; 88 } 89 90 void MetadataAsValue::handleChangedMetadata(Metadata *MD) { 91 LLVMContext &Context = getContext(); 92 MD = canonicalizeMetadataForValue(Context, MD); 93 auto &Store = Context.pImpl->MetadataAsValues; 94 95 // Stop tracking the old metadata. 96 Store.erase(this->MD); 97 untrack(); 98 this->MD = nullptr; 99 100 // Start tracking MD, or RAUW if necessary. 101 auto *&Entry = Store[MD]; 102 if (Entry) { 103 replaceAllUsesWith(Entry); 104 delete this; 105 return; 106 } 107 108 this->MD = MD; 109 track(); 110 Entry = this; 111 } 112 113 void MetadataAsValue::track() { 114 if (MD) 115 MetadataTracking::track(&MD, *MD, *this); 116 } 117 118 void MetadataAsValue::untrack() { 119 if (MD) 120 MetadataTracking::untrack(MD); 121 } 122 123 void ReplaceableMetadataImpl::addRef(void *Ref, OwnerTy Owner) { 124 bool WasInserted = 125 UseMap.insert(std::make_pair(Ref, std::make_pair(Owner, NextIndex))) 126 .second; 127 (void)WasInserted; 128 assert(WasInserted && "Expected to add a reference"); 129 130 ++NextIndex; 131 assert(NextIndex != 0 && "Unexpected overflow"); 132 } 133 134 void ReplaceableMetadataImpl::dropRef(void *Ref) { 135 bool WasErased = UseMap.erase(Ref); 136 (void)WasErased; 137 assert(WasErased && "Expected to drop a reference"); 138 } 139 140 void ReplaceableMetadataImpl::moveRef(void *Ref, void *New, 141 const Metadata &MD) { 142 auto I = UseMap.find(Ref); 143 assert(I != UseMap.end() && "Expected to move a reference"); 144 auto OwnerAndIndex = I->second; 145 UseMap.erase(I); 146 bool WasInserted = UseMap.insert(std::make_pair(New, OwnerAndIndex)).second; 147 (void)WasInserted; 148 assert(WasInserted && "Expected to add a reference"); 149 150 // Check that the references are direct if there's no owner. 151 (void)MD; 152 assert((OwnerAndIndex.first || *static_cast<Metadata **>(Ref) == &MD) && 153 "Reference without owner must be direct"); 154 assert((OwnerAndIndex.first || *static_cast<Metadata **>(New) == &MD) && 155 "Reference without owner must be direct"); 156 } 157 158 void ReplaceableMetadataImpl::replaceAllUsesWith(Metadata *MD) { 159 assert(!(MD && isa<MDNodeFwdDecl>(MD)) && "Expected non-temp node"); 160 161 if (UseMap.empty()) 162 return; 163 164 // Copy out uses since UseMap will get touched below. 165 typedef std::pair<void *, std::pair<OwnerTy, uint64_t>> UseTy; 166 SmallVector<UseTy, 8> Uses(UseMap.begin(), UseMap.end()); 167 std::sort(Uses.begin(), Uses.end(), [](const UseTy &L, const UseTy &R) { 168 return L.second.second < R.second.second; 169 }); 170 for (const auto &Pair : Uses) { 171 OwnerTy Owner = Pair.second.first; 172 if (!Owner) { 173 // Update unowned tracking references directly. 174 Metadata *&Ref = *static_cast<Metadata **>(Pair.first); 175 Ref = MD; 176 MetadataTracking::track(Ref); 177 UseMap.erase(Pair.first); 178 continue; 179 } 180 181 // Check for MetadataAsValue. 182 if (Owner.is<MetadataAsValue *>()) { 183 Owner.get<MetadataAsValue *>()->handleChangedMetadata(MD); 184 continue; 185 } 186 187 // There's a Metadata owner -- dispatch. 188 Metadata *OwnerMD = Owner.get<Metadata *>(); 189 switch (OwnerMD->getMetadataID()) { 190 #define HANDLE_METADATA_LEAF(CLASS) \ 191 case Metadata::CLASS##Kind: \ 192 cast<CLASS>(OwnerMD)->handleChangedOperand(Pair.first, MD); \ 193 continue; 194 #include "llvm/IR/Metadata.def" 195 default: 196 llvm_unreachable("Invalid metadata subclass"); 197 } 198 } 199 assert(UseMap.empty() && "Expected all uses to be replaced"); 200 } 201 202 void ReplaceableMetadataImpl::resolveAllUses(bool ResolveUsers) { 203 if (UseMap.empty()) 204 return; 205 206 if (!ResolveUsers) { 207 UseMap.clear(); 208 return; 209 } 210 211 // Copy out uses since UseMap could get touched below. 212 typedef std::pair<void *, std::pair<OwnerTy, uint64_t>> UseTy; 213 SmallVector<UseTy, 8> Uses(UseMap.begin(), UseMap.end()); 214 std::sort(Uses.begin(), Uses.end(), [](const UseTy &L, const UseTy &R) { 215 return L.second.second < R.second.second; 216 }); 217 UseMap.clear(); 218 for (const auto &Pair : Uses) { 219 auto Owner = Pair.second.first; 220 if (!Owner) 221 continue; 222 if (Owner.is<MetadataAsValue *>()) 223 continue; 224 225 // Resolve GenericMDNodes that point at this. 226 auto *OwnerMD = dyn_cast<GenericMDNode>(Owner.get<Metadata *>()); 227 if (!OwnerMD) 228 continue; 229 if (OwnerMD->isResolved()) 230 continue; 231 OwnerMD->decrementUnresolvedOperands(); 232 if (!OwnerMD->hasUnresolvedOperands()) 233 OwnerMD->resolve(); 234 } 235 } 236 237 static Function *getLocalFunction(Value *V) { 238 assert(V && "Expected value"); 239 if (auto *A = dyn_cast<Argument>(V)) 240 return A->getParent(); 241 if (BasicBlock *BB = cast<Instruction>(V)->getParent()) 242 return BB->getParent(); 243 return nullptr; 244 } 245 246 ValueAsMetadata *ValueAsMetadata::get(Value *V) { 247 assert(V && "Unexpected null Value"); 248 249 auto &Context = V->getContext(); 250 auto *&Entry = Context.pImpl->ValuesAsMetadata[V]; 251 if (!Entry) { 252 assert((isa<Constant>(V) || isa<Argument>(V) || isa<Instruction>(V)) && 253 "Expected constant or function-local value"); 254 assert(!V->NameAndIsUsedByMD.getInt() && 255 "Expected this to be the only metadata use"); 256 V->NameAndIsUsedByMD.setInt(true); 257 if (auto *C = dyn_cast<Constant>(V)) 258 Entry = new ConstantAsMetadata(Context, C); 259 else 260 Entry = new LocalAsMetadata(Context, V); 261 } 262 263 return Entry; 264 } 265 266 ValueAsMetadata *ValueAsMetadata::getIfExists(Value *V) { 267 assert(V && "Unexpected null Value"); 268 return V->getContext().pImpl->ValuesAsMetadata.lookup(V); 269 } 270 271 void ValueAsMetadata::handleDeletion(Value *V) { 272 assert(V && "Expected valid value"); 273 274 auto &Store = V->getType()->getContext().pImpl->ValuesAsMetadata; 275 auto I = Store.find(V); 276 if (I == Store.end()) 277 return; 278 279 // Remove old entry from the map. 280 ValueAsMetadata *MD = I->second; 281 assert(MD && "Expected valid metadata"); 282 assert(MD->getValue() == V && "Expected valid mapping"); 283 Store.erase(I); 284 285 // Delete the metadata. 286 MD->replaceAllUsesWith(nullptr); 287 delete MD; 288 } 289 290 void ValueAsMetadata::handleRAUW(Value *From, Value *To) { 291 assert(From && "Expected valid value"); 292 assert(To && "Expected valid value"); 293 assert(From != To && "Expected changed value"); 294 assert(From->getType() == To->getType() && "Unexpected type change"); 295 296 LLVMContext &Context = From->getType()->getContext(); 297 auto &Store = Context.pImpl->ValuesAsMetadata; 298 auto I = Store.find(From); 299 if (I == Store.end()) { 300 assert(!From->NameAndIsUsedByMD.getInt() && 301 "Expected From not to be used by metadata"); 302 return; 303 } 304 305 // Remove old entry from the map. 306 assert(From->NameAndIsUsedByMD.getInt() && 307 "Expected From to be used by metadata"); 308 From->NameAndIsUsedByMD.setInt(false); 309 ValueAsMetadata *MD = I->second; 310 assert(MD && "Expected valid metadata"); 311 assert(MD->getValue() == From && "Expected valid mapping"); 312 Store.erase(I); 313 314 if (isa<LocalAsMetadata>(MD)) { 315 if (auto *C = dyn_cast<Constant>(To)) { 316 // Local became a constant. 317 MD->replaceAllUsesWith(ConstantAsMetadata::get(C)); 318 delete MD; 319 return; 320 } 321 if (getLocalFunction(From) && getLocalFunction(To) && 322 getLocalFunction(From) != getLocalFunction(To)) { 323 // Function changed. 324 MD->replaceAllUsesWith(nullptr); 325 delete MD; 326 return; 327 } 328 } else if (!isa<Constant>(To)) { 329 // Changed to function-local value. 330 MD->replaceAllUsesWith(nullptr); 331 delete MD; 332 return; 333 } 334 335 auto *&Entry = Store[To]; 336 if (Entry) { 337 // The target already exists. 338 MD->replaceAllUsesWith(Entry); 339 delete MD; 340 return; 341 } 342 343 // Update MD in place (and update the map entry). 344 assert(!To->NameAndIsUsedByMD.getInt() && 345 "Expected this to be the only metadata use"); 346 To->NameAndIsUsedByMD.setInt(true); 347 MD->V = To; 348 Entry = MD; 349 } 350 351 //===----------------------------------------------------------------------===// 352 // MDString implementation. 353 // 354 355 MDString *MDString::get(LLVMContext &Context, StringRef Str) { 356 auto &Store = Context.pImpl->MDStringCache; 357 auto I = Store.find(Str); 358 if (I != Store.end()) 359 return &I->second; 360 361 auto *Entry = 362 StringMapEntry<MDString>::Create(Str, Store.getAllocator(), MDString()); 363 bool WasInserted = Store.insert(Entry); 364 (void)WasInserted; 365 assert(WasInserted && "Expected entry to be inserted"); 366 Entry->second.Entry = Entry; 367 return &Entry->second; 368 } 369 370 StringRef MDString::getString() const { 371 assert(Entry && "Expected to find string map entry"); 372 return Entry->first(); 373 } 374 375 //===----------------------------------------------------------------------===// 376 // MDNode implementation. 377 // 378 379 void *MDNode::operator new(size_t Size, unsigned NumOps) { 380 void *Ptr = ::operator new(Size + NumOps * sizeof(MDOperand)); 381 MDOperand *O = static_cast<MDOperand *>(Ptr); 382 for (MDOperand *E = O + NumOps; O != E; ++O) 383 (void)new (O) MDOperand; 384 return O; 385 } 386 387 void MDNode::operator delete(void *Mem) { 388 MDNode *N = static_cast<MDNode *>(Mem); 389 MDOperand *O = static_cast<MDOperand *>(Mem); 390 for (MDOperand *E = O - N->NumOperands; O != E; --O) 391 (O - 1)->~MDOperand(); 392 ::operator delete(O); 393 } 394 395 MDNode::MDNode(LLVMContext &Context, unsigned ID, ArrayRef<Metadata *> MDs) 396 : Metadata(ID), Context(Context), NumOperands(MDs.size()), 397 MDNodeSubclassData(0) { 398 for (unsigned I = 0, E = MDs.size(); I != E; ++I) 399 setOperand(I, MDs[I]); 400 } 401 402 bool MDNode::isResolved() const { 403 if (isa<MDNodeFwdDecl>(this)) 404 return false; 405 return cast<GenericMDNode>(this)->isResolved(); 406 } 407 408 static bool isOperandUnresolved(Metadata *Op) { 409 if (auto *N = dyn_cast_or_null<MDNode>(Op)) 410 return !N->isResolved(); 411 return false; 412 } 413 414 GenericMDNode::GenericMDNode(LLVMContext &C, ArrayRef<Metadata *> Vals) 415 : MDNode(C, GenericMDNodeKind, Vals) { 416 // Check whether any operands are unresolved, requiring re-uniquing. 417 for (const auto &Op : operands()) 418 if (isOperandUnresolved(Op)) 419 incrementUnresolvedOperands(); 420 421 if (hasUnresolvedOperands()) 422 ReplaceableUses.reset(new ReplaceableMetadataImpl); 423 } 424 425 GenericMDNode::~GenericMDNode() { 426 LLVMContextImpl *pImpl = getContext().pImpl; 427 if (isStoredDistinctInContext()) 428 pImpl->NonUniquedMDNodes.erase(this); 429 else 430 pImpl->MDNodeSet.erase(this); 431 dropAllReferences(); 432 } 433 434 void GenericMDNode::resolve() { 435 assert(!isResolved() && "Expected this to be unresolved"); 436 437 // Move the map, so that this immediately looks resolved. 438 auto Uses = std::move(ReplaceableUses); 439 SubclassData32 = 0; 440 assert(isResolved() && "Expected this to be resolved"); 441 442 // Drop RAUW support. 443 Uses->resolveAllUses(); 444 } 445 446 void GenericMDNode::resolveCycles() { 447 if (isResolved()) 448 return; 449 450 // Resolve this node immediately. 451 resolve(); 452 453 // Resolve all operands. 454 for (const auto &Op : operands()) { 455 if (!Op) 456 continue; 457 assert(!isa<MDNodeFwdDecl>(Op) && 458 "Expected all forward declarations to be resolved"); 459 if (auto *N = dyn_cast<GenericMDNode>(Op)) 460 if (!N->isResolved()) 461 N->resolveCycles(); 462 } 463 } 464 465 void MDNode::dropAllReferences() { 466 for (unsigned I = 0, E = NumOperands; I != E; ++I) 467 setOperand(I, nullptr); 468 if (auto *G = dyn_cast<GenericMDNode>(this)) 469 if (!G->isResolved()) { 470 G->ReplaceableUses->resolveAllUses(/* ResolveUsers */ false); 471 G->ReplaceableUses.reset(); 472 } 473 } 474 475 namespace llvm { 476 /// \brief Make MDOperand transparent for hashing. 477 /// 478 /// This overload of an implementation detail of the hashing library makes 479 /// MDOperand hash to the same value as a \a Metadata pointer. 480 /// 481 /// Note that overloading \a hash_value() as follows: 482 /// 483 /// \code 484 /// size_t hash_value(const MDOperand &X) { return hash_value(X.get()); } 485 /// \endcode 486 /// 487 /// does not cause MDOperand to be transparent. In particular, a bare pointer 488 /// doesn't get hashed before it's combined, whereas \a MDOperand would. 489 static const Metadata *get_hashable_data(const MDOperand &X) { return X.get(); } 490 } 491 492 void GenericMDNode::handleChangedOperand(void *Ref, Metadata *New) { 493 unsigned Op = static_cast<MDOperand *>(Ref) - op_begin(); 494 assert(Op < getNumOperands() && "Expected valid operand"); 495 496 if (isStoredDistinctInContext()) { 497 assert(isResolved() && "Expected distinct node to be resolved"); 498 499 // This node is not uniqued. Just set the operand and be done with it. 500 setOperand(Op, New); 501 return; 502 } 503 if (InRAUW) { 504 // We just hit a recursion due to RAUW. Set the operand and move on, since 505 // we're about to be deleted. 506 // 507 // FIXME: Can this cycle really happen? 508 setOperand(Op, New); 509 return; 510 } 511 512 auto &Store = getContext().pImpl->MDNodeSet; 513 Store.erase(this); 514 515 Metadata *Old = getOperand(Op); 516 setOperand(Op, New); 517 518 // Drop uniquing for self-reference cycles or if an operand drops to null. 519 // 520 // FIXME: Stop dropping uniquing when an operand drops to null. The original 521 // motivation was to prevent madness during teardown of LLVMContextImpl, but 522 // dropAllReferences() fixes that problem in a better way. (It's just here 523 // now for better staging of semantic changes.) 524 if (New == this || !New) { 525 storeDistinctInContext(); 526 setHash(0); 527 if (!isResolved()) 528 resolve(); 529 return; 530 } 531 532 // Re-calculate the hash. 533 setHash(hash_combine_range(op_begin(), op_end())); 534 #ifndef NDEBUG 535 { 536 SmallVector<Metadata *, 8> MDs(op_begin(), op_end()); 537 unsigned RawHash = hash_combine_range(MDs.begin(), MDs.end()); 538 assert(getHash() == RawHash && 539 "Expected hash of MDOperand to equal hash of Metadata*"); 540 } 541 #endif 542 543 // Re-unique the node. 544 GenericMDNodeInfo::KeyTy Key(this); 545 auto I = Store.find_as(Key); 546 if (I == Store.end()) { 547 Store.insert(this); 548 549 if (!isResolved()) { 550 // Check if the last unresolved operand has just been resolved; if so, 551 // resolve this as well. 552 if (isOperandUnresolved(Old)) 553 decrementUnresolvedOperands(); 554 if (isOperandUnresolved(New)) 555 incrementUnresolvedOperands(); 556 if (!hasUnresolvedOperands()) 557 resolve(); 558 } 559 560 return; 561 } 562 563 // Collision. 564 if (!isResolved()) { 565 // Still unresolved, so RAUW. 566 InRAUW = true; 567 ReplaceableUses->replaceAllUsesWith(*I); 568 delete this; 569 return; 570 } 571 572 // Store in non-uniqued form if this node has already been resolved. 573 setHash(0); 574 storeDistinctInContext(); 575 } 576 577 MDNode *MDNode::getMDNode(LLVMContext &Context, ArrayRef<Metadata *> MDs, 578 bool Insert) { 579 auto &Store = Context.pImpl->MDNodeSet; 580 581 GenericMDNodeInfo::KeyTy Key(MDs); 582 auto I = Store.find_as(Key); 583 if (I != Store.end()) 584 return *I; 585 if (!Insert) 586 return nullptr; 587 588 // Coallocate space for the node and Operands together, then placement new. 589 GenericMDNode *N = new (MDs.size()) GenericMDNode(Context, MDs); 590 N->setHash(Key.Hash); 591 Store.insert(N); 592 return N; 593 } 594 595 MDNodeFwdDecl *MDNode::getTemporary(LLVMContext &Context, 596 ArrayRef<Metadata *> MDs) { 597 MDNodeFwdDecl *N = new (MDs.size()) MDNodeFwdDecl(Context, MDs); 598 LeakDetector::addGarbageObject(N); 599 return N; 600 } 601 602 void MDNode::deleteTemporary(MDNode *N) { 603 assert(isa<MDNodeFwdDecl>(N) && "Expected forward declaration"); 604 LeakDetector::removeGarbageObject(N); 605 delete cast<MDNodeFwdDecl>(N); 606 } 607 608 void MDNode::storeDistinctInContext() { 609 assert(!IsDistinctInContext && "Expected newly distinct metadata"); 610 IsDistinctInContext = true; 611 auto *G = cast<GenericMDNode>(this); 612 G->setHash(0); 613 getContext().pImpl->NonUniquedMDNodes.insert(G); 614 } 615 616 // Replace value from this node's operand list. 617 void MDNode::replaceOperandWith(unsigned I, Metadata *New) { 618 if (getOperand(I) == New) 619 return; 620 621 if (auto *N = dyn_cast<GenericMDNode>(this)) { 622 N->handleChangedOperand(mutable_begin() + I, New); 623 return; 624 } 625 626 assert(isa<MDNodeFwdDecl>(this) && "Expected an MDNode"); 627 setOperand(I, New); 628 } 629 630 void MDNode::setOperand(unsigned I, Metadata *New) { 631 assert(I < NumOperands); 632 if (isStoredDistinctInContext() || isa<MDNodeFwdDecl>(this)) 633 // No need for a callback, this isn't uniqued. 634 mutable_begin()[I].reset(New, nullptr); 635 else 636 mutable_begin()[I].reset(New, this); 637 } 638 639 /// \brief Get a node, or a self-reference that looks like it. 640 /// 641 /// Special handling for finding self-references, for use by \a 642 /// MDNode::concatenate() and \a MDNode::intersect() to maintain behaviour from 643 /// when self-referencing nodes were still uniqued. If the first operand has 644 /// the same operands as \c Ops, return the first operand instead. 645 static MDNode *getOrSelfReference(LLVMContext &Context, 646 ArrayRef<Metadata *> Ops) { 647 if (!Ops.empty()) 648 if (MDNode *N = dyn_cast_or_null<MDNode>(Ops[0])) 649 if (N->getNumOperands() == Ops.size() && N == N->getOperand(0)) { 650 for (unsigned I = 1, E = Ops.size(); I != E; ++I) 651 if (Ops[I] != N->getOperand(I)) 652 return MDNode::get(Context, Ops); 653 return N; 654 } 655 656 return MDNode::get(Context, Ops); 657 } 658 659 MDNode *MDNode::concatenate(MDNode *A, MDNode *B) { 660 if (!A) 661 return B; 662 if (!B) 663 return A; 664 665 SmallVector<Metadata *, 4> MDs(A->getNumOperands() + B->getNumOperands()); 666 667 unsigned j = 0; 668 for (unsigned i = 0, ie = A->getNumOperands(); i != ie; ++i) 669 MDs[j++] = A->getOperand(i); 670 for (unsigned i = 0, ie = B->getNumOperands(); i != ie; ++i) 671 MDs[j++] = B->getOperand(i); 672 673 // FIXME: This preserves long-standing behaviour, but is it really the right 674 // behaviour? Or was that an unintended side-effect of node uniquing? 675 return getOrSelfReference(A->getContext(), MDs); 676 } 677 678 MDNode *MDNode::intersect(MDNode *A, MDNode *B) { 679 if (!A || !B) 680 return nullptr; 681 682 SmallVector<Metadata *, 4> MDs; 683 for (unsigned i = 0, ie = A->getNumOperands(); i != ie; ++i) { 684 Metadata *MD = A->getOperand(i); 685 for (unsigned j = 0, je = B->getNumOperands(); j != je; ++j) 686 if (MD == B->getOperand(j)) { 687 MDs.push_back(MD); 688 break; 689 } 690 } 691 692 // FIXME: This preserves long-standing behaviour, but is it really the right 693 // behaviour? Or was that an unintended side-effect of node uniquing? 694 return getOrSelfReference(A->getContext(), MDs); 695 } 696 697 MDNode *MDNode::getMostGenericFPMath(MDNode *A, MDNode *B) { 698 if (!A || !B) 699 return nullptr; 700 701 APFloat AVal = mdconst::extract<ConstantFP>(A->getOperand(0))->getValueAPF(); 702 APFloat BVal = mdconst::extract<ConstantFP>(B->getOperand(0))->getValueAPF(); 703 if (AVal.compare(BVal) == APFloat::cmpLessThan) 704 return A; 705 return B; 706 } 707 708 static bool isContiguous(const ConstantRange &A, const ConstantRange &B) { 709 return A.getUpper() == B.getLower() || A.getLower() == B.getUpper(); 710 } 711 712 static bool canBeMerged(const ConstantRange &A, const ConstantRange &B) { 713 return !A.intersectWith(B).isEmptySet() || isContiguous(A, B); 714 } 715 716 static bool tryMergeRange(SmallVectorImpl<ConstantInt *> &EndPoints, 717 ConstantInt *Low, ConstantInt *High) { 718 ConstantRange NewRange(Low->getValue(), High->getValue()); 719 unsigned Size = EndPoints.size(); 720 APInt LB = EndPoints[Size - 2]->getValue(); 721 APInt LE = EndPoints[Size - 1]->getValue(); 722 ConstantRange LastRange(LB, LE); 723 if (canBeMerged(NewRange, LastRange)) { 724 ConstantRange Union = LastRange.unionWith(NewRange); 725 Type *Ty = High->getType(); 726 EndPoints[Size - 2] = 727 cast<ConstantInt>(ConstantInt::get(Ty, Union.getLower())); 728 EndPoints[Size - 1] = 729 cast<ConstantInt>(ConstantInt::get(Ty, Union.getUpper())); 730 return true; 731 } 732 return false; 733 } 734 735 static void addRange(SmallVectorImpl<ConstantInt *> &EndPoints, 736 ConstantInt *Low, ConstantInt *High) { 737 if (!EndPoints.empty()) 738 if (tryMergeRange(EndPoints, Low, High)) 739 return; 740 741 EndPoints.push_back(Low); 742 EndPoints.push_back(High); 743 } 744 745 MDNode *MDNode::getMostGenericRange(MDNode *A, MDNode *B) { 746 // Given two ranges, we want to compute the union of the ranges. This 747 // is slightly complitade by having to combine the intervals and merge 748 // the ones that overlap. 749 750 if (!A || !B) 751 return nullptr; 752 753 if (A == B) 754 return A; 755 756 // First, walk both lists in older of the lower boundary of each interval. 757 // At each step, try to merge the new interval to the last one we adedd. 758 SmallVector<ConstantInt *, 4> EndPoints; 759 int AI = 0; 760 int BI = 0; 761 int AN = A->getNumOperands() / 2; 762 int BN = B->getNumOperands() / 2; 763 while (AI < AN && BI < BN) { 764 ConstantInt *ALow = mdconst::extract<ConstantInt>(A->getOperand(2 * AI)); 765 ConstantInt *BLow = mdconst::extract<ConstantInt>(B->getOperand(2 * BI)); 766 767 if (ALow->getValue().slt(BLow->getValue())) { 768 addRange(EndPoints, ALow, 769 mdconst::extract<ConstantInt>(A->getOperand(2 * AI + 1))); 770 ++AI; 771 } else { 772 addRange(EndPoints, BLow, 773 mdconst::extract<ConstantInt>(B->getOperand(2 * BI + 1))); 774 ++BI; 775 } 776 } 777 while (AI < AN) { 778 addRange(EndPoints, mdconst::extract<ConstantInt>(A->getOperand(2 * AI)), 779 mdconst::extract<ConstantInt>(A->getOperand(2 * AI + 1))); 780 ++AI; 781 } 782 while (BI < BN) { 783 addRange(EndPoints, mdconst::extract<ConstantInt>(B->getOperand(2 * BI)), 784 mdconst::extract<ConstantInt>(B->getOperand(2 * BI + 1))); 785 ++BI; 786 } 787 788 // If we have more than 2 ranges (4 endpoints) we have to try to merge 789 // the last and first ones. 790 unsigned Size = EndPoints.size(); 791 if (Size > 4) { 792 ConstantInt *FB = EndPoints[0]; 793 ConstantInt *FE = EndPoints[1]; 794 if (tryMergeRange(EndPoints, FB, FE)) { 795 for (unsigned i = 0; i < Size - 2; ++i) { 796 EndPoints[i] = EndPoints[i + 2]; 797 } 798 EndPoints.resize(Size - 2); 799 } 800 } 801 802 // If in the end we have a single range, it is possible that it is now the 803 // full range. Just drop the metadata in that case. 804 if (EndPoints.size() == 2) { 805 ConstantRange Range(EndPoints[0]->getValue(), EndPoints[1]->getValue()); 806 if (Range.isFullSet()) 807 return nullptr; 808 } 809 810 SmallVector<Metadata *, 4> MDs; 811 MDs.reserve(EndPoints.size()); 812 for (auto *I : EndPoints) 813 MDs.push_back(ConstantAsMetadata::get(I)); 814 return MDNode::get(A->getContext(), MDs); 815 } 816 817 //===----------------------------------------------------------------------===// 818 // NamedMDNode implementation. 819 // 820 821 static SmallVector<TrackingMDRef, 4> &getNMDOps(void *Operands) { 822 return *(SmallVector<TrackingMDRef, 4> *)Operands; 823 } 824 825 NamedMDNode::NamedMDNode(const Twine &N) 826 : Name(N.str()), Parent(nullptr), 827 Operands(new SmallVector<TrackingMDRef, 4>()) {} 828 829 NamedMDNode::~NamedMDNode() { 830 dropAllReferences(); 831 delete &getNMDOps(Operands); 832 } 833 834 unsigned NamedMDNode::getNumOperands() const { 835 return (unsigned)getNMDOps(Operands).size(); 836 } 837 838 MDNode *NamedMDNode::getOperand(unsigned i) const { 839 assert(i < getNumOperands() && "Invalid Operand number!"); 840 auto *N = getNMDOps(Operands)[i].get(); 841 if (N && i > 10000) 842 N->dump(); 843 return cast_or_null<MDNode>(N); 844 } 845 846 void NamedMDNode::addOperand(MDNode *M) { getNMDOps(Operands).emplace_back(M); } 847 848 void NamedMDNode::eraseFromParent() { 849 getParent()->eraseNamedMetadata(this); 850 } 851 852 void NamedMDNode::dropAllReferences() { 853 getNMDOps(Operands).clear(); 854 } 855 856 StringRef NamedMDNode::getName() const { 857 return StringRef(Name); 858 } 859 860 //===----------------------------------------------------------------------===// 861 // Instruction Metadata method implementations. 862 // 863 864 void Instruction::setMetadata(StringRef Kind, MDNode *Node) { 865 if (!Node && !hasMetadata()) 866 return; 867 setMetadata(getContext().getMDKindID(Kind), Node); 868 } 869 870 MDNode *Instruction::getMetadataImpl(StringRef Kind) const { 871 return getMetadataImpl(getContext().getMDKindID(Kind)); 872 } 873 874 void Instruction::dropUnknownMetadata(ArrayRef<unsigned> KnownIDs) { 875 SmallSet<unsigned, 5> KnownSet; 876 KnownSet.insert(KnownIDs.begin(), KnownIDs.end()); 877 878 // Drop debug if needed 879 if (KnownSet.erase(LLVMContext::MD_dbg)) 880 DbgLoc = DebugLoc(); 881 882 if (!hasMetadataHashEntry()) 883 return; // Nothing to remove! 884 885 DenseMap<const Instruction *, LLVMContextImpl::MDMapTy> &MetadataStore = 886 getContext().pImpl->MetadataStore; 887 888 if (KnownSet.empty()) { 889 // Just drop our entry at the store. 890 MetadataStore.erase(this); 891 setHasMetadataHashEntry(false); 892 return; 893 } 894 895 LLVMContextImpl::MDMapTy &Info = MetadataStore[this]; 896 unsigned I; 897 unsigned E; 898 // Walk the array and drop any metadata we don't know. 899 for (I = 0, E = Info.size(); I != E;) { 900 if (KnownSet.count(Info[I].first)) { 901 ++I; 902 continue; 903 } 904 905 Info[I] = std::move(Info.back()); 906 Info.pop_back(); 907 --E; 908 } 909 assert(E == Info.size()); 910 911 if (E == 0) { 912 // Drop our entry at the store. 913 MetadataStore.erase(this); 914 setHasMetadataHashEntry(false); 915 } 916 } 917 918 /// setMetadata - Set the metadata of of the specified kind to the specified 919 /// node. This updates/replaces metadata if already present, or removes it if 920 /// Node is null. 921 void Instruction::setMetadata(unsigned KindID, MDNode *Node) { 922 if (!Node && !hasMetadata()) 923 return; 924 925 // Handle 'dbg' as a special case since it is not stored in the hash table. 926 if (KindID == LLVMContext::MD_dbg) { 927 DbgLoc = DebugLoc::getFromDILocation(Node); 928 return; 929 } 930 931 // Handle the case when we're adding/updating metadata on an instruction. 932 if (Node) { 933 LLVMContextImpl::MDMapTy &Info = getContext().pImpl->MetadataStore[this]; 934 assert(!Info.empty() == hasMetadataHashEntry() && 935 "HasMetadata bit is wonked"); 936 if (Info.empty()) { 937 setHasMetadataHashEntry(true); 938 } else { 939 // Handle replacement of an existing value. 940 for (auto &P : Info) 941 if (P.first == KindID) { 942 P.second.reset(Node); 943 return; 944 } 945 } 946 947 // No replacement, just add it to the list. 948 Info.emplace_back(std::piecewise_construct, std::make_tuple(KindID), 949 std::make_tuple(Node)); 950 return; 951 } 952 953 // Otherwise, we're removing metadata from an instruction. 954 assert((hasMetadataHashEntry() == 955 (getContext().pImpl->MetadataStore.count(this) > 0)) && 956 "HasMetadata bit out of date!"); 957 if (!hasMetadataHashEntry()) 958 return; // Nothing to remove! 959 LLVMContextImpl::MDMapTy &Info = getContext().pImpl->MetadataStore[this]; 960 961 // Common case is removing the only entry. 962 if (Info.size() == 1 && Info[0].first == KindID) { 963 getContext().pImpl->MetadataStore.erase(this); 964 setHasMetadataHashEntry(false); 965 return; 966 } 967 968 // Handle removal of an existing value. 969 for (unsigned i = 0, e = Info.size(); i != e; ++i) 970 if (Info[i].first == KindID) { 971 Info[i] = std::move(Info.back()); 972 Info.pop_back(); 973 assert(!Info.empty() && "Removing last entry should be handled above"); 974 return; 975 } 976 // Otherwise, removing an entry that doesn't exist on the instruction. 977 } 978 979 void Instruction::setAAMetadata(const AAMDNodes &N) { 980 setMetadata(LLVMContext::MD_tbaa, N.TBAA); 981 setMetadata(LLVMContext::MD_alias_scope, N.Scope); 982 setMetadata(LLVMContext::MD_noalias, N.NoAlias); 983 } 984 985 MDNode *Instruction::getMetadataImpl(unsigned KindID) const { 986 // Handle 'dbg' as a special case since it is not stored in the hash table. 987 if (KindID == LLVMContext::MD_dbg) 988 return DbgLoc.getAsMDNode(); 989 990 if (!hasMetadataHashEntry()) return nullptr; 991 992 LLVMContextImpl::MDMapTy &Info = getContext().pImpl->MetadataStore[this]; 993 assert(!Info.empty() && "bit out of sync with hash table"); 994 995 for (const auto &I : Info) 996 if (I.first == KindID) 997 return I.second; 998 return nullptr; 999 } 1000 1001 void Instruction::getAllMetadataImpl( 1002 SmallVectorImpl<std::pair<unsigned, MDNode *>> &Result) const { 1003 Result.clear(); 1004 1005 // Handle 'dbg' as a special case since it is not stored in the hash table. 1006 if (!DbgLoc.isUnknown()) { 1007 Result.push_back( 1008 std::make_pair((unsigned)LLVMContext::MD_dbg, DbgLoc.getAsMDNode())); 1009 if (!hasMetadataHashEntry()) return; 1010 } 1011 1012 assert(hasMetadataHashEntry() && 1013 getContext().pImpl->MetadataStore.count(this) && 1014 "Shouldn't have called this"); 1015 const LLVMContextImpl::MDMapTy &Info = 1016 getContext().pImpl->MetadataStore.find(this)->second; 1017 assert(!Info.empty() && "Shouldn't have called this"); 1018 1019 Result.reserve(Result.size() + Info.size()); 1020 for (auto &I : Info) 1021 Result.push_back(std::make_pair(I.first, cast<MDNode>(I.second.get()))); 1022 1023 // Sort the resulting array so it is stable. 1024 if (Result.size() > 1) 1025 array_pod_sort(Result.begin(), Result.end()); 1026 } 1027 1028 void Instruction::getAllMetadataOtherThanDebugLocImpl( 1029 SmallVectorImpl<std::pair<unsigned, MDNode *>> &Result) const { 1030 Result.clear(); 1031 assert(hasMetadataHashEntry() && 1032 getContext().pImpl->MetadataStore.count(this) && 1033 "Shouldn't have called this"); 1034 const LLVMContextImpl::MDMapTy &Info = 1035 getContext().pImpl->MetadataStore.find(this)->second; 1036 assert(!Info.empty() && "Shouldn't have called this"); 1037 Result.reserve(Result.size() + Info.size()); 1038 for (auto &I : Info) 1039 Result.push_back(std::make_pair(I.first, cast<MDNode>(I.second.get()))); 1040 1041 // Sort the resulting array so it is stable. 1042 if (Result.size() > 1) 1043 array_pod_sort(Result.begin(), Result.end()); 1044 } 1045 1046 /// clearMetadataHashEntries - Clear all hashtable-based metadata from 1047 /// this instruction. 1048 void Instruction::clearMetadataHashEntries() { 1049 assert(hasMetadataHashEntry() && "Caller should check"); 1050 getContext().pImpl->MetadataStore.erase(this); 1051 setHasMetadataHashEntry(false); 1052 } 1053 1054