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/Module.h" 26 #include "llvm/IR/ValueHandle.h" 27 28 using namespace llvm; 29 30 MetadataAsValue::MetadataAsValue(Type *Ty, Metadata *MD) 31 : Value(Ty, MetadataAsValueVal), MD(MD) { 32 track(); 33 } 34 35 MetadataAsValue::~MetadataAsValue() { 36 getType()->getContext().pImpl->MetadataAsValues.erase(MD); 37 untrack(); 38 } 39 40 /// \brief Canonicalize metadata arguments to intrinsics. 41 /// 42 /// To support bitcode upgrades (and assembly semantic sugar) for \a 43 /// MetadataAsValue, we need to canonicalize certain metadata. 44 /// 45 /// - nullptr is replaced by an empty MDNode. 46 /// - An MDNode with a single null operand is replaced by an empty MDNode. 47 /// - An MDNode whose only operand is a \a ConstantAsMetadata gets skipped. 48 /// 49 /// This maintains readability of bitcode from when metadata was a type of 50 /// value, and these bridges were unnecessary. 51 static Metadata *canonicalizeMetadataForValue(LLVMContext &Context, 52 Metadata *MD) { 53 if (!MD) 54 // !{} 55 return MDNode::get(Context, None); 56 57 // Return early if this isn't a single-operand MDNode. 58 auto *N = dyn_cast<MDNode>(MD); 59 if (!N || N->getNumOperands() != 1) 60 return MD; 61 62 if (!N->getOperand(0)) 63 // !{} 64 return MDNode::get(Context, None); 65 66 if (auto *C = dyn_cast<ConstantAsMetadata>(N->getOperand(0))) 67 // Look through the MDNode. 68 return C; 69 70 return MD; 71 } 72 73 MetadataAsValue *MetadataAsValue::get(LLVMContext &Context, Metadata *MD) { 74 MD = canonicalizeMetadataForValue(Context, MD); 75 auto *&Entry = Context.pImpl->MetadataAsValues[MD]; 76 if (!Entry) 77 Entry = new MetadataAsValue(Type::getMetadataTy(Context), MD); 78 return Entry; 79 } 80 81 MetadataAsValue *MetadataAsValue::getIfExists(LLVMContext &Context, 82 Metadata *MD) { 83 MD = canonicalizeMetadataForValue(Context, MD); 84 auto &Store = Context.pImpl->MetadataAsValues; 85 auto I = Store.find(MD); 86 return I == Store.end() ? nullptr : I->second; 87 } 88 89 void MetadataAsValue::handleChangedMetadata(Metadata *MD) { 90 LLVMContext &Context = getContext(); 91 MD = canonicalizeMetadataForValue(Context, MD); 92 auto &Store = Context.pImpl->MetadataAsValues; 93 94 // Stop tracking the old metadata. 95 Store.erase(this->MD); 96 untrack(); 97 this->MD = nullptr; 98 99 // Start tracking MD, or RAUW if necessary. 100 auto *&Entry = Store[MD]; 101 if (Entry) { 102 replaceAllUsesWith(Entry); 103 delete this; 104 return; 105 } 106 107 this->MD = MD; 108 track(); 109 Entry = this; 110 } 111 112 void MetadataAsValue::track() { 113 if (MD) 114 MetadataTracking::track(&MD, *MD, *this); 115 } 116 117 void MetadataAsValue::untrack() { 118 if (MD) 119 MetadataTracking::untrack(MD); 120 } 121 122 void ReplaceableMetadataImpl::addRef(void *Ref, OwnerTy Owner) { 123 bool WasInserted = 124 UseMap.insert(std::make_pair(Ref, std::make_pair(Owner, NextIndex))) 125 .second; 126 (void)WasInserted; 127 assert(WasInserted && "Expected to add a reference"); 128 129 ++NextIndex; 130 assert(NextIndex != 0 && "Unexpected overflow"); 131 } 132 133 void ReplaceableMetadataImpl::dropRef(void *Ref) { 134 bool WasErased = UseMap.erase(Ref); 135 (void)WasErased; 136 assert(WasErased && "Expected to drop a reference"); 137 } 138 139 void ReplaceableMetadataImpl::moveRef(void *Ref, void *New, 140 const Metadata &MD) { 141 auto I = UseMap.find(Ref); 142 assert(I != UseMap.end() && "Expected to move a reference"); 143 auto OwnerAndIndex = I->second; 144 UseMap.erase(I); 145 bool WasInserted = UseMap.insert(std::make_pair(New, OwnerAndIndex)).second; 146 (void)WasInserted; 147 assert(WasInserted && "Expected to add a reference"); 148 149 // Check that the references are direct if there's no owner. 150 (void)MD; 151 assert((OwnerAndIndex.first || *static_cast<Metadata **>(Ref) == &MD) && 152 "Reference without owner must be direct"); 153 assert((OwnerAndIndex.first || *static_cast<Metadata **>(New) == &MD) && 154 "Reference without owner must be direct"); 155 } 156 157 void ReplaceableMetadataImpl::replaceAllUsesWith(Metadata *MD) { 158 assert(!(MD && isa<MDNodeFwdDecl>(MD)) && "Expected non-temp node"); 159 160 if (UseMap.empty()) 161 return; 162 163 // Copy out uses since UseMap will get touched below. 164 typedef std::pair<void *, std::pair<OwnerTy, uint64_t>> UseTy; 165 SmallVector<UseTy, 8> Uses(UseMap.begin(), UseMap.end()); 166 std::sort(Uses.begin(), Uses.end(), [](const UseTy &L, const UseTy &R) { 167 return L.second.second < R.second.second; 168 }); 169 for (const auto &Pair : Uses) { 170 OwnerTy Owner = Pair.second.first; 171 if (!Owner) { 172 // Update unowned tracking references directly. 173 Metadata *&Ref = *static_cast<Metadata **>(Pair.first); 174 Ref = MD; 175 if (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(C); 259 else 260 Entry = new LocalAsMetadata(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. 519 if (New == this) { 520 storeDistinctInContext(); 521 setHash(0); 522 if (!isResolved()) 523 resolve(); 524 return; 525 } 526 527 // Re-calculate the hash. 528 setHash(hash_combine_range(op_begin(), op_end())); 529 #ifndef NDEBUG 530 { 531 SmallVector<Metadata *, 8> MDs(op_begin(), op_end()); 532 unsigned RawHash = hash_combine_range(MDs.begin(), MDs.end()); 533 assert(getHash() == RawHash && 534 "Expected hash of MDOperand to equal hash of Metadata*"); 535 } 536 #endif 537 538 // Re-unique the node. 539 GenericMDNodeInfo::KeyTy Key(this); 540 auto I = Store.find_as(Key); 541 if (I == Store.end()) { 542 Store.insert(this); 543 544 if (!isResolved()) { 545 // Check if the last unresolved operand has just been resolved; if so, 546 // resolve this as well. 547 if (isOperandUnresolved(Old)) 548 decrementUnresolvedOperands(); 549 if (isOperandUnresolved(New)) 550 incrementUnresolvedOperands(); 551 if (!hasUnresolvedOperands()) 552 resolve(); 553 } 554 555 return; 556 } 557 558 // Collision. 559 if (!isResolved()) { 560 // Still unresolved, so RAUW. 561 InRAUW = true; 562 ReplaceableUses->replaceAllUsesWith(*I); 563 delete this; 564 return; 565 } 566 567 // Store in non-uniqued form if this node has already been resolved. 568 setHash(0); 569 storeDistinctInContext(); 570 } 571 572 MDNode *MDNode::getMDNode(LLVMContext &Context, ArrayRef<Metadata *> MDs, 573 bool Insert) { 574 auto &Store = Context.pImpl->MDNodeSet; 575 576 GenericMDNodeInfo::KeyTy Key(MDs); 577 auto I = Store.find_as(Key); 578 if (I != Store.end()) 579 return *I; 580 if (!Insert) 581 return nullptr; 582 583 // Coallocate space for the node and Operands together, then placement new. 584 GenericMDNode *N = new (MDs.size()) GenericMDNode(Context, MDs); 585 N->setHash(Key.Hash); 586 Store.insert(N); 587 return N; 588 } 589 590 MDNodeFwdDecl *MDNode::getTemporary(LLVMContext &Context, 591 ArrayRef<Metadata *> MDs) { 592 MDNodeFwdDecl *N = new (MDs.size()) MDNodeFwdDecl(Context, MDs); 593 return N; 594 } 595 596 void MDNode::deleteTemporary(MDNode *N) { 597 assert(isa<MDNodeFwdDecl>(N) && "Expected forward declaration"); 598 delete cast<MDNodeFwdDecl>(N); 599 } 600 601 void MDNode::storeDistinctInContext() { 602 assert(!IsDistinctInContext && "Expected newly distinct metadata"); 603 IsDistinctInContext = true; 604 auto *G = cast<GenericMDNode>(this); 605 G->setHash(0); 606 getContext().pImpl->NonUniquedMDNodes.insert(G); 607 } 608 609 // Replace value from this node's operand list. 610 void MDNode::replaceOperandWith(unsigned I, Metadata *New) { 611 if (getOperand(I) == New) 612 return; 613 614 if (auto *N = dyn_cast<GenericMDNode>(this)) { 615 N->handleChangedOperand(mutable_begin() + I, New); 616 return; 617 } 618 619 assert(isa<MDNodeFwdDecl>(this) && "Expected an MDNode"); 620 setOperand(I, New); 621 } 622 623 void MDNode::setOperand(unsigned I, Metadata *New) { 624 assert(I < NumOperands); 625 if (isStoredDistinctInContext() || isa<MDNodeFwdDecl>(this)) 626 // No need for a callback, this isn't uniqued. 627 mutable_begin()[I].reset(New, nullptr); 628 else 629 mutable_begin()[I].reset(New, this); 630 } 631 632 /// \brief Get a node, or a self-reference that looks like it. 633 /// 634 /// Special handling for finding self-references, for use by \a 635 /// MDNode::concatenate() and \a MDNode::intersect() to maintain behaviour from 636 /// when self-referencing nodes were still uniqued. If the first operand has 637 /// the same operands as \c Ops, return the first operand instead. 638 static MDNode *getOrSelfReference(LLVMContext &Context, 639 ArrayRef<Metadata *> Ops) { 640 if (!Ops.empty()) 641 if (MDNode *N = dyn_cast_or_null<MDNode>(Ops[0])) 642 if (N->getNumOperands() == Ops.size() && N == N->getOperand(0)) { 643 for (unsigned I = 1, E = Ops.size(); I != E; ++I) 644 if (Ops[I] != N->getOperand(I)) 645 return MDNode::get(Context, Ops); 646 return N; 647 } 648 649 return MDNode::get(Context, Ops); 650 } 651 652 MDNode *MDNode::concatenate(MDNode *A, MDNode *B) { 653 if (!A) 654 return B; 655 if (!B) 656 return A; 657 658 SmallVector<Metadata *, 4> MDs(A->getNumOperands() + B->getNumOperands()); 659 660 unsigned j = 0; 661 for (unsigned i = 0, ie = A->getNumOperands(); i != ie; ++i) 662 MDs[j++] = A->getOperand(i); 663 for (unsigned i = 0, ie = B->getNumOperands(); i != ie; ++i) 664 MDs[j++] = B->getOperand(i); 665 666 // FIXME: This preserves long-standing behaviour, but is it really the right 667 // behaviour? Or was that an unintended side-effect of node uniquing? 668 return getOrSelfReference(A->getContext(), MDs); 669 } 670 671 MDNode *MDNode::intersect(MDNode *A, MDNode *B) { 672 if (!A || !B) 673 return nullptr; 674 675 SmallVector<Metadata *, 4> MDs; 676 for (unsigned i = 0, ie = A->getNumOperands(); i != ie; ++i) { 677 Metadata *MD = A->getOperand(i); 678 for (unsigned j = 0, je = B->getNumOperands(); j != je; ++j) 679 if (MD == B->getOperand(j)) { 680 MDs.push_back(MD); 681 break; 682 } 683 } 684 685 // FIXME: This preserves long-standing behaviour, but is it really the right 686 // behaviour? Or was that an unintended side-effect of node uniquing? 687 return getOrSelfReference(A->getContext(), MDs); 688 } 689 690 MDNode *MDNode::getMostGenericFPMath(MDNode *A, MDNode *B) { 691 if (!A || !B) 692 return nullptr; 693 694 APFloat AVal = mdconst::extract<ConstantFP>(A->getOperand(0))->getValueAPF(); 695 APFloat BVal = mdconst::extract<ConstantFP>(B->getOperand(0))->getValueAPF(); 696 if (AVal.compare(BVal) == APFloat::cmpLessThan) 697 return A; 698 return B; 699 } 700 701 static bool isContiguous(const ConstantRange &A, const ConstantRange &B) { 702 return A.getUpper() == B.getLower() || A.getLower() == B.getUpper(); 703 } 704 705 static bool canBeMerged(const ConstantRange &A, const ConstantRange &B) { 706 return !A.intersectWith(B).isEmptySet() || isContiguous(A, B); 707 } 708 709 static bool tryMergeRange(SmallVectorImpl<ConstantInt *> &EndPoints, 710 ConstantInt *Low, ConstantInt *High) { 711 ConstantRange NewRange(Low->getValue(), High->getValue()); 712 unsigned Size = EndPoints.size(); 713 APInt LB = EndPoints[Size - 2]->getValue(); 714 APInt LE = EndPoints[Size - 1]->getValue(); 715 ConstantRange LastRange(LB, LE); 716 if (canBeMerged(NewRange, LastRange)) { 717 ConstantRange Union = LastRange.unionWith(NewRange); 718 Type *Ty = High->getType(); 719 EndPoints[Size - 2] = 720 cast<ConstantInt>(ConstantInt::get(Ty, Union.getLower())); 721 EndPoints[Size - 1] = 722 cast<ConstantInt>(ConstantInt::get(Ty, Union.getUpper())); 723 return true; 724 } 725 return false; 726 } 727 728 static void addRange(SmallVectorImpl<ConstantInt *> &EndPoints, 729 ConstantInt *Low, ConstantInt *High) { 730 if (!EndPoints.empty()) 731 if (tryMergeRange(EndPoints, Low, High)) 732 return; 733 734 EndPoints.push_back(Low); 735 EndPoints.push_back(High); 736 } 737 738 MDNode *MDNode::getMostGenericRange(MDNode *A, MDNode *B) { 739 // Given two ranges, we want to compute the union of the ranges. This 740 // is slightly complitade by having to combine the intervals and merge 741 // the ones that overlap. 742 743 if (!A || !B) 744 return nullptr; 745 746 if (A == B) 747 return A; 748 749 // First, walk both lists in older of the lower boundary of each interval. 750 // At each step, try to merge the new interval to the last one we adedd. 751 SmallVector<ConstantInt *, 4> EndPoints; 752 int AI = 0; 753 int BI = 0; 754 int AN = A->getNumOperands() / 2; 755 int BN = B->getNumOperands() / 2; 756 while (AI < AN && BI < BN) { 757 ConstantInt *ALow = mdconst::extract<ConstantInt>(A->getOperand(2 * AI)); 758 ConstantInt *BLow = mdconst::extract<ConstantInt>(B->getOperand(2 * BI)); 759 760 if (ALow->getValue().slt(BLow->getValue())) { 761 addRange(EndPoints, ALow, 762 mdconst::extract<ConstantInt>(A->getOperand(2 * AI + 1))); 763 ++AI; 764 } else { 765 addRange(EndPoints, BLow, 766 mdconst::extract<ConstantInt>(B->getOperand(2 * BI + 1))); 767 ++BI; 768 } 769 } 770 while (AI < AN) { 771 addRange(EndPoints, mdconst::extract<ConstantInt>(A->getOperand(2 * AI)), 772 mdconst::extract<ConstantInt>(A->getOperand(2 * AI + 1))); 773 ++AI; 774 } 775 while (BI < BN) { 776 addRange(EndPoints, mdconst::extract<ConstantInt>(B->getOperand(2 * BI)), 777 mdconst::extract<ConstantInt>(B->getOperand(2 * BI + 1))); 778 ++BI; 779 } 780 781 // If we have more than 2 ranges (4 endpoints) we have to try to merge 782 // the last and first ones. 783 unsigned Size = EndPoints.size(); 784 if (Size > 4) { 785 ConstantInt *FB = EndPoints[0]; 786 ConstantInt *FE = EndPoints[1]; 787 if (tryMergeRange(EndPoints, FB, FE)) { 788 for (unsigned i = 0; i < Size - 2; ++i) { 789 EndPoints[i] = EndPoints[i + 2]; 790 } 791 EndPoints.resize(Size - 2); 792 } 793 } 794 795 // If in the end we have a single range, it is possible that it is now the 796 // full range. Just drop the metadata in that case. 797 if (EndPoints.size() == 2) { 798 ConstantRange Range(EndPoints[0]->getValue(), EndPoints[1]->getValue()); 799 if (Range.isFullSet()) 800 return nullptr; 801 } 802 803 SmallVector<Metadata *, 4> MDs; 804 MDs.reserve(EndPoints.size()); 805 for (auto *I : EndPoints) 806 MDs.push_back(ConstantAsMetadata::get(I)); 807 return MDNode::get(A->getContext(), MDs); 808 } 809 810 //===----------------------------------------------------------------------===// 811 // NamedMDNode implementation. 812 // 813 814 static SmallVector<TrackingMDRef, 4> &getNMDOps(void *Operands) { 815 return *(SmallVector<TrackingMDRef, 4> *)Operands; 816 } 817 818 NamedMDNode::NamedMDNode(const Twine &N) 819 : Name(N.str()), Parent(nullptr), 820 Operands(new SmallVector<TrackingMDRef, 4>()) {} 821 822 NamedMDNode::~NamedMDNode() { 823 dropAllReferences(); 824 delete &getNMDOps(Operands); 825 } 826 827 unsigned NamedMDNode::getNumOperands() const { 828 return (unsigned)getNMDOps(Operands).size(); 829 } 830 831 MDNode *NamedMDNode::getOperand(unsigned i) const { 832 assert(i < getNumOperands() && "Invalid Operand number!"); 833 auto *N = getNMDOps(Operands)[i].get(); 834 return cast_or_null<MDNode>(N); 835 } 836 837 void NamedMDNode::addOperand(MDNode *M) { getNMDOps(Operands).emplace_back(M); } 838 839 void NamedMDNode::setOperand(unsigned I, MDNode *New) { 840 assert(I < getNumOperands() && "Invalid operand number"); 841 getNMDOps(Operands)[I].reset(New); 842 } 843 844 void NamedMDNode::eraseFromParent() { 845 getParent()->eraseNamedMetadata(this); 846 } 847 848 void NamedMDNode::dropAllReferences() { 849 getNMDOps(Operands).clear(); 850 } 851 852 StringRef NamedMDNode::getName() const { 853 return StringRef(Name); 854 } 855 856 //===----------------------------------------------------------------------===// 857 // Instruction Metadata method implementations. 858 // 859 860 void Instruction::setMetadata(StringRef Kind, MDNode *Node) { 861 if (!Node && !hasMetadata()) 862 return; 863 setMetadata(getContext().getMDKindID(Kind), Node); 864 } 865 866 MDNode *Instruction::getMetadataImpl(StringRef Kind) const { 867 return getMetadataImpl(getContext().getMDKindID(Kind)); 868 } 869 870 void Instruction::dropUnknownMetadata(ArrayRef<unsigned> KnownIDs) { 871 SmallSet<unsigned, 5> KnownSet; 872 KnownSet.insert(KnownIDs.begin(), KnownIDs.end()); 873 874 // Drop debug if needed 875 if (KnownSet.erase(LLVMContext::MD_dbg)) 876 DbgLoc = DebugLoc(); 877 878 if (!hasMetadataHashEntry()) 879 return; // Nothing to remove! 880 881 DenseMap<const Instruction *, LLVMContextImpl::MDMapTy> &MetadataStore = 882 getContext().pImpl->MetadataStore; 883 884 if (KnownSet.empty()) { 885 // Just drop our entry at the store. 886 MetadataStore.erase(this); 887 setHasMetadataHashEntry(false); 888 return; 889 } 890 891 LLVMContextImpl::MDMapTy &Info = MetadataStore[this]; 892 unsigned I; 893 unsigned E; 894 // Walk the array and drop any metadata we don't know. 895 for (I = 0, E = Info.size(); I != E;) { 896 if (KnownSet.count(Info[I].first)) { 897 ++I; 898 continue; 899 } 900 901 Info[I] = std::move(Info.back()); 902 Info.pop_back(); 903 --E; 904 } 905 assert(E == Info.size()); 906 907 if (E == 0) { 908 // Drop our entry at the store. 909 MetadataStore.erase(this); 910 setHasMetadataHashEntry(false); 911 } 912 } 913 914 /// setMetadata - Set the metadata of of the specified kind to the specified 915 /// node. This updates/replaces metadata if already present, or removes it if 916 /// Node is null. 917 void Instruction::setMetadata(unsigned KindID, MDNode *Node) { 918 if (!Node && !hasMetadata()) 919 return; 920 921 // Handle 'dbg' as a special case since it is not stored in the hash table. 922 if (KindID == LLVMContext::MD_dbg) { 923 DbgLoc = DebugLoc::getFromDILocation(Node); 924 return; 925 } 926 927 // Handle the case when we're adding/updating metadata on an instruction. 928 if (Node) { 929 LLVMContextImpl::MDMapTy &Info = getContext().pImpl->MetadataStore[this]; 930 assert(!Info.empty() == hasMetadataHashEntry() && 931 "HasMetadata bit is wonked"); 932 if (Info.empty()) { 933 setHasMetadataHashEntry(true); 934 } else { 935 // Handle replacement of an existing value. 936 for (auto &P : Info) 937 if (P.first == KindID) { 938 P.second.reset(Node); 939 return; 940 } 941 } 942 943 // No replacement, just add it to the list. 944 Info.emplace_back(std::piecewise_construct, std::make_tuple(KindID), 945 std::make_tuple(Node)); 946 return; 947 } 948 949 // Otherwise, we're removing metadata from an instruction. 950 assert((hasMetadataHashEntry() == 951 (getContext().pImpl->MetadataStore.count(this) > 0)) && 952 "HasMetadata bit out of date!"); 953 if (!hasMetadataHashEntry()) 954 return; // Nothing to remove! 955 LLVMContextImpl::MDMapTy &Info = getContext().pImpl->MetadataStore[this]; 956 957 // Common case is removing the only entry. 958 if (Info.size() == 1 && Info[0].first == KindID) { 959 getContext().pImpl->MetadataStore.erase(this); 960 setHasMetadataHashEntry(false); 961 return; 962 } 963 964 // Handle removal of an existing value. 965 for (unsigned i = 0, e = Info.size(); i != e; ++i) 966 if (Info[i].first == KindID) { 967 Info[i] = std::move(Info.back()); 968 Info.pop_back(); 969 assert(!Info.empty() && "Removing last entry should be handled above"); 970 return; 971 } 972 // Otherwise, removing an entry that doesn't exist on the instruction. 973 } 974 975 void Instruction::setAAMetadata(const AAMDNodes &N) { 976 setMetadata(LLVMContext::MD_tbaa, N.TBAA); 977 setMetadata(LLVMContext::MD_alias_scope, N.Scope); 978 setMetadata(LLVMContext::MD_noalias, N.NoAlias); 979 } 980 981 MDNode *Instruction::getMetadataImpl(unsigned KindID) const { 982 // Handle 'dbg' as a special case since it is not stored in the hash table. 983 if (KindID == LLVMContext::MD_dbg) 984 return DbgLoc.getAsMDNode(); 985 986 if (!hasMetadataHashEntry()) return nullptr; 987 988 LLVMContextImpl::MDMapTy &Info = getContext().pImpl->MetadataStore[this]; 989 assert(!Info.empty() && "bit out of sync with hash table"); 990 991 for (const auto &I : Info) 992 if (I.first == KindID) 993 return I.second; 994 return nullptr; 995 } 996 997 void Instruction::getAllMetadataImpl( 998 SmallVectorImpl<std::pair<unsigned, MDNode *>> &Result) const { 999 Result.clear(); 1000 1001 // Handle 'dbg' as a special case since it is not stored in the hash table. 1002 if (!DbgLoc.isUnknown()) { 1003 Result.push_back( 1004 std::make_pair((unsigned)LLVMContext::MD_dbg, DbgLoc.getAsMDNode())); 1005 if (!hasMetadataHashEntry()) return; 1006 } 1007 1008 assert(hasMetadataHashEntry() && 1009 getContext().pImpl->MetadataStore.count(this) && 1010 "Shouldn't have called this"); 1011 const LLVMContextImpl::MDMapTy &Info = 1012 getContext().pImpl->MetadataStore.find(this)->second; 1013 assert(!Info.empty() && "Shouldn't have called this"); 1014 1015 Result.reserve(Result.size() + Info.size()); 1016 for (auto &I : Info) 1017 Result.push_back(std::make_pair(I.first, cast<MDNode>(I.second.get()))); 1018 1019 // Sort the resulting array so it is stable. 1020 if (Result.size() > 1) 1021 array_pod_sort(Result.begin(), Result.end()); 1022 } 1023 1024 void Instruction::getAllMetadataOtherThanDebugLocImpl( 1025 SmallVectorImpl<std::pair<unsigned, MDNode *>> &Result) const { 1026 Result.clear(); 1027 assert(hasMetadataHashEntry() && 1028 getContext().pImpl->MetadataStore.count(this) && 1029 "Shouldn't have called this"); 1030 const LLVMContextImpl::MDMapTy &Info = 1031 getContext().pImpl->MetadataStore.find(this)->second; 1032 assert(!Info.empty() && "Shouldn't have called this"); 1033 Result.reserve(Result.size() + Info.size()); 1034 for (auto &I : Info) 1035 Result.push_back(std::make_pair(I.first, cast<MDNode>(I.second.get()))); 1036 1037 // Sort the resulting array so it is stable. 1038 if (Result.size() > 1) 1039 array_pod_sort(Result.begin(), Result.end()); 1040 } 1041 1042 /// clearMetadataHashEntries - Clear all hashtable-based metadata from 1043 /// this instruction. 1044 void Instruction::clearMetadataHashEntries() { 1045 assert(hasMetadataHashEntry() && "Caller should check"); 1046 getContext().pImpl->MetadataStore.erase(this); 1047 setHasMetadataHashEntry(false); 1048 } 1049