1 //===- LazyValueInfo.cpp - Value constraint analysis ------------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
9 // This file defines the interface for lazy computation of value constraint
12 //===----------------------------------------------------------------------===//
14 #include "llvm/Analysis/LazyValueInfo.h"
15 #include "llvm/ADT/DenseSet.h"
16 #include "llvm/ADT/STLExtras.h"
17 #include "llvm/Analysis/AssumptionCache.h"
18 #include "llvm/Analysis/ConstantFolding.h"
19 #include "llvm/Analysis/InstructionSimplify.h"
20 #include "llvm/Analysis/TargetLibraryInfo.h"
21 #include "llvm/Analysis/ValueLattice.h"
22 #include "llvm/Analysis/ValueTracking.h"
23 #include "llvm/IR/AssemblyAnnotationWriter.h"
24 #include "llvm/IR/CFG.h"
25 #include "llvm/IR/ConstantRange.h"
26 #include "llvm/IR/Constants.h"
27 #include "llvm/IR/DataLayout.h"
28 #include "llvm/IR/Dominators.h"
29 #include "llvm/IR/Instructions.h"
30 #include "llvm/IR/IntrinsicInst.h"
31 #include "llvm/IR/Intrinsics.h"
32 #include "llvm/IR/LLVMContext.h"
33 #include "llvm/IR/PatternMatch.h"
34 #include "llvm/IR/ValueHandle.h"
35 #include "llvm/InitializePasses.h"
36 #include "llvm/Support/Debug.h"
37 #include "llvm/Support/FormattedStream.h"
38 #include "llvm/Support/KnownBits.h"
39 #include "llvm/Support/raw_ostream.h"
42 using namespace PatternMatch
;
44 #define DEBUG_TYPE "lazy-value-info"
46 // This is the number of worklist items we will process to try to discover an
47 // answer for a given value.
48 static const unsigned MaxProcessedPerValue
= 500;
50 char LazyValueInfoWrapperPass::ID
= 0;
51 LazyValueInfoWrapperPass::LazyValueInfoWrapperPass() : FunctionPass(ID
) {
52 initializeLazyValueInfoWrapperPassPass(*PassRegistry::getPassRegistry());
54 INITIALIZE_PASS_BEGIN(LazyValueInfoWrapperPass
, "lazy-value-info",
55 "Lazy Value Information Analysis", false, true)
56 INITIALIZE_PASS_DEPENDENCY(AssumptionCacheTracker
)
57 INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfoWrapperPass
)
58 INITIALIZE_PASS_END(LazyValueInfoWrapperPass
, "lazy-value-info",
59 "Lazy Value Information Analysis", false, true)
62 FunctionPass
*createLazyValueInfoPass() { return new LazyValueInfoWrapperPass(); }
65 AnalysisKey
LazyValueAnalysis::Key
;
67 /// Returns true if this lattice value represents at most one possible value.
68 /// This is as precise as any lattice value can get while still representing
70 static bool hasSingleValue(const ValueLatticeElement
&Val
) {
71 if (Val
.isConstantRange() &&
72 Val
.getConstantRange().isSingleElement())
73 // Integer constants are single element ranges
76 // Non integer constants
81 /// Combine two sets of facts about the same value into a single set of
82 /// facts. Note that this method is not suitable for merging facts along
83 /// different paths in a CFG; that's what the mergeIn function is for. This
84 /// is for merging facts gathered about the same value at the same location
85 /// through two independent means.
87 /// * This method does not promise to return the most precise possible lattice
88 /// value implied by A and B. It is allowed to return any lattice element
89 /// which is at least as strong as *either* A or B (unless our facts
90 /// conflict, see below).
91 /// * Due to unreachable code, the intersection of two lattice values could be
92 /// contradictory. If this happens, we return some valid lattice value so as
93 /// not confuse the rest of LVI. Ideally, we'd always return Undefined, but
94 /// we do not make this guarantee. TODO: This would be a useful enhancement.
95 static ValueLatticeElement
intersect(const ValueLatticeElement
&A
,
96 const ValueLatticeElement
&B
) {
97 // Undefined is the strongest state. It means the value is known to be along
98 // an unreachable path.
104 // If we gave up for one, but got a useable fact from the other, use it.
105 if (A
.isOverdefined())
107 if (B
.isOverdefined())
110 // Can't get any more precise than constants.
111 if (hasSingleValue(A
))
113 if (hasSingleValue(B
))
116 // Could be either constant range or not constant here.
117 if (!A
.isConstantRange() || !B
.isConstantRange()) {
118 // TODO: Arbitrary choice, could be improved
122 // Intersect two constant ranges
123 ConstantRange Range
=
124 A
.getConstantRange().intersectWith(B
.getConstantRange());
125 // Note: An empty range is implicitly converted to unknown or undef depending
126 // on MayIncludeUndef internally.
127 return ValueLatticeElement::getRange(
128 std::move(Range
), /*MayIncludeUndef=*/A
.isConstantRangeIncludingUndef() ||
129 B
.isConstantRangeIncludingUndef());
132 //===----------------------------------------------------------------------===//
133 // LazyValueInfoCache Decl
134 //===----------------------------------------------------------------------===//
137 /// A callback value handle updates the cache when values are erased.
138 class LazyValueInfoCache
;
139 struct LVIValueHandle final
: public CallbackVH
{
140 LazyValueInfoCache
*Parent
;
142 LVIValueHandle(Value
*V
, LazyValueInfoCache
*P
= nullptr)
143 : CallbackVH(V
), Parent(P
) { }
145 void deleted() override
;
146 void allUsesReplacedWith(Value
*V
) override
{
150 } // end anonymous namespace
153 using NonNullPointerSet
= SmallDenseSet
<AssertingVH
<Value
>, 2>;
155 /// This is the cache kept by LazyValueInfo which
156 /// maintains information about queries across the clients' queries.
157 class LazyValueInfoCache
{
158 /// This is all of the cached information for one basic block. It contains
159 /// the per-value lattice elements, as well as a separate set for
160 /// overdefined values to reduce memory usage. Additionally pointers
161 /// dereferenced in the block are cached for nullability queries.
162 struct BlockCacheEntry
{
163 SmallDenseMap
<AssertingVH
<Value
>, ValueLatticeElement
, 4> LatticeElements
;
164 SmallDenseSet
<AssertingVH
<Value
>, 4> OverDefined
;
165 // std::nullopt indicates that the nonnull pointers for this basic block
166 // block have not been computed yet.
167 std::optional
<NonNullPointerSet
> NonNullPointers
;
170 /// Cached information per basic block.
171 DenseMap
<PoisoningVH
<BasicBlock
>, std::unique_ptr
<BlockCacheEntry
>>
173 /// Set of value handles used to erase values from the cache on deletion.
174 DenseSet
<LVIValueHandle
, DenseMapInfo
<Value
*>> ValueHandles
;
176 const BlockCacheEntry
*getBlockEntry(BasicBlock
*BB
) const {
177 auto It
= BlockCache
.find_as(BB
);
178 if (It
== BlockCache
.end())
180 return It
->second
.get();
183 BlockCacheEntry
*getOrCreateBlockEntry(BasicBlock
*BB
) {
184 auto It
= BlockCache
.find_as(BB
);
185 if (It
== BlockCache
.end())
186 It
= BlockCache
.insert({ BB
, std::make_unique
<BlockCacheEntry
>() })
189 return It
->second
.get();
192 void addValueHandle(Value
*Val
) {
193 auto HandleIt
= ValueHandles
.find_as(Val
);
194 if (HandleIt
== ValueHandles
.end())
195 ValueHandles
.insert({ Val
, this });
199 void insertResult(Value
*Val
, BasicBlock
*BB
,
200 const ValueLatticeElement
&Result
) {
201 BlockCacheEntry
*Entry
= getOrCreateBlockEntry(BB
);
203 // Insert over-defined values into their own cache to reduce memory
205 if (Result
.isOverdefined())
206 Entry
->OverDefined
.insert(Val
);
208 Entry
->LatticeElements
.insert({ Val
, Result
});
213 std::optional
<ValueLatticeElement
>
214 getCachedValueInfo(Value
*V
, BasicBlock
*BB
) const {
215 const BlockCacheEntry
*Entry
= getBlockEntry(BB
);
219 if (Entry
->OverDefined
.count(V
))
220 return ValueLatticeElement::getOverdefined();
222 auto LatticeIt
= Entry
->LatticeElements
.find_as(V
);
223 if (LatticeIt
== Entry
->LatticeElements
.end())
226 return LatticeIt
->second
;
229 bool isNonNullAtEndOfBlock(
230 Value
*V
, BasicBlock
*BB
,
231 function_ref
<NonNullPointerSet(BasicBlock
*)> InitFn
) {
232 BlockCacheEntry
*Entry
= getOrCreateBlockEntry(BB
);
233 if (!Entry
->NonNullPointers
) {
234 Entry
->NonNullPointers
= InitFn(BB
);
235 for (Value
*V
: *Entry
->NonNullPointers
)
239 return Entry
->NonNullPointers
->count(V
);
242 /// clear - Empty the cache.
245 ValueHandles
.clear();
248 /// Inform the cache that a given value has been deleted.
249 void eraseValue(Value
*V
);
251 /// This is part of the update interface to inform the cache
252 /// that a block has been deleted.
253 void eraseBlock(BasicBlock
*BB
);
255 /// Updates the cache to remove any influence an overdefined value in
256 /// OldSucc might have (unless also overdefined in NewSucc). This just
257 /// flushes elements from the cache and does not add any.
258 void threadEdgeImpl(BasicBlock
*OldSucc
,BasicBlock
*NewSucc
);
262 void LazyValueInfoCache::eraseValue(Value
*V
) {
263 for (auto &Pair
: BlockCache
) {
264 Pair
.second
->LatticeElements
.erase(V
);
265 Pair
.second
->OverDefined
.erase(V
);
266 if (Pair
.second
->NonNullPointers
)
267 Pair
.second
->NonNullPointers
->erase(V
);
270 auto HandleIt
= ValueHandles
.find_as(V
);
271 if (HandleIt
!= ValueHandles
.end())
272 ValueHandles
.erase(HandleIt
);
275 void LVIValueHandle::deleted() {
276 // This erasure deallocates *this, so it MUST happen after we're done
277 // using any and all members of *this.
278 Parent
->eraseValue(*this);
281 void LazyValueInfoCache::eraseBlock(BasicBlock
*BB
) {
282 BlockCache
.erase(BB
);
285 void LazyValueInfoCache::threadEdgeImpl(BasicBlock
*OldSucc
,
286 BasicBlock
*NewSucc
) {
287 // When an edge in the graph has been threaded, values that we could not
288 // determine a value for before (i.e. were marked overdefined) may be
289 // possible to solve now. We do NOT try to proactively update these values.
290 // Instead, we clear their entries from the cache, and allow lazy updating to
291 // recompute them when needed.
293 // The updating process is fairly simple: we need to drop cached info
294 // for all values that were marked overdefined in OldSucc, and for those same
295 // values in any successor of OldSucc (except NewSucc) in which they were
296 // also marked overdefined.
297 std::vector
<BasicBlock
*> worklist
;
298 worklist
.push_back(OldSucc
);
300 const BlockCacheEntry
*Entry
= getBlockEntry(OldSucc
);
301 if (!Entry
|| Entry
->OverDefined
.empty())
302 return; // Nothing to process here.
303 SmallVector
<Value
*, 4> ValsToClear(Entry
->OverDefined
.begin(),
304 Entry
->OverDefined
.end());
306 // Use a worklist to perform a depth-first search of OldSucc's successors.
307 // NOTE: We do not need a visited list since any blocks we have already
308 // visited will have had their overdefined markers cleared already, and we
309 // thus won't loop to their successors.
310 while (!worklist
.empty()) {
311 BasicBlock
*ToUpdate
= worklist
.back();
314 // Skip blocks only accessible through NewSucc.
315 if (ToUpdate
== NewSucc
) continue;
317 // If a value was marked overdefined in OldSucc, and is here too...
318 auto OI
= BlockCache
.find_as(ToUpdate
);
319 if (OI
== BlockCache
.end() || OI
->second
->OverDefined
.empty())
321 auto &ValueSet
= OI
->second
->OverDefined
;
323 bool changed
= false;
324 for (Value
*V
: ValsToClear
) {
325 if (!ValueSet
.erase(V
))
328 // If we removed anything, then we potentially need to update
329 // blocks successors too.
333 if (!changed
) continue;
335 llvm::append_range(worklist
, successors(ToUpdate
));
341 /// An assembly annotator class to print LazyValueCache information in
343 class LazyValueInfoImpl
;
344 class LazyValueInfoAnnotatedWriter
: public AssemblyAnnotationWriter
{
345 LazyValueInfoImpl
*LVIImpl
;
346 // While analyzing which blocks we can solve values for, we need the dominator
351 LazyValueInfoAnnotatedWriter(LazyValueInfoImpl
*L
, DominatorTree
&DTree
)
352 : LVIImpl(L
), DT(DTree
) {}
354 void emitBasicBlockStartAnnot(const BasicBlock
*BB
,
355 formatted_raw_ostream
&OS
) override
;
357 void emitInstructionAnnot(const Instruction
*I
,
358 formatted_raw_ostream
&OS
) override
;
362 // The actual implementation of the lazy analysis and update. Note that the
363 // inheritance from LazyValueInfoCache is intended to be temporary while
364 // splitting the code and then transitioning to a has-a relationship.
365 class LazyValueInfoImpl
{
367 /// Cached results from previous queries
368 LazyValueInfoCache TheCache
;
370 /// This stack holds the state of the value solver during a query.
371 /// It basically emulates the callstack of the naive
372 /// recursive value lookup process.
373 SmallVector
<std::pair
<BasicBlock
*, Value
*>, 8> BlockValueStack
;
375 /// Keeps track of which block-value pairs are in BlockValueStack.
376 DenseSet
<std::pair
<BasicBlock
*, Value
*> > BlockValueSet
;
378 /// Push BV onto BlockValueStack unless it's already in there.
379 /// Returns true on success.
380 bool pushBlockValue(const std::pair
<BasicBlock
*, Value
*> &BV
) {
381 if (!BlockValueSet
.insert(BV
).second
)
382 return false; // It's already in the stack.
384 LLVM_DEBUG(dbgs() << "PUSH: " << *BV
.second
<< " in "
385 << BV
.first
->getName() << "\n");
386 BlockValueStack
.push_back(BV
);
390 AssumptionCache
*AC
; ///< A pointer to the cache of @llvm.assume calls.
391 const DataLayout
&DL
; ///< A mandatory DataLayout
393 /// Declaration of the llvm.experimental.guard() intrinsic,
394 /// if it exists in the module.
397 std::optional
<ValueLatticeElement
> getBlockValue(Value
*Val
, BasicBlock
*BB
,
399 std::optional
<ValueLatticeElement
> getEdgeValue(Value
*V
, BasicBlock
*F
,
401 Instruction
*CxtI
= nullptr);
403 // These methods process one work item and may add more. A false value
404 // returned means that the work item was not completely processed and must
405 // be revisited after going through the new items.
406 bool solveBlockValue(Value
*Val
, BasicBlock
*BB
);
407 std::optional
<ValueLatticeElement
> solveBlockValueImpl(Value
*Val
,
409 std::optional
<ValueLatticeElement
> solveBlockValueNonLocal(Value
*Val
,
411 std::optional
<ValueLatticeElement
> solveBlockValuePHINode(PHINode
*PN
,
413 std::optional
<ValueLatticeElement
> solveBlockValueSelect(SelectInst
*S
,
415 std::optional
<ConstantRange
> getRangeFor(Value
*V
, Instruction
*CxtI
,
417 std::optional
<ValueLatticeElement
> solveBlockValueBinaryOpImpl(
418 Instruction
*I
, BasicBlock
*BB
,
419 std::function
<ConstantRange(const ConstantRange
&, const ConstantRange
&)>
421 std::optional
<ValueLatticeElement
>
422 solveBlockValueBinaryOp(BinaryOperator
*BBI
, BasicBlock
*BB
);
423 std::optional
<ValueLatticeElement
> solveBlockValueCast(CastInst
*CI
,
425 std::optional
<ValueLatticeElement
>
426 solveBlockValueOverflowIntrinsic(WithOverflowInst
*WO
, BasicBlock
*BB
);
427 std::optional
<ValueLatticeElement
> solveBlockValueIntrinsic(IntrinsicInst
*II
,
429 std::optional
<ValueLatticeElement
>
430 solveBlockValueExtractValue(ExtractValueInst
*EVI
, BasicBlock
*BB
);
431 bool isNonNullAtEndOfBlock(Value
*Val
, BasicBlock
*BB
);
432 void intersectAssumeOrGuardBlockValueConstantRange(Value
*Val
,
433 ValueLatticeElement
&BBLV
,
439 /// This is the query interface to determine the lattice value for the
440 /// specified Value* at the context instruction (if specified) or at the
441 /// start of the block.
442 ValueLatticeElement
getValueInBlock(Value
*V
, BasicBlock
*BB
,
443 Instruction
*CxtI
= nullptr);
445 /// This is the query interface to determine the lattice value for the
446 /// specified Value* at the specified instruction using only information
447 /// from assumes/guards and range metadata. Unlike getValueInBlock(), no
448 /// recursive query is performed.
449 ValueLatticeElement
getValueAt(Value
*V
, Instruction
*CxtI
);
451 /// This is the query interface to determine the lattice
452 /// value for the specified Value* that is true on the specified edge.
453 ValueLatticeElement
getValueOnEdge(Value
*V
, BasicBlock
*FromBB
,
455 Instruction
*CxtI
= nullptr);
457 /// Complete flush all previously computed values
462 /// Printing the LazyValueInfo Analysis.
463 void printLVI(Function
&F
, DominatorTree
&DTree
, raw_ostream
&OS
) {
464 LazyValueInfoAnnotatedWriter
Writer(this, DTree
);
465 F
.print(OS
, &Writer
);
468 /// This is part of the update interface to inform the cache
469 /// that a block has been deleted.
470 void eraseBlock(BasicBlock
*BB
) {
471 TheCache
.eraseBlock(BB
);
474 /// This is the update interface to inform the cache that an edge from
475 /// PredBB to OldSucc has been threaded to be from PredBB to NewSucc.
476 void threadEdge(BasicBlock
*PredBB
,BasicBlock
*OldSucc
,BasicBlock
*NewSucc
);
478 LazyValueInfoImpl(AssumptionCache
*AC
, const DataLayout
&DL
,
480 : AC(AC
), DL(DL
), GuardDecl(GuardDecl
) {}
482 } // end anonymous namespace
485 void LazyValueInfoImpl::solve() {
486 SmallVector
<std::pair
<BasicBlock
*, Value
*>, 8> StartingStack(
487 BlockValueStack
.begin(), BlockValueStack
.end());
489 unsigned processedCount
= 0;
490 while (!BlockValueStack
.empty()) {
492 // Abort if we have to process too many values to get a result for this one.
493 // Because of the design of the overdefined cache currently being per-block
494 // to avoid naming-related issues (IE it wants to try to give different
495 // results for the same name in different blocks), overdefined results don't
496 // get cached globally, which in turn means we will often try to rediscover
497 // the same overdefined result again and again. Once something like
498 // PredicateInfo is used in LVI or CVP, we should be able to make the
499 // overdefined cache global, and remove this throttle.
500 if (processedCount
> MaxProcessedPerValue
) {
502 dbgs() << "Giving up on stack because we are getting too deep\n");
503 // Fill in the original values
504 while (!StartingStack
.empty()) {
505 std::pair
<BasicBlock
*, Value
*> &e
= StartingStack
.back();
506 TheCache
.insertResult(e
.second
, e
.first
,
507 ValueLatticeElement::getOverdefined());
508 StartingStack
.pop_back();
510 BlockValueSet
.clear();
511 BlockValueStack
.clear();
514 std::pair
<BasicBlock
*, Value
*> e
= BlockValueStack
.back();
515 assert(BlockValueSet
.count(e
) && "Stack value should be in BlockValueSet!");
517 if (solveBlockValue(e
.second
, e
.first
)) {
518 // The work item was completely processed.
519 assert(BlockValueStack
.back() == e
&& "Nothing should have been pushed!");
521 std::optional
<ValueLatticeElement
> BBLV
=
522 TheCache
.getCachedValueInfo(e
.second
, e
.first
);
523 assert(BBLV
&& "Result should be in cache!");
525 dbgs() << "POP " << *e
.second
<< " in " << e
.first
->getName() << " = "
529 BlockValueStack
.pop_back();
530 BlockValueSet
.erase(e
);
532 // More work needs to be done before revisiting.
533 assert(BlockValueStack
.back() != e
&& "Stack should have been pushed!");
538 std::optional
<ValueLatticeElement
>
539 LazyValueInfoImpl::getBlockValue(Value
*Val
, BasicBlock
*BB
,
541 // If already a constant, there is nothing to compute.
542 if (Constant
*VC
= dyn_cast
<Constant
>(Val
))
543 return ValueLatticeElement::get(VC
);
545 if (std::optional
<ValueLatticeElement
> OptLatticeVal
=
546 TheCache
.getCachedValueInfo(Val
, BB
)) {
547 intersectAssumeOrGuardBlockValueConstantRange(Val
, *OptLatticeVal
, CxtI
);
548 return OptLatticeVal
;
551 // We have hit a cycle, assume overdefined.
552 if (!pushBlockValue({ BB
, Val
}))
553 return ValueLatticeElement::getOverdefined();
555 // Yet to be resolved.
559 static ValueLatticeElement
getFromRangeMetadata(Instruction
*BBI
) {
560 switch (BBI
->getOpcode()) {
562 case Instruction::Load
:
563 case Instruction::Call
:
564 case Instruction::Invoke
:
565 if (MDNode
*Ranges
= BBI
->getMetadata(LLVMContext::MD_range
))
566 if (isa
<IntegerType
>(BBI
->getType())) {
567 return ValueLatticeElement::getRange(
568 getConstantRangeFromMetadata(*Ranges
));
572 // Nothing known - will be intersected with other facts
573 return ValueLatticeElement::getOverdefined();
576 bool LazyValueInfoImpl::solveBlockValue(Value
*Val
, BasicBlock
*BB
) {
577 assert(!isa
<Constant
>(Val
) && "Value should not be constant");
578 assert(!TheCache
.getCachedValueInfo(Val
, BB
) &&
579 "Value should not be in cache");
581 // Hold off inserting this value into the Cache in case we have to return
582 // false and come back later.
583 std::optional
<ValueLatticeElement
> Res
= solveBlockValueImpl(Val
, BB
);
585 // Work pushed, will revisit
588 TheCache
.insertResult(Val
, BB
, *Res
);
592 std::optional
<ValueLatticeElement
>
593 LazyValueInfoImpl::solveBlockValueImpl(Value
*Val
, BasicBlock
*BB
) {
594 Instruction
*BBI
= dyn_cast
<Instruction
>(Val
);
595 if (!BBI
|| BBI
->getParent() != BB
)
596 return solveBlockValueNonLocal(Val
, BB
);
598 if (PHINode
*PN
= dyn_cast
<PHINode
>(BBI
))
599 return solveBlockValuePHINode(PN
, BB
);
601 if (auto *SI
= dyn_cast
<SelectInst
>(BBI
))
602 return solveBlockValueSelect(SI
, BB
);
604 // If this value is a nonnull pointer, record it's range and bailout. Note
605 // that for all other pointer typed values, we terminate the search at the
606 // definition. We could easily extend this to look through geps, bitcasts,
607 // and the like to prove non-nullness, but it's not clear that's worth it
608 // compile time wise. The context-insensitive value walk done inside
609 // isKnownNonZero gets most of the profitable cases at much less expense.
610 // This does mean that we have a sensitivity to where the defining
611 // instruction is placed, even if it could legally be hoisted much higher.
612 // That is unfortunate.
613 PointerType
*PT
= dyn_cast
<PointerType
>(BBI
->getType());
614 if (PT
&& isKnownNonZero(BBI
, DL
))
615 return ValueLatticeElement::getNot(ConstantPointerNull::get(PT
));
617 if (BBI
->getType()->isIntegerTy()) {
618 if (auto *CI
= dyn_cast
<CastInst
>(BBI
))
619 return solveBlockValueCast(CI
, BB
);
621 if (BinaryOperator
*BO
= dyn_cast
<BinaryOperator
>(BBI
))
622 return solveBlockValueBinaryOp(BO
, BB
);
624 if (auto *EVI
= dyn_cast
<ExtractValueInst
>(BBI
))
625 return solveBlockValueExtractValue(EVI
, BB
);
627 if (auto *II
= dyn_cast
<IntrinsicInst
>(BBI
))
628 return solveBlockValueIntrinsic(II
, BB
);
631 LLVM_DEBUG(dbgs() << " compute BB '" << BB
->getName()
632 << "' - unknown inst def found.\n");
633 return getFromRangeMetadata(BBI
);
636 static void AddNonNullPointer(Value
*Ptr
, NonNullPointerSet
&PtrSet
) {
637 // TODO: Use NullPointerIsDefined instead.
638 if (Ptr
->getType()->getPointerAddressSpace() == 0)
639 PtrSet
.insert(getUnderlyingObject(Ptr
));
642 static void AddNonNullPointersByInstruction(
643 Instruction
*I
, NonNullPointerSet
&PtrSet
) {
644 if (LoadInst
*L
= dyn_cast
<LoadInst
>(I
)) {
645 AddNonNullPointer(L
->getPointerOperand(), PtrSet
);
646 } else if (StoreInst
*S
= dyn_cast
<StoreInst
>(I
)) {
647 AddNonNullPointer(S
->getPointerOperand(), PtrSet
);
648 } else if (MemIntrinsic
*MI
= dyn_cast
<MemIntrinsic
>(I
)) {
649 if (MI
->isVolatile()) return;
651 // FIXME: check whether it has a valuerange that excludes zero?
652 ConstantInt
*Len
= dyn_cast
<ConstantInt
>(MI
->getLength());
653 if (!Len
|| Len
->isZero()) return;
655 AddNonNullPointer(MI
->getRawDest(), PtrSet
);
656 if (MemTransferInst
*MTI
= dyn_cast
<MemTransferInst
>(MI
))
657 AddNonNullPointer(MTI
->getRawSource(), PtrSet
);
661 bool LazyValueInfoImpl::isNonNullAtEndOfBlock(Value
*Val
, BasicBlock
*BB
) {
662 if (NullPointerIsDefined(BB
->getParent(),
663 Val
->getType()->getPointerAddressSpace()))
666 Val
= Val
->stripInBoundsOffsets();
667 return TheCache
.isNonNullAtEndOfBlock(Val
, BB
, [](BasicBlock
*BB
) {
668 NonNullPointerSet NonNullPointers
;
669 for (Instruction
&I
: *BB
)
670 AddNonNullPointersByInstruction(&I
, NonNullPointers
);
671 return NonNullPointers
;
675 std::optional
<ValueLatticeElement
>
676 LazyValueInfoImpl::solveBlockValueNonLocal(Value
*Val
, BasicBlock
*BB
) {
677 ValueLatticeElement Result
; // Start Undefined.
679 // If this is the entry block, we must be asking about an argument. The
680 // value is overdefined.
681 if (BB
->isEntryBlock()) {
682 assert(isa
<Argument
>(Val
) && "Unknown live-in to the entry block");
683 return ValueLatticeElement::getOverdefined();
686 // Loop over all of our predecessors, merging what we know from them into
687 // result. If we encounter an unexplored predecessor, we eagerly explore it
688 // in a depth first manner. In practice, this has the effect of discovering
689 // paths we can't analyze eagerly without spending compile times analyzing
690 // other paths. This heuristic benefits from the fact that predecessors are
691 // frequently arranged such that dominating ones come first and we quickly
692 // find a path to function entry. TODO: We should consider explicitly
693 // canonicalizing to make this true rather than relying on this happy
695 for (BasicBlock
*Pred
: predecessors(BB
)) {
696 std::optional
<ValueLatticeElement
> EdgeResult
= getEdgeValue(Val
, Pred
, BB
);
698 // Explore that input, then return here
701 Result
.mergeIn(*EdgeResult
);
703 // If we hit overdefined, exit early. The BlockVals entry is already set
705 if (Result
.isOverdefined()) {
706 LLVM_DEBUG(dbgs() << " compute BB '" << BB
->getName()
707 << "' - overdefined because of pred '"
708 << Pred
->getName() << "' (non local).\n");
713 // Return the merged value, which is more precise than 'overdefined'.
714 assert(!Result
.isOverdefined());
718 std::optional
<ValueLatticeElement
>
719 LazyValueInfoImpl::solveBlockValuePHINode(PHINode
*PN
, BasicBlock
*BB
) {
720 ValueLatticeElement Result
; // Start Undefined.
722 // Loop over all of our predecessors, merging what we know from them into
723 // result. See the comment about the chosen traversal order in
724 // solveBlockValueNonLocal; the same reasoning applies here.
725 for (unsigned i
= 0, e
= PN
->getNumIncomingValues(); i
!= e
; ++i
) {
726 BasicBlock
*PhiBB
= PN
->getIncomingBlock(i
);
727 Value
*PhiVal
= PN
->getIncomingValue(i
);
728 // Note that we can provide PN as the context value to getEdgeValue, even
729 // though the results will be cached, because PN is the value being used as
730 // the cache key in the caller.
731 std::optional
<ValueLatticeElement
> EdgeResult
=
732 getEdgeValue(PhiVal
, PhiBB
, BB
, PN
);
734 // Explore that input, then return here
737 Result
.mergeIn(*EdgeResult
);
739 // If we hit overdefined, exit early. The BlockVals entry is already set
741 if (Result
.isOverdefined()) {
742 LLVM_DEBUG(dbgs() << " compute BB '" << BB
->getName()
743 << "' - overdefined because of pred (local).\n");
749 // Return the merged value, which is more precise than 'overdefined'.
750 assert(!Result
.isOverdefined() && "Possible PHI in entry block?");
754 static ValueLatticeElement
getValueFromCondition(Value
*Val
, Value
*Cond
,
755 bool isTrueDest
= true);
757 // If we can determine a constraint on the value given conditions assumed by
758 // the program, intersect those constraints with BBLV
759 void LazyValueInfoImpl::intersectAssumeOrGuardBlockValueConstantRange(
760 Value
*Val
, ValueLatticeElement
&BBLV
, Instruction
*BBI
) {
761 BBI
= BBI
? BBI
: dyn_cast
<Instruction
>(Val
);
765 BasicBlock
*BB
= BBI
->getParent();
766 for (auto &AssumeVH
: AC
->assumptionsFor(Val
)) {
770 // Only check assumes in the block of the context instruction. Other
771 // assumes will have already been taken into account when the value was
772 // propagated from predecessor blocks.
773 auto *I
= cast
<CallInst
>(AssumeVH
);
774 if (I
->getParent() != BB
|| !isValidAssumeForContext(I
, BBI
))
777 BBLV
= intersect(BBLV
, getValueFromCondition(Val
, I
->getArgOperand(0)));
780 // If guards are not used in the module, don't spend time looking for them
781 if (GuardDecl
&& !GuardDecl
->use_empty() &&
782 BBI
->getIterator() != BB
->begin()) {
783 for (Instruction
&I
: make_range(std::next(BBI
->getIterator().getReverse()),
785 Value
*Cond
= nullptr;
786 if (match(&I
, m_Intrinsic
<Intrinsic::experimental_guard
>(m_Value(Cond
))))
787 BBLV
= intersect(BBLV
, getValueFromCondition(Val
, Cond
));
791 if (BBLV
.isOverdefined()) {
792 // Check whether we're checking at the terminator, and the pointer has
793 // been dereferenced in this block.
794 PointerType
*PTy
= dyn_cast
<PointerType
>(Val
->getType());
795 if (PTy
&& BB
->getTerminator() == BBI
&&
796 isNonNullAtEndOfBlock(Val
, BB
))
797 BBLV
= ValueLatticeElement::getNot(ConstantPointerNull::get(PTy
));
801 static ConstantRange
getConstantRangeOrFull(const ValueLatticeElement
&Val
,
802 Type
*Ty
, const DataLayout
&DL
) {
803 if (Val
.isConstantRange())
804 return Val
.getConstantRange();
805 return ConstantRange::getFull(DL
.getTypeSizeInBits(Ty
));
808 std::optional
<ValueLatticeElement
>
809 LazyValueInfoImpl::solveBlockValueSelect(SelectInst
*SI
, BasicBlock
*BB
) {
810 // Recurse on our inputs if needed
811 std::optional
<ValueLatticeElement
> OptTrueVal
=
812 getBlockValue(SI
->getTrueValue(), BB
, SI
);
815 ValueLatticeElement
&TrueVal
= *OptTrueVal
;
817 std::optional
<ValueLatticeElement
> OptFalseVal
=
818 getBlockValue(SI
->getFalseValue(), BB
, SI
);
821 ValueLatticeElement
&FalseVal
= *OptFalseVal
;
823 if (TrueVal
.isConstantRange() || FalseVal
.isConstantRange()) {
824 const ConstantRange
&TrueCR
=
825 getConstantRangeOrFull(TrueVal
, SI
->getType(), DL
);
826 const ConstantRange
&FalseCR
=
827 getConstantRangeOrFull(FalseVal
, SI
->getType(), DL
);
828 Value
*LHS
= nullptr;
829 Value
*RHS
= nullptr;
830 SelectPatternResult SPR
= matchSelectPattern(SI
, LHS
, RHS
);
831 // Is this a min specifically of our two inputs? (Avoid the risk of
832 // ValueTracking getting smarter looking back past our immediate inputs.)
833 if (SelectPatternResult::isMinOrMax(SPR
.Flavor
) &&
834 ((LHS
== SI
->getTrueValue() && RHS
== SI
->getFalseValue()) ||
835 (RHS
== SI
->getTrueValue() && LHS
== SI
->getFalseValue()))) {
836 ConstantRange ResultCR
= [&]() {
837 switch (SPR
.Flavor
) {
839 llvm_unreachable("unexpected minmax type!");
840 case SPF_SMIN
: /// Signed minimum
841 return TrueCR
.smin(FalseCR
);
842 case SPF_UMIN
: /// Unsigned minimum
843 return TrueCR
.umin(FalseCR
);
844 case SPF_SMAX
: /// Signed maximum
845 return TrueCR
.smax(FalseCR
);
846 case SPF_UMAX
: /// Unsigned maximum
847 return TrueCR
.umax(FalseCR
);
850 return ValueLatticeElement::getRange(
851 ResultCR
, TrueVal
.isConstantRangeIncludingUndef() ||
852 FalseVal
.isConstantRangeIncludingUndef());
855 if (SPR
.Flavor
== SPF_ABS
) {
856 if (LHS
== SI
->getTrueValue())
857 return ValueLatticeElement::getRange(
858 TrueCR
.abs(), TrueVal
.isConstantRangeIncludingUndef());
859 if (LHS
== SI
->getFalseValue())
860 return ValueLatticeElement::getRange(
861 FalseCR
.abs(), FalseVal
.isConstantRangeIncludingUndef());
864 if (SPR
.Flavor
== SPF_NABS
) {
865 ConstantRange
Zero(APInt::getZero(TrueCR
.getBitWidth()));
866 if (LHS
== SI
->getTrueValue())
867 return ValueLatticeElement::getRange(
868 Zero
.sub(TrueCR
.abs()), FalseVal
.isConstantRangeIncludingUndef());
869 if (LHS
== SI
->getFalseValue())
870 return ValueLatticeElement::getRange(
871 Zero
.sub(FalseCR
.abs()), FalseVal
.isConstantRangeIncludingUndef());
875 // Can we constrain the facts about the true and false values by using the
876 // condition itself? This shows up with idioms like e.g. select(a > 5, a, 5).
877 // TODO: We could potentially refine an overdefined true value above.
878 Value
*Cond
= SI
->getCondition();
879 TrueVal
= intersect(TrueVal
,
880 getValueFromCondition(SI
->getTrueValue(), Cond
, true));
881 FalseVal
= intersect(FalseVal
,
882 getValueFromCondition(SI
->getFalseValue(), Cond
, false));
884 ValueLatticeElement Result
= TrueVal
;
885 Result
.mergeIn(FalseVal
);
889 std::optional
<ConstantRange
>
890 LazyValueInfoImpl::getRangeFor(Value
*V
, Instruction
*CxtI
, BasicBlock
*BB
) {
891 std::optional
<ValueLatticeElement
> OptVal
= getBlockValue(V
, BB
, CxtI
);
894 return getConstantRangeOrFull(*OptVal
, V
->getType(), DL
);
897 std::optional
<ValueLatticeElement
>
898 LazyValueInfoImpl::solveBlockValueCast(CastInst
*CI
, BasicBlock
*BB
) {
899 // Without knowing how wide the input is, we can't analyze it in any useful
901 if (!CI
->getOperand(0)->getType()->isSized())
902 return ValueLatticeElement::getOverdefined();
904 // Filter out casts we don't know how to reason about before attempting to
905 // recurse on our operand. This can cut a long search short if we know we're
906 // not going to be able to get any useful information anways.
907 switch (CI
->getOpcode()) {
908 case Instruction::Trunc
:
909 case Instruction::SExt
:
910 case Instruction::ZExt
:
911 case Instruction::BitCast
:
914 // Unhandled instructions are overdefined.
915 LLVM_DEBUG(dbgs() << " compute BB '" << BB
->getName()
916 << "' - overdefined (unknown cast).\n");
917 return ValueLatticeElement::getOverdefined();
920 // Figure out the range of the LHS. If that fails, we still apply the
921 // transfer rule on the full set since we may be able to locally infer
922 // interesting facts.
923 std::optional
<ConstantRange
> LHSRes
= getRangeFor(CI
->getOperand(0), CI
, BB
);
925 // More work to do before applying this transfer rule.
927 const ConstantRange
&LHSRange
= *LHSRes
;
929 const unsigned ResultBitWidth
= CI
->getType()->getIntegerBitWidth();
931 // NOTE: We're currently limited by the set of operations that ConstantRange
932 // can evaluate symbolically. Enhancing that set will allows us to analyze
934 return ValueLatticeElement::getRange(LHSRange
.castOp(CI
->getOpcode(),
938 std::optional
<ValueLatticeElement
>
939 LazyValueInfoImpl::solveBlockValueBinaryOpImpl(
940 Instruction
*I
, BasicBlock
*BB
,
941 std::function
<ConstantRange(const ConstantRange
&, const ConstantRange
&)>
943 // Figure out the ranges of the operands. If that fails, use a
944 // conservative range, but apply the transfer rule anyways. This
945 // lets us pick up facts from expressions like "and i32 (call i32
947 std::optional
<ConstantRange
> LHSRes
= getRangeFor(I
->getOperand(0), I
, BB
);
948 std::optional
<ConstantRange
> RHSRes
= getRangeFor(I
->getOperand(1), I
, BB
);
949 if (!LHSRes
|| !RHSRes
)
950 // More work to do before applying this transfer rule.
953 const ConstantRange
&LHSRange
= *LHSRes
;
954 const ConstantRange
&RHSRange
= *RHSRes
;
955 return ValueLatticeElement::getRange(OpFn(LHSRange
, RHSRange
));
958 std::optional
<ValueLatticeElement
>
959 LazyValueInfoImpl::solveBlockValueBinaryOp(BinaryOperator
*BO
, BasicBlock
*BB
) {
960 assert(BO
->getOperand(0)->getType()->isSized() &&
961 "all operands to binary operators are sized");
962 if (auto *OBO
= dyn_cast
<OverflowingBinaryOperator
>(BO
)) {
963 unsigned NoWrapKind
= 0;
964 if (OBO
->hasNoUnsignedWrap())
965 NoWrapKind
|= OverflowingBinaryOperator::NoUnsignedWrap
;
966 if (OBO
->hasNoSignedWrap())
967 NoWrapKind
|= OverflowingBinaryOperator::NoSignedWrap
;
969 return solveBlockValueBinaryOpImpl(
971 [BO
, NoWrapKind
](const ConstantRange
&CR1
, const ConstantRange
&CR2
) {
972 return CR1
.overflowingBinaryOp(BO
->getOpcode(), CR2
, NoWrapKind
);
976 return solveBlockValueBinaryOpImpl(
977 BO
, BB
, [BO
](const ConstantRange
&CR1
, const ConstantRange
&CR2
) {
978 return CR1
.binaryOp(BO
->getOpcode(), CR2
);
982 std::optional
<ValueLatticeElement
>
983 LazyValueInfoImpl::solveBlockValueOverflowIntrinsic(WithOverflowInst
*WO
,
985 return solveBlockValueBinaryOpImpl(
986 WO
, BB
, [WO
](const ConstantRange
&CR1
, const ConstantRange
&CR2
) {
987 return CR1
.binaryOp(WO
->getBinaryOp(), CR2
);
991 std::optional
<ValueLatticeElement
>
992 LazyValueInfoImpl::solveBlockValueIntrinsic(IntrinsicInst
*II
, BasicBlock
*BB
) {
993 ValueLatticeElement MetadataVal
= getFromRangeMetadata(II
);
994 if (!ConstantRange::isIntrinsicSupported(II
->getIntrinsicID())) {
995 LLVM_DEBUG(dbgs() << " compute BB '" << BB
->getName()
996 << "' - unknown intrinsic.\n");
1000 SmallVector
<ConstantRange
, 2> OpRanges
;
1001 for (Value
*Op
: II
->args()) {
1002 std::optional
<ConstantRange
> Range
= getRangeFor(Op
, II
, BB
);
1004 return std::nullopt
;
1005 OpRanges
.push_back(*Range
);
1008 return intersect(ValueLatticeElement::getRange(ConstantRange::intrinsic(
1009 II
->getIntrinsicID(), OpRanges
)),
1013 std::optional
<ValueLatticeElement
>
1014 LazyValueInfoImpl::solveBlockValueExtractValue(ExtractValueInst
*EVI
,
1016 if (auto *WO
= dyn_cast
<WithOverflowInst
>(EVI
->getAggregateOperand()))
1017 if (EVI
->getNumIndices() == 1 && *EVI
->idx_begin() == 0)
1018 return solveBlockValueOverflowIntrinsic(WO
, BB
);
1020 // Handle extractvalue of insertvalue to allow further simplification
1021 // based on replaced with.overflow intrinsics.
1022 if (Value
*V
= simplifyExtractValueInst(
1023 EVI
->getAggregateOperand(), EVI
->getIndices(),
1024 EVI
->getModule()->getDataLayout()))
1025 return getBlockValue(V
, BB
, EVI
);
1027 LLVM_DEBUG(dbgs() << " compute BB '" << BB
->getName()
1028 << "' - overdefined (unknown extractvalue).\n");
1029 return ValueLatticeElement::getOverdefined();
1032 static bool matchICmpOperand(APInt
&Offset
, Value
*LHS
, Value
*Val
,
1033 ICmpInst::Predicate Pred
) {
1037 // Handle range checking idiom produced by InstCombine. We will subtract the
1038 // offset from the allowed range for RHS in this case.
1040 if (match(LHS
, m_Add(m_Specific(Val
), m_APInt(C
)))) {
1045 // Handle the symmetric case. This appears in saturation patterns like
1046 // (x == 16) ? 16 : (x + 1).
1047 if (match(Val
, m_Add(m_Specific(LHS
), m_APInt(C
)))) {
1052 // If (x | y) < C, then (x < C) && (y < C).
1053 if (match(LHS
, m_c_Or(m_Specific(Val
), m_Value())) &&
1054 (Pred
== ICmpInst::ICMP_ULT
|| Pred
== ICmpInst::ICMP_ULE
))
1057 // If (x & y) > C, then (x > C) && (y > C).
1058 if (match(LHS
, m_c_And(m_Specific(Val
), m_Value())) &&
1059 (Pred
== ICmpInst::ICMP_UGT
|| Pred
== ICmpInst::ICMP_UGE
))
1065 /// Get value range for a "(Val + Offset) Pred RHS" condition.
1066 static ValueLatticeElement
getValueFromSimpleICmpCondition(
1067 CmpInst::Predicate Pred
, Value
*RHS
, const APInt
&Offset
) {
1068 ConstantRange
RHSRange(RHS
->getType()->getIntegerBitWidth(),
1069 /*isFullSet=*/true);
1070 if (ConstantInt
*CI
= dyn_cast
<ConstantInt
>(RHS
))
1071 RHSRange
= ConstantRange(CI
->getValue());
1072 else if (Instruction
*I
= dyn_cast
<Instruction
>(RHS
))
1073 if (auto *Ranges
= I
->getMetadata(LLVMContext::MD_range
))
1074 RHSRange
= getConstantRangeFromMetadata(*Ranges
);
1076 ConstantRange TrueValues
=
1077 ConstantRange::makeAllowedICmpRegion(Pred
, RHSRange
);
1078 return ValueLatticeElement::getRange(TrueValues
.subtract(Offset
));
1081 static ValueLatticeElement
getValueFromICmpCondition(Value
*Val
, ICmpInst
*ICI
,
1083 Value
*LHS
= ICI
->getOperand(0);
1084 Value
*RHS
= ICI
->getOperand(1);
1086 // Get the predicate that must hold along the considered edge.
1087 CmpInst::Predicate EdgePred
=
1088 isTrueDest
? ICI
->getPredicate() : ICI
->getInversePredicate();
1090 if (isa
<Constant
>(RHS
)) {
1091 if (ICI
->isEquality() && LHS
== Val
) {
1092 if (EdgePred
== ICmpInst::ICMP_EQ
)
1093 return ValueLatticeElement::get(cast
<Constant
>(RHS
));
1094 else if (!isa
<UndefValue
>(RHS
))
1095 return ValueLatticeElement::getNot(cast
<Constant
>(RHS
));
1099 Type
*Ty
= Val
->getType();
1100 if (!Ty
->isIntegerTy())
1101 return ValueLatticeElement::getOverdefined();
1103 unsigned BitWidth
= Ty
->getScalarSizeInBits();
1104 APInt
Offset(BitWidth
, 0);
1105 if (matchICmpOperand(Offset
, LHS
, Val
, EdgePred
))
1106 return getValueFromSimpleICmpCondition(EdgePred
, RHS
, Offset
);
1108 CmpInst::Predicate SwappedPred
= CmpInst::getSwappedPredicate(EdgePred
);
1109 if (matchICmpOperand(Offset
, RHS
, Val
, SwappedPred
))
1110 return getValueFromSimpleICmpCondition(SwappedPred
, LHS
, Offset
);
1112 const APInt
*Mask
, *C
;
1113 if (match(LHS
, m_And(m_Specific(Val
), m_APInt(Mask
))) &&
1114 match(RHS
, m_APInt(C
))) {
1115 // If (Val & Mask) == C then all the masked bits are known and we can
1116 // compute a value range based on that.
1117 if (EdgePred
== ICmpInst::ICMP_EQ
) {
1119 Known
.Zero
= ~*C
& *Mask
;
1120 Known
.One
= *C
& *Mask
;
1121 return ValueLatticeElement::getRange(
1122 ConstantRange::fromKnownBits(Known
, /*IsSigned*/ false));
1124 // If (Val & Mask) != 0 then the value must be larger than the lowest set
1126 if (EdgePred
== ICmpInst::ICMP_NE
&& !Mask
->isZero() && C
->isZero()) {
1127 return ValueLatticeElement::getRange(ConstantRange::getNonEmpty(
1128 APInt::getOneBitSet(BitWidth
, Mask
->countr_zero()),
1129 APInt::getZero(BitWidth
)));
1133 // If (X urem Modulus) >= C, then X >= C.
1134 // If trunc X >= C, then X >= C.
1135 // TODO: An upper bound could be computed as well.
1136 if (match(LHS
, m_CombineOr(m_URem(m_Specific(Val
), m_Value()),
1137 m_Trunc(m_Specific(Val
)))) &&
1138 match(RHS
, m_APInt(C
))) {
1139 // Use the icmp region so we don't have to deal with different predicates.
1140 ConstantRange CR
= ConstantRange::makeExactICmpRegion(EdgePred
, *C
);
1141 if (!CR
.isEmptySet())
1142 return ValueLatticeElement::getRange(ConstantRange::getNonEmpty(
1143 CR
.getUnsignedMin().zext(BitWidth
), APInt(BitWidth
, 0)));
1146 return ValueLatticeElement::getOverdefined();
1149 // Handle conditions of the form
1150 // extractvalue(op.with.overflow(%x, C), 1).
1151 static ValueLatticeElement
getValueFromOverflowCondition(
1152 Value
*Val
, WithOverflowInst
*WO
, bool IsTrueDest
) {
1153 // TODO: This only works with a constant RHS for now. We could also compute
1154 // the range of the RHS, but this doesn't fit into the current structure of
1155 // the edge value calculation.
1157 if (WO
->getLHS() != Val
|| !match(WO
->getRHS(), m_APInt(C
)))
1158 return ValueLatticeElement::getOverdefined();
1160 // Calculate the possible values of %x for which no overflow occurs.
1161 ConstantRange NWR
= ConstantRange::makeExactNoWrapRegion(
1162 WO
->getBinaryOp(), *C
, WO
->getNoWrapKind());
1164 // If overflow is false, %x is constrained to NWR. If overflow is true, %x is
1165 // constrained to it's inverse (all values that might cause overflow).
1167 NWR
= NWR
.inverse();
1168 return ValueLatticeElement::getRange(NWR
);
1171 // Tracks a Value * condition and whether we're interested in it or its inverse
1172 typedef PointerIntPair
<Value
*, 1, bool> CondValue
;
1174 static std::optional
<ValueLatticeElement
> getValueFromConditionImpl(
1175 Value
*Val
, CondValue CondVal
, bool isRevisit
,
1176 SmallDenseMap
<CondValue
, ValueLatticeElement
> &Visited
,
1177 SmallVectorImpl
<CondValue
> &Worklist
) {
1179 Value
*Cond
= CondVal
.getPointer();
1180 bool isTrueDest
= CondVal
.getInt();
1182 if (ICmpInst
*ICI
= dyn_cast
<ICmpInst
>(Cond
))
1183 return getValueFromICmpCondition(Val
, ICI
, isTrueDest
);
1185 if (auto *EVI
= dyn_cast
<ExtractValueInst
>(Cond
))
1186 if (auto *WO
= dyn_cast
<WithOverflowInst
>(EVI
->getAggregateOperand()))
1187 if (EVI
->getNumIndices() == 1 && *EVI
->idx_begin() == 1)
1188 return getValueFromOverflowCondition(Val
, WO
, isTrueDest
);
1192 if (match(Cond
, m_Not(m_Value(N
)))) {
1193 CondValue
NKey(N
, !isTrueDest
);
1194 auto NV
= Visited
.find(NKey
);
1195 if (NV
== Visited
.end()) {
1196 Worklist
.push_back(NKey
);
1197 return std::nullopt
;
1204 if (match(Cond
, m_LogicalAnd(m_Value(L
), m_Value(R
))))
1206 else if (match(Cond
, m_LogicalOr(m_Value(L
), m_Value(R
))))
1209 return ValueLatticeElement::getOverdefined();
1211 auto LV
= Visited
.find(CondValue(L
, isTrueDest
));
1212 auto RV
= Visited
.find(CondValue(R
, isTrueDest
));
1214 // if (L && R) -> intersect L and R
1215 // if (!(L || R)) -> intersect !L and !R
1216 // if (L || R) -> union L and R
1217 // if (!(L && R)) -> union !L and !R
1218 if ((isTrueDest
^ IsAnd
) && (LV
!= Visited
.end())) {
1219 ValueLatticeElement V
= LV
->second
;
1220 if (V
.isOverdefined())
1222 if (RV
!= Visited
.end()) {
1223 V
.mergeIn(RV
->second
);
1228 if (LV
== Visited
.end() || RV
== Visited
.end()) {
1230 if (LV
== Visited
.end())
1231 Worklist
.push_back(CondValue(L
, isTrueDest
));
1232 if (RV
== Visited
.end())
1233 Worklist
.push_back(CondValue(R
, isTrueDest
));
1234 return std::nullopt
;
1237 return intersect(LV
->second
, RV
->second
);
1240 ValueLatticeElement
getValueFromCondition(Value
*Val
, Value
*Cond
,
1242 assert(Cond
&& "precondition");
1243 SmallDenseMap
<CondValue
, ValueLatticeElement
> Visited
;
1244 SmallVector
<CondValue
> Worklist
;
1246 CondValue
CondKey(Cond
, isTrueDest
);
1247 Worklist
.push_back(CondKey
);
1249 CondValue CurrentCond
= Worklist
.back();
1250 // Insert an Overdefined placeholder into the set to prevent
1251 // infinite recursion if there exists IRs that use not
1252 // dominated by its def as in this example:
1253 // "%tmp3 = or i1 undef, %tmp4"
1254 // "%tmp4 = or i1 undef, %tmp3"
1256 Visited
.try_emplace(CurrentCond
, ValueLatticeElement::getOverdefined());
1257 bool isRevisit
= !Iter
.second
;
1258 std::optional
<ValueLatticeElement
> Result
= getValueFromConditionImpl(
1259 Val
, CurrentCond
, isRevisit
, Visited
, Worklist
);
1261 Visited
[CurrentCond
] = *Result
;
1262 Worklist
.pop_back();
1264 } while (!Worklist
.empty());
1266 auto Result
= Visited
.find(CondKey
);
1267 assert(Result
!= Visited
.end());
1268 return Result
->second
;
1271 // Return true if Usr has Op as an operand, otherwise false.
1272 static bool usesOperand(User
*Usr
, Value
*Op
) {
1273 return is_contained(Usr
->operands(), Op
);
1276 // Return true if the instruction type of Val is supported by
1277 // constantFoldUser(). Currently CastInst, BinaryOperator and FreezeInst only.
1278 // Call this before calling constantFoldUser() to find out if it's even worth
1279 // attempting to call it.
1280 static bool isOperationFoldable(User
*Usr
) {
1281 return isa
<CastInst
>(Usr
) || isa
<BinaryOperator
>(Usr
) || isa
<FreezeInst
>(Usr
);
1284 // Check if Usr can be simplified to an integer constant when the value of one
1285 // of its operands Op is an integer constant OpConstVal. If so, return it as an
1286 // lattice value range with a single element or otherwise return an overdefined
1288 static ValueLatticeElement
constantFoldUser(User
*Usr
, Value
*Op
,
1289 const APInt
&OpConstVal
,
1290 const DataLayout
&DL
) {
1291 assert(isOperationFoldable(Usr
) && "Precondition");
1292 Constant
* OpConst
= Constant::getIntegerValue(Op
->getType(), OpConstVal
);
1293 // Check if Usr can be simplified to a constant.
1294 if (auto *CI
= dyn_cast
<CastInst
>(Usr
)) {
1295 assert(CI
->getOperand(0) == Op
&& "Operand 0 isn't Op");
1296 if (auto *C
= dyn_cast_or_null
<ConstantInt
>(
1297 simplifyCastInst(CI
->getOpcode(), OpConst
,
1298 CI
->getDestTy(), DL
))) {
1299 return ValueLatticeElement::getRange(ConstantRange(C
->getValue()));
1301 } else if (auto *BO
= dyn_cast
<BinaryOperator
>(Usr
)) {
1302 bool Op0Match
= BO
->getOperand(0) == Op
;
1303 bool Op1Match
= BO
->getOperand(1) == Op
;
1304 assert((Op0Match
|| Op1Match
) &&
1305 "Operand 0 nor Operand 1 isn't a match");
1306 Value
*LHS
= Op0Match
? OpConst
: BO
->getOperand(0);
1307 Value
*RHS
= Op1Match
? OpConst
: BO
->getOperand(1);
1308 if (auto *C
= dyn_cast_or_null
<ConstantInt
>(
1309 simplifyBinOp(BO
->getOpcode(), LHS
, RHS
, DL
))) {
1310 return ValueLatticeElement::getRange(ConstantRange(C
->getValue()));
1312 } else if (isa
<FreezeInst
>(Usr
)) {
1313 assert(cast
<FreezeInst
>(Usr
)->getOperand(0) == Op
&& "Operand 0 isn't Op");
1314 return ValueLatticeElement::getRange(ConstantRange(OpConstVal
));
1316 return ValueLatticeElement::getOverdefined();
1319 /// Compute the value of Val on the edge BBFrom -> BBTo. Returns false if
1320 /// Val is not constrained on the edge. Result is unspecified if return value
1322 static std::optional
<ValueLatticeElement
> getEdgeValueLocal(Value
*Val
,
1325 // TODO: Handle more complex conditionals. If (v == 0 || v2 < 1) is false, we
1326 // know that v != 0.
1327 if (BranchInst
*BI
= dyn_cast
<BranchInst
>(BBFrom
->getTerminator())) {
1328 // If this is a conditional branch and only one successor goes to BBTo, then
1329 // we may be able to infer something from the condition.
1330 if (BI
->isConditional() &&
1331 BI
->getSuccessor(0) != BI
->getSuccessor(1)) {
1332 bool isTrueDest
= BI
->getSuccessor(0) == BBTo
;
1333 assert(BI
->getSuccessor(!isTrueDest
) == BBTo
&&
1334 "BBTo isn't a successor of BBFrom");
1335 Value
*Condition
= BI
->getCondition();
1337 // If V is the condition of the branch itself, then we know exactly what
1339 if (Condition
== Val
)
1340 return ValueLatticeElement::get(ConstantInt::get(
1341 Type::getInt1Ty(Val
->getContext()), isTrueDest
));
1343 // If the condition of the branch is an equality comparison, we may be
1344 // able to infer the value.
1345 ValueLatticeElement Result
= getValueFromCondition(Val
, Condition
,
1347 if (!Result
.isOverdefined())
1350 if (User
*Usr
= dyn_cast
<User
>(Val
)) {
1351 assert(Result
.isOverdefined() && "Result isn't overdefined");
1352 // Check with isOperationFoldable() first to avoid linearly iterating
1353 // over the operands unnecessarily which can be expensive for
1354 // instructions with many operands.
1355 if (isa
<IntegerType
>(Usr
->getType()) && isOperationFoldable(Usr
)) {
1356 const DataLayout
&DL
= BBTo
->getModule()->getDataLayout();
1357 if (usesOperand(Usr
, Condition
)) {
1358 // If Val has Condition as an operand and Val can be folded into a
1359 // constant with either Condition == true or Condition == false,
1360 // propagate the constant.
1362 // ; %Val is true on the edge to %then.
1363 // %Val = and i1 %Condition, true.
1364 // br %Condition, label %then, label %else
1365 APInt
ConditionVal(1, isTrueDest
? 1 : 0);
1366 Result
= constantFoldUser(Usr
, Condition
, ConditionVal
, DL
);
1368 // If one of Val's operand has an inferred value, we may be able to
1369 // infer the value of Val.
1371 // ; %Val is 94 on the edge to %then.
1372 // %Val = add i8 %Op, 1
1373 // %Condition = icmp eq i8 %Op, 93
1374 // br i1 %Condition, label %then, label %else
1375 for (unsigned i
= 0; i
< Usr
->getNumOperands(); ++i
) {
1376 Value
*Op
= Usr
->getOperand(i
);
1377 ValueLatticeElement OpLatticeVal
=
1378 getValueFromCondition(Op
, Condition
, isTrueDest
);
1379 if (std::optional
<APInt
> OpConst
=
1380 OpLatticeVal
.asConstantInteger()) {
1381 Result
= constantFoldUser(Usr
, Op
, *OpConst
, DL
);
1388 if (!Result
.isOverdefined())
1393 // If the edge was formed by a switch on the value, then we may know exactly
1395 if (SwitchInst
*SI
= dyn_cast
<SwitchInst
>(BBFrom
->getTerminator())) {
1396 Value
*Condition
= SI
->getCondition();
1397 if (!isa
<IntegerType
>(Val
->getType()))
1398 return std::nullopt
;
1399 bool ValUsesConditionAndMayBeFoldable
= false;
1400 if (Condition
!= Val
) {
1401 // Check if Val has Condition as an operand.
1402 if (User
*Usr
= dyn_cast
<User
>(Val
))
1403 ValUsesConditionAndMayBeFoldable
= isOperationFoldable(Usr
) &&
1404 usesOperand(Usr
, Condition
);
1405 if (!ValUsesConditionAndMayBeFoldable
)
1406 return std::nullopt
;
1408 assert((Condition
== Val
|| ValUsesConditionAndMayBeFoldable
) &&
1409 "Condition != Val nor Val doesn't use Condition");
1411 bool DefaultCase
= SI
->getDefaultDest() == BBTo
;
1412 unsigned BitWidth
= Val
->getType()->getIntegerBitWidth();
1413 ConstantRange
EdgesVals(BitWidth
, DefaultCase
/*isFullSet*/);
1415 for (auto Case
: SI
->cases()) {
1416 APInt CaseValue
= Case
.getCaseValue()->getValue();
1417 ConstantRange
EdgeVal(CaseValue
);
1418 if (ValUsesConditionAndMayBeFoldable
) {
1419 User
*Usr
= cast
<User
>(Val
);
1420 const DataLayout
&DL
= BBTo
->getModule()->getDataLayout();
1421 ValueLatticeElement EdgeLatticeVal
=
1422 constantFoldUser(Usr
, Condition
, CaseValue
, DL
);
1423 if (EdgeLatticeVal
.isOverdefined())
1424 return std::nullopt
;
1425 EdgeVal
= EdgeLatticeVal
.getConstantRange();
1428 // It is possible that the default destination is the destination of
1429 // some cases. We cannot perform difference for those cases.
1430 // We know Condition != CaseValue in BBTo. In some cases we can use
1431 // this to infer Val == f(Condition) is != f(CaseValue). For now, we
1432 // only do this when f is identity (i.e. Val == Condition), but we
1433 // should be able to do this for any injective f.
1434 if (Case
.getCaseSuccessor() != BBTo
&& Condition
== Val
)
1435 EdgesVals
= EdgesVals
.difference(EdgeVal
);
1436 } else if (Case
.getCaseSuccessor() == BBTo
)
1437 EdgesVals
= EdgesVals
.unionWith(EdgeVal
);
1439 return ValueLatticeElement::getRange(std::move(EdgesVals
));
1441 return std::nullopt
;
1444 /// Compute the value of Val on the edge BBFrom -> BBTo or the value at
1445 /// the basic block if the edge does not constrain Val.
1446 std::optional
<ValueLatticeElement
>
1447 LazyValueInfoImpl::getEdgeValue(Value
*Val
, BasicBlock
*BBFrom
,
1448 BasicBlock
*BBTo
, Instruction
*CxtI
) {
1449 // If already a constant, there is nothing to compute.
1450 if (Constant
*VC
= dyn_cast
<Constant
>(Val
))
1451 return ValueLatticeElement::get(VC
);
1453 ValueLatticeElement LocalResult
=
1454 getEdgeValueLocal(Val
, BBFrom
, BBTo
)
1455 .value_or(ValueLatticeElement::getOverdefined());
1456 if (hasSingleValue(LocalResult
))
1457 // Can't get any more precise here
1460 std::optional
<ValueLatticeElement
> OptInBlock
=
1461 getBlockValue(Val
, BBFrom
, BBFrom
->getTerminator());
1463 return std::nullopt
;
1464 ValueLatticeElement
&InBlock
= *OptInBlock
;
1466 // We can use the context instruction (generically the ultimate instruction
1467 // the calling pass is trying to simplify) here, even though the result of
1468 // this function is generally cached when called from the solve* functions
1469 // (and that cached result might be used with queries using a different
1470 // context instruction), because when this function is called from the solve*
1471 // functions, the context instruction is not provided. When called from
1472 // LazyValueInfoImpl::getValueOnEdge, the context instruction is provided,
1473 // but then the result is not cached.
1474 intersectAssumeOrGuardBlockValueConstantRange(Val
, InBlock
, CxtI
);
1476 return intersect(LocalResult
, InBlock
);
1479 ValueLatticeElement
LazyValueInfoImpl::getValueInBlock(Value
*V
, BasicBlock
*BB
,
1480 Instruction
*CxtI
) {
1481 LLVM_DEBUG(dbgs() << "LVI Getting block end value " << *V
<< " at '"
1482 << BB
->getName() << "'\n");
1484 assert(BlockValueStack
.empty() && BlockValueSet
.empty());
1485 std::optional
<ValueLatticeElement
> OptResult
= getBlockValue(V
, BB
, CxtI
);
1488 OptResult
= getBlockValue(V
, BB
, CxtI
);
1489 assert(OptResult
&& "Value not available after solving");
1492 ValueLatticeElement Result
= *OptResult
;
1493 LLVM_DEBUG(dbgs() << " Result = " << Result
<< "\n");
1497 ValueLatticeElement
LazyValueInfoImpl::getValueAt(Value
*V
, Instruction
*CxtI
) {
1498 LLVM_DEBUG(dbgs() << "LVI Getting value " << *V
<< " at '" << CxtI
->getName()
1501 if (auto *C
= dyn_cast
<Constant
>(V
))
1502 return ValueLatticeElement::get(C
);
1504 ValueLatticeElement Result
= ValueLatticeElement::getOverdefined();
1505 if (auto *I
= dyn_cast
<Instruction
>(V
))
1506 Result
= getFromRangeMetadata(I
);
1507 intersectAssumeOrGuardBlockValueConstantRange(V
, Result
, CxtI
);
1509 LLVM_DEBUG(dbgs() << " Result = " << Result
<< "\n");
1513 ValueLatticeElement
LazyValueInfoImpl::
1514 getValueOnEdge(Value
*V
, BasicBlock
*FromBB
, BasicBlock
*ToBB
,
1515 Instruction
*CxtI
) {
1516 LLVM_DEBUG(dbgs() << "LVI Getting edge value " << *V
<< " from '"
1517 << FromBB
->getName() << "' to '" << ToBB
->getName()
1520 std::optional
<ValueLatticeElement
> Result
=
1521 getEdgeValue(V
, FromBB
, ToBB
, CxtI
);
1524 Result
= getEdgeValue(V
, FromBB
, ToBB
, CxtI
);
1525 assert(Result
&& "More work to do after problem solved?");
1528 LLVM_DEBUG(dbgs() << " Result = " << *Result
<< "\n");
1532 void LazyValueInfoImpl::threadEdge(BasicBlock
*PredBB
, BasicBlock
*OldSucc
,
1533 BasicBlock
*NewSucc
) {
1534 TheCache
.threadEdgeImpl(OldSucc
, NewSucc
);
1537 //===----------------------------------------------------------------------===//
1538 // LazyValueInfo Impl
1539 //===----------------------------------------------------------------------===//
1541 /// This lazily constructs the LazyValueInfoImpl.
1542 static LazyValueInfoImpl
&getImpl(void *&PImpl
, AssumptionCache
*AC
,
1545 assert(M
&& "getCache() called with a null Module");
1546 const DataLayout
&DL
= M
->getDataLayout();
1547 Function
*GuardDecl
= M
->getFunction(
1548 Intrinsic::getName(Intrinsic::experimental_guard
));
1549 PImpl
= new LazyValueInfoImpl(AC
, DL
, GuardDecl
);
1551 return *static_cast<LazyValueInfoImpl
*>(PImpl
);
1554 bool LazyValueInfoWrapperPass::runOnFunction(Function
&F
) {
1555 Info
.AC
= &getAnalysis
<AssumptionCacheTracker
>().getAssumptionCache(F
);
1556 Info
.TLI
= &getAnalysis
<TargetLibraryInfoWrapperPass
>().getTLI(F
);
1559 getImpl(Info
.PImpl
, Info
.AC
, F
.getParent()).clear();
1565 void LazyValueInfoWrapperPass::getAnalysisUsage(AnalysisUsage
&AU
) const {
1566 AU
.setPreservesAll();
1567 AU
.addRequired
<AssumptionCacheTracker
>();
1568 AU
.addRequired
<TargetLibraryInfoWrapperPass
>();
1571 LazyValueInfo
&LazyValueInfoWrapperPass::getLVI() { return Info
; }
1573 LazyValueInfo::~LazyValueInfo() { releaseMemory(); }
1575 void LazyValueInfo::releaseMemory() {
1576 // If the cache was allocated, free it.
1578 delete &getImpl(PImpl
, AC
, nullptr);
1583 bool LazyValueInfo::invalidate(Function
&F
, const PreservedAnalyses
&PA
,
1584 FunctionAnalysisManager::Invalidator
&Inv
) {
1585 // We need to invalidate if we have either failed to preserve this analyses
1586 // result directly or if any of its dependencies have been invalidated.
1587 auto PAC
= PA
.getChecker
<LazyValueAnalysis
>();
1588 if (!(PAC
.preserved() || PAC
.preservedSet
<AllAnalysesOn
<Function
>>()))
1594 void LazyValueInfoWrapperPass::releaseMemory() { Info
.releaseMemory(); }
1596 LazyValueInfo
LazyValueAnalysis::run(Function
&F
,
1597 FunctionAnalysisManager
&FAM
) {
1598 auto &AC
= FAM
.getResult
<AssumptionAnalysis
>(F
);
1599 auto &TLI
= FAM
.getResult
<TargetLibraryAnalysis
>(F
);
1601 return LazyValueInfo(&AC
, &F
.getParent()->getDataLayout(), &TLI
);
1604 /// Returns true if we can statically tell that this value will never be a
1605 /// "useful" constant. In practice, this means we've got something like an
1606 /// alloca or a malloc call for which a comparison against a constant can
1607 /// only be guarding dead code. Note that we are potentially giving up some
1608 /// precision in dead code (a constant result) in favour of avoiding a
1609 /// expensive search for a easily answered common query.
1610 static bool isKnownNonConstant(Value
*V
) {
1611 V
= V
->stripPointerCasts();
1612 // The return val of alloc cannot be a Constant.
1613 if (isa
<AllocaInst
>(V
))
1618 Constant
*LazyValueInfo::getConstant(Value
*V
, Instruction
*CxtI
) {
1619 // Bail out early if V is known not to be a Constant.
1620 if (isKnownNonConstant(V
))
1623 BasicBlock
*BB
= CxtI
->getParent();
1624 ValueLatticeElement Result
=
1625 getImpl(PImpl
, AC
, BB
->getModule()).getValueInBlock(V
, BB
, CxtI
);
1627 if (Result
.isConstant())
1628 return Result
.getConstant();
1629 if (Result
.isConstantRange()) {
1630 const ConstantRange
&CR
= Result
.getConstantRange();
1631 if (const APInt
*SingleVal
= CR
.getSingleElement())
1632 return ConstantInt::get(V
->getContext(), *SingleVal
);
1637 ConstantRange
LazyValueInfo::getConstantRange(Value
*V
, Instruction
*CxtI
,
1638 bool UndefAllowed
) {
1639 assert(V
->getType()->isIntegerTy());
1640 unsigned Width
= V
->getType()->getIntegerBitWidth();
1641 BasicBlock
*BB
= CxtI
->getParent();
1642 ValueLatticeElement Result
=
1643 getImpl(PImpl
, AC
, BB
->getModule()).getValueInBlock(V
, BB
, CxtI
);
1644 if (Result
.isUnknown())
1645 return ConstantRange::getEmpty(Width
);
1646 if (Result
.isConstantRange(UndefAllowed
))
1647 return Result
.getConstantRange(UndefAllowed
);
1648 // We represent ConstantInt constants as constant ranges but other kinds
1649 // of integer constants, i.e. ConstantExpr will be tagged as constants
1650 assert(!(Result
.isConstant() && isa
<ConstantInt
>(Result
.getConstant())) &&
1651 "ConstantInt value must be represented as constantrange");
1652 return ConstantRange::getFull(Width
);
1655 ConstantRange
LazyValueInfo::getConstantRangeAtUse(const Use
&U
,
1656 bool UndefAllowed
) {
1659 getConstantRange(V
, cast
<Instruction
>(U
.getUser()), UndefAllowed
);
1661 // Check whether the only (possibly transitive) use of the value is in a
1662 // position where V can be constrained by a select or branch condition.
1663 const Use
*CurrU
= &U
;
1664 // TODO: Increase limit?
1665 const unsigned MaxUsesToInspect
= 3;
1666 for (unsigned I
= 0; I
< MaxUsesToInspect
; ++I
) {
1667 std::optional
<ValueLatticeElement
> CondVal
;
1668 auto *CurrI
= cast
<Instruction
>(CurrU
->getUser());
1669 if (auto *SI
= dyn_cast
<SelectInst
>(CurrI
)) {
1670 // If the value is undef, a different value may be chosen in
1671 // the select condition and at use.
1672 if (!isGuaranteedNotToBeUndefOrPoison(SI
->getCondition(), AC
))
1674 if (CurrU
->getOperandNo() == 1)
1675 CondVal
= getValueFromCondition(V
, SI
->getCondition(), true);
1676 else if (CurrU
->getOperandNo() == 2)
1677 CondVal
= getValueFromCondition(V
, SI
->getCondition(), false);
1678 } else if (auto *PHI
= dyn_cast
<PHINode
>(CurrI
)) {
1679 // TODO: Use non-local query?
1681 getEdgeValueLocal(V
, PHI
->getIncomingBlock(*CurrU
), PHI
->getParent());
1683 if (CondVal
&& CondVal
->isConstantRange())
1684 CR
= CR
.intersectWith(CondVal
->getConstantRange());
1686 // Only follow one-use chain, to allow direct intersection of conditions.
1687 // If there are multiple uses, we would have to intersect with the union of
1688 // all conditions at different uses.
1689 // Stop walking if we hit a non-speculatable instruction. Even if the
1690 // result is only used under a specific condition, executing the
1691 // instruction itself may cause side effects or UB already.
1692 // This also disallows looking through phi nodes: If the phi node is part
1693 // of a cycle, we might end up reasoning about values from different cycle
1694 // iterations (PR60629).
1695 if (!CurrI
->hasOneUse() || !isSafeToSpeculativelyExecute(CurrI
))
1697 CurrU
= &*CurrI
->use_begin();
1702 /// Determine whether the specified value is known to be a
1703 /// constant on the specified edge. Return null if not.
1704 Constant
*LazyValueInfo::getConstantOnEdge(Value
*V
, BasicBlock
*FromBB
,
1706 Instruction
*CxtI
) {
1707 Module
*M
= FromBB
->getModule();
1708 ValueLatticeElement Result
=
1709 getImpl(PImpl
, AC
, M
).getValueOnEdge(V
, FromBB
, ToBB
, CxtI
);
1711 if (Result
.isConstant())
1712 return Result
.getConstant();
1713 if (Result
.isConstantRange()) {
1714 const ConstantRange
&CR
= Result
.getConstantRange();
1715 if (const APInt
*SingleVal
= CR
.getSingleElement())
1716 return ConstantInt::get(V
->getContext(), *SingleVal
);
1721 ConstantRange
LazyValueInfo::getConstantRangeOnEdge(Value
*V
,
1724 Instruction
*CxtI
) {
1725 unsigned Width
= V
->getType()->getIntegerBitWidth();
1726 Module
*M
= FromBB
->getModule();
1727 ValueLatticeElement Result
=
1728 getImpl(PImpl
, AC
, M
).getValueOnEdge(V
, FromBB
, ToBB
, CxtI
);
1730 if (Result
.isUnknown())
1731 return ConstantRange::getEmpty(Width
);
1732 if (Result
.isConstantRange())
1733 return Result
.getConstantRange();
1734 // We represent ConstantInt constants as constant ranges but other kinds
1735 // of integer constants, i.e. ConstantExpr will be tagged as constants
1736 assert(!(Result
.isConstant() && isa
<ConstantInt
>(Result
.getConstant())) &&
1737 "ConstantInt value must be represented as constantrange");
1738 return ConstantRange::getFull(Width
);
1741 static LazyValueInfo::Tristate
1742 getPredicateResult(unsigned Pred
, Constant
*C
, const ValueLatticeElement
&Val
,
1743 const DataLayout
&DL
, TargetLibraryInfo
*TLI
) {
1744 // If we know the value is a constant, evaluate the conditional.
1745 Constant
*Res
= nullptr;
1746 if (Val
.isConstant()) {
1747 Res
= ConstantFoldCompareInstOperands(Pred
, Val
.getConstant(), C
, DL
, TLI
);
1748 if (ConstantInt
*ResCI
= dyn_cast
<ConstantInt
>(Res
))
1749 return ResCI
->isZero() ? LazyValueInfo::False
: LazyValueInfo::True
;
1750 return LazyValueInfo::Unknown
;
1753 if (Val
.isConstantRange()) {
1754 ConstantInt
*CI
= dyn_cast
<ConstantInt
>(C
);
1755 if (!CI
) return LazyValueInfo::Unknown
;
1757 const ConstantRange
&CR
= Val
.getConstantRange();
1758 if (Pred
== ICmpInst::ICMP_EQ
) {
1759 if (!CR
.contains(CI
->getValue()))
1760 return LazyValueInfo::False
;
1762 if (CR
.isSingleElement())
1763 return LazyValueInfo::True
;
1764 } else if (Pred
== ICmpInst::ICMP_NE
) {
1765 if (!CR
.contains(CI
->getValue()))
1766 return LazyValueInfo::True
;
1768 if (CR
.isSingleElement())
1769 return LazyValueInfo::False
;
1771 // Handle more complex predicates.
1772 ConstantRange TrueValues
= ConstantRange::makeExactICmpRegion(
1773 (ICmpInst::Predicate
)Pred
, CI
->getValue());
1774 if (TrueValues
.contains(CR
))
1775 return LazyValueInfo::True
;
1776 if (TrueValues
.inverse().contains(CR
))
1777 return LazyValueInfo::False
;
1779 return LazyValueInfo::Unknown
;
1782 if (Val
.isNotConstant()) {
1783 // If this is an equality comparison, we can try to fold it knowing that
1785 if (Pred
== ICmpInst::ICMP_EQ
) {
1786 // !C1 == C -> false iff C1 == C.
1787 Res
= ConstantFoldCompareInstOperands(ICmpInst::ICMP_NE
,
1788 Val
.getNotConstant(), C
, DL
,
1790 if (Res
->isNullValue())
1791 return LazyValueInfo::False
;
1792 } else if (Pred
== ICmpInst::ICMP_NE
) {
1793 // !C1 != C -> true iff C1 == C.
1794 Res
= ConstantFoldCompareInstOperands(ICmpInst::ICMP_NE
,
1795 Val
.getNotConstant(), C
, DL
,
1797 if (Res
->isNullValue())
1798 return LazyValueInfo::True
;
1800 return LazyValueInfo::Unknown
;
1803 return LazyValueInfo::Unknown
;
1806 /// Determine whether the specified value comparison with a constant is known to
1807 /// be true or false on the specified CFG edge. Pred is a CmpInst predicate.
1808 LazyValueInfo::Tristate
1809 LazyValueInfo::getPredicateOnEdge(unsigned Pred
, Value
*V
, Constant
*C
,
1810 BasicBlock
*FromBB
, BasicBlock
*ToBB
,
1811 Instruction
*CxtI
) {
1812 Module
*M
= FromBB
->getModule();
1813 ValueLatticeElement Result
=
1814 getImpl(PImpl
, AC
, M
).getValueOnEdge(V
, FromBB
, ToBB
, CxtI
);
1816 return getPredicateResult(Pred
, C
, Result
, M
->getDataLayout(), TLI
);
1819 LazyValueInfo::Tristate
1820 LazyValueInfo::getPredicateAt(unsigned Pred
, Value
*V
, Constant
*C
,
1821 Instruction
*CxtI
, bool UseBlockValue
) {
1822 // Is or is not NonNull are common predicates being queried. If
1823 // isKnownNonZero can tell us the result of the predicate, we can
1824 // return it quickly. But this is only a fastpath, and falling
1825 // through would still be correct.
1826 Module
*M
= CxtI
->getModule();
1827 const DataLayout
&DL
= M
->getDataLayout();
1828 if (V
->getType()->isPointerTy() && C
->isNullValue() &&
1829 isKnownNonZero(V
->stripPointerCastsSameRepresentation(), DL
)) {
1830 if (Pred
== ICmpInst::ICMP_EQ
)
1831 return LazyValueInfo::False
;
1832 else if (Pred
== ICmpInst::ICMP_NE
)
1833 return LazyValueInfo::True
;
1836 ValueLatticeElement Result
= UseBlockValue
1837 ? getImpl(PImpl
, AC
, M
).getValueInBlock(V
, CxtI
->getParent(), CxtI
)
1838 : getImpl(PImpl
, AC
, M
).getValueAt(V
, CxtI
);
1839 Tristate Ret
= getPredicateResult(Pred
, C
, Result
, DL
, TLI
);
1843 // Note: The following bit of code is somewhat distinct from the rest of LVI;
1844 // LVI as a whole tries to compute a lattice value which is conservatively
1845 // correct at a given location. In this case, we have a predicate which we
1846 // weren't able to prove about the merged result, and we're pushing that
1847 // predicate back along each incoming edge to see if we can prove it
1848 // separately for each input. As a motivating example, consider:
1850 // %v1 = ... ; constantrange<1, 5>
1853 // %v2 = ... ; constantrange<10, 20>
1856 // %phi = phi [%v1, %v2] ; constantrange<1,20>
1857 // %pred = icmp eq i32 %phi, 8
1858 // We can't tell from the lattice value for '%phi' that '%pred' is false
1859 // along each path, but by checking the predicate over each input separately,
1861 // We limit the search to one step backwards from the current BB and value.
1862 // We could consider extending this to search further backwards through the
1863 // CFG and/or value graph, but there are non-obvious compile time vs quality
1865 BasicBlock
*BB
= CxtI
->getParent();
1867 // Function entry or an unreachable block. Bail to avoid confusing
1869 pred_iterator PI
= pred_begin(BB
), PE
= pred_end(BB
);
1873 // If V is a PHI node in the same block as the context, we need to ask
1874 // questions about the predicate as applied to the incoming value along
1875 // each edge. This is useful for eliminating cases where the predicate is
1876 // known along all incoming edges.
1877 if (auto *PHI
= dyn_cast
<PHINode
>(V
))
1878 if (PHI
->getParent() == BB
) {
1879 Tristate Baseline
= Unknown
;
1880 for (unsigned i
= 0, e
= PHI
->getNumIncomingValues(); i
< e
; i
++) {
1881 Value
*Incoming
= PHI
->getIncomingValue(i
);
1882 BasicBlock
*PredBB
= PHI
->getIncomingBlock(i
);
1883 // Note that PredBB may be BB itself.
1885 getPredicateOnEdge(Pred
, Incoming
, C
, PredBB
, BB
, CxtI
);
1887 // Keep going as long as we've seen a consistent known result for
1889 Baseline
= (i
== 0) ? Result
/* First iteration */
1890 : (Baseline
== Result
? Baseline
1891 : Unknown
); /* All others */
1892 if (Baseline
== Unknown
)
1895 if (Baseline
!= Unknown
)
1899 // For a comparison where the V is outside this block, it's possible
1900 // that we've branched on it before. Look to see if the value is known
1901 // on all incoming edges.
1902 if (!isa
<Instruction
>(V
) || cast
<Instruction
>(V
)->getParent() != BB
) {
1903 // For predecessor edge, determine if the comparison is true or false
1904 // on that edge. If they're all true or all false, we can conclude
1905 // the value of the comparison in this block.
1906 Tristate Baseline
= getPredicateOnEdge(Pred
, V
, C
, *PI
, BB
, CxtI
);
1907 if (Baseline
!= Unknown
) {
1908 // Check that all remaining incoming values match the first one.
1909 while (++PI
!= PE
) {
1910 Tristate Ret
= getPredicateOnEdge(Pred
, V
, C
, *PI
, BB
, CxtI
);
1911 if (Ret
!= Baseline
)
1914 // If we terminated early, then one of the values didn't match.
1924 LazyValueInfo::Tristate
LazyValueInfo::getPredicateAt(unsigned P
, Value
*LHS
,
1927 bool UseBlockValue
) {
1928 CmpInst::Predicate Pred
= (CmpInst::Predicate
)P
;
1930 if (auto *C
= dyn_cast
<Constant
>(RHS
))
1931 return getPredicateAt(P
, LHS
, C
, CxtI
, UseBlockValue
);
1932 if (auto *C
= dyn_cast
<Constant
>(LHS
))
1933 return getPredicateAt(CmpInst::getSwappedPredicate(Pred
), RHS
, C
, CxtI
,
1936 // Got two non-Constant values. Try to determine the comparison results based
1937 // on the block values of the two operands, e.g. because they have
1938 // non-overlapping ranges.
1939 if (UseBlockValue
) {
1940 Module
*M
= CxtI
->getModule();
1941 ValueLatticeElement L
=
1942 getImpl(PImpl
, AC
, M
).getValueInBlock(LHS
, CxtI
->getParent(), CxtI
);
1943 if (L
.isOverdefined())
1944 return LazyValueInfo::Unknown
;
1946 ValueLatticeElement R
=
1947 getImpl(PImpl
, AC
, M
).getValueInBlock(RHS
, CxtI
->getParent(), CxtI
);
1948 Type
*Ty
= CmpInst::makeCmpResultType(LHS
->getType());
1949 if (Constant
*Res
= L
.getCompare((CmpInst::Predicate
)P
, Ty
, R
,
1950 M
->getDataLayout())) {
1951 if (Res
->isNullValue())
1952 return LazyValueInfo::False
;
1953 if (Res
->isOneValue())
1954 return LazyValueInfo::True
;
1957 return LazyValueInfo::Unknown
;
1960 void LazyValueInfo::threadEdge(BasicBlock
*PredBB
, BasicBlock
*OldSucc
,
1961 BasicBlock
*NewSucc
) {
1963 getImpl(PImpl
, AC
, PredBB
->getModule())
1964 .threadEdge(PredBB
, OldSucc
, NewSucc
);
1968 void LazyValueInfo::eraseBlock(BasicBlock
*BB
) {
1970 getImpl(PImpl
, AC
, BB
->getModule()).eraseBlock(BB
);
1974 void LazyValueInfo::clear(const Module
*M
) {
1976 getImpl(PImpl
, AC
, M
).clear();
1980 void LazyValueInfo::printLVI(Function
&F
, DominatorTree
&DTree
, raw_ostream
&OS
) {
1982 getImpl(PImpl
, AC
, F
.getParent()).printLVI(F
, DTree
, OS
);
1986 // Print the LVI for the function arguments at the start of each basic block.
1987 void LazyValueInfoAnnotatedWriter::emitBasicBlockStartAnnot(
1988 const BasicBlock
*BB
, formatted_raw_ostream
&OS
) {
1989 // Find if there are latticevalues defined for arguments of the function.
1990 auto *F
= BB
->getParent();
1991 for (const auto &Arg
: F
->args()) {
1992 ValueLatticeElement Result
= LVIImpl
->getValueInBlock(
1993 const_cast<Argument
*>(&Arg
), const_cast<BasicBlock
*>(BB
));
1994 if (Result
.isUnknown())
1996 OS
<< "; LatticeVal for: '" << Arg
<< "' is: " << Result
<< "\n";
2000 // This function prints the LVI analysis for the instruction I at the beginning
2001 // of various basic blocks. It relies on calculated values that are stored in
2002 // the LazyValueInfoCache, and in the absence of cached values, recalculate the
2003 // LazyValueInfo for `I`, and print that info.
2004 void LazyValueInfoAnnotatedWriter::emitInstructionAnnot(
2005 const Instruction
*I
, formatted_raw_ostream
&OS
) {
2007 auto *ParentBB
= I
->getParent();
2008 SmallPtrSet
<const BasicBlock
*, 16> BlocksContainingLVI
;
2009 // We can generate (solve) LVI values only for blocks that are dominated by
2010 // the I's parent. However, to avoid generating LVI for all dominating blocks,
2011 // that contain redundant/uninteresting information, we print LVI for
2012 // blocks that may use this LVI information (such as immediate successor
2013 // blocks, and blocks that contain uses of `I`).
2014 auto printResult
= [&](const BasicBlock
*BB
) {
2015 if (!BlocksContainingLVI
.insert(BB
).second
)
2017 ValueLatticeElement Result
= LVIImpl
->getValueInBlock(
2018 const_cast<Instruction
*>(I
), const_cast<BasicBlock
*>(BB
));
2019 OS
<< "; LatticeVal for: '" << *I
<< "' in BB: '";
2020 BB
->printAsOperand(OS
, false);
2021 OS
<< "' is: " << Result
<< "\n";
2024 printResult(ParentBB
);
2025 // Print the LVI analysis results for the immediate successor blocks, that
2026 // are dominated by `ParentBB`.
2027 for (const auto *BBSucc
: successors(ParentBB
))
2028 if (DT
.dominates(ParentBB
, BBSucc
))
2029 printResult(BBSucc
);
2031 // Print LVI in blocks where `I` is used.
2032 for (const auto *U
: I
->users())
2033 if (auto *UseI
= dyn_cast
<Instruction
>(U
))
2034 if (!isa
<PHINode
>(UseI
) || DT
.dominates(ParentBB
, UseI
->getParent()))
2035 printResult(UseI
->getParent());
2040 // Printer class for LazyValueInfo results.
2041 class LazyValueInfoPrinter
: public FunctionPass
{
2043 static char ID
; // Pass identification, replacement for typeid
2044 LazyValueInfoPrinter() : FunctionPass(ID
) {
2045 initializeLazyValueInfoPrinterPass(*PassRegistry::getPassRegistry());
2048 void getAnalysisUsage(AnalysisUsage
&AU
) const override
{
2049 AU
.setPreservesAll();
2050 AU
.addRequired
<LazyValueInfoWrapperPass
>();
2051 AU
.addRequired
<DominatorTreeWrapperPass
>();
2054 // Get the mandatory dominator tree analysis and pass this in to the
2055 // LVIPrinter. We cannot rely on the LVI's DT, since it's optional.
2056 bool runOnFunction(Function
&F
) override
{
2057 dbgs() << "LVI for function '" << F
.getName() << "':\n";
2058 auto &LVI
= getAnalysis
<LazyValueInfoWrapperPass
>().getLVI();
2059 auto &DTree
= getAnalysis
<DominatorTreeWrapperPass
>().getDomTree();
2060 LVI
.printLVI(F
, DTree
, dbgs());
2066 char LazyValueInfoPrinter::ID
= 0;
2067 INITIALIZE_PASS_BEGIN(LazyValueInfoPrinter
, "print-lazy-value-info",
2068 "Lazy Value Info Printer Pass", false, false)
2069 INITIALIZE_PASS_DEPENDENCY(LazyValueInfoWrapperPass
)
2070 INITIALIZE_PASS_END(LazyValueInfoPrinter
, "print-lazy-value-info",
2071 "Lazy Value Info Printer Pass", false, false)