1 //===- LazyValueInfo.cpp - Value constraint analysis ------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines the interface for lazy computation of value constraint
11 // information.
12 //
13 //===----------------------------------------------------------------------===//
14 
15 #include "llvm/Analysis/LazyValueInfo.h"
16 #include "llvm/ADT/DenseSet.h"
17 #include "llvm/ADT/STLExtras.h"
18 #include "llvm/Analysis/AssumptionCache.h"
19 #include "llvm/Analysis/ConstantFolding.h"
20 #include "llvm/Analysis/TargetLibraryInfo.h"
21 #include "llvm/Analysis/ValueTracking.h"
22 #include "llvm/IR/CFG.h"
23 #include "llvm/IR/ConstantRange.h"
24 #include "llvm/IR/Constants.h"
25 #include "llvm/IR/DataLayout.h"
26 #include "llvm/IR/Dominators.h"
27 #include "llvm/IR/Instructions.h"
28 #include "llvm/IR/IntrinsicInst.h"
29 #include "llvm/IR/Intrinsics.h"
30 #include "llvm/IR/LLVMContext.h"
31 #include "llvm/IR/PatternMatch.h"
32 #include "llvm/IR/ValueHandle.h"
33 #include "llvm/Support/Debug.h"
34 #include "llvm/Support/raw_ostream.h"
35 #include <map>
36 #include <stack>
37 using namespace llvm;
38 using namespace PatternMatch;
39 
40 #define DEBUG_TYPE "lazy-value-info"
41 
42 char LazyValueInfoWrapperPass::ID = 0;
43 INITIALIZE_PASS_BEGIN(LazyValueInfoWrapperPass, "lazy-value-info",
44                 "Lazy Value Information Analysis", false, true)
45 INITIALIZE_PASS_DEPENDENCY(AssumptionCacheTracker)
46 INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfoWrapperPass)
47 INITIALIZE_PASS_END(LazyValueInfoWrapperPass, "lazy-value-info",
48                 "Lazy Value Information Analysis", false, true)
49 
50 namespace llvm {
51   FunctionPass *createLazyValueInfoPass() { return new LazyValueInfoWrapperPass(); }
52 }
53 
54 char LazyValueAnalysis::PassID;
55 
56 //===----------------------------------------------------------------------===//
57 //                               LVILatticeVal
58 //===----------------------------------------------------------------------===//
59 
60 /// This is the information tracked by LazyValueInfo for each value.
61 ///
62 /// FIXME: This is basically just for bringup, this can be made a lot more rich
63 /// in the future.
64 ///
65 namespace {
66 class LVILatticeVal {
67   enum LatticeValueTy {
68     /// This Value has no known value yet.  As a result, this implies the
69     /// producing instruction is dead.  Caution: We use this as the starting
70     /// state in our local meet rules.  In this usage, it's taken to mean
71     /// "nothing known yet".
72     undefined,
73 
74     /// This Value has a specific constant value.  (For integers, constantrange
75     /// is used instead.)
76     constant,
77 
78     /// This Value is known to not have the specified value.  (For integers,
79     /// constantrange is used instead.)
80     notconstant,
81 
82     /// The Value falls within this range. (Used only for integer typed values.)
83     constantrange,
84 
85     /// We can not precisely model the dynamic values this value might take.
86     overdefined
87   };
88 
89   /// Val: This stores the current lattice value along with the Constant* for
90   /// the constant if this is a 'constant' or 'notconstant' value.
91   LatticeValueTy Tag;
92   Constant *Val;
93   ConstantRange Range;
94 
95 public:
96   LVILatticeVal() : Tag(undefined), Val(nullptr), Range(1, true) {}
97 
98   static LVILatticeVal get(Constant *C) {
99     LVILatticeVal Res;
100     if (!isa<UndefValue>(C))
101       Res.markConstant(C);
102     return Res;
103   }
104   static LVILatticeVal getNot(Constant *C) {
105     LVILatticeVal Res;
106     if (!isa<UndefValue>(C))
107       Res.markNotConstant(C);
108     return Res;
109   }
110   static LVILatticeVal getRange(ConstantRange CR) {
111     LVILatticeVal Res;
112     Res.markConstantRange(std::move(CR));
113     return Res;
114   }
115   static LVILatticeVal getOverdefined() {
116     LVILatticeVal Res;
117     Res.markOverdefined();
118     return Res;
119   }
120 
121   bool isUndefined() const     { return Tag == undefined; }
122   bool isConstant() const      { return Tag == constant; }
123   bool isNotConstant() const   { return Tag == notconstant; }
124   bool isConstantRange() const { return Tag == constantrange; }
125   bool isOverdefined() const   { return Tag == overdefined; }
126 
127   Constant *getConstant() const {
128     assert(isConstant() && "Cannot get the constant of a non-constant!");
129     return Val;
130   }
131 
132   Constant *getNotConstant() const {
133     assert(isNotConstant() && "Cannot get the constant of a non-notconstant!");
134     return Val;
135   }
136 
137   ConstantRange getConstantRange() const {
138     assert(isConstantRange() &&
139            "Cannot get the constant-range of a non-constant-range!");
140     return Range;
141   }
142 
143   /// Return true if this is a change in status.
144   bool markOverdefined() {
145     if (isOverdefined())
146       return false;
147     Tag = overdefined;
148     return true;
149   }
150 
151   /// Return true if this is a change in status.
152   bool markConstant(Constant *V) {
153     assert(V && "Marking constant with NULL");
154     if (ConstantInt *CI = dyn_cast<ConstantInt>(V))
155       return markConstantRange(ConstantRange(CI->getValue()));
156     if (isa<UndefValue>(V))
157       return false;
158 
159     assert((!isConstant() || getConstant() == V) &&
160            "Marking constant with different value");
161     assert(isUndefined());
162     Tag = constant;
163     Val = V;
164     return true;
165   }
166 
167   /// Return true if this is a change in status.
168   bool markNotConstant(Constant *V) {
169     assert(V && "Marking constant with NULL");
170     if (ConstantInt *CI = dyn_cast<ConstantInt>(V))
171       return markConstantRange(ConstantRange(CI->getValue()+1, CI->getValue()));
172     if (isa<UndefValue>(V))
173       return false;
174 
175     assert((!isConstant() || getConstant() != V) &&
176            "Marking constant !constant with same value");
177     assert((!isNotConstant() || getNotConstant() == V) &&
178            "Marking !constant with different value");
179     assert(isUndefined() || isConstant());
180     Tag = notconstant;
181     Val = V;
182     return true;
183   }
184 
185   /// Return true if this is a change in status.
186   bool markConstantRange(ConstantRange NewR) {
187     if (isConstantRange()) {
188       if (NewR.isEmptySet())
189         return markOverdefined();
190 
191       bool changed = Range != NewR;
192       Range = std::move(NewR);
193       return changed;
194     }
195 
196     assert(isUndefined());
197     if (NewR.isEmptySet())
198       return markOverdefined();
199 
200     Tag = constantrange;
201     Range = std::move(NewR);
202     return true;
203   }
204 
205   /// Merge the specified lattice value into this one, updating this
206   /// one and returning true if anything changed.
207   bool mergeIn(const LVILatticeVal &RHS, const DataLayout &DL) {
208     if (RHS.isUndefined() || isOverdefined()) return false;
209     if (RHS.isOverdefined()) return markOverdefined();
210 
211     if (isUndefined()) {
212       Tag = RHS.Tag;
213       Val = RHS.Val;
214       Range = RHS.Range;
215       return true;
216     }
217 
218     if (isConstant()) {
219       if (RHS.isConstant()) {
220         if (Val == RHS.Val)
221           return false;
222         return markOverdefined();
223       }
224 
225       if (RHS.isNotConstant()) {
226         if (Val == RHS.Val)
227           return markOverdefined();
228 
229         // Unless we can prove that the two Constants are different, we must
230         // move to overdefined.
231         if (ConstantInt *Res =
232                 dyn_cast<ConstantInt>(ConstantFoldCompareInstOperands(
233                     CmpInst::ICMP_NE, getConstant(), RHS.getNotConstant(), DL)))
234           if (Res->isOne())
235             return markNotConstant(RHS.getNotConstant());
236 
237         return markOverdefined();
238       }
239 
240       return markOverdefined();
241     }
242 
243     if (isNotConstant()) {
244       if (RHS.isConstant()) {
245         if (Val == RHS.Val)
246           return markOverdefined();
247 
248         // Unless we can prove that the two Constants are different, we must
249         // move to overdefined.
250         if (ConstantInt *Res =
251                 dyn_cast<ConstantInt>(ConstantFoldCompareInstOperands(
252                     CmpInst::ICMP_NE, getNotConstant(), RHS.getConstant(), DL)))
253           if (Res->isOne())
254             return false;
255 
256         return markOverdefined();
257       }
258 
259       if (RHS.isNotConstant()) {
260         if (Val == RHS.Val)
261           return false;
262         return markOverdefined();
263       }
264 
265       return markOverdefined();
266     }
267 
268     assert(isConstantRange() && "New LVILattice type?");
269     if (!RHS.isConstantRange())
270       return markOverdefined();
271 
272     ConstantRange NewR = Range.unionWith(RHS.getConstantRange());
273     if (NewR.isFullSet())
274       return markOverdefined();
275     return markConstantRange(NewR);
276   }
277 };
278 
279 } // end anonymous namespace.
280 
281 namespace llvm {
282 raw_ostream &operator<<(raw_ostream &OS, const LVILatticeVal &Val)
283     LLVM_ATTRIBUTE_USED;
284 raw_ostream &operator<<(raw_ostream &OS, const LVILatticeVal &Val) {
285   if (Val.isUndefined())
286     return OS << "undefined";
287   if (Val.isOverdefined())
288     return OS << "overdefined";
289 
290   if (Val.isNotConstant())
291     return OS << "notconstant<" << *Val.getNotConstant() << '>';
292   if (Val.isConstantRange())
293     return OS << "constantrange<" << Val.getConstantRange().getLower() << ", "
294               << Val.getConstantRange().getUpper() << '>';
295   return OS << "constant<" << *Val.getConstant() << '>';
296 }
297 }
298 
299 /// Returns true if this lattice value represents at most one possible value.
300 /// This is as precise as any lattice value can get while still representing
301 /// reachable code.
302 static bool hasSingleValue(const LVILatticeVal &Val) {
303   if (Val.isConstantRange() &&
304       Val.getConstantRange().isSingleElement())
305     // Integer constants are single element ranges
306     return true;
307   if (Val.isConstant())
308     // Non integer constants
309     return true;
310   return false;
311 }
312 
313 /// Combine two sets of facts about the same value into a single set of
314 /// facts.  Note that this method is not suitable for merging facts along
315 /// different paths in a CFG; that's what the mergeIn function is for.  This
316 /// is for merging facts gathered about the same value at the same location
317 /// through two independent means.
318 /// Notes:
319 /// * This method does not promise to return the most precise possible lattice
320 ///   value implied by A and B.  It is allowed to return any lattice element
321 ///   which is at least as strong as *either* A or B (unless our facts
322 ///   conflict, see below).
323 /// * Due to unreachable code, the intersection of two lattice values could be
324 ///   contradictory.  If this happens, we return some valid lattice value so as
325 ///   not confuse the rest of LVI.  Ideally, we'd always return Undefined, but
326 ///   we do not make this guarantee.  TODO: This would be a useful enhancement.
327 static LVILatticeVal intersect(LVILatticeVal A, LVILatticeVal B) {
328   // Undefined is the strongest state.  It means the value is known to be along
329   // an unreachable path.
330   if (A.isUndefined())
331     return A;
332   if (B.isUndefined())
333     return B;
334 
335   // If we gave up for one, but got a useable fact from the other, use it.
336   if (A.isOverdefined())
337     return B;
338   if (B.isOverdefined())
339     return A;
340 
341   // Can't get any more precise than constants.
342   if (hasSingleValue(A))
343     return A;
344   if (hasSingleValue(B))
345     return B;
346 
347   // Could be either constant range or not constant here.
348   if (!A.isConstantRange() || !B.isConstantRange()) {
349     // TODO: Arbitrary choice, could be improved
350     return A;
351   }
352 
353   // Intersect two constant ranges
354   ConstantRange Range =
355     A.getConstantRange().intersectWith(B.getConstantRange());
356   // Note: An empty range is implicitly converted to overdefined internally.
357   // TODO: We could instead use Undefined here since we've proven a conflict
358   // and thus know this path must be unreachable.
359   return LVILatticeVal::getRange(std::move(Range));
360 }
361 
362 //===----------------------------------------------------------------------===//
363 //                          LazyValueInfoCache Decl
364 //===----------------------------------------------------------------------===//
365 
366 namespace {
367   /// A callback value handle updates the cache when values are erased.
368   class LazyValueInfoCache;
369   struct LVIValueHandle final : public CallbackVH {
370     // Needs to access getValPtr(), which is protected.
371     friend struct DenseMapInfo<LVIValueHandle>;
372 
373     LazyValueInfoCache *Parent;
374 
375     LVIValueHandle(Value *V, LazyValueInfoCache *P)
376       : CallbackVH(V), Parent(P) { }
377 
378     void deleted() override;
379     void allUsesReplacedWith(Value *V) override {
380       deleted();
381     }
382   };
383 } // end anonymous namespace
384 
385 namespace {
386   /// This is the cache kept by LazyValueInfo which
387   /// maintains information about queries across the clients' queries.
388   class LazyValueInfoCache {
389     /// This is all of the cached block information for exactly one Value*.
390     /// The entries are sorted by the BasicBlock* of the
391     /// entries, allowing us to do a lookup with a binary search.
392     /// Over-defined lattice values are recorded in OverDefinedCache to reduce
393     /// memory overhead.
394     struct ValueCacheEntryTy {
395       ValueCacheEntryTy(Value *V, LazyValueInfoCache *P) : Handle(V, P) {}
396       LVIValueHandle Handle;
397       SmallDenseMap<AssertingVH<BasicBlock>, LVILatticeVal, 4> BlockVals;
398     };
399 
400     /// This is all of the cached information for all values,
401     /// mapped from Value* to key information.
402     DenseMap<Value *, std::unique_ptr<ValueCacheEntryTy>> ValueCache;
403 
404     /// This tracks, on a per-block basis, the set of values that are
405     /// over-defined at the end of that block.
406     typedef DenseMap<AssertingVH<BasicBlock>, SmallPtrSet<Value *, 4>>
407         OverDefinedCacheTy;
408     OverDefinedCacheTy OverDefinedCache;
409 
410     /// Keep track of all blocks that we have ever seen, so we
411     /// don't spend time removing unused blocks from our caches.
412     DenseSet<AssertingVH<BasicBlock> > SeenBlocks;
413 
414     /// This stack holds the state of the value solver during a query.
415     /// It basically emulates the callstack of the naive
416     /// recursive value lookup process.
417     std::stack<std::pair<BasicBlock*, Value*> > BlockValueStack;
418 
419     /// Keeps track of which block-value pairs are in BlockValueStack.
420     DenseSet<std::pair<BasicBlock*, Value*> > BlockValueSet;
421 
422     /// Push BV onto BlockValueStack unless it's already in there.
423     /// Returns true on success.
424     bool pushBlockValue(const std::pair<BasicBlock *, Value *> &BV) {
425       if (!BlockValueSet.insert(BV).second)
426         return false;  // It's already in the stack.
427 
428       DEBUG(dbgs() << "PUSH: " << *BV.second << " in " << BV.first->getName()
429                    << "\n");
430       BlockValueStack.push(BV);
431       return true;
432     }
433 
434     AssumptionCache *AC;  ///< A pointer to the cache of @llvm.assume calls.
435     const DataLayout &DL; ///< A mandatory DataLayout
436     DominatorTree *DT;    ///< An optional DT pointer.
437 
438     friend struct LVIValueHandle;
439 
440     void insertResult(Value *Val, BasicBlock *BB, const LVILatticeVal &Result) {
441       SeenBlocks.insert(BB);
442 
443       // Insert over-defined values into their own cache to reduce memory
444       // overhead.
445       if (Result.isOverdefined())
446         OverDefinedCache[BB].insert(Val);
447       else {
448         auto It = ValueCache.find_as(Val);
449         if (It == ValueCache.end()) {
450           ValueCache[Val] = make_unique<ValueCacheEntryTy>(Val, this);
451           It = ValueCache.find_as(Val);
452           assert(It != ValueCache.end() && "Val was just added to the map!");
453         }
454         It->second->BlockVals[BB] = Result;
455       }
456     }
457 
458   LVILatticeVal getBlockValue(Value *Val, BasicBlock *BB);
459   bool getEdgeValue(Value *V, BasicBlock *F, BasicBlock *T,
460                     LVILatticeVal &Result, Instruction *CxtI = nullptr);
461   bool hasBlockValue(Value *Val, BasicBlock *BB);
462 
463   // These methods process one work item and may add more. A false value
464   // returned means that the work item was not completely processed and must
465   // be revisited after going through the new items.
466   bool solveBlockValue(Value *Val, BasicBlock *BB);
467   bool solveBlockValueNonLocal(LVILatticeVal &BBLV, Value *Val, BasicBlock *BB);
468   bool solveBlockValuePHINode(LVILatticeVal &BBLV, PHINode *PN, BasicBlock *BB);
469   bool solveBlockValueSelect(LVILatticeVal &BBLV, SelectInst *S,
470                              BasicBlock *BB);
471   bool solveBlockValueBinaryOp(LVILatticeVal &BBLV, Instruction *BBI,
472                                BasicBlock *BB);
473   bool solveBlockValueCast(LVILatticeVal &BBLV, Instruction *BBI,
474                            BasicBlock *BB);
475   void intersectAssumeOrGuardBlockValueConstantRange(Value *Val,
476                                                      LVILatticeVal &BBLV,
477                                                      Instruction *BBI);
478 
479   void solve();
480 
481     bool isOverdefined(Value *V, BasicBlock *BB) const {
482       auto ODI = OverDefinedCache.find(BB);
483 
484       if (ODI == OverDefinedCache.end())
485         return false;
486 
487       return ODI->second.count(V);
488     }
489 
490     bool hasCachedValueInfo(Value *V, BasicBlock *BB) {
491       if (isOverdefined(V, BB))
492         return true;
493 
494       auto I = ValueCache.find_as(V);
495       if (I == ValueCache.end())
496         return false;
497 
498       return I->second->BlockVals.count(BB);
499     }
500 
501     LVILatticeVal getCachedValueInfo(Value *V, BasicBlock *BB) {
502       if (isOverdefined(V, BB))
503         return LVILatticeVal::getOverdefined();
504 
505       auto I = ValueCache.find_as(V);
506       if (I == ValueCache.end())
507         return LVILatticeVal();
508       auto BBI = I->second->BlockVals.find(BB);
509       if (BBI == I->second->BlockVals.end())
510         return LVILatticeVal();
511       return BBI->second;
512     }
513 
514   public:
515     /// This is the query interface to determine the lattice
516     /// value for the specified Value* at the end of the specified block.
517     LVILatticeVal getValueInBlock(Value *V, BasicBlock *BB,
518                                   Instruction *CxtI = nullptr);
519 
520     /// This is the query interface to determine the lattice
521     /// value for the specified Value* at the specified instruction (generally
522     /// from an assume intrinsic).
523     LVILatticeVal getValueAt(Value *V, Instruction *CxtI);
524 
525     /// This is the query interface to determine the lattice
526     /// value for the specified Value* that is true on the specified edge.
527     LVILatticeVal getValueOnEdge(Value *V, BasicBlock *FromBB,BasicBlock *ToBB,
528                                  Instruction *CxtI = nullptr);
529 
530     /// This is the update interface to inform the cache that an edge from
531     /// PredBB to OldSucc has been threaded to be from PredBB to NewSucc.
532     void threadEdge(BasicBlock *PredBB,BasicBlock *OldSucc,BasicBlock *NewSucc);
533 
534     /// This is part of the update interface to inform the cache
535     /// that a block has been deleted.
536     void eraseBlock(BasicBlock *BB);
537 
538     /// clear - Empty the cache.
539     void clear() {
540       SeenBlocks.clear();
541       ValueCache.clear();
542       OverDefinedCache.clear();
543     }
544 
545     LazyValueInfoCache(AssumptionCache *AC, const DataLayout &DL,
546                        DominatorTree *DT = nullptr)
547         : AC(AC), DL(DL), DT(DT) {}
548   };
549 } // end anonymous namespace
550 
551 void LVIValueHandle::deleted() {
552   SmallVector<AssertingVH<BasicBlock>, 4> ToErase;
553   for (auto &I : Parent->OverDefinedCache) {
554     SmallPtrSetImpl<Value *> &ValueSet = I.second;
555     if (ValueSet.count(getValPtr()))
556       ValueSet.erase(getValPtr());
557     if (ValueSet.empty())
558       ToErase.push_back(I.first);
559   }
560   for (auto &BB : ToErase)
561     Parent->OverDefinedCache.erase(BB);
562 
563   // This erasure deallocates *this, so it MUST happen after we're done
564   // using any and all members of *this.
565   Parent->ValueCache.erase(*this);
566 }
567 
568 void LazyValueInfoCache::eraseBlock(BasicBlock *BB) {
569   // Shortcut if we have never seen this block.
570   DenseSet<AssertingVH<BasicBlock> >::iterator I = SeenBlocks.find(BB);
571   if (I == SeenBlocks.end())
572     return;
573   SeenBlocks.erase(I);
574 
575   auto ODI = OverDefinedCache.find(BB);
576   if (ODI != OverDefinedCache.end())
577     OverDefinedCache.erase(ODI);
578 
579   for (auto &I : ValueCache)
580     I.second->BlockVals.erase(BB);
581 }
582 
583 void LazyValueInfoCache::solve() {
584   while (!BlockValueStack.empty()) {
585     std::pair<BasicBlock*, Value*> &e = BlockValueStack.top();
586     assert(BlockValueSet.count(e) && "Stack value should be in BlockValueSet!");
587 
588     if (solveBlockValue(e.second, e.first)) {
589       // The work item was completely processed.
590       assert(BlockValueStack.top() == e && "Nothing should have been pushed!");
591       assert(hasCachedValueInfo(e.second, e.first) &&
592              "Result should be in cache!");
593 
594       DEBUG(dbgs() << "POP " << *e.second << " in " << e.first->getName()
595                    << " = " << getCachedValueInfo(e.second, e.first) << "\n");
596 
597       BlockValueStack.pop();
598       BlockValueSet.erase(e);
599     } else {
600       // More work needs to be done before revisiting.
601       assert(BlockValueStack.top() != e && "Stack should have been pushed!");
602     }
603   }
604 }
605 
606 bool LazyValueInfoCache::hasBlockValue(Value *Val, BasicBlock *BB) {
607   // If already a constant, there is nothing to compute.
608   if (isa<Constant>(Val))
609     return true;
610 
611   return hasCachedValueInfo(Val, BB);
612 }
613 
614 LVILatticeVal LazyValueInfoCache::getBlockValue(Value *Val, BasicBlock *BB) {
615   // If already a constant, there is nothing to compute.
616   if (Constant *VC = dyn_cast<Constant>(Val))
617     return LVILatticeVal::get(VC);
618 
619   SeenBlocks.insert(BB);
620   return getCachedValueInfo(Val, BB);
621 }
622 
623 static LVILatticeVal getFromRangeMetadata(Instruction *BBI) {
624   switch (BBI->getOpcode()) {
625   default: break;
626   case Instruction::Load:
627   case Instruction::Call:
628   case Instruction::Invoke:
629     if (MDNode *Ranges = BBI->getMetadata(LLVMContext::MD_range))
630       if (isa<IntegerType>(BBI->getType())) {
631         return LVILatticeVal::getRange(getConstantRangeFromMetadata(*Ranges));
632       }
633     break;
634   };
635   // Nothing known - will be intersected with other facts
636   return LVILatticeVal::getOverdefined();
637 }
638 
639 bool LazyValueInfoCache::solveBlockValue(Value *Val, BasicBlock *BB) {
640   if (isa<Constant>(Val))
641     return true;
642 
643   if (hasCachedValueInfo(Val, BB)) {
644     // If we have a cached value, use that.
645     DEBUG(dbgs() << "  reuse BB '" << BB->getName()
646                  << "' val=" << getCachedValueInfo(Val, BB) << '\n');
647 
648     // Since we're reusing a cached value, we don't need to update the
649     // OverDefinedCache. The cache will have been properly updated whenever the
650     // cached value was inserted.
651     return true;
652   }
653 
654   // Hold off inserting this value into the Cache in case we have to return
655   // false and come back later.
656   LVILatticeVal Res;
657 
658   Instruction *BBI = dyn_cast<Instruction>(Val);
659   if (!BBI || BBI->getParent() != BB) {
660     if (!solveBlockValueNonLocal(Res, Val, BB))
661       return false;
662    insertResult(Val, BB, Res);
663    return true;
664   }
665 
666   if (PHINode *PN = dyn_cast<PHINode>(BBI)) {
667     if (!solveBlockValuePHINode(Res, PN, BB))
668       return false;
669     insertResult(Val, BB, Res);
670     return true;
671   }
672 
673   if (auto *SI = dyn_cast<SelectInst>(BBI)) {
674     if (!solveBlockValueSelect(Res, SI, BB))
675       return false;
676     insertResult(Val, BB, Res);
677     return true;
678   }
679 
680   // If this value is a nonnull pointer, record it's range and bailout.  Note
681   // that for all other pointer typed values, we terminate the search at the
682   // definition.  We could easily extend this to look through geps, bitcasts,
683   // and the like to prove non-nullness, but it's not clear that's worth it
684   // compile time wise.  The context-insensative value walk done inside
685   // isKnownNonNull gets most of the profitable cases at much less expense.
686   // This does mean that we have a sensativity to where the defining
687   // instruction is placed, even if it could legally be hoisted much higher.
688   // That is unfortunate.
689   PointerType *PT = dyn_cast<PointerType>(BBI->getType());
690   if (PT && isKnownNonNull(BBI)) {
691     Res = LVILatticeVal::getNot(ConstantPointerNull::get(PT));
692     insertResult(Val, BB, Res);
693     return true;
694   }
695   if (BBI->getType()->isIntegerTy()) {
696     if (isa<CastInst>(BBI)) {
697       if (!solveBlockValueCast(Res, BBI, BB))
698         return false;
699       insertResult(Val, BB, Res);
700       return true;
701     }
702     BinaryOperator *BO = dyn_cast<BinaryOperator>(BBI);
703     if (BO && isa<ConstantInt>(BO->getOperand(1))) {
704       if (!solveBlockValueBinaryOp(Res, BBI, BB))
705         return false;
706       insertResult(Val, BB, Res);
707       return true;
708     }
709   }
710 
711   DEBUG(dbgs() << " compute BB '" << BB->getName()
712                  << "' - unknown inst def found.\n");
713   Res = getFromRangeMetadata(BBI);
714   insertResult(Val, BB, Res);
715   return true;
716 }
717 
718 static bool InstructionDereferencesPointer(Instruction *I, Value *Ptr) {
719   if (LoadInst *L = dyn_cast<LoadInst>(I)) {
720     return L->getPointerAddressSpace() == 0 &&
721            GetUnderlyingObject(L->getPointerOperand(),
722                                L->getModule()->getDataLayout()) == Ptr;
723   }
724   if (StoreInst *S = dyn_cast<StoreInst>(I)) {
725     return S->getPointerAddressSpace() == 0 &&
726            GetUnderlyingObject(S->getPointerOperand(),
727                                S->getModule()->getDataLayout()) == Ptr;
728   }
729   if (MemIntrinsic *MI = dyn_cast<MemIntrinsic>(I)) {
730     if (MI->isVolatile()) return false;
731 
732     // FIXME: check whether it has a valuerange that excludes zero?
733     ConstantInt *Len = dyn_cast<ConstantInt>(MI->getLength());
734     if (!Len || Len->isZero()) return false;
735 
736     if (MI->getDestAddressSpace() == 0)
737       if (GetUnderlyingObject(MI->getRawDest(),
738                               MI->getModule()->getDataLayout()) == Ptr)
739         return true;
740     if (MemTransferInst *MTI = dyn_cast<MemTransferInst>(MI))
741       if (MTI->getSourceAddressSpace() == 0)
742         if (GetUnderlyingObject(MTI->getRawSource(),
743                                 MTI->getModule()->getDataLayout()) == Ptr)
744           return true;
745   }
746   return false;
747 }
748 
749 /// Return true if the allocation associated with Val is ever dereferenced
750 /// within the given basic block.  This establishes the fact Val is not null,
751 /// but does not imply that the memory at Val is dereferenceable.  (Val may
752 /// point off the end of the dereferenceable part of the object.)
753 static bool isObjectDereferencedInBlock(Value *Val, BasicBlock *BB) {
754   assert(Val->getType()->isPointerTy());
755 
756   const DataLayout &DL = BB->getModule()->getDataLayout();
757   Value *UnderlyingVal = GetUnderlyingObject(Val, DL);
758   // If 'GetUnderlyingObject' didn't converge, skip it. It won't converge
759   // inside InstructionDereferencesPointer either.
760   if (UnderlyingVal == GetUnderlyingObject(UnderlyingVal, DL, 1))
761     for (Instruction &I : *BB)
762       if (InstructionDereferencesPointer(&I, UnderlyingVal))
763         return true;
764   return false;
765 }
766 
767 bool LazyValueInfoCache::solveBlockValueNonLocal(LVILatticeVal &BBLV,
768                                                  Value *Val, BasicBlock *BB) {
769   LVILatticeVal Result;  // Start Undefined.
770 
771   // If this is the entry block, we must be asking about an argument.  The
772   // value is overdefined.
773   if (BB == &BB->getParent()->getEntryBlock()) {
774     assert(isa<Argument>(Val) && "Unknown live-in to the entry block");
775     // Bofore giving up, see if we can prove the pointer non-null local to
776     // this particular block.
777     if (Val->getType()->isPointerTy() &&
778         (isKnownNonNull(Val) || isObjectDereferencedInBlock(Val, BB))) {
779       PointerType *PTy = cast<PointerType>(Val->getType());
780       Result = LVILatticeVal::getNot(ConstantPointerNull::get(PTy));
781     } else {
782       Result.markOverdefined();
783     }
784     BBLV = Result;
785     return true;
786   }
787 
788   // Loop over all of our predecessors, merging what we know from them into
789   // result.
790   bool EdgesMissing = false;
791   for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
792     LVILatticeVal EdgeResult;
793     EdgesMissing |= !getEdgeValue(Val, *PI, BB, EdgeResult);
794     if (EdgesMissing)
795       continue;
796 
797     Result.mergeIn(EdgeResult, DL);
798 
799     // If we hit overdefined, exit early.  The BlockVals entry is already set
800     // to overdefined.
801     if (Result.isOverdefined()) {
802       DEBUG(dbgs() << " compute BB '" << BB->getName()
803             << "' - overdefined because of pred (non local).\n");
804       // Before giving up, see if we can prove the pointer non-null local to
805       // this particular block.
806       if (Val->getType()->isPointerTy() &&
807           isObjectDereferencedInBlock(Val, BB)) {
808         PointerType *PTy = cast<PointerType>(Val->getType());
809         Result = LVILatticeVal::getNot(ConstantPointerNull::get(PTy));
810       }
811 
812       BBLV = Result;
813       return true;
814     }
815   }
816   if (EdgesMissing)
817     return false;
818 
819   // Return the merged value, which is more precise than 'overdefined'.
820   assert(!Result.isOverdefined());
821   BBLV = Result;
822   return true;
823 }
824 
825 bool LazyValueInfoCache::solveBlockValuePHINode(LVILatticeVal &BBLV,
826                                                 PHINode *PN, BasicBlock *BB) {
827   LVILatticeVal Result;  // Start Undefined.
828 
829   // Loop over all of our predecessors, merging what we know from them into
830   // result.
831   bool EdgesMissing = false;
832   for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
833     BasicBlock *PhiBB = PN->getIncomingBlock(i);
834     Value *PhiVal = PN->getIncomingValue(i);
835     LVILatticeVal EdgeResult;
836     // Note that we can provide PN as the context value to getEdgeValue, even
837     // though the results will be cached, because PN is the value being used as
838     // the cache key in the caller.
839     EdgesMissing |= !getEdgeValue(PhiVal, PhiBB, BB, EdgeResult, PN);
840     if (EdgesMissing)
841       continue;
842 
843     Result.mergeIn(EdgeResult, DL);
844 
845     // If we hit overdefined, exit early.  The BlockVals entry is already set
846     // to overdefined.
847     if (Result.isOverdefined()) {
848       DEBUG(dbgs() << " compute BB '" << BB->getName()
849             << "' - overdefined because of pred (local).\n");
850 
851       BBLV = Result;
852       return true;
853     }
854   }
855   if (EdgesMissing)
856     return false;
857 
858   // Return the merged value, which is more precise than 'overdefined'.
859   assert(!Result.isOverdefined() && "Possible PHI in entry block?");
860   BBLV = Result;
861   return true;
862 }
863 
864 static LVILatticeVal getValueFromCondition(Value *Val, Value *Cond,
865                                            bool isTrueDest = true);
866 
867 // If we can determine a constraint on the value given conditions assumed by
868 // the program, intersect those constraints with BBLV
869 void LazyValueInfoCache::intersectAssumeOrGuardBlockValueConstantRange(
870         Value *Val, LVILatticeVal &BBLV, Instruction *BBI) {
871   BBI = BBI ? BBI : dyn_cast<Instruction>(Val);
872   if (!BBI)
873     return;
874 
875   for (auto &AssumeVH : AC->assumptions()) {
876     if (!AssumeVH)
877       continue;
878     auto *I = cast<CallInst>(AssumeVH);
879     if (!isValidAssumeForContext(I, BBI, DT))
880       continue;
881 
882     BBLV = intersect(BBLV, getValueFromCondition(Val, I->getArgOperand(0)));
883   }
884 
885   // If guards are not used in the module, don't spend time looking for them
886   auto *GuardDecl = BBI->getModule()->getFunction(
887           Intrinsic::getName(Intrinsic::experimental_guard));
888   if (!GuardDecl || GuardDecl->use_empty())
889     return;
890 
891   for (BasicBlock::iterator I = BBI->getIterator(),
892                             E = BBI->getParent()->begin(); I != E; I--) {
893     Value *Cond = nullptr;
894     if (!match(&*I, m_Intrinsic<Intrinsic::experimental_guard>(m_Value(Cond))))
895       continue;
896     BBLV = intersect(BBLV, getValueFromCondition(Val, Cond));
897   }
898 }
899 
900 bool LazyValueInfoCache::solveBlockValueSelect(LVILatticeVal &BBLV,
901                                                SelectInst *SI, BasicBlock *BB) {
902 
903   // Recurse on our inputs if needed
904   if (!hasBlockValue(SI->getTrueValue(), BB)) {
905     if (pushBlockValue(std::make_pair(BB, SI->getTrueValue())))
906       return false;
907     BBLV.markOverdefined();
908     return true;
909   }
910   LVILatticeVal TrueVal = getBlockValue(SI->getTrueValue(), BB);
911   // If we hit overdefined, don't ask more queries.  We want to avoid poisoning
912   // extra slots in the table if we can.
913   if (TrueVal.isOverdefined()) {
914     BBLV.markOverdefined();
915     return true;
916   }
917 
918   if (!hasBlockValue(SI->getFalseValue(), BB)) {
919     if (pushBlockValue(std::make_pair(BB, SI->getFalseValue())))
920       return false;
921     BBLV.markOverdefined();
922     return true;
923   }
924   LVILatticeVal FalseVal = getBlockValue(SI->getFalseValue(), BB);
925   // If we hit overdefined, don't ask more queries.  We want to avoid poisoning
926   // extra slots in the table if we can.
927   if (FalseVal.isOverdefined()) {
928     BBLV.markOverdefined();
929     return true;
930   }
931 
932   if (TrueVal.isConstantRange() && FalseVal.isConstantRange()) {
933     ConstantRange TrueCR = TrueVal.getConstantRange();
934     ConstantRange FalseCR = FalseVal.getConstantRange();
935     Value *LHS = nullptr;
936     Value *RHS = nullptr;
937     SelectPatternResult SPR = matchSelectPattern(SI, LHS, RHS);
938     // Is this a min specifically of our two inputs?  (Avoid the risk of
939     // ValueTracking getting smarter looking back past our immediate inputs.)
940     if (SelectPatternResult::isMinOrMax(SPR.Flavor) &&
941         LHS == SI->getTrueValue() && RHS == SI->getFalseValue()) {
942       switch (SPR.Flavor) {
943       default:
944         llvm_unreachable("unexpected minmax type!");
945       case SPF_SMIN:                   /// Signed minimum
946         BBLV.markConstantRange(TrueCR.smin(FalseCR));
947         return true;
948       case SPF_UMIN:                   /// Unsigned minimum
949         BBLV.markConstantRange(TrueCR.umin(FalseCR));
950         return true;
951       case SPF_SMAX:                   /// Signed maximum
952         BBLV.markConstantRange(TrueCR.smax(FalseCR));
953         return true;
954       case SPF_UMAX:                   /// Unsigned maximum
955         BBLV.markConstantRange(TrueCR.umax(FalseCR));
956         return true;
957       };
958     }
959 
960     // TODO: ABS, NABS from the SelectPatternResult
961   }
962 
963   // Can we constrain the facts about the true and false values by using the
964   // condition itself?  This shows up with idioms like e.g. select(a > 5, a, 5).
965   // TODO: We could potentially refine an overdefined true value above.
966   Value *Cond = SI->getCondition();
967   TrueVal = intersect(TrueVal,
968                       getValueFromCondition(SI->getTrueValue(), Cond, true));
969   FalseVal = intersect(FalseVal,
970                        getValueFromCondition(SI->getFalseValue(), Cond, false));
971 
972   // Handle clamp idioms such as:
973   //   %24 = constantrange<0, 17>
974   //   %39 = icmp eq i32 %24, 0
975   //   %40 = add i32 %24, -1
976   //   %siv.next = select i1 %39, i32 16, i32 %40
977   //   %siv.next = constantrange<0, 17> not <-1, 17>
978   // In general, this can handle any clamp idiom which tests the edge
979   // condition via an equality or inequality.
980   if (auto *ICI = dyn_cast<ICmpInst>(Cond)) {
981     ICmpInst::Predicate Pred = ICI->getPredicate();
982     Value *A = ICI->getOperand(0);
983     if (ConstantInt *CIBase = dyn_cast<ConstantInt>(ICI->getOperand(1))) {
984       auto addConstants = [](ConstantInt *A, ConstantInt *B) {
985         assert(A->getType() == B->getType());
986         return ConstantInt::get(A->getType(), A->getValue() + B->getValue());
987       };
988       // See if either input is A + C2, subject to the constraint from the
989       // condition that A != C when that input is used.  We can assume that
990       // that input doesn't include C + C2.
991       ConstantInt *CIAdded;
992       switch (Pred) {
993       default: break;
994       case ICmpInst::ICMP_EQ:
995         if (match(SI->getFalseValue(), m_Add(m_Specific(A),
996                                              m_ConstantInt(CIAdded)))) {
997           auto ResNot = addConstants(CIBase, CIAdded);
998           FalseVal = intersect(FalseVal,
999                                LVILatticeVal::getNot(ResNot));
1000         }
1001         break;
1002       case ICmpInst::ICMP_NE:
1003         if (match(SI->getTrueValue(), m_Add(m_Specific(A),
1004                                             m_ConstantInt(CIAdded)))) {
1005           auto ResNot = addConstants(CIBase, CIAdded);
1006           TrueVal = intersect(TrueVal,
1007                               LVILatticeVal::getNot(ResNot));
1008         }
1009         break;
1010       };
1011     }
1012   }
1013 
1014   LVILatticeVal Result;  // Start Undefined.
1015   Result.mergeIn(TrueVal, DL);
1016   Result.mergeIn(FalseVal, DL);
1017   BBLV = Result;
1018   return true;
1019 }
1020 
1021 bool LazyValueInfoCache::solveBlockValueCast(LVILatticeVal &BBLV,
1022                                              Instruction *BBI,
1023                                              BasicBlock *BB) {
1024   if (!BBI->getOperand(0)->getType()->isSized()) {
1025     // Without knowing how wide the input is, we can't analyze it in any useful
1026     // way.
1027     BBLV.markOverdefined();
1028     return true;
1029   }
1030 
1031   // Filter out casts we don't know how to reason about before attempting to
1032   // recurse on our operand.  This can cut a long search short if we know we're
1033   // not going to be able to get any useful information anways.
1034   switch (BBI->getOpcode()) {
1035   case Instruction::Trunc:
1036   case Instruction::SExt:
1037   case Instruction::ZExt:
1038   case Instruction::BitCast:
1039     break;
1040   default:
1041     // Unhandled instructions are overdefined.
1042     DEBUG(dbgs() << " compute BB '" << BB->getName()
1043                  << "' - overdefined (unknown cast).\n");
1044     BBLV.markOverdefined();
1045     return true;
1046   }
1047 
1048   // Figure out the range of the LHS.  If that fails, we still apply the
1049   // transfer rule on the full set since we may be able to locally infer
1050   // interesting facts.
1051   if (!hasBlockValue(BBI->getOperand(0), BB))
1052     if (pushBlockValue(std::make_pair(BB, BBI->getOperand(0))))
1053       // More work to do before applying this transfer rule.
1054       return false;
1055 
1056   const unsigned OperandBitWidth =
1057     DL.getTypeSizeInBits(BBI->getOperand(0)->getType());
1058   ConstantRange LHSRange = ConstantRange(OperandBitWidth);
1059   if (hasBlockValue(BBI->getOperand(0), BB)) {
1060     LVILatticeVal LHSVal = getBlockValue(BBI->getOperand(0), BB);
1061     intersectAssumeOrGuardBlockValueConstantRange(BBI->getOperand(0), LHSVal,
1062                                                   BBI);
1063     if (LHSVal.isConstantRange())
1064       LHSRange = LHSVal.getConstantRange();
1065   }
1066 
1067   const unsigned ResultBitWidth =
1068     cast<IntegerType>(BBI->getType())->getBitWidth();
1069 
1070   // NOTE: We're currently limited by the set of operations that ConstantRange
1071   // can evaluate symbolically.  Enhancing that set will allows us to analyze
1072   // more definitions.
1073   LVILatticeVal Result;
1074   switch (BBI->getOpcode()) {
1075   case Instruction::Trunc:
1076     Result.markConstantRange(LHSRange.truncate(ResultBitWidth));
1077     break;
1078   case Instruction::SExt:
1079     Result.markConstantRange(LHSRange.signExtend(ResultBitWidth));
1080     break;
1081   case Instruction::ZExt:
1082     Result.markConstantRange(LHSRange.zeroExtend(ResultBitWidth));
1083     break;
1084   case Instruction::BitCast:
1085     Result.markConstantRange(LHSRange);
1086     break;
1087   default:
1088     // Should be dead if the code above is correct
1089     llvm_unreachable("inconsistent with above");
1090     break;
1091   }
1092 
1093   BBLV = Result;
1094   return true;
1095 }
1096 
1097 bool LazyValueInfoCache::solveBlockValueBinaryOp(LVILatticeVal &BBLV,
1098                                                  Instruction *BBI,
1099                                                  BasicBlock *BB) {
1100 
1101   assert(BBI->getOperand(0)->getType()->isSized() &&
1102          "all operands to binary operators are sized");
1103 
1104   // Filter out operators we don't know how to reason about before attempting to
1105   // recurse on our operand(s).  This can cut a long search short if we know
1106   // we're not going to be able to get any useful information anways.
1107   switch (BBI->getOpcode()) {
1108   case Instruction::Add:
1109   case Instruction::Sub:
1110   case Instruction::Mul:
1111   case Instruction::UDiv:
1112   case Instruction::Shl:
1113   case Instruction::LShr:
1114   case Instruction::And:
1115   case Instruction::Or:
1116     // continue into the code below
1117     break;
1118   default:
1119     // Unhandled instructions are overdefined.
1120     DEBUG(dbgs() << " compute BB '" << BB->getName()
1121                  << "' - overdefined (unknown binary operator).\n");
1122     BBLV.markOverdefined();
1123     return true;
1124   };
1125 
1126   // Figure out the range of the LHS.  If that fails, use a conservative range,
1127   // but apply the transfer rule anyways.  This lets us pick up facts from
1128   // expressions like "and i32 (call i32 @foo()), 32"
1129   if (!hasBlockValue(BBI->getOperand(0), BB))
1130     if (pushBlockValue(std::make_pair(BB, BBI->getOperand(0))))
1131       // More work to do before applying this transfer rule.
1132       return false;
1133 
1134   const unsigned OperandBitWidth =
1135     DL.getTypeSizeInBits(BBI->getOperand(0)->getType());
1136   ConstantRange LHSRange = ConstantRange(OperandBitWidth);
1137   if (hasBlockValue(BBI->getOperand(0), BB)) {
1138     LVILatticeVal LHSVal = getBlockValue(BBI->getOperand(0), BB);
1139     intersectAssumeOrGuardBlockValueConstantRange(BBI->getOperand(0), LHSVal,
1140                                                   BBI);
1141     if (LHSVal.isConstantRange())
1142       LHSRange = LHSVal.getConstantRange();
1143   }
1144 
1145   ConstantInt *RHS = cast<ConstantInt>(BBI->getOperand(1));
1146   ConstantRange RHSRange = ConstantRange(RHS->getValue());
1147 
1148   // NOTE: We're currently limited by the set of operations that ConstantRange
1149   // can evaluate symbolically.  Enhancing that set will allows us to analyze
1150   // more definitions.
1151   LVILatticeVal Result;
1152   switch (BBI->getOpcode()) {
1153   case Instruction::Add:
1154     Result.markConstantRange(LHSRange.add(RHSRange));
1155     break;
1156   case Instruction::Sub:
1157     Result.markConstantRange(LHSRange.sub(RHSRange));
1158     break;
1159   case Instruction::Mul:
1160     Result.markConstantRange(LHSRange.multiply(RHSRange));
1161     break;
1162   case Instruction::UDiv:
1163     Result.markConstantRange(LHSRange.udiv(RHSRange));
1164     break;
1165   case Instruction::Shl:
1166     Result.markConstantRange(LHSRange.shl(RHSRange));
1167     break;
1168   case Instruction::LShr:
1169     Result.markConstantRange(LHSRange.lshr(RHSRange));
1170     break;
1171   case Instruction::And:
1172     Result.markConstantRange(LHSRange.binaryAnd(RHSRange));
1173     break;
1174   case Instruction::Or:
1175     Result.markConstantRange(LHSRange.binaryOr(RHSRange));
1176     break;
1177   default:
1178     // Should be dead if the code above is correct
1179     llvm_unreachable("inconsistent with above");
1180     break;
1181   }
1182 
1183   BBLV = Result;
1184   return true;
1185 }
1186 
1187 static LVILatticeVal getValueFromICmpCondition(Value *Val, ICmpInst *ICI,
1188                                                bool isTrueDest) {
1189   Value *LHS = ICI->getOperand(0);
1190   Value *RHS = ICI->getOperand(1);
1191   CmpInst::Predicate Predicate = ICI->getPredicate();
1192 
1193   if (isa<Constant>(RHS)) {
1194     if (ICI->isEquality() && LHS == Val) {
1195       // We know that V has the RHS constant if this is a true SETEQ or
1196       // false SETNE.
1197       if (isTrueDest == (Predicate == ICmpInst::ICMP_EQ))
1198         return LVILatticeVal::get(cast<Constant>(RHS));
1199       else
1200         return LVILatticeVal::getNot(cast<Constant>(RHS));
1201     }
1202   }
1203 
1204   if (!Val->getType()->isIntegerTy())
1205     return LVILatticeVal::getOverdefined();
1206 
1207   // Use ConstantRange::makeAllowedICmpRegion in order to determine the possible
1208   // range of Val guaranteed by the condition. Recognize comparisons in the from
1209   // of:
1210   //  icmp <pred> Val, ...
1211   //  icmp <pred> (add Val, Offset), ...
1212   // The latter is the range checking idiom that InstCombine produces. Subtract
1213   // the offset from the allowed range for RHS in this case.
1214 
1215   // Val or (add Val, Offset) can be on either hand of the comparison
1216   if (LHS != Val && !match(LHS, m_Add(m_Specific(Val), m_ConstantInt()))) {
1217     std::swap(LHS, RHS);
1218     Predicate = CmpInst::getSwappedPredicate(Predicate);
1219   }
1220 
1221   ConstantInt *Offset = nullptr;
1222   if (LHS != Val)
1223     match(LHS, m_Add(m_Specific(Val), m_ConstantInt(Offset)));
1224 
1225   if (LHS == Val || Offset) {
1226     // Calculate the range of values that are allowed by the comparison
1227     ConstantRange RHSRange(RHS->getType()->getIntegerBitWidth(),
1228                            /*isFullSet=*/true);
1229     if (ConstantInt *CI = dyn_cast<ConstantInt>(RHS))
1230       RHSRange = ConstantRange(CI->getValue());
1231     else if (Instruction *I = dyn_cast<Instruction>(RHS))
1232       if (auto *Ranges = I->getMetadata(LLVMContext::MD_range))
1233         RHSRange = getConstantRangeFromMetadata(*Ranges);
1234 
1235     // If we're interested in the false dest, invert the condition
1236     CmpInst::Predicate Pred =
1237             isTrueDest ? Predicate : CmpInst::getInversePredicate(Predicate);
1238     ConstantRange TrueValues =
1239             ConstantRange::makeAllowedICmpRegion(Pred, RHSRange);
1240 
1241     if (Offset) // Apply the offset from above.
1242       TrueValues = TrueValues.subtract(Offset->getValue());
1243 
1244     return LVILatticeVal::getRange(std::move(TrueValues));
1245   }
1246 
1247   return LVILatticeVal::getOverdefined();
1248 }
1249 
1250 static LVILatticeVal
1251 getValueFromCondition(Value *Val, Value *Cond, bool isTrueDest,
1252                       DenseMap<Value*, LVILatticeVal> &Visited);
1253 
1254 static LVILatticeVal
1255 getValueFromConditionImpl(Value *Val, Value *Cond, bool isTrueDest,
1256                           DenseMap<Value*, LVILatticeVal> &Visited) {
1257   if (ICmpInst *ICI = dyn_cast<ICmpInst>(Cond))
1258     return getValueFromICmpCondition(Val, ICI, isTrueDest);
1259 
1260   // Handle conditions in the form of (cond1 && cond2), we know that on the
1261   // true dest path both of the conditions hold.
1262   if (!isTrueDest)
1263     return LVILatticeVal::getOverdefined();
1264 
1265   BinaryOperator *BO = dyn_cast<BinaryOperator>(Cond);
1266   if (!BO || BO->getOpcode() != BinaryOperator::And)
1267     return LVILatticeVal::getOverdefined();
1268 
1269   auto RHS = getValueFromCondition(Val, BO->getOperand(0), isTrueDest, Visited);
1270   auto LHS = getValueFromCondition(Val, BO->getOperand(1), isTrueDest, Visited);
1271   return intersect(RHS, LHS);
1272 }
1273 
1274 static LVILatticeVal
1275 getValueFromCondition(Value *Val, Value *Cond, bool isTrueDest,
1276                       DenseMap<Value*, LVILatticeVal> &Visited) {
1277   auto I = Visited.find(Cond);
1278   if (I != Visited.end())
1279     return I->second;
1280 
1281   auto Result = getValueFromConditionImpl(Val, Cond, isTrueDest, Visited);
1282   Visited[Cond] = Result;
1283   return Result;
1284 }
1285 
1286 LVILatticeVal getValueFromCondition(Value *Val, Value *Cond, bool isTrueDest) {
1287   assert(Cond && "precondition");
1288   DenseMap<Value*, LVILatticeVal> Visited;
1289   return getValueFromCondition(Val, Cond, isTrueDest, Visited);
1290 }
1291 
1292 /// \brief Compute the value of Val on the edge BBFrom -> BBTo. Returns false if
1293 /// Val is not constrained on the edge.  Result is unspecified if return value
1294 /// is false.
1295 static bool getEdgeValueLocal(Value *Val, BasicBlock *BBFrom,
1296                               BasicBlock *BBTo, LVILatticeVal &Result) {
1297   // TODO: Handle more complex conditionals. If (v == 0 || v2 < 1) is false, we
1298   // know that v != 0.
1299   if (BranchInst *BI = dyn_cast<BranchInst>(BBFrom->getTerminator())) {
1300     // If this is a conditional branch and only one successor goes to BBTo, then
1301     // we may be able to infer something from the condition.
1302     if (BI->isConditional() &&
1303         BI->getSuccessor(0) != BI->getSuccessor(1)) {
1304       bool isTrueDest = BI->getSuccessor(0) == BBTo;
1305       assert(BI->getSuccessor(!isTrueDest) == BBTo &&
1306              "BBTo isn't a successor of BBFrom");
1307 
1308       // If V is the condition of the branch itself, then we know exactly what
1309       // it is.
1310       if (BI->getCondition() == Val) {
1311         Result = LVILatticeVal::get(ConstantInt::get(
1312                               Type::getInt1Ty(Val->getContext()), isTrueDest));
1313         return true;
1314       }
1315 
1316       // If the condition of the branch is an equality comparison, we may be
1317       // able to infer the value.
1318       Result = getValueFromCondition(Val, BI->getCondition(), isTrueDest);
1319       if (!Result.isOverdefined())
1320         return true;
1321     }
1322   }
1323 
1324   // If the edge was formed by a switch on the value, then we may know exactly
1325   // what it is.
1326   if (SwitchInst *SI = dyn_cast<SwitchInst>(BBFrom->getTerminator())) {
1327     if (SI->getCondition() != Val)
1328       return false;
1329 
1330     bool DefaultCase = SI->getDefaultDest() == BBTo;
1331     unsigned BitWidth = Val->getType()->getIntegerBitWidth();
1332     ConstantRange EdgesVals(BitWidth, DefaultCase/*isFullSet*/);
1333 
1334     for (SwitchInst::CaseIt i : SI->cases()) {
1335       ConstantRange EdgeVal(i.getCaseValue()->getValue());
1336       if (DefaultCase) {
1337         // It is possible that the default destination is the destination of
1338         // some cases. There is no need to perform difference for those cases.
1339         if (i.getCaseSuccessor() != BBTo)
1340           EdgesVals = EdgesVals.difference(EdgeVal);
1341       } else if (i.getCaseSuccessor() == BBTo)
1342         EdgesVals = EdgesVals.unionWith(EdgeVal);
1343     }
1344     Result = LVILatticeVal::getRange(std::move(EdgesVals));
1345     return true;
1346   }
1347   return false;
1348 }
1349 
1350 /// \brief Compute the value of Val on the edge BBFrom -> BBTo or the value at
1351 /// the basic block if the edge does not constrain Val.
1352 bool LazyValueInfoCache::getEdgeValue(Value *Val, BasicBlock *BBFrom,
1353                                       BasicBlock *BBTo, LVILatticeVal &Result,
1354                                       Instruction *CxtI) {
1355   // If already a constant, there is nothing to compute.
1356   if (Constant *VC = dyn_cast<Constant>(Val)) {
1357     Result = LVILatticeVal::get(VC);
1358     return true;
1359   }
1360 
1361   LVILatticeVal LocalResult;
1362   if (!getEdgeValueLocal(Val, BBFrom, BBTo, LocalResult))
1363     // If we couldn't constrain the value on the edge, LocalResult doesn't
1364     // provide any information.
1365     LocalResult.markOverdefined();
1366 
1367   if (hasSingleValue(LocalResult)) {
1368     // Can't get any more precise here
1369     Result = LocalResult;
1370     return true;
1371   }
1372 
1373   if (!hasBlockValue(Val, BBFrom)) {
1374     if (pushBlockValue(std::make_pair(BBFrom, Val)))
1375       return false;
1376     // No new information.
1377     Result = LocalResult;
1378     return true;
1379   }
1380 
1381   // Try to intersect ranges of the BB and the constraint on the edge.
1382   LVILatticeVal InBlock = getBlockValue(Val, BBFrom);
1383   intersectAssumeOrGuardBlockValueConstantRange(Val, InBlock,
1384                                                 BBFrom->getTerminator());
1385   // We can use the context instruction (generically the ultimate instruction
1386   // the calling pass is trying to simplify) here, even though the result of
1387   // this function is generally cached when called from the solve* functions
1388   // (and that cached result might be used with queries using a different
1389   // context instruction), because when this function is called from the solve*
1390   // functions, the context instruction is not provided. When called from
1391   // LazyValueInfoCache::getValueOnEdge, the context instruction is provided,
1392   // but then the result is not cached.
1393   intersectAssumeOrGuardBlockValueConstantRange(Val, InBlock, CxtI);
1394 
1395   Result = intersect(LocalResult, InBlock);
1396   return true;
1397 }
1398 
1399 LVILatticeVal LazyValueInfoCache::getValueInBlock(Value *V, BasicBlock *BB,
1400                                                   Instruction *CxtI) {
1401   DEBUG(dbgs() << "LVI Getting block end value " << *V << " at '"
1402         << BB->getName() << "'\n");
1403 
1404   assert(BlockValueStack.empty() && BlockValueSet.empty());
1405   if (!hasBlockValue(V, BB)) {
1406     pushBlockValue(std::make_pair(BB, V));
1407     solve();
1408   }
1409   LVILatticeVal Result = getBlockValue(V, BB);
1410   intersectAssumeOrGuardBlockValueConstantRange(V, Result, CxtI);
1411 
1412   DEBUG(dbgs() << "  Result = " << Result << "\n");
1413   return Result;
1414 }
1415 
1416 LVILatticeVal LazyValueInfoCache::getValueAt(Value *V, Instruction *CxtI) {
1417   DEBUG(dbgs() << "LVI Getting value " << *V << " at '"
1418         << CxtI->getName() << "'\n");
1419 
1420   if (auto *C = dyn_cast<Constant>(V))
1421     return LVILatticeVal::get(C);
1422 
1423   LVILatticeVal Result = LVILatticeVal::getOverdefined();
1424   if (auto *I = dyn_cast<Instruction>(V))
1425     Result = getFromRangeMetadata(I);
1426   intersectAssumeOrGuardBlockValueConstantRange(V, Result, CxtI);
1427 
1428   DEBUG(dbgs() << "  Result = " << Result << "\n");
1429   return Result;
1430 }
1431 
1432 LVILatticeVal LazyValueInfoCache::
1433 getValueOnEdge(Value *V, BasicBlock *FromBB, BasicBlock *ToBB,
1434                Instruction *CxtI) {
1435   DEBUG(dbgs() << "LVI Getting edge value " << *V << " from '"
1436         << FromBB->getName() << "' to '" << ToBB->getName() << "'\n");
1437 
1438   LVILatticeVal Result;
1439   if (!getEdgeValue(V, FromBB, ToBB, Result, CxtI)) {
1440     solve();
1441     bool WasFastQuery = getEdgeValue(V, FromBB, ToBB, Result, CxtI);
1442     (void)WasFastQuery;
1443     assert(WasFastQuery && "More work to do after problem solved?");
1444   }
1445 
1446   DEBUG(dbgs() << "  Result = " << Result << "\n");
1447   return Result;
1448 }
1449 
1450 void LazyValueInfoCache::threadEdge(BasicBlock *PredBB, BasicBlock *OldSucc,
1451                                     BasicBlock *NewSucc) {
1452   // When an edge in the graph has been threaded, values that we could not
1453   // determine a value for before (i.e. were marked overdefined) may be
1454   // possible to solve now. We do NOT try to proactively update these values.
1455   // Instead, we clear their entries from the cache, and allow lazy updating to
1456   // recompute them when needed.
1457 
1458   // The updating process is fairly simple: we need to drop cached info
1459   // for all values that were marked overdefined in OldSucc, and for those same
1460   // values in any successor of OldSucc (except NewSucc) in which they were
1461   // also marked overdefined.
1462   std::vector<BasicBlock*> worklist;
1463   worklist.push_back(OldSucc);
1464 
1465   auto I = OverDefinedCache.find(OldSucc);
1466   if (I == OverDefinedCache.end())
1467     return; // Nothing to process here.
1468   SmallVector<Value *, 4> ValsToClear(I->second.begin(), I->second.end());
1469 
1470   // Use a worklist to perform a depth-first search of OldSucc's successors.
1471   // NOTE: We do not need a visited list since any blocks we have already
1472   // visited will have had their overdefined markers cleared already, and we
1473   // thus won't loop to their successors.
1474   while (!worklist.empty()) {
1475     BasicBlock *ToUpdate = worklist.back();
1476     worklist.pop_back();
1477 
1478     // Skip blocks only accessible through NewSucc.
1479     if (ToUpdate == NewSucc) continue;
1480 
1481     bool changed = false;
1482     for (Value *V : ValsToClear) {
1483       // If a value was marked overdefined in OldSucc, and is here too...
1484       auto OI = OverDefinedCache.find(ToUpdate);
1485       if (OI == OverDefinedCache.end())
1486         continue;
1487       SmallPtrSetImpl<Value *> &ValueSet = OI->second;
1488       if (!ValueSet.count(V))
1489         continue;
1490 
1491       ValueSet.erase(V);
1492       if (ValueSet.empty())
1493         OverDefinedCache.erase(OI);
1494 
1495       // If we removed anything, then we potentially need to update
1496       // blocks successors too.
1497       changed = true;
1498     }
1499 
1500     if (!changed) continue;
1501 
1502     worklist.insert(worklist.end(), succ_begin(ToUpdate), succ_end(ToUpdate));
1503   }
1504 }
1505 
1506 //===----------------------------------------------------------------------===//
1507 //                            LazyValueInfo Impl
1508 //===----------------------------------------------------------------------===//
1509 
1510 /// This lazily constructs the LazyValueInfoCache.
1511 static LazyValueInfoCache &getCache(void *&PImpl, AssumptionCache *AC,
1512                                     const DataLayout *DL,
1513                                     DominatorTree *DT = nullptr) {
1514   if (!PImpl) {
1515     assert(DL && "getCache() called with a null DataLayout");
1516     PImpl = new LazyValueInfoCache(AC, *DL, DT);
1517   }
1518   return *static_cast<LazyValueInfoCache*>(PImpl);
1519 }
1520 
1521 bool LazyValueInfoWrapperPass::runOnFunction(Function &F) {
1522   Info.AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);
1523   const DataLayout &DL = F.getParent()->getDataLayout();
1524 
1525   DominatorTreeWrapperPass *DTWP =
1526       getAnalysisIfAvailable<DominatorTreeWrapperPass>();
1527   Info.DT = DTWP ? &DTWP->getDomTree() : nullptr;
1528   Info.TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
1529 
1530   if (Info.PImpl)
1531     getCache(Info.PImpl, Info.AC, &DL, Info.DT).clear();
1532 
1533   // Fully lazy.
1534   return false;
1535 }
1536 
1537 void LazyValueInfoWrapperPass::getAnalysisUsage(AnalysisUsage &AU) const {
1538   AU.setPreservesAll();
1539   AU.addRequired<AssumptionCacheTracker>();
1540   AU.addRequired<TargetLibraryInfoWrapperPass>();
1541 }
1542 
1543 LazyValueInfo &LazyValueInfoWrapperPass::getLVI() { return Info; }
1544 
1545 LazyValueInfo::~LazyValueInfo() { releaseMemory(); }
1546 
1547 void LazyValueInfo::releaseMemory() {
1548   // If the cache was allocated, free it.
1549   if (PImpl) {
1550     delete &getCache(PImpl, AC, nullptr);
1551     PImpl = nullptr;
1552   }
1553 }
1554 
1555 void LazyValueInfoWrapperPass::releaseMemory() { Info.releaseMemory(); }
1556 
1557 LazyValueInfo LazyValueAnalysis::run(Function &F, FunctionAnalysisManager &FAM) {
1558   auto &AC = FAM.getResult<AssumptionAnalysis>(F);
1559   auto &TLI = FAM.getResult<TargetLibraryAnalysis>(F);
1560   auto *DT = FAM.getCachedResult<DominatorTreeAnalysis>(F);
1561 
1562   return LazyValueInfo(&AC, &TLI, DT);
1563 }
1564 
1565 Constant *LazyValueInfo::getConstant(Value *V, BasicBlock *BB,
1566                                      Instruction *CxtI) {
1567   const DataLayout &DL = BB->getModule()->getDataLayout();
1568   LVILatticeVal Result =
1569       getCache(PImpl, AC, &DL, DT).getValueInBlock(V, BB, CxtI);
1570 
1571   if (Result.isConstant())
1572     return Result.getConstant();
1573   if (Result.isConstantRange()) {
1574     ConstantRange CR = Result.getConstantRange();
1575     if (const APInt *SingleVal = CR.getSingleElement())
1576       return ConstantInt::get(V->getContext(), *SingleVal);
1577   }
1578   return nullptr;
1579 }
1580 
1581 ConstantRange LazyValueInfo::getConstantRange(Value *V, BasicBlock *BB,
1582                                               Instruction *CxtI) {
1583   assert(V->getType()->isIntegerTy());
1584   unsigned Width = V->getType()->getIntegerBitWidth();
1585   const DataLayout &DL = BB->getModule()->getDataLayout();
1586   LVILatticeVal Result =
1587       getCache(PImpl, AC, &DL, DT).getValueInBlock(V, BB, CxtI);
1588   if (Result.isUndefined())
1589     return ConstantRange(Width, /*isFullSet=*/false);
1590   if (Result.isConstantRange())
1591     return Result.getConstantRange();
1592   // We represent ConstantInt constants as constant ranges but other kinds
1593   // of integer constants, i.e. ConstantExpr will be tagged as constants
1594   assert(!(Result.isConstant() && isa<ConstantInt>(Result.getConstant())) &&
1595          "ConstantInt value must be represented as constantrange");
1596   return ConstantRange(Width, /*isFullSet=*/true);
1597 }
1598 
1599 /// Determine whether the specified value is known to be a
1600 /// constant on the specified edge. Return null if not.
1601 Constant *LazyValueInfo::getConstantOnEdge(Value *V, BasicBlock *FromBB,
1602                                            BasicBlock *ToBB,
1603                                            Instruction *CxtI) {
1604   const DataLayout &DL = FromBB->getModule()->getDataLayout();
1605   LVILatticeVal Result =
1606       getCache(PImpl, AC, &DL, DT).getValueOnEdge(V, FromBB, ToBB, CxtI);
1607 
1608   if (Result.isConstant())
1609     return Result.getConstant();
1610   if (Result.isConstantRange()) {
1611     ConstantRange CR = Result.getConstantRange();
1612     if (const APInt *SingleVal = CR.getSingleElement())
1613       return ConstantInt::get(V->getContext(), *SingleVal);
1614   }
1615   return nullptr;
1616 }
1617 
1618 static LazyValueInfo::Tristate getPredicateResult(unsigned Pred, Constant *C,
1619                                                   LVILatticeVal &Result,
1620                                                   const DataLayout &DL,
1621                                                   TargetLibraryInfo *TLI) {
1622 
1623   // If we know the value is a constant, evaluate the conditional.
1624   Constant *Res = nullptr;
1625   if (Result.isConstant()) {
1626     Res = ConstantFoldCompareInstOperands(Pred, Result.getConstant(), C, DL,
1627                                           TLI);
1628     if (ConstantInt *ResCI = dyn_cast<ConstantInt>(Res))
1629       return ResCI->isZero() ? LazyValueInfo::False : LazyValueInfo::True;
1630     return LazyValueInfo::Unknown;
1631   }
1632 
1633   if (Result.isConstantRange()) {
1634     ConstantInt *CI = dyn_cast<ConstantInt>(C);
1635     if (!CI) return LazyValueInfo::Unknown;
1636 
1637     ConstantRange CR = Result.getConstantRange();
1638     if (Pred == ICmpInst::ICMP_EQ) {
1639       if (!CR.contains(CI->getValue()))
1640         return LazyValueInfo::False;
1641 
1642       if (CR.isSingleElement() && CR.contains(CI->getValue()))
1643         return LazyValueInfo::True;
1644     } else if (Pred == ICmpInst::ICMP_NE) {
1645       if (!CR.contains(CI->getValue()))
1646         return LazyValueInfo::True;
1647 
1648       if (CR.isSingleElement() && CR.contains(CI->getValue()))
1649         return LazyValueInfo::False;
1650     }
1651 
1652     // Handle more complex predicates.
1653     ConstantRange TrueValues =
1654         ICmpInst::makeConstantRange((ICmpInst::Predicate)Pred, CI->getValue());
1655     if (TrueValues.contains(CR))
1656       return LazyValueInfo::True;
1657     if (TrueValues.inverse().contains(CR))
1658       return LazyValueInfo::False;
1659     return LazyValueInfo::Unknown;
1660   }
1661 
1662   if (Result.isNotConstant()) {
1663     // If this is an equality comparison, we can try to fold it knowing that
1664     // "V != C1".
1665     if (Pred == ICmpInst::ICMP_EQ) {
1666       // !C1 == C -> false iff C1 == C.
1667       Res = ConstantFoldCompareInstOperands(ICmpInst::ICMP_NE,
1668                                             Result.getNotConstant(), C, DL,
1669                                             TLI);
1670       if (Res->isNullValue())
1671         return LazyValueInfo::False;
1672     } else if (Pred == ICmpInst::ICMP_NE) {
1673       // !C1 != C -> true iff C1 == C.
1674       Res = ConstantFoldCompareInstOperands(ICmpInst::ICMP_NE,
1675                                             Result.getNotConstant(), C, DL,
1676                                             TLI);
1677       if (Res->isNullValue())
1678         return LazyValueInfo::True;
1679     }
1680     return LazyValueInfo::Unknown;
1681   }
1682 
1683   return LazyValueInfo::Unknown;
1684 }
1685 
1686 /// Determine whether the specified value comparison with a constant is known to
1687 /// be true or false on the specified CFG edge. Pred is a CmpInst predicate.
1688 LazyValueInfo::Tristate
1689 LazyValueInfo::getPredicateOnEdge(unsigned Pred, Value *V, Constant *C,
1690                                   BasicBlock *FromBB, BasicBlock *ToBB,
1691                                   Instruction *CxtI) {
1692   const DataLayout &DL = FromBB->getModule()->getDataLayout();
1693   LVILatticeVal Result =
1694       getCache(PImpl, AC, &DL, DT).getValueOnEdge(V, FromBB, ToBB, CxtI);
1695 
1696   return getPredicateResult(Pred, C, Result, DL, TLI);
1697 }
1698 
1699 LazyValueInfo::Tristate
1700 LazyValueInfo::getPredicateAt(unsigned Pred, Value *V, Constant *C,
1701                               Instruction *CxtI) {
1702   const DataLayout &DL = CxtI->getModule()->getDataLayout();
1703   LVILatticeVal Result = getCache(PImpl, AC, &DL, DT).getValueAt(V, CxtI);
1704   Tristate Ret = getPredicateResult(Pred, C, Result, DL, TLI);
1705   if (Ret != Unknown)
1706     return Ret;
1707 
1708   // Note: The following bit of code is somewhat distinct from the rest of LVI;
1709   // LVI as a whole tries to compute a lattice value which is conservatively
1710   // correct at a given location.  In this case, we have a predicate which we
1711   // weren't able to prove about the merged result, and we're pushing that
1712   // predicate back along each incoming edge to see if we can prove it
1713   // separately for each input.  As a motivating example, consider:
1714   // bb1:
1715   //   %v1 = ... ; constantrange<1, 5>
1716   //   br label %merge
1717   // bb2:
1718   //   %v2 = ... ; constantrange<10, 20>
1719   //   br label %merge
1720   // merge:
1721   //   %phi = phi [%v1, %v2] ; constantrange<1,20>
1722   //   %pred = icmp eq i32 %phi, 8
1723   // We can't tell from the lattice value for '%phi' that '%pred' is false
1724   // along each path, but by checking the predicate over each input separately,
1725   // we can.
1726   // We limit the search to one step backwards from the current BB and value.
1727   // We could consider extending this to search further backwards through the
1728   // CFG and/or value graph, but there are non-obvious compile time vs quality
1729   // tradeoffs.
1730   if (CxtI) {
1731     BasicBlock *BB = CxtI->getParent();
1732 
1733     // Function entry or an unreachable block.  Bail to avoid confusing
1734     // analysis below.
1735     pred_iterator PI = pred_begin(BB), PE = pred_end(BB);
1736     if (PI == PE)
1737       return Unknown;
1738 
1739     // If V is a PHI node in the same block as the context, we need to ask
1740     // questions about the predicate as applied to the incoming value along
1741     // each edge. This is useful for eliminating cases where the predicate is
1742     // known along all incoming edges.
1743     if (auto *PHI = dyn_cast<PHINode>(V))
1744       if (PHI->getParent() == BB) {
1745         Tristate Baseline = Unknown;
1746         for (unsigned i = 0, e = PHI->getNumIncomingValues(); i < e; i++) {
1747           Value *Incoming = PHI->getIncomingValue(i);
1748           BasicBlock *PredBB = PHI->getIncomingBlock(i);
1749           // Note that PredBB may be BB itself.
1750           Tristate Result = getPredicateOnEdge(Pred, Incoming, C, PredBB, BB,
1751                                                CxtI);
1752 
1753           // Keep going as long as we've seen a consistent known result for
1754           // all inputs.
1755           Baseline = (i == 0) ? Result /* First iteration */
1756             : (Baseline == Result ? Baseline : Unknown); /* All others */
1757           if (Baseline == Unknown)
1758             break;
1759         }
1760         if (Baseline != Unknown)
1761           return Baseline;
1762       }
1763 
1764     // For a comparison where the V is outside this block, it's possible
1765     // that we've branched on it before. Look to see if the value is known
1766     // on all incoming edges.
1767     if (!isa<Instruction>(V) ||
1768         cast<Instruction>(V)->getParent() != BB) {
1769       // For predecessor edge, determine if the comparison is true or false
1770       // on that edge. If they're all true or all false, we can conclude
1771       // the value of the comparison in this block.
1772       Tristate Baseline = getPredicateOnEdge(Pred, V, C, *PI, BB, CxtI);
1773       if (Baseline != Unknown) {
1774         // Check that all remaining incoming values match the first one.
1775         while (++PI != PE) {
1776           Tristate Ret = getPredicateOnEdge(Pred, V, C, *PI, BB, CxtI);
1777           if (Ret != Baseline) break;
1778         }
1779         // If we terminated early, then one of the values didn't match.
1780         if (PI == PE) {
1781           return Baseline;
1782         }
1783       }
1784     }
1785   }
1786   return Unknown;
1787 }
1788 
1789 void LazyValueInfo::threadEdge(BasicBlock *PredBB, BasicBlock *OldSucc,
1790                                BasicBlock *NewSucc) {
1791   if (PImpl) {
1792     const DataLayout &DL = PredBB->getModule()->getDataLayout();
1793     getCache(PImpl, AC, &DL, DT).threadEdge(PredBB, OldSucc, NewSucc);
1794   }
1795 }
1796 
1797 void LazyValueInfo::eraseBlock(BasicBlock *BB) {
1798   if (PImpl) {
1799     const DataLayout &DL = BB->getModule()->getDataLayout();
1800     getCache(PImpl, AC, &DL, DT).eraseBlock(BB);
1801   }
1802 }
1803