LCOV - code coverage report
Current view: top level - lib/IR - Value.cpp (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 370 387 95.6 %
Date: 2018-10-20 13:21:21 Functions: 42 44 95.5 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===-- Value.cpp - Implement the Value class -----------------------------===//
       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 Value, ValueHandle, and User classes.
      11             : //
      12             : //===----------------------------------------------------------------------===//
      13             : 
      14             : #include "llvm/IR/Value.h"
      15             : #include "LLVMContextImpl.h"
      16             : #include "llvm/ADT/DenseMap.h"
      17             : #include "llvm/ADT/SmallString.h"
      18             : #include "llvm/ADT/SetVector.h"
      19             : #include "llvm/IR/CallSite.h"
      20             : #include "llvm/IR/Constant.h"
      21             : #include "llvm/IR/Constants.h"
      22             : #include "llvm/IR/DataLayout.h"
      23             : #include "llvm/IR/DerivedTypes.h"
      24             : #include "llvm/IR/DerivedUser.h"
      25             : #include "llvm/IR/GetElementPtrTypeIterator.h"
      26             : #include "llvm/IR/InstrTypes.h"
      27             : #include "llvm/IR/Instructions.h"
      28             : #include "llvm/IR/IntrinsicInst.h"
      29             : #include "llvm/IR/Module.h"
      30             : #include "llvm/IR/Operator.h"
      31             : #include "llvm/IR/Statepoint.h"
      32             : #include "llvm/IR/ValueHandle.h"
      33             : #include "llvm/IR/ValueSymbolTable.h"
      34             : #include "llvm/Support/Debug.h"
      35             : #include "llvm/Support/ErrorHandling.h"
      36             : #include "llvm/Support/ManagedStatic.h"
      37             : #include "llvm/Support/raw_ostream.h"
      38             : #include <algorithm>
      39             : 
      40             : using namespace llvm;
      41             : 
      42             : static cl::opt<unsigned> NonGlobalValueMaxNameSize(
      43             :     "non-global-value-max-name-size", cl::Hidden, cl::init(1024),
      44             :     cl::desc("Maximum size for the name of non-global values."));
      45             : 
      46             : //===----------------------------------------------------------------------===//
      47             : //                                Value Class
      48             : //===----------------------------------------------------------------------===//
      49             : static inline Type *checkType(Type *Ty) {
      50             :   assert(Ty && "Value defined with a null type: Error!");
      51             :   return Ty;
      52             : }
      53             : 
      54    83684603 : Value::Value(Type *ty, unsigned scid)
      55             :     : VTy(checkType(ty)), UseList(nullptr), SubclassID(scid),
      56             :       HasValueHandle(0), SubclassOptionalData(0), SubclassData(0),
      57    83684603 :       NumUserOperands(0), IsUsedByMD(false), HasName(false) {
      58             :   static_assert(ConstantFirstVal == 0, "!(SubclassID < ConstantFirstVal)");
      59             :   // FIXME: Why isn't this in the subclass gunk??
      60             :   // Note, we cannot call isa<CallInst> before the CallInst has been
      61             :   // constructed.
      62             :   if (SubclassID == Instruction::Call || SubclassID == Instruction::Invoke)
      63             :     assert((VTy->isFirstClassType() || VTy->isVoidTy() || VTy->isStructTy()) &&
      64             :            "invalid CallInst type!");
      65             :   else if (SubclassID != BasicBlockVal &&
      66             :            (/*SubclassID < ConstantFirstVal ||*/ SubclassID > ConstantLastVal))
      67             :     assert((VTy->isFirstClassType() || VTy->isVoidTy()) &&
      68             :            "Cannot create non-first-class values except for constants!");
      69             :   static_assert(sizeof(Value) == 2 * sizeof(void *) + 2 * sizeof(unsigned),
      70             :                 "Value too big");
      71    83684603 : }
      72             : 
      73    85009632 : Value::~Value() {
      74             :   // Notify all ValueHandles (if present) that this value is going away.
      75    42504816 :   if (HasValueHandle)
      76      684924 :     ValueHandleBase::ValueIsDeleted(this);
      77    42504816 :   if (isUsedByMetadata())
      78      144614 :     ValueAsMetadata::handleDeletion(this);
      79             : 
      80             : #ifndef NDEBUG      // Only in -g mode...
      81             :   // Check to make sure that there are no uses of this value that are still
      82             :   // around when the value is destroyed.  If there are, then we have a dangling
      83             :   // reference and something is wrong.  This code is here to print out where
      84             :   // the value is still being referenced.
      85             :   //
      86             :   if (!use_empty()) {
      87             :     dbgs() << "While deleting: " << *VTy << " %" << getName() << "\n";
      88             :     for (auto *U : users())
      89             :       dbgs() << "Use still stuck around after Def is destroyed:" << *U << "\n";
      90             :   }
      91             : #endif
      92             :   assert(use_empty() && "Uses remain when a value is destroyed!");
      93             : 
      94             :   // If this value is named, destroy the name.  This should not be in a symtab
      95             :   // at this point.
      96    42504816 :   destroyValueName();
      97    42504816 : }
      98             : 
      99    33036549 : void Value::deleteValue() {
     100    66073098 :   switch (getValueID()) {
     101             : #define HANDLE_VALUE(Name)                                                     \
     102             :   case Value::Name##Val:                                                       \
     103             :     delete static_cast<Name *>(this);                                          \
     104             :     break;
     105             : #define HANDLE_MEMORY_VALUE(Name)                                              \
     106             :   case Value::Name##Val:                                                       \
     107             :     static_cast<DerivedUser *>(this)->DeleteValue(                             \
     108             :         static_cast<DerivedUser *>(this));                                     \
     109             :     break;
     110             : #define HANDLE_INSTRUCTION(Name)  /* nothing */
     111             : #include "llvm/IR/Value.def"
     112             : 
     113             : #define HANDLE_INST(N, OPC, CLASS)                                             \
     114             :   case Value::InstructionVal + Instruction::OPC:                               \
     115             :     delete static_cast<CLASS *>(this);                                         \
     116             :     break;
     117             : #define HANDLE_USER_INST(N, OPC, CLASS)
     118             : #include "llvm/IR/Instruction.def"
     119             : 
     120           0 :   default:
     121           0 :     llvm_unreachable("attempting to delete unknown value kind");
     122             :   }
     123    33036550 : }
     124             : 
     125    45516006 : void Value::destroyValueName() {
     126    45516006 :   ValueName *Name = getValueName();
     127    45516006 :   if (Name)
     128             :     Name->Destroy();
     129    45516006 :   setValueName(nullptr);
     130    45516006 : }
     131             : 
     132       86207 : bool Value::hasNUses(unsigned N) const {
     133             :   const_use_iterator UI = use_begin(), E = use_end();
     134             : 
     135      242890 :   for (; N; --N, ++UI)
     136      172285 :     if (UI == E) return false;  // Too few.
     137       70605 :   return UI == E;
     138             : }
     139             : 
     140         874 : bool Value::hasNUsesOrMore(unsigned N) const {
     141             :   const_use_iterator UI = use_begin(), E = use_end();
     142             : 
     143        2783 :   for (; N; --N, ++UI)
     144        2534 :     if (UI == E) return false;  // Too few.
     145             : 
     146             :   return true;
     147             : }
     148             : 
     149       58332 : bool Value::isUsedInBasicBlock(const BasicBlock *BB) const {
     150             :   // This can be computed either by scanning the instructions in BB, or by
     151             :   // scanning the use list of this Value. Both lists can be very long, but
     152             :   // usually one is quite short.
     153             :   //
     154             :   // Scan both lists simultaneously until one is exhausted. This limits the
     155             :   // search to the shorter list.
     156             :   BasicBlock::const_iterator BI = BB->begin(), BE = BB->end();
     157             :   const_user_iterator UI = user_begin(), UE = user_end();
     158      169191 :   for (; BI != BE && UI != UE; ++BI, ++UI) {
     159             :     // Scan basic block: Check if this Value is used by the instruction at BI.
     160      467115 :     if (is_contained(BI->operands(), this))
     161             :       return true;
     162             :     // Scan use list: Check if the use at UI is in BB.
     163             :     const auto *User = dyn_cast<Instruction>(*UI);
     164      144061 :     if (User && User->getParent() == BB)
     165             :       return true;
     166             :   }
     167             :   return false;
     168             : }
     169             : 
     170        2795 : unsigned Value::getNumUses() const {
     171        2795 :   return (unsigned)std::distance(use_begin(), use_end());
     172             : }
     173             : 
     174     5871394 : static bool getSymTab(Value *V, ValueSymbolTable *&ST) {
     175     5871394 :   ST = nullptr;
     176             :   if (Instruction *I = dyn_cast<Instruction>(V)) {
     177     2092850 :     if (BasicBlock *P = I->getParent())
     178     1866587 :       if (Function *PP = P->getParent())
     179     1864594 :         ST = PP->getValueSymbolTable();
     180             :   } else if (BasicBlock *BB = dyn_cast<BasicBlock>(V)) {
     181      663824 :     if (Function *P = BB->getParent())
     182      364836 :       ST = P->getValueSymbolTable();
     183             :   } else if (GlobalValue *GV = dyn_cast<GlobalValue>(V)) {
     184     1842519 :     if (Module *P = GV->getParent())
     185        7779 :       ST = &P->getValueSymbolTable();
     186             :   } else if (Argument *A = dyn_cast<Argument>(V)) {
     187     1271893 :     if (Function *P = A->getParent())
     188     1255237 :       ST = P->getValueSymbolTable();
     189             :   } else {
     190             :     assert(isa<Constant>(V) && "Unknown value type!");
     191             :     return true;  // no name is setable for this.
     192             :   }
     193             :   return false;
     194             : }
     195             : 
     196   226697068 : ValueName *Value::getValueName() const {
     197   226697068 :   if (!HasName) return nullptr;
     198             : 
     199   185844629 :   LLVMContext &Ctx = getContext();
     200   185844782 :   auto I = Ctx.pImpl->ValueNames.find(this);
     201             :   assert(I != Ctx.pImpl->ValueNames.end() &&
     202             :          "No name entry found!");
     203             : 
     204   185844788 :   return I->second;
     205             : }
     206             : 
     207    51016778 : void Value::setValueName(ValueName *VN) {
     208    51016778 :   LLVMContext &Ctx = getContext();
     209             : 
     210             :   assert(HasName == Ctx.pImpl->ValueNames.count(this) &&
     211             :          "HasName bit out of sync!");
     212             : 
     213    51016778 :   if (!VN) {
     214    45528399 :     if (HasName)
     215     4675960 :       Ctx.pImpl->ValueNames.erase(this);
     216    45528399 :     HasName = false;
     217    45528399 :     return;
     218             :   }
     219             : 
     220     5488379 :   HasName = true;
     221     5488379 :   Ctx.pImpl->ValueNames[this] = VN;
     222             : }
     223             : 
     224   178235156 : StringRef Value::getName() const {
     225             :   // Make sure the empty string is still a C string. For historical reasons,
     226             :   // some clients want to call .data() on the result and expect it to be null
     227             :   // terminated.
     228   178235156 :   if (!hasName())
     229     6817223 :     return StringRef("", 0);
     230   171417933 :   return getValueName()->getKey();
     231             : }
     232             : 
     233    74371588 : void Value::setNameImpl(const Twine &NewName) {
     234             :   // Fast-path: LLVMContext can be set to strip out non-GlobalValue names
     235    74371588 :   if (getContext().shouldDiscardValueNames() && !isa<GlobalValue>(this))
     236    71528218 :     return;
     237             : 
     238             :   // Fast path for common IRBuilder case of setName("") when there is no name.
     239     6439523 :   if (NewName.isTriviallyEmpty() && !hasName())
     240             :     return;
     241             : 
     242             :   SmallString<256> NameData;
     243     5880795 :   StringRef NameRef = NewName.toStringRef(NameData);
     244             :   assert(NameRef.find_first_of(0) == StringRef::npos &&
     245             :          "Null bytes are not allowed in names");
     246             : 
     247             :   // Name isn't changing?
     248     5880795 :   if (getName() == NameRef)
     249             :     return;
     250             : 
     251             :   // Cap the size of non-GlobalValue names.
     252     5846118 :   if (NameRef.size() > NonGlobalValueMaxNameSize && !isa<GlobalValue>(this))
     253             :     NameRef =
     254          13 :         NameRef.substr(0, std::max(1u, (unsigned)NonGlobalValueMaxNameSize));
     255             : 
     256             :   assert(!getType()->isVoidTy() && "Cannot assign a name to void values!");
     257             : 
     258             :   // Get the symbol table to update for this object.
     259             :   ValueSymbolTable *ST;
     260     5846118 :   if (getSymTab(this, ST))
     261             :     return;  // Cannot set a name on this value (e.g. constant).
     262             : 
     263     5845813 :   if (!ST) { // No symbol table to update?  Just do the change.
     264     2370785 :     if (NameRef.empty()) {
     265             :       // Free the name for this value.
     266           0 :       destroyValueName();
     267           0 :       return;
     268             :     }
     269             : 
     270             :     // NOTE: Could optimize for the case the name is shrinking to not deallocate
     271             :     // then reallocated.
     272     2370785 :     destroyValueName();
     273             : 
     274             :     // Create the new name.
     275     2370785 :     setValueName(ValueName::Create(NameRef));
     276     2370785 :     getValueName()->setValue(this);
     277     2370785 :     return;
     278             :   }
     279             : 
     280             :   // NOTE: Could optimize for the case the name is shrinking to not deallocate
     281             :   // then reallocated.
     282     3475028 :   if (hasName()) {
     283             :     // Remove old name.
     284      639094 :     ST->removeValueName(getValueName());
     285      639094 :     destroyValueName();
     286             : 
     287      639094 :     if (NameRef.empty())
     288             :       return;
     289             :   }
     290             : 
     291             :   // Name is changing to something new.
     292     2843371 :   setValueName(ST->createValueName(NameRef, this));
     293             : }
     294             : 
     295    74371588 : void Value::setName(const Twine &NewName) {
     296    74371588 :   setNameImpl(NewName);
     297             :   if (Function *F = dyn_cast<Function>(this))
     298     1465796 :     F->recalculateIntrinsicID();
     299    74371589 : }
     300             : 
     301      203988 : void Value::takeName(Value *V) {
     302      203988 :   ValueSymbolTable *ST = nullptr;
     303             :   // If this value has a name, drop it.
     304      203988 :   if (hasName()) {
     305             :     // Get the symtab this is in.
     306        1311 :     if (getSymTab(this, ST)) {
     307             :       // We can't set a name on this value, but we need to clear V's name if
     308             :       // it has one.
     309           0 :       if (V->hasName()) V->setName("");
     310      196292 :       return;  // Cannot set a name on this value (e.g. constant).
     311             :     }
     312             : 
     313             :     // Remove old name.
     314        1311 :     if (ST)
     315         825 :       ST->removeValueName(getValueName());
     316        1311 :     destroyValueName();
     317             :   }
     318             : 
     319             :   // Now we know that this has no name.
     320             : 
     321             :   // If V has no name either, we're done.
     322      203988 :   if (!V->hasName()) return;
     323             : 
     324             :   // Get this's symtab if we didn't before.
     325       12396 :   if (!ST) {
     326       11572 :     if (getSymTab(this, ST)) {
     327             :       // Clear V's name.
     328           3 :       V->setName("");
     329           3 :       return;  // Cannot set a name on this value (e.g. constant).
     330             :     }
     331             :   }
     332             : 
     333             :   // Get V's ST, this should always succed, because V has a name.
     334             :   ValueSymbolTable *VST;
     335       12393 :   bool Failure = getSymTab(V, VST);
     336             :   assert(!Failure && "V has a name, so it should have a ST!"); (void)Failure;
     337             : 
     338             :   // If these values are both in the same symtab, we can do this very fast.
     339             :   // This works even if both values have no symtab yet.
     340       12393 :   if (ST == VST) {
     341             :     // Take the name!
     342        4697 :     setValueName(V->getValueName());
     343        4697 :     V->setValueName(nullptr);
     344        4697 :     getValueName()->setValue(this);
     345        4697 :     return;
     346             :   }
     347             : 
     348             :   // Otherwise, things are slightly more complex.  Remove V's name from VST and
     349             :   // then reinsert it into ST.
     350             : 
     351        7696 :   if (VST)
     352        7541 :     VST->removeValueName(V->getValueName());
     353        7696 :   setValueName(V->getValueName());
     354        7696 :   V->setValueName(nullptr);
     355        7696 :   getValueName()->setValue(this);
     356             : 
     357        7696 :   if (ST)
     358         482 :     ST->reinsertValue(this);
     359             : }
     360             : 
     361           0 : void Value::assertModuleIsMaterializedImpl() const {
     362             : #ifndef NDEBUG
     363             :   const GlobalValue *GV = dyn_cast<GlobalValue>(this);
     364             :   if (!GV)
     365             :     return;
     366             :   const Module *M = GV->getParent();
     367             :   if (!M)
     368             :     return;
     369             :   assert(M->isMaterialized());
     370             : #endif
     371           0 : }
     372             : 
     373             : #ifndef NDEBUG
     374             : static bool contains(SmallPtrSetImpl<ConstantExpr *> &Cache, ConstantExpr *Expr,
     375             :                      Constant *C) {
     376             :   if (!Cache.insert(Expr).second)
     377             :     return false;
     378             : 
     379             :   for (auto &O : Expr->operands()) {
     380             :     if (O == C)
     381             :       return true;
     382             :     auto *CE = dyn_cast<ConstantExpr>(O);
     383             :     if (!CE)
     384             :       continue;
     385             :     if (contains(Cache, CE, C))
     386             :       return true;
     387             :   }
     388             :   return false;
     389             : }
     390             : 
     391             : static bool contains(Value *Expr, Value *V) {
     392             :   if (Expr == V)
     393             :     return true;
     394             : 
     395             :   auto *C = dyn_cast<Constant>(V);
     396             :   if (!C)
     397             :     return false;
     398             : 
     399             :   auto *CE = dyn_cast<ConstantExpr>(Expr);
     400             :   if (!CE)
     401             :     return false;
     402             : 
     403             :   SmallPtrSet<ConstantExpr *, 4> Cache;
     404             :   return contains(Cache, CE, C);
     405             : }
     406             : #endif // NDEBUG
     407             : 
     408     4663851 : void Value::doRAUW(Value *New, ReplaceMetadataUses ReplaceMetaUses) {
     409             :   assert(New && "Value::replaceAllUsesWith(<null>) is invalid!");
     410             :   assert(!contains(New, this) &&
     411             :          "this->replaceAllUsesWith(expr(this)) is NOT valid!");
     412             :   assert(New->getType() == getType() &&
     413             :          "replaceAllUses of value with new value of different type!");
     414             : 
     415             :   // Notify all ValueHandles (if present) that this value is going away.
     416     4663851 :   if (HasValueHandle)
     417      252212 :     ValueHandleBase::ValueIsRAUWd(this, New);
     418     4663851 :   if (ReplaceMetaUses == ReplaceMetadataUses::Yes && isUsedByMetadata())
     419       30558 :     ValueAsMetadata::handleRAUW(this, New);
     420             : 
     421     8577690 :   while (!materialized_use_empty()) {
     422             :     Use &U = *UseList;
     423             :     // Must handle Constants specially, we cannot call replaceUsesOfWith on a
     424             :     // constant because they are uniqued.
     425     3913839 :     if (auto *C = dyn_cast<Constant>(U.getUser())) {
     426             :       if (!isa<GlobalValue>(C)) {
     427        8574 :         C->handleOperandChange(this, New);
     428             :         continue;
     429             :       }
     430             :     }
     431             : 
     432     3905265 :     U.set(New);
     433             :   }
     434             : 
     435             :   if (BasicBlock *BB = dyn_cast<BasicBlock>(this))
     436     1485629 :     BB->replaceSuccessorsPhiUsesWith(cast<BasicBlock>(New));
     437     4663851 : }
     438             : 
     439     4663799 : void Value::replaceAllUsesWith(Value *New) {
     440     4663799 :   doRAUW(New, ReplaceMetadataUses::Yes);
     441     4663799 : }
     442             : 
     443          52 : void Value::replaceNonMetadataUsesWith(Value *New) {
     444          52 :   doRAUW(New, ReplaceMetadataUses::No);
     445          52 : }
     446             : 
     447             : // Like replaceAllUsesWith except it does not handle constants or basic blocks.
     448             : // This routine leaves uses within BB.
     449          40 : void Value::replaceUsesOutsideBlock(Value *New, BasicBlock *BB) {
     450             :   assert(New && "Value::replaceUsesOutsideBlock(<null>, BB) is invalid!");
     451             :   assert(!contains(New, this) &&
     452             :          "this->replaceUsesOutsideBlock(expr(this), BB) is NOT valid!");
     453             :   assert(New->getType() == getType() &&
     454             :          "replaceUses of value with new value of different type!");
     455             :   assert(BB && "Basic block that may contain a use of 'New' must be defined\n");
     456             : 
     457             :   use_iterator UI = use_begin(), E = use_end();
     458         122 :   for (; UI != E;) {
     459             :     Use &U = *UI;
     460             :     ++UI;
     461          82 :     auto *Usr = dyn_cast<Instruction>(U.getUser());
     462          82 :     if (Usr && Usr->getParent() == BB)
     463             :       continue;
     464          40 :     U.set(New);
     465             :   }
     466          40 : }
     467             : 
     468             : namespace {
     469             : // Various metrics for how much to strip off of pointers.
     470             : enum PointerStripKind {
     471             :   PSK_ZeroIndices,
     472             :   PSK_ZeroIndicesAndAliases,
     473             :   PSK_ZeroIndicesAndAliasesAndInvariantGroups,
     474             :   PSK_InBoundsConstantIndices,
     475             :   PSK_InBounds
     476             : };
     477             : 
     478             : template <PointerStripKind StripKind>
     479   177535209 : static const Value *stripPointerCastsAndOffsets(const Value *V) {
     480   355070418 :   if (!V->getType()->isPointerTy())
     481             :     return V;
     482             : 
     483             :   // Even though we don't look through PHI nodes, we could be called on an
     484             :   // instruction in an unreachable block, which may be on a cycle.
     485             :   SmallPtrSet<const Value *, 4> Visited;
     486             : 
     487   175300479 :   Visited.insert(V);
     488             :   do {
     489             :     if (auto *GEP = dyn_cast<GEPOperator>(V)) {
     490             :       switch (StripKind) {
     491    87840544 :       case PSK_ZeroIndicesAndAliases:
     492             :       case PSK_ZeroIndicesAndAliasesAndInvariantGroups:
     493             :       case PSK_ZeroIndices:
     494    87840544 :         if (!GEP->hasAllZeroIndices())
     495    66573312 :           return V;
     496             :         break;
     497          22 :       case PSK_InBoundsConstantIndices:
     498          22 :         if (!GEP->hasAllConstantIndices())
     499           6 :           return V;
     500             :         LLVM_FALLTHROUGH;
     501             :       case PSK_InBounds:
     502        6442 :         if (!GEP->isInBounds())
     503         156 :           return V;
     504             :         break;
     505             :       }
     506             :       V = GEP->getPointerOperand();
     507    53865708 :     } else if (Operator::getOpcode(V) == Instruction::BitCast ||
     508             :                Operator::getOpcode(V) == Instruction::AddrSpaceCast) {
     509    13873891 :       V = cast<Operator>(V)->getOperand(0);
     510             :     } else if (auto *GA = dyn_cast<GlobalAlias>(V)) {
     511             :       if (StripKind == PSK_ZeroIndices || GA->isInterposable())
     512         156 :         return V;
     513             :       V = GA->getAliasee();
     514             :     } else {
     515   108727080 :       if (auto CS = ImmutableCallSite(V)) {
     516      498550 :         if (const Value *RV = CS.getReturnedArgOperand()) {
     517             :           V = RV;
     518         260 :           continue;
     519             :         }
     520             :         // The result of launder.invariant.group must alias it's argument,
     521             :         // but it can't be marked with returned attribute, that's why it needs
     522             :         // special case.
     523             :         if (StripKind == PSK_ZeroIndicesAndAliasesAndInvariantGroups &&
     524      486558 :             (CS.getIntrinsicID() == Intrinsic::launder_invariant_group ||
     525             :              CS.getIntrinsicID() == Intrinsic::strip_invariant_group)) {
     526         103 :           V = CS.getArgOperand(0);
     527         103 :           continue;
     528             :         }
     529             :       }
     530   108726820 :       return V;
     531             :     }
     532             :     assert(V->getType()->isPointerTy() && "Unexpected operand type!");
     533    35148085 :   } while (Visited.insert(V).second);
     534             : 
     535             :   return V;
     536             : }
     537      106918 : } // end anonymous namespace
     538      213836 : 
     539             : const Value *Value::stripPointerCasts() const {
     540             :   return stripPointerCastsAndOffsets<PSK_ZeroIndicesAndAliases>(this);
     541             : }
     542             : 
     543             : const Value *Value::stripPointerCastsNoFollowAliases() const {
     544             :   return stripPointerCastsAndOffsets<PSK_ZeroIndices>(this);
     545      106918 : }
     546             : 
     547             : const Value *Value::stripInBoundsConstantOffsets() const {
     548             :   return stripPointerCastsAndOffsets<PSK_InBoundsConstantIndices>(this);
     549             : }
     550             : 
     551             : const Value *Value::stripPointerCastsAndInvariantGroups() const {
     552             :   return stripPointerCastsAndOffsets<PSK_ZeroIndicesAndAliasesAndInvariantGroups>(
     553             :       this);
     554             : }
     555             : 
     556             : const Value *
     557             : Value::stripAndAccumulateInBoundsConstantOffsets(const DataLayout &DL,
     558             :                                                  APInt &Offset) const {
     559             :   if (!getType()->isPointerTy())
     560        6426 :     return this;
     561         156 : 
     562             :   assert(Offset.getBitWidth() == DL.getIndexSizeInBits(cast<PointerType>(
     563             :                                      getType())->getAddressSpace()) &&
     564             :          "The offset bit width does not match the DL specification.");
     565       75931 : 
     566             :   // Even though we don't look through PHI nodes, we could be called on an
     567        6767 :   // instruction in an unreachable block, which may be on a cycle.
     568             :   SmallPtrSet<const Value *, 4> Visited;
     569             :   Visited.insert(this);
     570           1 :   const Value *V = this;
     571             :   do {
     572             :     if (auto *GEP = dyn_cast<GEPOperator>(V)) {
     573      106759 :       if (!GEP->isInBounds())
     574        3827 :         return V;
     575             :       APInt GEPOffset(Offset);
     576           0 :       if (!GEP->accumulateConstantOffset(DL, GEPOffset))
     577             :         return V;
     578             :       Offset = GEPOffset;
     579             :       V = GEP->getPointerOperand();
     580             :     } else if (Operator::getOpcode(V) == Instruction::BitCast) {
     581             :       V = cast<Operator>(V)->getOperand(0);
     582             :     } else if (auto *GA = dyn_cast<GlobalAlias>(V)) {
     583             :       V = GA->getAliasee();
     584             :     } else {
     585             :       if (auto CS = ImmutableCallSite(V))
     586             :         if (const Value *RV = CS.getReturnedArgOperand()) {
     587             :           V = RV;
     588      106759 :           continue;
     589             :         }
     590             : 
     591       13267 :       return V;
     592             :     }
     593             :     assert(V->getType()->isPointerTy() && "Unexpected operand type!");
     594             :   } while (Visited.insert(V).second);
     595    93633324 : 
     596   187266648 :   return V;
     597             : }
     598             : 
     599             : const Value *Value::stripInBoundsOffsets() const {
     600             :   return stripPointerCastsAndOffsets<PSK_InBounds>(this);
     601             : }
     602             : 
     603    93633248 : uint64_t Value::getPointerDereferenceableBytes(const DataLayout &DL,
     604             :                                                bool &CanBeNull) const {
     605             :   assert(getType()->isPointerTy() && "must be pointer");
     606             : 
     607    61612629 :   uint64_t DerefBytes = 0;
     608             :   CanBeNull = false;
     609             :   if (const Argument *A = dyn_cast<Argument>(this)) {
     610    61612629 :     DerefBytes = A->getDereferenceableBytes();
     611    49517599 :     if (DerefBytes == 0 && (A->hasByValAttr() || A->hasStructRetAttr())) {
     612             :       Type *PT = cast<PointerType>(A->getType())->getElementType();
     613             :       if (PT->isSized())
     614             :         DerefBytes = DL.getTypeStoreSize(PT);
     615             :     }
     616             :     if (DerefBytes == 0) {
     617             :       DerefBytes = A->getDereferenceableOrNullBytes();
     618             :       CanBeNull = true;
     619             :     }
     620             :   } else if (auto CS = ImmutableCallSite(this)) {
     621             :     DerefBytes = CS.getDereferenceableBytes(AttributeList::ReturnIndex);
     622             :     if (DerefBytes == 0) {
     623    32214572 :       DerefBytes = CS.getDereferenceableOrNullBytes(AttributeList::ReturnIndex);
     624             :       CanBeNull = true;
     625     7347243 :     }
     626             :   } else if (const LoadInst *LI = dyn_cast<LoadInst>(this)) {
     627             :     if (MDNode *MD = LI->getMetadata(LLVMContext::MD_dereferenceable)) {
     628           0 :       ConstantInt *CI = mdconst::extract<ConstantInt>(MD->getOperand(0));
     629             :       DerefBytes = CI->getLimitedValue();
     630             :     }
     631    44115797 :     if (DerefBytes == 0) {
     632      245232 :       if (MDNode *MD =
     633             :               LI->getMetadata(LLVMContext::MD_dereferenceable_or_null)) {
     634         166 :         ConstantInt *CI = mdconst::extract<ConstantInt>(MD->getOperand(0));
     635             :         DerefBytes = CI->getLimitedValue();
     636             :       }
     637             :       CanBeNull = true;
     638             :     }
     639             :   } else if (auto *AI = dyn_cast<AllocaInst>(this)) {
     640      486558 :     if (!AI->isArrayAllocation()) {
     641             :       DerefBytes = DL.getTypeStoreSize(AI->getAllocatedType());
     642         103 :       CanBeNull = false;
     643         103 :     }
     644             :   } else if (auto *GV = dyn_cast<GlobalVariable>(this)) {
     645             :     if (GV->getValueType()->isSized() && !GV->hasExternalWeakLinkage()) {
     646    44115631 :       // TODO: Don't outright reject hasExternalWeakLinkage but set the
     647             :       // CanBeNull flag.
     648             :       DerefBytes = DL.getTypeStoreSize(GV->getValueType());
     649    19442439 :       CanBeNull = false;
     650             :     }
     651             :   }
     652             :   return DerefBytes;
     653        1174 : }
     654        2348 : 
     655             : unsigned Value::getPointerAlignment(const DataLayout &DL) const {
     656             :   assert(getType()->isPointerTy() && "must be pointer");
     657             : 
     658             :   unsigned Align = 0;
     659             :   if (auto *GO = dyn_cast<GlobalObject>(this)) {
     660             :     // Don't make any assumptions about function pointer alignment. Some
     661        1113 :     // targets use the LSBs to store additional information.
     662             :     if (isa<Function>(GO))
     663             :       return 0;
     664             :     Align = GO->getAlignment();
     665             :     if (Align == 0) {
     666             :       if (auto *GVar = dyn_cast<GlobalVariable>(GO)) {
     667             :         Type *ObjectType = GVar->getValueType();
     668             :         if (ObjectType->isSized()) {
     669             :           // If the object is defined in the current Module, we'll be giving
     670             :           // it the preferred alignment. Otherwise, we have to assume that it
     671          22 :           // may only have the minimum ABI alignment.
     672          22 :           if (GVar->isStrongDefinitionForLinker())
     673           6 :             Align = DL.getPreferredAlignment(GVar);
     674             :           else
     675             :             Align = DL.getABITypeAlignment(ObjectType);
     676          16 :         }
     677           0 :       }
     678             :     }
     679             :   } else if (const Argument *A = dyn_cast<Argument>(this)) {
     680             :     Align = A->getParamAlignment();
     681        1876 : 
     682             :     if (!Align && A->hasStructRetAttr()) {
     683          46 :       // An sret parameter has at least the ABI alignment of the return type.
     684             :       Type *EltTy = cast<PointerType>(A->getType())->getElementType();
     685             :       if (EltTy->isSized())
     686           0 :         Align = DL.getABITypeAlignment(EltTy);
     687             :     }
     688             :   } else if (const AllocaInst *AI = dyn_cast<AllocaInst>(this)) {
     689        1107 :     Align = AI->getAlignment();
     690           0 :     if (Align == 0) {
     691             :       Type *AllocatedType = AI->getAllocatedType();
     692           0 :       if (AllocatedType->isSized())
     693             :         Align = DL.getPrefTypeAlignment(AllocatedType);
     694             :     }
     695             :   } else if (auto CS = ImmutableCallSite(this))
     696             :     Align = CS.getAttributes().getRetAlignment();
     697             :   else if (const LoadInst *LI = dyn_cast<LoadInst>(this))
     698             :     if (MDNode *MD = LI->getMetadata(LLVMContext::MD_align)) {
     699             :       ConstantInt *CI = mdconst::extract<ConstantInt>(MD->getOperand(0));
     700             :       Align = CI->getLimitedValue();
     701             :     }
     702             : 
     703             :   return Align;
     704        1107 : }
     705             : 
     706             : const Value *Value::DoPHITranslation(const BasicBlock *CurBB,
     707          62 :                                      const BasicBlock *PredBB) const {
     708             :   auto *PN = dyn_cast<PHINode>(this);
     709             :   if (PN && PN->getParent() == CurBB)
     710             :     return PN->getIncomingValueForBlock(PredBB);
     711       11612 :   return this;
     712       23224 : }
     713             : 
     714             : LLVMContext &Value::getContext() const { return VTy->getContext(); }
     715             : 
     716             : void Value::reverseUseList() {
     717             :   if (!UseList || !UseList->Next)
     718             :     // No need to reverse 0 or 1 uses.
     719       11612 :     return;
     720             : 
     721             :   Use *Head = UseList;
     722             :   Use *Current = UseList->Next;
     723        5468 :   Head->Next = nullptr;
     724             :   while (Current) {
     725             :     Use *Next = Current->Next;
     726        5468 :     Current->Next = Head;
     727          69 :     Head->setPrev(&Current->Next);
     728             :     Head = Current;
     729             :     Current = Next;
     730             :   }
     731             :   UseList = Head;
     732             :   Head->setPrev(&UseList);
     733             : }
     734             : 
     735             : bool Value::isSwiftError() const {
     736             :   auto *Arg = dyn_cast<Argument>(this);
     737             :   if (Arg)
     738             :     return Arg->hasSwiftErrorAttr();
     739        6273 :   auto *Alloca = dyn_cast<AllocaInst>(this);
     740             :   if (!Alloca)
     741        4996 :     return false;
     742             :   return Alloca->isSwiftError();
     743             : }
     744          46 : 
     745             : //===----------------------------------------------------------------------===//
     746             : //                             ValueHandleBase Class
     747       11497 : //===----------------------------------------------------------------------===//
     748          23 : 
     749             : void ValueHandleBase::AddToExistingUseList(ValueHandleBase **List) {
     750           0 :   assert(List && "Handle list is null?");
     751             : 
     752             :   // Splice ourselves into the list.
     753             :   Next = *List;
     754             :   *List = this;
     755             :   setPrevPtr(List);
     756             :   if (Next) {
     757             :     Next->setPrevPtr(&Next);
     758             :     assert(getValPtr() == Next->getValPtr() && "Added to wrong list?");
     759             :   }
     760             : }
     761             : 
     762       11497 : void ValueHandleBase::AddToExistingUseListAfter(ValueHandleBase *List) {
     763             :   assert(List && "Must insert after existing node");
     764             : 
     765       10395 :   Next = List->Next;
     766             :   setPrevPtr(&List->Next);
     767             :   List->Next = this;
     768             :   if (Next)
     769    83782181 :     Next->setPrevPtr(&Next);
     770   167564362 : }
     771             : 
     772             : void ValueHandleBase::AddToUseList() {
     773             :   assert(getValPtr() && "Null pointer doesn't have a use list!");
     774             : 
     775             :   LLVMContextImpl *pImpl = getValPtr()->getContext().pImpl;
     776             : 
     777    81547588 :   if (getValPtr()->HasValueHandle) {
     778             :     // If this value already has a ValueHandle, then it must be in the
     779             :     // ValueHandles map already.
     780             :     ValueHandleBase *&Entry = pImpl->ValueHandles[getValPtr()];
     781    26222447 :     assert(Entry && "Value doesn't have any handles?");
     782             :     AddToExistingUseList(&Entry);
     783             :     return;
     784    26222447 :   }
     785    17055644 : 
     786             :   // Ok, it doesn't have any handles yet, so we must insert it into the
     787             :   // DenseMap.  However, doing this insertion could cause the DenseMap to
     788             :   // reallocate itself, which would invalidate all of the PrevP pointers that
     789             :   // point into the old table.  Handle this by checking for reallocation and
     790             :   // updating the stale pointers only if needed.
     791             :   DenseMap<Value*, ValueHandleBase*> &Handles = pImpl->ValueHandles;
     792             :   const void *OldBucketPtr = Handles.getPointerIntoBucketsArray();
     793             : 
     794             :   ValueHandleBase *&Entry = Handles[getValPtr()];
     795             :   assert(!Entry && "Value really did already have handles?");
     796             :   AddToExistingUseList(&Entry);
     797    21567056 :   getValPtr()->HasValueHandle = true;
     798             : 
     799     6514839 :   // If reallocation didn't happen or if this was the first insertion, don't
     800             :   // walk the table.
     801             :   if (Handles.isPointerIntoBucketsArray(OldBucketPtr) ||
     802         109 :       Handles.size() == 1) {
     803             :     return;
     804             :   }
     805    64491920 : 
     806      249468 :   // Okay, reallocation did happen.  Fix the Prev Pointers.
     807             :   for (DenseMap<Value*, ValueHandleBase*>::iterator I = Handles.begin(),
     808          94 :        E = Handles.end(); I != E; ++I) {
     809             :     assert(I->second && I->first == I->second->getValPtr() &&
     810             :            "List invariant broken!");
     811             :     I->second->setPrevPtr(&I->second);
     812             :   }
     813             : }
     814             : 
     815             : void ValueHandleBase::RemoveFromUseList() {
     816             :   assert(getValPtr() && getValPtr()->HasValueHandle &&
     817             :          "Pointer doesn't have a use list!");
     818             : 
     819             :   // Unlink this from its use list.
     820    64491826 :   ValueHandleBase **PrevPtr = getPrevPtr();
     821             :   assert(*PrevPtr == this && "List invariant broken");
     822             : 
     823    15681922 :   *PrevPtr = Next;
     824             :   if (Next) {
     825             :     assert(Next->getPrevPtr() == &Next && "List invariant broken");
     826             :     Next->setPrevPtr(PrevPtr);
     827             :     return;
     828             :   }
     829    83782181 : 
     830    83782181 :   // If the Next pointer was null, then it is possible that this was the last
     831             :   // ValueHandle watching VP.  If so, delete its entry from the ValueHandles
     832             :   // map.
     833       11612 :   LLVMContextImpl *pImpl = getValPtr()->getContext().pImpl;
     834       11612 :   DenseMap<Value*, ValueHandleBase*> &Handles = pImpl->ValueHandles;
     835             :   if (Handles.isPointerIntoBucketsArray(PrevPtr)) {
     836             :     Handles.erase(getValPtr());
     837        1174 :     getValPtr()->HasValueHandle = false;
     838        1174 :   }
     839             : }
     840             : 
     841    93633324 : void ValueHandleBase::ValueIsDeleted(Value *V) {
     842    93633324 :   assert(V->HasValueHandle && "Should only be called if ValueHandles present");
     843    93633324 : 
     844             :   // Get the linked list base, which is guaranteed to exist since the
     845             :   // HasValueHandle flag is set.
     846             :   LLVMContextImpl *pImpl = V->getContext().pImpl;
     847     1656198 :   ValueHandleBase *Entry = pImpl->ValueHandles[V];
     848             :   assert(Entry && "Value bit set but no entries exist");
     849     3312396 : 
     850             :   // We use a local ValueHandleBase as an iterator so that ValueHandles can add
     851             :   // and remove themselves from the list without breaking our iteration.  This
     852             :   // is not really an AssertingVH; we just have to give ValueHandleBase a kind.
     853             :   // Note that we deliberately do not the support the case when dropping a value
     854             :   // handle results in a new value handle being permanently added to the list
     855             :   // (as might occur in theory for CallbackVH's): the new value handle will not
     856             :   // be processed and the checking code will mete out righteous punishment if
     857             :   // the handle is still present once we have finished processing all the other
     858             :   // value handles (it is fine to momentarily add then remove a value handle).
     859     1656184 :   for (ValueHandleBase Iterator(Assert, *Entry); Entry; Entry = Iterator.Next) {
     860             :     Iterator.RemoveFromUseList();
     861             :     Iterator.AddToExistingUseListAfter(Entry);
     862             :     assert(Entry->Next == &Iterator && "Loop invariant broken.");
     863     1345542 : 
     864       81296 :     switch (Entry->getKind()) {
     865             :     case Assert:
     866     1338120 :       break;
     867             :     case Weak:
     868     1264246 :     case WeakTracking:
     869             :       // WeakTracking and Weak just go to null, which unlinks them
     870      896690 :       // from the list.
     871      240045 :       Entry->operator=(nullptr);
     872             :       break;
     873             :     case Callback:
     874             :       // Forward to the subclass's implementation.
     875     1574888 :       static_cast<CallbackVH*>(Entry)->deleted();
     876      102464 :       break;
     877             :     }
     878           0 :   }
     879             : 
     880             :   // All callbacks, weak references, and assertingVHs should be dropped by now.
     881     1574888 :   if (V->HasValueHandle) {
     882             : #ifndef NDEBUG      // Only in +Asserts mode...
     883             :     dbgs() << "While deleting: " << *V->getType() << " %" << V->getName()
     884     1504291 :            << "\n";
     885             :     if (pImpl->ValueHandles[V]->getKind() == Assert)
     886             :       llvm_unreachable("An asserting value handle still pointed to this"
     887             :                        " value!");
     888             : 
     889      106918 : #endif
     890      106918 :     llvm_unreachable("All references to V were not removed?");
     891             :   }
     892             : }
     893     3651555 : 
     894             : void ValueHandleBase::ValueIsRAUWd(Value *Old, Value *New) {
     895             :   assert(Old->HasValueHandle &&"Should only be called if ValueHandles present");
     896             :   assert(Old != New && "Changing value into itself!");
     897             :   assert(Old->getType() == New->getType() &&
     898     3651555 :          "replaceAllUses of value with new value of different type!");
     899             : 
     900       82062 :   // Get the linked list base, which is guaranteed to exist since the
     901       82062 :   // HasValueHandle flag is set.
     902        1346 :   LLVMContextImpl *pImpl = Old->getContext().pImpl;
     903        1346 :   ValueHandleBase *Entry = pImpl->ValueHandles[Old];
     904             : 
     905             :   assert(Entry && "Value bit set but no entries exist");
     906       82062 : 
     907       72139 :   // We use a local ValueHandleBase as an iterator so that
     908       72139 :   // ValueHandles can add and remove themselves from the list without
     909             :   // breaking our iteration.  This is not really an AssertingVH; we
     910     3569493 :   // just have to give ValueHandleBase some kind.
     911       37270 :   for (ValueHandleBase Iterator(Assert, *Entry); Entry; Entry = Iterator.Next) {
     912       37270 :     Iterator.RemoveFromUseList();
     913       16089 :     Iterator.AddToExistingUseListAfter(Entry);
     914       16089 :     assert(Entry->Next == &Iterator && "Loop invariant broken.");
     915             : 
     916             :     switch (Entry->getKind()) {
     917      221662 :     case Assert:
     918             :     case Weak:
     919             :       // Asserting and Weak handles do not follow RAUW implicitly.
     920             :       break;
     921          14 :     case WeakTracking:
     922       48408 :       // Weak goes to the new value, which will unlink it from Old's list.
     923             :       Entry->operator=(New);
     924             :       break;
     925             :     case Callback:
     926             :       // Forward to the subclass's implementation.
     927      173226 :       static_cast<CallbackVH*>(Entry)->allUsesReplacedWith(New);
     928             :       break;
     929             :     }
     930     1866435 :   }
     931     1866369 : 
     932     1866369 : #ifndef NDEBUG
     933             :   // If any new weak value handles were added while processing the
     934             :   // list, then complain about it now.
     935      553841 :   if (Old->HasValueHandle)
     936             :     for (Entry = pImpl->ValueHandles[Old]; Entry; Entry = Entry->Next)
     937             :       switch (Entry->getKind()) {
     938      553827 :       case WeakTracking:
     939      553827 :         dbgs() << "After RAUW from " << *Old->getType() << " %"
     940             :                << Old->getName() << " to " << *New->getType() << " %"
     941             :                << New->getName() << "\n";
     942     3651555 :         llvm_unreachable(
     943             :             "A weak tracking value handle still pointed to the  old value!\n");
     944             :       default:
     945    34422254 :         break;
     946             :       }
     947             : #endif
     948             : }
     949             : 
     950             : // Pin the vtable to this file.
     951             : void CallbackVH::anchor() {}

Generated by: LCOV version 1.13