LLVM 22.0.0git
Value.cpp
Go to the documentation of this file.
1//===-- Value.cpp - Implement the Value class -----------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file implements the Value, ValueHandle, and User classes.
10//
11//===----------------------------------------------------------------------===//
12
13#include "llvm/IR/Value.h"
14#include "LLVMContextImpl.h"
15#include "llvm/ADT/DenseMap.h"
17#include "llvm/IR/Constant.h"
18#include "llvm/IR/Constants.h"
19#include "llvm/IR/DataLayout.h"
20#include "llvm/IR/DebugInfo.h"
22#include "llvm/IR/DerivedUser.h"
24#include "llvm/IR/InstrTypes.h"
27#include "llvm/IR/Module.h"
28#include "llvm/IR/Operator.h"
30#include "llvm/IR/ValueHandle.h"
35#include <algorithm>
36
37using namespace llvm;
38
40 "use-dereferenceable-at-point-semantics", cl::Hidden, cl::init(false),
41 cl::desc("Deref attributes and metadata infer facts at definition only"));
42
43//===----------------------------------------------------------------------===//
44// Value Class
45//===----------------------------------------------------------------------===//
46static inline Type *checkType(Type *Ty) {
47 assert(Ty && "Value defined with a null type: Error!");
48 assert(!isa<TypedPointerType>(Ty->getScalarType()) &&
49 "Cannot have values with typed pointer types");
50 return Ty;
51}
52
53Value::Value(Type *ty, unsigned scid)
54 : SubclassID(scid), HasValueHandle(0), SubclassOptionalData(0),
55 SubclassData(0), NumUserOperands(0), IsUsedByMD(false), HasName(false),
56 HasMetadata(false), VTy(checkType(ty)) {
57 static_assert(ConstantFirstVal == 0, "!(SubclassID < ConstantFirstVal)");
58 // FIXME: Why isn't this in the subclass gunk??
59 // Note, we cannot call isa<CallInst> before the CallInst has been
60 // constructed.
61 unsigned OpCode = 0;
62 if (SubclassID >= InstructionVal)
63 OpCode = SubclassID - InstructionVal;
64 if (OpCode == Instruction::Call || OpCode == Instruction::Invoke ||
65 OpCode == Instruction::CallBr)
66 assert((VTy->isFirstClassType() || VTy->isVoidTy() || VTy->isStructTy()) &&
67 "invalid CallBase type!");
68 else if (SubclassID != BasicBlockVal &&
69 (/*SubclassID < ConstantFirstVal ||*/ SubclassID > ConstantLastVal))
70 assert((VTy->isFirstClassType() || VTy->isVoidTy()) &&
71 "Cannot create non-first-class values except for constants!");
72 static_assert(sizeof(Value) == 2 * sizeof(void *) + 2 * sizeof(unsigned),
73 "Value too big");
74}
75
77 // Notify all ValueHandles (if present) that this value is going away.
78 if (HasValueHandle)
79 ValueHandleBase::ValueIsDeleted(this);
80 if (isUsedByMetadata())
81 ValueAsMetadata::handleDeletion(this);
82
83 // Remove associated metadata from context.
84 if (HasMetadata)
85 clearMetadata();
86
87#ifndef NDEBUG // Only in -g mode...
88 // Check to make sure that there are no uses of this value that are still
89 // around when the value is destroyed. If there are, then we have a dangling
90 // reference and something is wrong. This code is here to print out where
91 // the value is still being referenced.
92 //
93 // Note that use_empty() cannot be called here, as it eventually downcasts
94 // 'this' to GlobalValue (derived class of Value), but GlobalValue has already
95 // been destructed, so accessing it is UB.
96 //
97 if (!materialized_use_empty()) {
98 dbgs() << "While deleting: " << *VTy << " %" << getName() << "\n";
99 for (auto *U : users())
100 dbgs() << "Use still stuck around after Def is destroyed:" << *U << "\n";
101
102 llvm_unreachable("Uses remain when a value is destroyed!");
103 }
104#endif
105
106 // If this value is named, destroy the name. This should not be in a symtab
107 // at this point.
108 destroyValueName();
109}
110
111void Value::deleteValue() {
112 switch (getValueID()) {
113#define HANDLE_VALUE(Name) \
114 case Value::Name##Val: \
115 delete static_cast<Name *>(this); \
116 break;
117#define HANDLE_MEMORY_VALUE(Name) \
118 case Value::Name##Val: \
119 static_cast<DerivedUser *>(this)->DeleteValue( \
120 static_cast<DerivedUser *>(this)); \
121 break;
122#define HANDLE_CONSTANT(Name) \
123 case Value::Name##Val: \
124 llvm_unreachable("constants should be destroyed with destroyConstant"); \
125 break;
126#define HANDLE_INSTRUCTION(Name) /* nothing */
127#include "llvm/IR/Value.def"
128
129#define HANDLE_INST(N, OPC, CLASS) \
130 case Value::InstructionVal + Instruction::OPC: \
131 delete static_cast<CLASS *>(this); \
132 break;
133#define HANDLE_USER_INST(N, OPC, CLASS)
134#include "llvm/IR/Instruction.def"
135
136 default:
137 llvm_unreachable("attempting to delete unknown value kind");
138 }
139}
140
141void Value::destroyValueName() {
142 ValueName *Name = getValueName();
143 if (Name) {
144 MallocAllocator Allocator;
145 Name->Destroy(Allocator);
146 }
147 setValueName(nullptr);
148}
149
150bool Value::hasNUses(unsigned N) const {
151 if (!UseList)
152 return N == 0;
153
154 // TODO: Disallow for ConstantData and remove !UseList check?
155 return hasNItems(use_begin(), use_end(), N);
156}
157
158bool Value::hasNUsesOrMore(unsigned N) const {
159 // TODO: Disallow for ConstantData and remove !UseList check?
160 if (!UseList)
161 return N == 0;
162
163 return hasNItemsOrMore(use_begin(), use_end(), N);
164}
165
166bool Value::hasOneUser() const {
167 if (use_empty())
168 return false;
169 if (hasOneUse())
170 return true;
171 return std::equal(++user_begin(), user_end(), user_begin());
172}
173
174static bool isUnDroppableUser(const User *U) { return !U->isDroppable(); }
175
176Use *Value::getSingleUndroppableUse() {
177 Use *Result = nullptr;
178 for (Use &U : uses()) {
179 if (!U.getUser()->isDroppable()) {
180 if (Result)
181 return nullptr;
182 Result = &U;
183 }
184 }
185 return Result;
186}
187
188User *Value::getUniqueUndroppableUser() {
189 User *Result = nullptr;
190 for (auto *U : users()) {
191 if (!U->isDroppable()) {
192 if (Result && Result != U)
193 return nullptr;
194 Result = U;
195 }
196 }
197 return Result;
198}
199
200bool Value::hasNUndroppableUses(unsigned int N) const {
201 return hasNItems(user_begin(), user_end(), N, isUnDroppableUser);
202}
203
204bool Value::hasNUndroppableUsesOrMore(unsigned int N) const {
205 return hasNItemsOrMore(user_begin(), user_end(), N, isUnDroppableUser);
206}
207
208void Value::dropDroppableUses(
209 llvm::function_ref<bool(const Use *)> ShouldDrop) {
210 SmallVector<Use *, 8> ToBeEdited;
211 for (Use &U : uses())
212 if (U.getUser()->isDroppable() && ShouldDrop(&U))
213 ToBeEdited.push_back(&U);
214 for (Use *U : ToBeEdited)
215 dropDroppableUse(*U);
216}
217
218void Value::dropDroppableUsesIn(User &Usr) {
219 assert(Usr.isDroppable() && "Expected a droppable user!");
220 for (Use &UsrOp : Usr.operands()) {
221 if (UsrOp.get() == this)
222 dropDroppableUse(UsrOp);
223 }
224}
225
226void Value::dropDroppableUse(Use &U) {
227 if (auto *Assume = dyn_cast<AssumeInst>(U.getUser())) {
228 unsigned OpNo = U.getOperandNo();
229 if (OpNo == 0)
230 U.set(ConstantInt::getTrue(Assume->getContext()));
231 else {
232 U.set(PoisonValue::get(U.get()->getType()));
233 CallInst::BundleOpInfo &BOI = Assume->getBundleOpInfoForOperand(OpNo);
234 BOI.Tag = Assume->getContext().pImpl->getOrInsertBundleTag("ignore");
235 }
236 return;
237 }
238
239 llvm_unreachable("unknown droppable use");
240}
241
242bool Value::isUsedInBasicBlock(const BasicBlock *BB) const {
243 assert(hasUseList() && "ConstantData has no use-list");
244
245 // This can be computed either by scanning the instructions in BB, or by
246 // scanning the use list of this Value. Both lists can be very long, but
247 // usually one is quite short.
248 //
249 // Scan both lists simultaneously until one is exhausted. This limits the
250 // search to the shorter list.
251 BasicBlock::const_iterator BI = BB->begin(), BE = BB->end();
252 const_user_iterator UI = user_begin(), UE = user_end();
253 for (; BI != BE && UI != UE; ++BI, ++UI) {
254 // Scan basic block: Check if this Value is used by the instruction at BI.
255 if (is_contained(BI->operands(), this))
256 return true;
257 // Scan use list: Check if the use at UI is in BB.
258 const auto *User = dyn_cast<Instruction>(*UI);
259 if (User && User->getParent() == BB)
260 return true;
261 }
262 return false;
263}
264
265unsigned Value::getNumUses() const {
266 // TODO: Disallow for ConstantData and remove !UseList check?
267 if (!UseList)
268 return 0;
269 return (unsigned)std::distance(use_begin(), use_end());
270}
271
272static bool getSymTab(Value *V, ValueSymbolTable *&ST) {
273 ST = nullptr;
274 if (Instruction *I = dyn_cast<Instruction>(V)) {
275 if (BasicBlock *P = I->getParent())
276 if (Function *PP = P->getParent())
277 ST = PP->getValueSymbolTable();
278 } else if (BasicBlock *BB = dyn_cast<BasicBlock>(V)) {
279 if (Function *P = BB->getParent())
280 ST = P->getValueSymbolTable();
281 } else if (GlobalValue *GV = dyn_cast<GlobalValue>(V)) {
282 if (Module *P = GV->getParent())
283 ST = &P->getValueSymbolTable();
284 } else if (Argument *A = dyn_cast<Argument>(V)) {
285 if (Function *P = A->getParent())
286 ST = P->getValueSymbolTable();
287 } else {
288 assert(isa<Constant>(V) && "Unknown value type!");
289 return true; // no name is setable for this.
290 }
291 return false;
292}
293
294ValueName *Value::getValueName() const {
295 if (!HasName) return nullptr;
296
297 LLVMContext &Ctx = getContext();
298 auto I = Ctx.pImpl->ValueNames.find(this);
299 assert(I != Ctx.pImpl->ValueNames.end() &&
300 "No name entry found!");
301
302 return I->second;
303}
304
305void Value::setValueName(ValueName *VN) {
306 LLVMContext &Ctx = getContext();
307
308 assert(HasName == Ctx.pImpl->ValueNames.count(this) &&
309 "HasName bit out of sync!");
310
311 if (!VN) {
312 if (HasName)
313 Ctx.pImpl->ValueNames.erase(this);
314 HasName = false;
315 return;
316 }
317
318 HasName = true;
319 Ctx.pImpl->ValueNames[this] = VN;
320}
321
322StringRef Value::getName() const {
323 // Make sure the empty string is still a C string. For historical reasons,
324 // some clients want to call .data() on the result and expect it to be null
325 // terminated.
326 if (!hasName())
327 return StringRef("", 0);
328 return getValueName()->getKey();
329}
330
331void Value::setNameImpl(const Twine &NewName) {
332 bool NeedNewName =
333 !getContext().shouldDiscardValueNames() || isa<GlobalValue>(this);
334
335 // Fast-path: LLVMContext can be set to strip out non-GlobalValue names
336 // and there is no need to delete the old name.
337 if (!NeedNewName && !hasName())
338 return;
339
340 // Fast path for common IRBuilder case of setName("") when there is no name.
341 if (NewName.isTriviallyEmpty() && !hasName())
342 return;
343
344 SmallString<256> NameData;
345 StringRef NameRef = NeedNewName ? NewName.toStringRef(NameData) : "";
346 assert(!NameRef.contains(0) && "Null bytes are not allowed in names");
347
348 // Name isn't changing?
349 if (getName() == NameRef)
350 return;
351
352 assert(!getType()->isVoidTy() && "Cannot assign a name to void values!");
353
354 // Get the symbol table to update for this object.
355 ValueSymbolTable *ST;
356 if (getSymTab(this, ST))
357 return; // Cannot set a name on this value (e.g. constant).
358
359 ValueName *NewValueName = nullptr;
360 if (!ST) { // No symbol table to update? Just do the change.
361 if (!NameRef.empty()) {
362 // Create the new name.
363 MallocAllocator Allocator;
364 NewValueName = ValueName::create(NameRef, Allocator);
365 }
366 // NOTE: Could optimize for the case the name is shrinking to not deallocate
367 // then reallocated.
368 destroyValueName();
369
370 if (NewValueName) {
371 assert(NeedNewName);
372 setValueName(NewValueName);
373 getValueName()->setValue(this);
374 }
375 return;
376 }
377
378 if (!NameRef.empty())
379 NewValueName = ST->createValueName(NameRef, this);
380
381 // NOTE: Could optimize for the case the name is shrinking to not deallocate
382 // then reallocated.
383 if (hasName()) {
384 // Remove old name.
385 ST->removeValueName(getValueName());
386 destroyValueName();
387
388 if (NameRef.empty())
389 return;
390 }
391
392 // Name is changing to something new.
393 assert(NeedNewName && NewValueName != nullptr);
394 setValueName(NewValueName);
395}
396
397void Value::setName(const Twine &NewName) {
398 setNameImpl(NewName);
399 if (Function *F = dyn_cast<Function>(this))
400 F->updateAfterNameChange();
401}
402
403void Value::takeName(Value *V) {
404 assert(V != this && "Illegal call to this->takeName(this)!");
405 ValueSymbolTable *ST = nullptr;
406 // If this value has a name, drop it.
407 if (hasName()) {
408 // Get the symtab this is in.
409 if (getSymTab(this, ST)) {
410 // We can't set a name on this value, but we need to clear V's name if
411 // it has one.
412 if (V->hasName()) V->setName("");
413 return; // Cannot set a name on this value (e.g. constant).
414 }
415
416 // Remove old name.
417 if (ST)
418 ST->removeValueName(getValueName());
419 destroyValueName();
420 }
421
422 // Now we know that this has no name.
423
424 // If V has no name either, we're done.
425 if (!V->hasName()) return;
426
427 // Get this's symtab if we didn't before.
428 if (!ST) {
429 if (getSymTab(this, ST)) {
430 // Clear V's name.
431 V->setName("");
432 return; // Cannot set a name on this value (e.g. constant).
433 }
434 }
435
436 // Get V's ST, this should always succeed, because V has a name.
437 ValueSymbolTable *VST;
438 bool Failure = getSymTab(V, VST);
439 assert(!Failure && "V has a name, so it should have a ST!"); (void)Failure;
440
441 // If these values are both in the same symtab, we can do this very fast.
442 // This works even if both values have no symtab yet.
443 if (ST == VST) {
444 // Take the name!
445 setValueName(V->getValueName());
446 V->setValueName(nullptr);
447 getValueName()->setValue(this);
448 return;
449 }
450
451 // Otherwise, things are slightly more complex. Remove V's name from VST and
452 // then reinsert it into ST.
453
454 if (VST)
455 VST->removeValueName(V->getValueName());
456 setValueName(V->getValueName());
457 V->setValueName(nullptr);
458 getValueName()->setValue(this);
459
460 if (ST)
461 ST->reinsertValue(this);
462}
463
464std::string Value::getNameOrAsOperand() const {
465 if (!getName().empty())
466 return std::string(getName());
467
468 std::string BBName;
469 raw_string_ostream OS(BBName);
470 printAsOperand(OS, false);
471 return OS.str();
472}
473
474void Value::assertModuleIsMaterializedImpl() const {
475#ifndef NDEBUG
476 const GlobalValue *GV = dyn_cast<GlobalValue>(this);
477 if (!GV)
478 return;
479 const Module *M = GV->getParent();
480 if (!M)
481 return;
482 assert(M->isMaterialized());
483#endif
484}
485
486#ifndef NDEBUG
487static bool contains(SmallPtrSetImpl<ConstantExpr *> &Cache, ConstantExpr *Expr,
488 Constant *C) {
489 if (!Cache.insert(Expr).second)
490 return false;
491
492 for (auto &O : Expr->operands()) {
493 if (O == C)
494 return true;
495 auto *CE = dyn_cast<ConstantExpr>(O);
496 if (!CE)
497 continue;
498 if (contains(Cache, CE, C))
499 return true;
500 }
501 return false;
502}
503
504static bool contains(Value *Expr, Value *V) {
505 if (Expr == V)
506 return true;
507
508 auto *C = dyn_cast<Constant>(V);
509 if (!C)
510 return false;
511
512 auto *CE = dyn_cast<ConstantExpr>(Expr);
513 if (!CE)
514 return false;
515
516 SmallPtrSet<ConstantExpr *, 4> Cache;
517 return contains(Cache, CE, C);
518}
519#endif // NDEBUG
520
521void Value::doRAUW(Value *New, ReplaceMetadataUses ReplaceMetaUses) {
522 assert(hasUseList() && "Cannot replace constant data");
523 assert(New && "Value::replaceAllUsesWith(<null>) is invalid!");
524 assert(!contains(New, this) &&
525 "this->replaceAllUsesWith(expr(this)) is NOT valid!");
526 assert(New->getType() == getType() &&
527 "replaceAllUses of value with new value of different type!");
528
529 // Notify all ValueHandles (if present) that this value is going away.
530 if (HasValueHandle)
531 ValueHandleBase::ValueIsRAUWd(this, New);
532 if (ReplaceMetaUses == ReplaceMetadataUses::Yes && isUsedByMetadata())
533 ValueAsMetadata::handleRAUW(this, New);
534
535 while (!materialized_use_empty()) {
536 Use &U = *UseList;
537 // Must handle Constants specially, we cannot call replaceUsesOfWith on a
538 // constant because they are uniqued.
539 if (auto *C = dyn_cast<Constant>(U.getUser())) {
540 if (!isa<GlobalValue>(C)) {
541 C->handleOperandChange(this, New);
542 continue;
543 }
544 }
545
546 U.set(New);
547 }
548
549 if (BasicBlock *BB = dyn_cast<BasicBlock>(this))
550 BB->replaceSuccessorsPhiUsesWith(cast<BasicBlock>(New));
551}
552
553void Value::replaceAllUsesWith(Value *New) {
554 doRAUW(New, ReplaceMetadataUses::Yes);
555}
556
557void Value::replaceNonMetadataUsesWith(Value *New) {
558 doRAUW(New, ReplaceMetadataUses::No);
559}
560
561void Value::replaceUsesWithIf(Value *New,
562 llvm::function_ref<bool(Use &U)> ShouldReplace) {
563 assert(New && "Value::replaceUsesWithIf(<null>) is invalid!");
564 assert(New->getType() == getType() &&
565 "replaceUses of value with new value of different type!");
566
567 SmallVector<TrackingVH<Constant>, 8> Consts;
568 SmallPtrSet<Constant *, 8> Visited;
569
570 for (Use &U : llvm::make_early_inc_range(uses())) {
571 if (!ShouldReplace(U))
572 continue;
573 // Must handle Constants specially, we cannot call replaceUsesOfWith on a
574 // constant because they are uniqued.
575 if (auto *C = dyn_cast<Constant>(U.getUser())) {
576 if (!isa<GlobalValue>(C)) {
577 if (Visited.insert(C).second)
578 Consts.push_back(TrackingVH<Constant>(C));
579 continue;
580 }
581 }
582 U.set(New);
583 }
584
585 while (!Consts.empty()) {
586 // FIXME: handleOperandChange() updates all the uses in a given Constant,
587 // not just the one passed to ShouldReplace
588 Consts.pop_back_val()->handleOperandChange(this, New);
589 }
590}
591
592/// Replace debug record uses of MetadataAsValue(ValueAsMetadata(V)) outside BB
593/// with New.
594static void replaceDbgUsesOutsideBlock(Value *V, Value *New, BasicBlock *BB) {
595 SmallVector<DbgVariableRecord *> DPUsers;
596 findDbgUsers(V, DPUsers);
597 for (auto *DVR : DPUsers) {
598 DbgMarker *Marker = DVR->getMarker();
599 if (Marker->getParent() != BB)
600 DVR->replaceVariableLocationOp(V, New);
601 }
602}
603
604// Like replaceAllUsesWith except it does not handle constants or basic blocks.
605// This routine leaves uses within BB.
606void Value::replaceUsesOutsideBlock(Value *New, BasicBlock *BB) {
607 assert(New && "Value::replaceUsesOutsideBlock(<null>, BB) is invalid!");
608 assert(!contains(New, this) &&
609 "this->replaceUsesOutsideBlock(expr(this), BB) is NOT valid!");
610 assert(New->getType() == getType() &&
611 "replaceUses of value with new value of different type!");
612 assert(BB && "Basic block that may contain a use of 'New' must be defined\n");
613
614 replaceDbgUsesOutsideBlock(this, New, BB);
615 replaceUsesWithIf(New, [BB](Use &U) {
616 auto *I = dyn_cast<Instruction>(U.getUser());
617 // Don't replace if it's an instruction in the BB basic block.
618 return !I || I->getParent() != BB;
619 });
620}
621
622namespace {
623// Various metrics for how much to strip off of pointers.
624enum PointerStripKind {
625 PSK_ZeroIndices,
626 PSK_ZeroIndicesAndAliases,
627 PSK_ZeroIndicesSameRepresentation,
628 PSK_ForAliasAnalysis,
629 PSK_InBoundsConstantIndices,
630 PSK_InBounds
631};
632} // end anonymous namespace
633
634template <PointerStripKind StripKind> static void NoopCallback(const Value *) {}
635
636template <PointerStripKind StripKind>
638 const Value *V,
639 function_ref<void(const Value *)> Func = NoopCallback<StripKind>) {
640 if (!V->getType()->isPointerTy())
641 return V;
642
643 // Even though we don't look through PHI nodes, we could be called on an
644 // instruction in an unreachable block, which may be on a cycle.
645 SmallPtrSet<const Value *, 4> Visited;
646
647 Visited.insert(V);
648 do {
649 Func(V);
650 if (auto *GEP = dyn_cast<GEPOperator>(V)) {
651 switch (StripKind) {
652 case PSK_ZeroIndices:
653 case PSK_ZeroIndicesAndAliases:
654 case PSK_ZeroIndicesSameRepresentation:
655 case PSK_ForAliasAnalysis:
656 if (!GEP->hasAllZeroIndices())
657 return V;
658 break;
659 case PSK_InBoundsConstantIndices:
660 if (!GEP->hasAllConstantIndices())
661 return V;
662 [[fallthrough]];
663 case PSK_InBounds:
664 if (!GEP->isInBounds())
665 return V;
666 break;
667 }
668 V = GEP->getPointerOperand();
669 } else if (Operator::getOpcode(V) == Instruction::BitCast) {
670 Value *NewV = cast<Operator>(V)->getOperand(0);
671 if (!NewV->getType()->isPointerTy())
672 return V;
673 V = NewV;
674 } else if (StripKind != PSK_ZeroIndicesSameRepresentation &&
675 Operator::getOpcode(V) == Instruction::AddrSpaceCast) {
676 // TODO: If we know an address space cast will not change the
677 // representation we could look through it here as well.
678 V = cast<Operator>(V)->getOperand(0);
679 } else if (StripKind == PSK_ZeroIndicesAndAliases && isa<GlobalAlias>(V)) {
680 V = cast<GlobalAlias>(V)->getAliasee();
681 } else if (StripKind == PSK_ForAliasAnalysis && isa<PHINode>(V) &&
682 cast<PHINode>(V)->getNumIncomingValues() == 1) {
683 V = cast<PHINode>(V)->getIncomingValue(0);
684 } else {
685 if (const auto *Call = dyn_cast<CallBase>(V)) {
686 if (const Value *RV = Call->getReturnedArgOperand()) {
687 V = RV;
688 continue;
689 }
690 // The result of launder.invariant.group must alias it's argument,
691 // but it can't be marked with returned attribute, that's why it needs
692 // special case.
693 if (StripKind == PSK_ForAliasAnalysis &&
694 (Call->getIntrinsicID() == Intrinsic::launder_invariant_group ||
695 Call->getIntrinsicID() == Intrinsic::strip_invariant_group)) {
696 V = Call->getArgOperand(0);
697 continue;
698 }
699 }
700 return V;
701 }
702 assert(V->getType()->isPointerTy() && "Unexpected operand type!");
703 } while (Visited.insert(V).second);
704
705 return V;
706}
707
708const Value *Value::stripPointerCasts() const {
710}
711
712const Value *Value::stripPointerCastsAndAliases() const {
714}
715
716const Value *Value::stripPointerCastsSameRepresentation() const {
718}
719
720const Value *Value::stripInBoundsConstantOffsets() const {
722}
723
724const Value *Value::stripPointerCastsForAliasAnalysis() const {
726}
727
728const Value *Value::stripAndAccumulateConstantOffsets(
729 const DataLayout &DL, APInt &Offset, bool AllowNonInbounds,
730 bool AllowInvariantGroup,
731 function_ref<bool(Value &, APInt &)> ExternalAnalysis,
732 bool LookThroughIntToPtr) const {
733 if (!getType()->isPtrOrPtrVectorTy())
734 return this;
735
736 unsigned BitWidth = Offset.getBitWidth();
737 assert(BitWidth == DL.getIndexTypeSizeInBits(getType()) &&
738 "The offset bit width does not match the DL specification.");
739
740 // Even though we don't look through PHI nodes, we could be called on an
741 // instruction in an unreachable block, which may be on a cycle.
742 SmallPtrSet<const Value *, 4> Visited;
743 Visited.insert(this);
744 const Value *V = this;
745 do {
746 if (auto *GEP = dyn_cast<GEPOperator>(V)) {
747 // If in-bounds was requested, we do not strip non-in-bounds GEPs.
748 if (!AllowNonInbounds && !GEP->isInBounds())
749 return V;
750
751 // If one of the values we have visited is an addrspacecast, then
752 // the pointer type of this GEP may be different from the type
753 // of the Ptr parameter which was passed to this function. This
754 // means when we construct GEPOffset, we need to use the size
755 // of GEP's pointer type rather than the size of the original
756 // pointer type.
757 APInt GEPOffset(DL.getIndexTypeSizeInBits(V->getType()), 0);
758 if (!GEP->accumulateConstantOffset(DL, GEPOffset, ExternalAnalysis))
759 return V;
760
761 // Stop traversal if the pointer offset wouldn't fit in the bit-width
762 // provided by the Offset argument. This can happen due to AddrSpaceCast
763 // stripping.
764 if (GEPOffset.getSignificantBits() > BitWidth)
765 return V;
766
767 // External Analysis can return a result higher/lower than the value
768 // represents. We need to detect overflow/underflow.
769 APInt GEPOffsetST = GEPOffset.sextOrTrunc(BitWidth);
770 if (!ExternalAnalysis) {
771 Offset += GEPOffsetST;
772 } else {
773 bool Overflow = false;
774 APInt OldOffset = Offset;
775 Offset = Offset.sadd_ov(GEPOffsetST, Overflow);
776 if (Overflow) {
777 Offset = OldOffset;
778 return V;
779 }
780 }
781 V = GEP->getPointerOperand();
782 } else if (Operator::getOpcode(V) == Instruction::BitCast ||
783 Operator::getOpcode(V) == Instruction::AddrSpaceCast) {
784 V = cast<Operator>(V)->getOperand(0);
785 } else if (auto *GA = dyn_cast<GlobalAlias>(V)) {
786 if (!GA->isInterposable())
787 V = GA->getAliasee();
788 } else if (const auto *Call = dyn_cast<CallBase>(V)) {
789 if (const Value *RV = Call->getReturnedArgOperand())
790 V = RV;
791 if (AllowInvariantGroup && Call->isLaunderOrStripInvariantGroup())
792 V = Call->getArgOperand(0);
793 } else if (auto *Int2Ptr = dyn_cast<Operator>(V)) {
794 // Try to accumulate across (inttoptr (add (ptrtoint p), off)).
795 if (!AllowNonInbounds || !LookThroughIntToPtr || !Int2Ptr ||
796 Int2Ptr->getOpcode() != Instruction::IntToPtr ||
797 Int2Ptr->getOperand(0)->getType()->getScalarSizeInBits() != BitWidth)
798 return V;
799
800 auto *Add = dyn_cast<AddOperator>(Int2Ptr->getOperand(0));
801 if (!Add)
802 return V;
803
804 auto *Ptr2Int = dyn_cast<PtrToIntOperator>(Add->getOperand(0));
805 auto *CI = dyn_cast<ConstantInt>(Add->getOperand(1));
806 if (!Ptr2Int || !CI)
807 return V;
808
809 Offset += CI->getValue();
810 V = Ptr2Int->getOperand(0);
811 }
812 assert(V->getType()->isPtrOrPtrVectorTy() && "Unexpected operand type!");
813 } while (Visited.insert(V).second);
814
815 return V;
816}
817
818const Value *
819Value::stripInBoundsOffsets(function_ref<void(const Value *)> Func) const {
821}
822
823bool Value::canBeFreed() const {
825
826 // Cases that can simply never be deallocated
827 // *) Constants aren't allocated per se, thus not deallocated either.
828 if (isa<Constant>(this))
829 return false;
830
831 // Handle byval/byref/sret/inalloca/preallocated arguments. The storage
832 // lifetime is guaranteed to be longer than the callee's lifetime.
833 if (auto *A = dyn_cast<Argument>(this)) {
834 if (A->hasPointeeInMemoryValueAttr())
835 return false;
836 // A pointer to an object in a function which neither frees, nor can arrange
837 // for another thread to free on its behalf, can not be freed in the scope
838 // of the function. Note that this logic is restricted to memory
839 // allocations in existance before the call; a nofree function *is* allowed
840 // to free memory it allocated.
841 const Function *F = A->getParent();
842 if (F->doesNotFreeMemory() && F->hasNoSync())
843 return false;
844 }
845
846 if (isa<IntToPtrInst>(this) && getMetadata(LLVMContext::MD_nofree))
847 return false;
848
849 const Function *F = nullptr;
850 if (auto *I = dyn_cast<Instruction>(this))
851 F = I->getFunction();
852 if (auto *A = dyn_cast<Argument>(this))
853 F = A->getParent();
854
855 if (!F)
856 return true;
857
858 // With garbage collection, deallocation typically occurs solely at or after
859 // safepoints. If we're compiling for a collector which uses the
860 // gc.statepoint infrastructure, safepoints aren't explicitly present
861 // in the IR until after lowering from abstract to physical machine model.
862 // The collector could chose to mix explicit deallocation and gc'd objects
863 // which is why we need the explicit opt in on a per collector basis.
864 if (!F->hasGC())
865 return true;
866
867 const auto &GCName = F->getGC();
868 if (GCName == "statepoint-example") {
869 auto *PT = cast<PointerType>(this->getType());
870 if (PT->getAddressSpace() != 1)
871 // For the sake of this example GC, we arbitrarily pick addrspace(1) as
872 // our GC managed heap. This must match the same check in
873 // RewriteStatepointsForGC (and probably needs better factored.)
874 return true;
875
876 // It is cheaper to scan for a declaration than to scan for a use in this
877 // function. Note that gc.statepoint is a type overloaded function so the
878 // usual trick of requesting declaration of the intrinsic from the module
879 // doesn't work.
880 for (auto &Fn : *F->getParent())
881 if (Fn.getIntrinsicID() == Intrinsic::experimental_gc_statepoint)
882 return true;
883 return false;
884 }
885 return true;
886}
887
888uint64_t Value::getPointerDereferenceableBytes(const DataLayout &DL,
889 bool &CanBeNull,
890 bool &CanBeFreed) const {
891 assert(getType()->isPointerTy() && "must be pointer");
892
893 uint64_t DerefBytes = 0;
894 CanBeNull = false;
895 CanBeFreed = UseDerefAtPointSemantics && canBeFreed();
896 if (const Argument *A = dyn_cast<Argument>(this)) {
897 DerefBytes = A->getDereferenceableBytes();
898 if (DerefBytes == 0) {
899 // Handle byval/byref/inalloca/preallocated arguments
900 if (Type *ArgMemTy = A->getPointeeInMemoryValueType()) {
901 if (ArgMemTy->isSized()) {
902 // FIXME: Why isn't this the type alloc size?
903 DerefBytes = DL.getTypeStoreSize(ArgMemTy).getKnownMinValue();
904 }
905 }
906 }
907
908 if (DerefBytes == 0) {
909 DerefBytes = A->getDereferenceableOrNullBytes();
910 CanBeNull = true;
911 }
912 } else if (const auto *Call = dyn_cast<CallBase>(this)) {
913 DerefBytes = Call->getRetDereferenceableBytes();
914 if (DerefBytes == 0) {
915 DerefBytes = Call->getRetDereferenceableOrNullBytes();
916 CanBeNull = true;
917 }
918 } else if (const LoadInst *LI = dyn_cast<LoadInst>(this)) {
919 if (MDNode *MD = LI->getMetadata(LLVMContext::MD_dereferenceable)) {
920 ConstantInt *CI = mdconst::extract<ConstantInt>(MD->getOperand(0));
921 DerefBytes = CI->getLimitedValue();
922 }
923 if (DerefBytes == 0) {
924 if (MDNode *MD =
925 LI->getMetadata(LLVMContext::MD_dereferenceable_or_null)) {
926 ConstantInt *CI = mdconst::extract<ConstantInt>(MD->getOperand(0));
927 DerefBytes = CI->getLimitedValue();
928 }
929 CanBeNull = true;
930 }
931 } else if (auto *IP = dyn_cast<IntToPtrInst>(this)) {
932 if (MDNode *MD = IP->getMetadata(LLVMContext::MD_dereferenceable)) {
933 ConstantInt *CI = mdconst::extract<ConstantInt>(MD->getOperand(0));
934 DerefBytes = CI->getLimitedValue();
935 }
936 if (DerefBytes == 0) {
937 if (MDNode *MD =
938 IP->getMetadata(LLVMContext::MD_dereferenceable_or_null)) {
939 ConstantInt *CI = mdconst::extract<ConstantInt>(MD->getOperand(0));
940 DerefBytes = CI->getLimitedValue();
941 }
942 CanBeNull = true;
943 }
944 } else if (auto *AI = dyn_cast<AllocaInst>(this)) {
945 if (!AI->isArrayAllocation()) {
946 DerefBytes =
947 DL.getTypeStoreSize(AI->getAllocatedType()).getKnownMinValue();
948 CanBeNull = false;
949 CanBeFreed = false;
950 }
951 } else if (auto *GV = dyn_cast<GlobalVariable>(this)) {
952 if (GV->getValueType()->isSized() && !GV->hasExternalWeakLinkage()) {
953 // TODO: Don't outright reject hasExternalWeakLinkage but set the
954 // CanBeNull flag.
955 DerefBytes = DL.getTypeStoreSize(GV->getValueType()).getFixedValue();
956 CanBeNull = false;
957 CanBeFreed = false;
958 }
959 }
960 return DerefBytes;
961}
962
963Align Value::getPointerAlignment(const DataLayout &DL) const {
964 assert(getType()->isPointerTy() && "must be pointer");
965 if (const Function *F = dyn_cast<Function>(this)) {
966 Align FunctionPtrAlign = DL.getFunctionPtrAlign().valueOrOne();
967 switch (DL.getFunctionPtrAlignType()) {
968 case DataLayout::FunctionPtrAlignType::Independent:
969 return FunctionPtrAlign;
970 case DataLayout::FunctionPtrAlignType::MultipleOfFunctionAlign:
971 return std::max(FunctionPtrAlign, F->getAlign().valueOrOne());
972 }
973 llvm_unreachable("Unhandled FunctionPtrAlignType");
974 } else if (auto *GVar = dyn_cast<GlobalVariable>(this)) {
975 const MaybeAlign Alignment(GVar->getAlign());
976 if (!Alignment) {
977 Type *ObjectType = GVar->getValueType();
978 if (ObjectType->isSized()) {
979 // If the object is defined in the current Module, we'll be giving
980 // it the preferred alignment. Otherwise, we have to assume that it
981 // may only have the minimum ABI alignment.
982 if (GVar->isStrongDefinitionForLinker())
983 return DL.getPreferredAlign(GVar);
984 else
985 return DL.getABITypeAlign(ObjectType);
986 }
987 }
988 return Alignment.valueOrOne();
989 } else if (const Argument *A = dyn_cast<Argument>(this)) {
990 const MaybeAlign Alignment = A->getParamAlign();
991 if (!Alignment && A->hasStructRetAttr()) {
992 // An sret parameter has at least the ABI alignment of the return type.
993 Type *EltTy = A->getParamStructRetType();
994 if (EltTy->isSized())
995 return DL.getABITypeAlign(EltTy);
996 }
997 return Alignment.valueOrOne();
998 } else if (const AllocaInst *AI = dyn_cast<AllocaInst>(this)) {
999 return AI->getAlign();
1000 } else if (const auto *Call = dyn_cast<CallBase>(this)) {
1001 MaybeAlign Alignment = Call->getRetAlign();
1002 if (!Alignment && Call->getCalledFunction())
1003 Alignment = Call->getCalledFunction()->getAttributes().getRetAlignment();
1004 return Alignment.valueOrOne();
1005 } else if (const LoadInst *LI = dyn_cast<LoadInst>(this)) {
1006 if (MDNode *MD = LI->getMetadata(LLVMContext::MD_align)) {
1007 ConstantInt *CI = mdconst::extract<ConstantInt>(MD->getOperand(0));
1008 return Align(CI->getLimitedValue());
1009 }
1010 } else if (auto *CE = dyn_cast<ConstantExpr>(this)) {
1011 // Determine the alignment of inttoptr(C).
1012 if (CE->getOpcode() == Instruction::IntToPtr &&
1013 isa<ConstantInt>(CE->getOperand(0))) {
1014 ConstantInt *IntPtr = cast<ConstantInt>(CE->getOperand(0));
1015 size_t TrailingZeros = IntPtr->getValue().countr_zero();
1016 // While the actual alignment may be large, elsewhere we have
1017 // an arbitrary upper alignmet limit, so let's clamp to it.
1018 return Align(TrailingZeros < Value::MaxAlignmentExponent
1019 ? uint64_t(1) << TrailingZeros
1020 : Value::MaximumAlignment);
1021 }
1022 }
1023 return Align(1);
1024}
1025
1026static std::optional<int64_t>
1027getOffsetFromIndex(const GEPOperator *GEP, unsigned Idx, const DataLayout &DL) {
1028 // Skip over the first indices.
1030 for (unsigned i = 1; i != Idx; ++i, ++GTI)
1031 /*skip along*/;
1032
1033 // Compute the offset implied by the rest of the indices.
1034 int64_t Offset = 0;
1035 for (unsigned i = Idx, e = GEP->getNumOperands(); i != e; ++i, ++GTI) {
1036 ConstantInt *OpC = dyn_cast<ConstantInt>(GEP->getOperand(i));
1037 if (!OpC)
1038 return std::nullopt;
1039 if (OpC->isZero())
1040 continue; // No offset.
1041
1042 // Handle struct indices, which add their field offset to the pointer.
1043 if (StructType *STy = GTI.getStructTypeOrNull()) {
1044 Offset += DL.getStructLayout(STy)->getElementOffset(OpC->getZExtValue());
1045 continue;
1046 }
1047
1048 // Otherwise, we have a sequential type like an array or fixed-length
1049 // vector. Multiply the index by the ElementSize.
1050 TypeSize Size = GTI.getSequentialElementStride(DL);
1051 if (Size.isScalable())
1052 return std::nullopt;
1053 Offset += Size.getFixedValue() * OpC->getSExtValue();
1054 }
1055
1056 return Offset;
1057}
1058
1059std::optional<int64_t> Value::getPointerOffsetFrom(const Value *Other,
1060 const DataLayout &DL) const {
1061 const Value *Ptr1 = Other;
1062 const Value *Ptr2 = this;
1063 APInt Offset1(DL.getIndexTypeSizeInBits(Ptr1->getType()), 0);
1064 APInt Offset2(DL.getIndexTypeSizeInBits(Ptr2->getType()), 0);
1065 Ptr1 = Ptr1->stripAndAccumulateConstantOffsets(DL, Offset1, true);
1066 Ptr2 = Ptr2->stripAndAccumulateConstantOffsets(DL, Offset2, true);
1067
1068 // Handle the trivial case first.
1069 if (Ptr1 == Ptr2)
1070 return Offset2.getSExtValue() - Offset1.getSExtValue();
1071
1072 const GEPOperator *GEP1 = dyn_cast<GEPOperator>(Ptr1);
1073 const GEPOperator *GEP2 = dyn_cast<GEPOperator>(Ptr2);
1074
1075 // Right now we handle the case when Ptr1/Ptr2 are both GEPs with an identical
1076 // base. After that base, they may have some number of common (and
1077 // potentially variable) indices. After that they handle some constant
1078 // offset, which determines their offset from each other. At this point, we
1079 // handle no other case.
1080 if (!GEP1 || !GEP2 || GEP1->getOperand(0) != GEP2->getOperand(0) ||
1081 GEP1->getSourceElementType() != GEP2->getSourceElementType())
1082 return std::nullopt;
1083
1084 // Skip any common indices and track the GEP types.
1085 unsigned Idx = 1;
1086 for (; Idx != GEP1->getNumOperands() && Idx != GEP2->getNumOperands(); ++Idx)
1087 if (GEP1->getOperand(Idx) != GEP2->getOperand(Idx))
1088 break;
1089
1090 auto IOffset1 = getOffsetFromIndex(GEP1, Idx, DL);
1091 auto IOffset2 = getOffsetFromIndex(GEP2, Idx, DL);
1092 if (!IOffset1 || !IOffset2)
1093 return std::nullopt;
1094 return *IOffset2 - *IOffset1 + Offset2.getSExtValue() -
1095 Offset1.getSExtValue();
1096}
1097
1098const Value *Value::DoPHITranslation(const BasicBlock *CurBB,
1099 const BasicBlock *PredBB) const {
1100 auto *PN = dyn_cast<PHINode>(this);
1101 if (PN && PN->getParent() == CurBB)
1102 return PN->getIncomingValueForBlock(PredBB);
1103 return this;
1104}
1105
1106LLVMContext &Value::getContext() const { return VTy->getContext(); }
1107
1108void Value::reverseUseList() {
1109 if (!UseList || !UseList->Next)
1110 // No need to reverse 0 or 1 uses.
1111 return;
1112
1113 Use *Head = UseList;
1114 Use *Current = UseList->Next;
1115 Head->Next = nullptr;
1116 while (Current) {
1117 Use *Next = Current->Next;
1118 Current->Next = Head;
1119 Head->Prev = &Current->Next;
1120 Head = Current;
1121 Current = Next;
1122 }
1123 UseList = Head;
1124 Head->Prev = &UseList;
1125}
1126
1127bool Value::isSwiftError() const {
1128 auto *Arg = dyn_cast<Argument>(this);
1129 if (Arg)
1130 return Arg->hasSwiftErrorAttr();
1131 auto *Alloca = dyn_cast<AllocaInst>(this);
1132 if (!Alloca)
1133 return false;
1134 return Alloca->isSwiftError();
1135}
1136
1137//===----------------------------------------------------------------------===//
1138// ValueHandleBase Class
1139//===----------------------------------------------------------------------===//
1140
1141void ValueHandleBase::AddToExistingUseList(ValueHandleBase **List) {
1142 assert(List && "Handle list is null?");
1143
1144 // Splice ourselves into the list.
1145 Next = *List;
1146 *List = this;
1147 setPrevPtr(List);
1148 if (Next) {
1149 Next->setPrevPtr(&Next);
1150 assert(getValPtr() == Next->getValPtr() && "Added to wrong list?");
1151 }
1152}
1153
1154void ValueHandleBase::AddToExistingUseListAfter(ValueHandleBase *List) {
1155 assert(List && "Must insert after existing node");
1156
1157 Next = List->Next;
1158 setPrevPtr(&List->Next);
1159 List->Next = this;
1160 if (Next)
1161 Next->setPrevPtr(&Next);
1162}
1163
1164void ValueHandleBase::AddToUseList() {
1165 assert(getValPtr() && "Null pointer doesn't have a use list!");
1166
1167 LLVMContextImpl *pImpl = getValPtr()->getContext().pImpl;
1168
1169 if (getValPtr()->HasValueHandle) {
1170 // If this value already has a ValueHandle, then it must be in the
1171 // ValueHandles map already.
1172 ValueHandleBase *&Entry = pImpl->ValueHandles[getValPtr()];
1173 assert(Entry && "Value doesn't have any handles?");
1174 AddToExistingUseList(&Entry);
1175 return;
1176 }
1177
1178 // Ok, it doesn't have any handles yet, so we must insert it into the
1179 // DenseMap. However, doing this insertion could cause the DenseMap to
1180 // reallocate itself, which would invalidate all of the PrevP pointers that
1181 // point into the old table. Handle this by checking for reallocation and
1182 // updating the stale pointers only if needed.
1183 DenseMap<Value*, ValueHandleBase*> &Handles = pImpl->ValueHandles;
1184 const void *OldBucketPtr = Handles.getPointerIntoBucketsArray();
1185
1186 ValueHandleBase *&Entry = Handles[getValPtr()];
1187 assert(!Entry && "Value really did already have handles?");
1188 AddToExistingUseList(&Entry);
1189 getValPtr()->HasValueHandle = true;
1190
1191 // If reallocation didn't happen or if this was the first insertion, don't
1192 // walk the table.
1193 if (Handles.isPointerIntoBucketsArray(OldBucketPtr) ||
1194 Handles.size() == 1) {
1195 return;
1196 }
1197
1198 // Okay, reallocation did happen. Fix the Prev Pointers.
1199 for (DenseMap<Value*, ValueHandleBase*>::iterator I = Handles.begin(),
1200 E = Handles.end(); I != E; ++I) {
1201 assert(I->second && I->first == I->second->getValPtr() &&
1202 "List invariant broken!");
1203 I->second->setPrevPtr(&I->second);
1204 }
1205}
1206
1207void ValueHandleBase::RemoveFromUseList() {
1208 assert(getValPtr() && getValPtr()->HasValueHandle &&
1209 "Pointer doesn't have a use list!");
1210
1211 // Unlink this from its use list.
1212 ValueHandleBase **PrevPtr = getPrevPtr();
1213 assert(*PrevPtr == this && "List invariant broken");
1214
1215 *PrevPtr = Next;
1216 if (Next) {
1217 assert(Next->getPrevPtr() == &Next && "List invariant broken");
1218 Next->setPrevPtr(PrevPtr);
1219 return;
1220 }
1221
1222 // If the Next pointer was null, then it is possible that this was the last
1223 // ValueHandle watching VP. If so, delete its entry from the ValueHandles
1224 // map.
1225 LLVMContextImpl *pImpl = getValPtr()->getContext().pImpl;
1226 DenseMap<Value*, ValueHandleBase*> &Handles = pImpl->ValueHandles;
1227 if (Handles.isPointerIntoBucketsArray(PrevPtr)) {
1228 Handles.erase(getValPtr());
1229 getValPtr()->HasValueHandle = false;
1230 }
1231}
1232
1233void ValueHandleBase::ValueIsDeleted(Value *V) {
1234 assert(V->HasValueHandle && "Should only be called if ValueHandles present");
1235
1236 // Get the linked list base, which is guaranteed to exist since the
1237 // HasValueHandle flag is set.
1238 LLVMContextImpl *pImpl = V->getContext().pImpl;
1239 ValueHandleBase *Entry = pImpl->ValueHandles[V];
1240 assert(Entry && "Value bit set but no entries exist");
1241
1242 // We use a local ValueHandleBase as an iterator so that ValueHandles can add
1243 // and remove themselves from the list without breaking our iteration. This
1244 // is not really an AssertingVH; we just have to give ValueHandleBase a kind.
1245 // Note that we deliberately do not the support the case when dropping a value
1246 // handle results in a new value handle being permanently added to the list
1247 // (as might occur in theory for CallbackVH's): the new value handle will not
1248 // be processed and the checking code will mete out righteous punishment if
1249 // the handle is still present once we have finished processing all the other
1250 // value handles (it is fine to momentarily add then remove a value handle).
1251 for (ValueHandleBase Iterator(Assert, *Entry); Entry; Entry = Iterator.Next) {
1252 Iterator.RemoveFromUseList();
1253 Iterator.AddToExistingUseListAfter(Entry);
1254 assert(Entry->Next == &Iterator && "Loop invariant broken.");
1255
1256 switch (Entry->getKind()) {
1257 case Assert:
1258 break;
1259 case Weak:
1260 case WeakTracking:
1261 // WeakTracking and Weak just go to null, which unlinks them
1262 // from the list.
1263 Entry->operator=(nullptr);
1264 break;
1265 case Callback:
1266 // Forward to the subclass's implementation.
1267 static_cast<CallbackVH*>(Entry)->deleted();
1268 break;
1269 }
1270 }
1271
1272 // All callbacks, weak references, and assertingVHs should be dropped by now.
1273 if (V->HasValueHandle) {
1274#ifndef NDEBUG // Only in +Asserts mode...
1275 dbgs() << "While deleting: " << *V->getType() << " %" << V->getName()
1276 << "\n";
1277 if (pImpl->ValueHandles[V]->getKind() == Assert)
1278 llvm_unreachable("An asserting value handle still pointed to this"
1279 " value!");
1280
1281#endif
1282 llvm_unreachable("All references to V were not removed?");
1283 }
1284}
1285
1286void ValueHandleBase::ValueIsRAUWd(Value *Old, Value *New) {
1287 assert(Old->HasValueHandle &&"Should only be called if ValueHandles present");
1288 assert(Old != New && "Changing value into itself!");
1289 assert(Old->getType() == New->getType() &&
1290 "replaceAllUses of value with new value of different type!");
1291
1292 // Get the linked list base, which is guaranteed to exist since the
1293 // HasValueHandle flag is set.
1294 LLVMContextImpl *pImpl = Old->getContext().pImpl;
1295 ValueHandleBase *Entry = pImpl->ValueHandles[Old];
1296
1297 assert(Entry && "Value bit set but no entries exist");
1298
1299 // We use a local ValueHandleBase as an iterator so that
1300 // ValueHandles can add and remove themselves from the list without
1301 // breaking our iteration. This is not really an AssertingVH; we
1302 // just have to give ValueHandleBase some kind.
1303 for (ValueHandleBase Iterator(Assert, *Entry); Entry; Entry = Iterator.Next) {
1304 Iterator.RemoveFromUseList();
1305 Iterator.AddToExistingUseListAfter(Entry);
1306 assert(Entry->Next == &Iterator && "Loop invariant broken.");
1307
1308 switch (Entry->getKind()) {
1309 case Assert:
1310 case Weak:
1311 // Asserting and Weak handles do not follow RAUW implicitly.
1312 break;
1313 case WeakTracking:
1314 // Weak goes to the new value, which will unlink it from Old's list.
1315 Entry->operator=(New);
1316 break;
1317 case Callback:
1318 // Forward to the subclass's implementation.
1319 static_cast<CallbackVH*>(Entry)->allUsesReplacedWith(New);
1320 break;
1321 }
1322 }
1323
1324#ifndef NDEBUG
1325 // If any new weak value handles were added while processing the
1326 // list, then complain about it now.
1327 if (Old->HasValueHandle)
1328 for (Entry = pImpl->ValueHandles[Old]; Entry; Entry = Entry->Next)
1329 switch (Entry->getKind()) {
1330 case WeakTracking:
1331 dbgs() << "After RAUW from " << *Old->getType() << " %"
1332 << Old->getName() << " to " << *New->getType() << " %"
1333 << New->getName() << "\n";
1335 "A weak tracking value handle still pointed to the old value!\n");
1336 default:
1337 break;
1338 }
1339#endif
1340}
1341
1342// Pin the vtable to this file.
1343void CallbackVH::anchor() {}
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
static GCRegistry::Add< ShadowStackGC > C("shadow-stack", "Very portable GC for uncooperative code generators")
static GCRegistry::Add< ErlangGC > A("erlang", "erlang-compatible garbage collector")
static GCRegistry::Add< CoreCLRGC > E("coreclr", "CoreCLR-compatible GC")
This file contains the declarations for the subclasses of Constant, which represent the different fla...
This file defines the DenseMap class.
Hexagon Common GEP
Module.h This file contains the declarations for the Module class.
iv users
Definition IVUsers.cpp:48
#define F(x, y, z)
Definition MD5.cpp:54
#define I(x, y, z)
Definition MD5.cpp:57
Machine Check Debug Module
const uint64_t BitWidth
#define P(N)
if(PassOpts->AAPipeline)
static StringRef getName(Value *V)
Basic Register Allocator
static std::optional< int64_t > getOffsetFromIndex(const GEPOperator *GEP, unsigned Idx, const DataLayout &DL)
Definition Value.cpp:1027
static void NoopCallback(const Value *)
Definition Value.cpp:634
static bool contains(SmallPtrSetImpl< ConstantExpr * > &Cache, ConstantExpr *Expr, Constant *C)
Definition Value.cpp:487
static cl::opt< bool > UseDerefAtPointSemantics("use-dereferenceable-at-point-semantics", cl::Hidden, cl::init(false), cl::desc("Deref attributes and metadata infer facts at definition only"))
static Type * checkType(Type *Ty)
Definition Value.cpp:46
static bool getSymTab(Value *V, ValueSymbolTable *&ST)
Definition Value.cpp:272
static const Value * stripPointerCastsAndOffsets(const Value *V, function_ref< void(const Value *)> Func=NoopCallback< StripKind >)
Definition Value.cpp:637
static void replaceDbgUsesOutsideBlock(Value *V, Value *New, BasicBlock *BB)
Replace debug record uses of MetadataAsValue(ValueAsMetadata(V)) outside BB with New.
Definition Value.cpp:594
static bool isUnDroppableUser(const User *U)
Definition Value.cpp:174
This file defines the SmallString class.
static SymbolRef::Type getType(const Symbol *Sym)
Definition TapiFile.cpp:39
unsigned countr_zero() const
Count the number of trailing zero bits.
Definition APInt.h:1640
LLVM_ABI void replaceSuccessorsPhiUsesWith(BasicBlock *Old, BasicBlock *New)
Update all phi nodes in this basic block's successors to refer to basic block New instead of basic bl...
iterator end()
Definition BasicBlock.h:472
iterator begin()
Instruction iterator methods.
Definition BasicBlock.h:459
const Function * getParent() const
Return the enclosing method, or null if none.
Definition BasicBlock.h:213
uint64_t getLimitedValue(uint64_t Limit=~0ULL) const
getLimitedValue - If the value is smaller than the specified limit, return it, otherwise return the l...
Definition Constants.h:272
bool isZero() const
This is just a convenience method to make client code smaller for a common code.
Definition Constants.h:222
int64_t getSExtValue() const
Return the constant as a 64-bit integer value after it has been sign extended as appropriate for the ...
Definition Constants.h:177
uint64_t getZExtValue() const
Return the constant as a 64-bit unsigned integer value after it has been zero extended as appropriate...
Definition Constants.h:171
const APInt & getValue() const
Return the constant as an APInt value reference.
Definition Constants.h:162
LLVM_ABI const BasicBlock * getParent() const
bool erase(const KeyT &Val)
Definition DenseMap.h:330
unsigned size() const
Definition DenseMap.h:110
iterator begin()
Definition DenseMap.h:78
iterator end()
Definition DenseMap.h:81
bool isPointerIntoBucketsArray(const void *Ptr) const
isPointerIntoBucketsArray - Return true if the specified pointer points somewhere into the DenseMap's...
Definition DenseMap.h:360
const void * getPointerIntoBucketsArray() const
getPointerIntoBucketsArray() - Return an opaque pointer into the buckets array.
Definition DenseMap.h:367
LLVM_ABI Type * getSourceElementType() const
Definition Operator.cpp:71
bool hasExternalWeakLinkage() const
Module * getParent()
Get the module that this global value is contained inside of...
Type * getValueType() const
DenseMap< const Value *, ValueName * > ValueNames
ValueHandlesTy ValueHandles
LLVMContextImpl *const pImpl
Definition LLVMContext.h:70
std::pair< iterator, bool > insert(PtrType Ptr)
Inserts Ptr if and only if there is no element in the container equal to Ptr.
void push_back(const T &Elt)
static StringMapEntry * create(StringRef key, AllocatorTy &allocator, InitTy &&...initVals)
constexpr bool empty() const
empty - Check if the string is empty.
Definition StringRef.h:143
bool contains(StringRef Other) const
Return true if the given string is a substring of *this, and false otherwise.
Definition StringRef.h:426
bool isTriviallyEmpty() const
Check if this twine is trivially empty; a false return value does not necessarily mean the twine is e...
Definition Twine.h:398
StringRef toStringRef(SmallVectorImpl< char > &Out) const
This returns the twine as a single StringRef if it can be represented as such.
Definition Twine.h:461
bool isSized(SmallPtrSetImpl< Type * > *Visited=nullptr) const
Return true if it makes sense to take the size of this type.
Definition Type.h:311
op_range operands()
Definition User.h:293
LLVM_ABI bool isDroppable() const
A droppable user is a user for which uses can be dropped without affecting correctness and should be ...
Definition User.cpp:119
Value * getOperand(unsigned i) const
Definition User.h:233
unsigned getNumOperands() const
Definition User.h:255
LLVM_ABI Value(Type *Ty, unsigned scid)
Definition Value.cpp:53
LLVM_ABI ~Value()
Value's destructor should be virtual by design, but that would require that Value and all of its subc...
Definition Value.cpp:76
TypeSize getSequentialElementStride(const DataLayout &DL) const
CallInst * Call
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
constexpr char Align[]
Key for Kernel::Arg::Metadata::mAlign.
@ Entry
Definition COFF.h:862
@ CE
Windows NT (Windows on ARM)
Definition MCAsmInfo.h:48
initializer< Ty > init(const Ty &Val)
@ Assume
Do not drop type tests (default).
llvm::unique_function< void(llvm::Expected< T >)> Callback
A Callback<T> is a void function that accepts Expected<T>.
Definition Transport.h:139
@ User
could "use" a pointer
NodeAddr< UseNode * > Use
Definition RDFGraph.h:385
NodeAddr< FuncNode * > Func
Definition RDFGraph.h:393
bool empty() const
Definition BasicBlock.h:101
Context & getContext() const
Definition BasicBlock.h:99
This is an optimization pass for GlobalISel generic memory operations.
StringMapEntry< Value * > ValueName
Definition Value.h:56
iterator_range< early_inc_iterator_impl< detail::IterOfRange< RangeT > > > make_early_inc_range(RangeT &&Range)
Make a range that does early increment to allow mutation of the underlying range without disrupting i...
Definition STLExtras.h:632
bool hasNItemsOrMore(IterTy &&Begin, IterTy &&End, unsigned N, Pred &&ShouldBeCounted=[](const decltype(*std::declval< IterTy >()) &) { return true;}, std::enable_if_t< !std::is_base_of< std::random_access_iterator_tag, typename std::iterator_traits< std::remove_reference_t< decltype(Begin)> >::iterator_category >::value, void > *=nullptr)
Return true if the sequence [Begin, End) has N or more items.
Definition STLExtras.h:2614
bool hasNItems(IterTy &&Begin, IterTy &&End, unsigned N, Pred &&ShouldBeCounted=[](const decltype(*std::declval< IterTy >()) &) { return true;}, std::enable_if_t< !std::is_base_of< std::random_access_iterator_tag, typename std::iterator_traits< std::remove_reference_t< decltype(Begin)> >::iterator_category >::value, void > *=nullptr)
Return true if the sequence [Begin, End) has exactly N items.
Definition STLExtras.h:2589
LLVM_ABI raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
Definition Debug.cpp:207
bool isPointerTy(const Type *T)
Definition SPIRVUtils.h:361
generic_gep_type_iterator<> gep_type_iterator
bool isa(const From &Val)
isa<X> - Return true if the parameter to the template is an instance of one of the template type argu...
Definition Casting.h:547
FunctionAddr VTableAddr Next
Definition InstrProf.h:141
gep_type_iterator gep_type_begin(const User *GEP)
bool is_contained(R &&Range, const E &Element)
Returns true if Element is found in Range.
Definition STLExtras.h:1945
LLVM_ABI void findDbgUsers(Value *V, SmallVectorImpl< DbgVariableRecord * > &DbgVariableRecords)
Finds the debug info records describing a value.
#define N
StringMapEntry< uint32_t > * Tag
The operand bundle tag, interned by LLVMContextImpl::getOrInsertBundleTag.
Align valueOrOne() const
For convenience, returns a valid alignment or 1 if undefined.
Definition Alignment.h:130