[X86][AVX] Regenerate tests.
[oota-llvm.git] / lib / Analysis / LazyValueInfo.cpp
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/PatternMatch.h"
30 #include "llvm/IR/ValueHandle.h"
31 #include "llvm/Support/Debug.h"
32 #include "llvm/Support/raw_ostream.h"
33 #include <map>
34 #include <stack>
35 using namespace llvm;
36 using namespace PatternMatch;
37
38 #define DEBUG_TYPE "lazy-value-info"
39
40 char LazyValueInfo::ID = 0;
41 INITIALIZE_PASS_BEGIN(LazyValueInfo, "lazy-value-info",
42                 "Lazy Value Information Analysis", false, true)
43 INITIALIZE_PASS_DEPENDENCY(AssumptionCacheTracker)
44 INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfoWrapperPass)
45 INITIALIZE_PASS_END(LazyValueInfo, "lazy-value-info",
46                 "Lazy Value Information Analysis", false, true)
47
48 namespace llvm {
49   FunctionPass *createLazyValueInfoPass() { return new LazyValueInfo(); }
50 }
51
52
53 //===----------------------------------------------------------------------===//
54 //                               LVILatticeVal
55 //===----------------------------------------------------------------------===//
56
57 /// This is the information tracked by LazyValueInfo for each value.
58 ///
59 /// FIXME: This is basically just for bringup, this can be made a lot more rich
60 /// in the future.
61 ///
62 namespace {
63 class LVILatticeVal {
64   enum LatticeValueTy {
65     /// This Value has no known value yet.
66     undefined,
67
68     /// This Value has a specific constant value.
69     constant,
70
71     /// This Value is known to not have the specified value.
72     notconstant,
73
74     /// The Value falls within this range.
75     constantrange,
76
77     /// This value is not known to be constant, and we know that it has a value.
78     overdefined
79   };
80
81   /// Val: This stores the current lattice value along with the Constant* for
82   /// the constant if this is a 'constant' or 'notconstant' value.
83   LatticeValueTy Tag;
84   Constant *Val;
85   ConstantRange Range;
86
87 public:
88   LVILatticeVal() : Tag(undefined), Val(nullptr), Range(1, true) {}
89
90   static LVILatticeVal get(Constant *C) {
91     LVILatticeVal Res;
92     if (!isa<UndefValue>(C))
93       Res.markConstant(C);
94     return Res;
95   }
96   static LVILatticeVal getNot(Constant *C) {
97     LVILatticeVal Res;
98     if (!isa<UndefValue>(C))
99       Res.markNotConstant(C);
100     return Res;
101   }
102   static LVILatticeVal getRange(ConstantRange CR) {
103     LVILatticeVal Res;
104     Res.markConstantRange(CR);
105     return Res;
106   }
107
108   bool isUndefined() const     { return Tag == undefined; }
109   bool isConstant() const      { return Tag == constant; }
110   bool isNotConstant() const   { return Tag == notconstant; }
111   bool isConstantRange() const { return Tag == constantrange; }
112   bool isOverdefined() const   { return Tag == overdefined; }
113
114   Constant *getConstant() const {
115     assert(isConstant() && "Cannot get the constant of a non-constant!");
116     return Val;
117   }
118
119   Constant *getNotConstant() const {
120     assert(isNotConstant() && "Cannot get the constant of a non-notconstant!");
121     return Val;
122   }
123
124   ConstantRange getConstantRange() const {
125     assert(isConstantRange() &&
126            "Cannot get the constant-range of a non-constant-range!");
127     return Range;
128   }
129
130   /// Return true if this is a change in status.
131   bool markOverdefined() {
132     if (isOverdefined())
133       return false;
134     Tag = overdefined;
135     return true;
136   }
137
138   /// Return true if this is a change in status.
139   bool markConstant(Constant *V) {
140     assert(V && "Marking constant with NULL");
141     if (ConstantInt *CI = dyn_cast<ConstantInt>(V))
142       return markConstantRange(ConstantRange(CI->getValue()));
143     if (isa<UndefValue>(V))
144       return false;
145
146     assert((!isConstant() || getConstant() == V) &&
147            "Marking constant with different value");
148     assert(isUndefined());
149     Tag = constant;
150     Val = V;
151     return true;
152   }
153
154   /// Return true if this is a change in status.
155   bool markNotConstant(Constant *V) {
156     assert(V && "Marking constant with NULL");
157     if (ConstantInt *CI = dyn_cast<ConstantInt>(V))
158       return markConstantRange(ConstantRange(CI->getValue()+1, CI->getValue()));
159     if (isa<UndefValue>(V))
160       return false;
161
162     assert((!isConstant() || getConstant() != V) &&
163            "Marking constant !constant with same value");
164     assert((!isNotConstant() || getNotConstant() == V) &&
165            "Marking !constant with different value");
166     assert(isUndefined() || isConstant());
167     Tag = notconstant;
168     Val = V;
169     return true;
170   }
171
172   /// Return true if this is a change in status.
173   bool markConstantRange(const ConstantRange NewR) {
174     if (isConstantRange()) {
175       if (NewR.isEmptySet())
176         return markOverdefined();
177
178       bool changed = Range != NewR;
179       Range = NewR;
180       return changed;
181     }
182
183     assert(isUndefined());
184     if (NewR.isEmptySet())
185       return markOverdefined();
186
187     Tag = constantrange;
188     Range = NewR;
189     return true;
190   }
191
192   /// Merge the specified lattice value into this one, updating this
193   /// one and returning true if anything changed.
194   bool mergeIn(const LVILatticeVal &RHS, const DataLayout &DL) {
195     if (RHS.isUndefined() || isOverdefined()) return false;
196     if (RHS.isOverdefined()) return markOverdefined();
197
198     if (isUndefined()) {
199       Tag = RHS.Tag;
200       Val = RHS.Val;
201       Range = RHS.Range;
202       return true;
203     }
204
205     if (isConstant()) {
206       if (RHS.isConstant()) {
207         if (Val == RHS.Val)
208           return false;
209         return markOverdefined();
210       }
211
212       if (RHS.isNotConstant()) {
213         if (Val == RHS.Val)
214           return markOverdefined();
215
216         // Unless we can prove that the two Constants are different, we must
217         // move to overdefined.
218         if (ConstantInt *Res =
219                 dyn_cast<ConstantInt>(ConstantFoldCompareInstOperands(
220                     CmpInst::ICMP_NE, getConstant(), RHS.getNotConstant(), DL)))
221           if (Res->isOne())
222             return markNotConstant(RHS.getNotConstant());
223
224         return markOverdefined();
225       }
226
227       // RHS is a ConstantRange, LHS is a non-integer Constant.
228
229       // FIXME: consider the case where RHS is a range [1, 0) and LHS is
230       // a function. The correct result is to pick up RHS.
231
232       return markOverdefined();
233     }
234
235     if (isNotConstant()) {
236       if (RHS.isConstant()) {
237         if (Val == RHS.Val)
238           return markOverdefined();
239
240         // Unless we can prove that the two Constants are different, we must
241         // move to overdefined.
242         if (ConstantInt *Res =
243                 dyn_cast<ConstantInt>(ConstantFoldCompareInstOperands(
244                     CmpInst::ICMP_NE, getNotConstant(), RHS.getConstant(), DL)))
245           if (Res->isOne())
246             return false;
247
248         return markOverdefined();
249       }
250
251       if (RHS.isNotConstant()) {
252         if (Val == RHS.Val)
253           return false;
254         return markOverdefined();
255       }
256
257       return markOverdefined();
258     }
259
260     assert(isConstantRange() && "New LVILattice type?");
261     if (!RHS.isConstantRange())
262       return markOverdefined();
263
264     ConstantRange NewR = Range.unionWith(RHS.getConstantRange());
265     if (NewR.isFullSet())
266       return markOverdefined();
267     return markConstantRange(NewR);
268   }
269 };
270
271 } // end anonymous namespace.
272
273 namespace llvm {
274 raw_ostream &operator<<(raw_ostream &OS, const LVILatticeVal &Val)
275     LLVM_ATTRIBUTE_USED;
276 raw_ostream &operator<<(raw_ostream &OS, const LVILatticeVal &Val) {
277   if (Val.isUndefined())
278     return OS << "undefined";
279   if (Val.isOverdefined())
280     return OS << "overdefined";
281
282   if (Val.isNotConstant())
283     return OS << "notconstant<" << *Val.getNotConstant() << '>';
284   else if (Val.isConstantRange())
285     return OS << "constantrange<" << Val.getConstantRange().getLower() << ", "
286               << Val.getConstantRange().getUpper() << '>';
287   return OS << "constant<" << *Val.getConstant() << '>';
288 }
289 }
290
291 //===----------------------------------------------------------------------===//
292 //                          LazyValueInfoCache Decl
293 //===----------------------------------------------------------------------===//
294
295 namespace {
296   /// A callback value handle updates the cache when values are erased.
297   class LazyValueInfoCache;
298   struct LVIValueHandle final : public CallbackVH {
299     LazyValueInfoCache *Parent;
300
301     LVIValueHandle(Value *V, LazyValueInfoCache *P)
302       : CallbackVH(V), Parent(P) { }
303
304     void deleted() override;
305     void allUsesReplacedWith(Value *V) override {
306       deleted();
307     }
308   };
309 }
310
311 namespace {
312   /// This is the cache kept by LazyValueInfo which
313   /// maintains information about queries across the clients' queries.
314   class LazyValueInfoCache {
315     /// This is all of the cached block information for exactly one Value*.
316     /// The entries are sorted by the BasicBlock* of the
317     /// entries, allowing us to do a lookup with a binary search.
318     typedef SmallDenseMap<AssertingVH<BasicBlock>, LVILatticeVal, 4>
319         ValueCacheEntryTy;
320
321     /// This is all of the cached information for all values,
322     /// mapped from Value* to key information.
323     std::map<LVIValueHandle, ValueCacheEntryTy> ValueCache;
324
325     /// This tracks, on a per-block basis, the set of values that are
326     /// over-defined at the end of that block.  This is required
327     /// for cache updating.
328     typedef DenseMap<AssertingVH<BasicBlock>, SmallPtrSet<Value *, 4>>
329         OverDefinedCacheTy;
330     OverDefinedCacheTy OverDefinedCache;
331
332     /// Keep track of all blocks that we have ever seen, so we
333     /// don't spend time removing unused blocks from our caches.
334     DenseSet<AssertingVH<BasicBlock> > SeenBlocks;
335
336     /// This stack holds the state of the value solver during a query.
337     /// It basically emulates the callstack of the naive
338     /// recursive value lookup process.
339     std::stack<std::pair<BasicBlock*, Value*> > BlockValueStack;
340
341     /// Keeps track of which block-value pairs are in BlockValueStack.
342     DenseSet<std::pair<BasicBlock*, Value*> > BlockValueSet;
343
344     /// Push BV onto BlockValueStack unless it's already in there.
345     /// Returns true on success.
346     bool pushBlockValue(const std::pair<BasicBlock *, Value *> &BV) {
347       if (!BlockValueSet.insert(BV).second)
348         return false;  // It's already in the stack.
349
350       BlockValueStack.push(BV);
351       return true;
352     }
353
354     AssumptionCache *AC;  ///< A pointer to the cache of @llvm.assume calls.
355     const DataLayout &DL; ///< A mandatory DataLayout
356     DominatorTree *DT;    ///< An optional DT pointer.
357
358     friend struct LVIValueHandle;
359
360     void insertResult(Value *Val, BasicBlock *BB, const LVILatticeVal &Result) {
361       SeenBlocks.insert(BB);
362       lookup(Val)[BB] = Result;
363       if (Result.isOverdefined())
364         OverDefinedCache[BB].insert(Val);
365     }
366
367     LVILatticeVal getBlockValue(Value *Val, BasicBlock *BB);
368     bool getEdgeValue(Value *V, BasicBlock *F, BasicBlock *T,
369                       LVILatticeVal &Result,
370                       Instruction *CxtI = nullptr);
371     bool hasBlockValue(Value *Val, BasicBlock *BB);
372
373     // These methods process one work item and may add more. A false value
374     // returned means that the work item was not completely processed and must
375     // be revisited after going through the new items.
376     bool solveBlockValue(Value *Val, BasicBlock *BB);
377     bool solveBlockValueNonLocal(LVILatticeVal &BBLV,
378                                  Value *Val, BasicBlock *BB);
379     bool solveBlockValuePHINode(LVILatticeVal &BBLV,
380                                 PHINode *PN, BasicBlock *BB);
381     bool solveBlockValueConstantRange(LVILatticeVal &BBLV,
382                                       Instruction *BBI, BasicBlock *BB);
383     void mergeAssumeBlockValueConstantRange(Value *Val, LVILatticeVal &BBLV,
384                                             Instruction *BBI);
385
386     void solve();
387
388     ValueCacheEntryTy &lookup(Value *V) {
389       return ValueCache[LVIValueHandle(V, this)];
390     }
391
392   public:
393     /// This is the query interface to determine the lattice
394     /// value for the specified Value* at the end of the specified block.
395     LVILatticeVal getValueInBlock(Value *V, BasicBlock *BB,
396                                   Instruction *CxtI = nullptr);
397
398     /// This is the query interface to determine the lattice
399     /// value for the specified Value* at the specified instruction (generally
400     /// from an assume intrinsic).
401     LVILatticeVal getValueAt(Value *V, Instruction *CxtI);
402
403     /// This is the query interface to determine the lattice
404     /// value for the specified Value* that is true on the specified edge.
405     LVILatticeVal getValueOnEdge(Value *V, BasicBlock *FromBB,BasicBlock *ToBB,
406                                  Instruction *CxtI = nullptr);
407
408     /// This is the update interface to inform the cache that an edge from
409     /// PredBB to OldSucc has been threaded to be from PredBB to NewSucc.
410     void threadEdge(BasicBlock *PredBB,BasicBlock *OldSucc,BasicBlock *NewSucc);
411
412     /// This is part of the update interface to inform the cache
413     /// that a block has been deleted.
414     void eraseBlock(BasicBlock *BB);
415
416     /// clear - Empty the cache.
417     void clear() {
418       SeenBlocks.clear();
419       ValueCache.clear();
420       OverDefinedCache.clear();
421     }
422
423     LazyValueInfoCache(AssumptionCache *AC, const DataLayout &DL,
424                        DominatorTree *DT = nullptr)
425         : AC(AC), DL(DL), DT(DT) {}
426   };
427 } // end anonymous namespace
428
429 void LVIValueHandle::deleted() {
430   SmallVector<AssertingVH<BasicBlock>, 4> ToErase;
431   for (auto &I : Parent->OverDefinedCache) {
432     SmallPtrSetImpl<Value *> &ValueSet = I.second;
433     if (ValueSet.count(getValPtr()))
434       ValueSet.erase(getValPtr());
435     if (ValueSet.empty())
436       ToErase.push_back(I.first);
437   }
438   for (auto &BB : ToErase)
439     Parent->OverDefinedCache.erase(BB);
440
441   // This erasure deallocates *this, so it MUST happen after we're done
442   // using any and all members of *this.
443   Parent->ValueCache.erase(*this);
444 }
445
446 void LazyValueInfoCache::eraseBlock(BasicBlock *BB) {
447   // Shortcut if we have never seen this block.
448   DenseSet<AssertingVH<BasicBlock> >::iterator I = SeenBlocks.find(BB);
449   if (I == SeenBlocks.end())
450     return;
451   SeenBlocks.erase(I);
452
453   auto ODI = OverDefinedCache.find(BB);
454   if (ODI != OverDefinedCache.end())
455     OverDefinedCache.erase(ODI);
456
457   for (auto I = ValueCache.begin(), E = ValueCache.end(); I != E; ++I)
458     I->second.erase(BB);
459 }
460
461 void LazyValueInfoCache::solve() {
462   while (!BlockValueStack.empty()) {
463     std::pair<BasicBlock*, Value*> &e = BlockValueStack.top();
464     assert(BlockValueSet.count(e) && "Stack value should be in BlockValueSet!");
465
466     if (solveBlockValue(e.second, e.first)) {
467       // The work item was completely processed.
468       assert(BlockValueStack.top() == e && "Nothing should have been pushed!");
469       assert(lookup(e.second).count(e.first) && "Result should be in cache!");
470
471       BlockValueStack.pop();
472       BlockValueSet.erase(e);
473     } else {
474       // More work needs to be done before revisiting.
475       assert(BlockValueStack.top() != e && "Stack should have been pushed!");
476     }
477   }
478 }
479
480 bool LazyValueInfoCache::hasBlockValue(Value *Val, BasicBlock *BB) {
481   // If already a constant, there is nothing to compute.
482   if (isa<Constant>(Val))
483     return true;
484
485   LVIValueHandle ValHandle(Val, this);
486   auto I = ValueCache.find(ValHandle);
487   if (I == ValueCache.end()) return false;
488   return I->second.count(BB);
489 }
490
491 LVILatticeVal LazyValueInfoCache::getBlockValue(Value *Val, BasicBlock *BB) {
492   // If already a constant, there is nothing to compute.
493   if (Constant *VC = dyn_cast<Constant>(Val))
494     return LVILatticeVal::get(VC);
495
496   SeenBlocks.insert(BB);
497   return lookup(Val)[BB];
498 }
499
500 bool LazyValueInfoCache::solveBlockValue(Value *Val, BasicBlock *BB) {
501   if (isa<Constant>(Val))
502     return true;
503
504   if (lookup(Val).count(BB)) {
505     // If we have a cached value, use that.
506     DEBUG(dbgs() << "  reuse BB '" << BB->getName()
507                  << "' val=" << lookup(Val)[BB] << '\n');
508
509     // Since we're reusing a cached value, we don't need to update the
510     // OverDefinedCache. The cache will have been properly updated whenever the
511     // cached value was inserted.
512     return true;
513   }
514
515   // Hold off inserting this value into the Cache in case we have to return
516   // false and come back later.
517   LVILatticeVal Res;
518
519   Instruction *BBI = dyn_cast<Instruction>(Val);
520   if (!BBI || BBI->getParent() != BB) {
521     if (!solveBlockValueNonLocal(Res, Val, BB))
522       return false;
523    insertResult(Val, BB, Res);
524    return true;
525   }
526
527   if (PHINode *PN = dyn_cast<PHINode>(BBI)) {
528     if (!solveBlockValuePHINode(Res, PN, BB))
529       return false;
530     insertResult(Val, BB, Res);
531     return true;
532   }
533
534   // If this value is a nonnull pointer, record it's range and bailout.
535   PointerType *PT = dyn_cast<PointerType>(BBI->getType());
536   if (PT && isKnownNonNull(BBI)) {
537     Res = LVILatticeVal::getNot(ConstantPointerNull::get(PT));
538     insertResult(Val, BB, Res);
539     return true;
540   }
541
542   // We can only analyze the definitions of certain classes of instructions
543   // (integral binops and casts at the moment), so bail if this isn't one.
544   LVILatticeVal Result;
545   if ((!isa<BinaryOperator>(BBI) && !isa<CastInst>(BBI)) ||
546      !BBI->getType()->isIntegerTy()) {
547     DEBUG(dbgs() << " compute BB '" << BB->getName()
548                  << "' - overdefined because inst def found.\n");
549     Res.markOverdefined();
550     insertResult(Val, BB, Res);
551     return true;
552   }
553
554   // FIXME: We're currently limited to binops with a constant RHS.  This should
555   // be improved.
556   BinaryOperator *BO = dyn_cast<BinaryOperator>(BBI);
557   if (BO && !isa<ConstantInt>(BO->getOperand(1))) { 
558     DEBUG(dbgs() << " compute BB '" << BB->getName()
559                  << "' - overdefined because inst def found.\n");
560
561     Res.markOverdefined();
562     insertResult(Val, BB, Res);
563     return true;
564   }
565
566   if (!solveBlockValueConstantRange(Res, BBI, BB))
567     return false;
568   insertResult(Val, BB, Res);
569   return true;
570 }
571
572 static bool InstructionDereferencesPointer(Instruction *I, Value *Ptr) {
573   if (LoadInst *L = dyn_cast<LoadInst>(I)) {
574     return L->getPointerAddressSpace() == 0 &&
575            GetUnderlyingObject(L->getPointerOperand(),
576                                L->getModule()->getDataLayout()) == Ptr;
577   }
578   if (StoreInst *S = dyn_cast<StoreInst>(I)) {
579     return S->getPointerAddressSpace() == 0 &&
580            GetUnderlyingObject(S->getPointerOperand(),
581                                S->getModule()->getDataLayout()) == Ptr;
582   }
583   if (MemIntrinsic *MI = dyn_cast<MemIntrinsic>(I)) {
584     if (MI->isVolatile()) return false;
585
586     // FIXME: check whether it has a valuerange that excludes zero?
587     ConstantInt *Len = dyn_cast<ConstantInt>(MI->getLength());
588     if (!Len || Len->isZero()) return false;
589
590     if (MI->getDestAddressSpace() == 0)
591       if (GetUnderlyingObject(MI->getRawDest(),
592                               MI->getModule()->getDataLayout()) == Ptr)
593         return true;
594     if (MemTransferInst *MTI = dyn_cast<MemTransferInst>(MI))
595       if (MTI->getSourceAddressSpace() == 0)
596         if (GetUnderlyingObject(MTI->getRawSource(),
597                                 MTI->getModule()->getDataLayout()) == Ptr)
598           return true;
599   }
600   return false;
601 }
602
603 bool LazyValueInfoCache::solveBlockValueNonLocal(LVILatticeVal &BBLV,
604                                                  Value *Val, BasicBlock *BB) {
605   LVILatticeVal Result;  // Start Undefined.
606
607   // If this is a pointer, and there's a load from that pointer in this BB,
608   // then we know that the pointer can't be NULL.
609   bool NotNull = false;
610   if (Val->getType()->isPointerTy()) {
611     if (isKnownNonNull(Val)) {
612       NotNull = true;
613     } else {
614       const DataLayout &DL = BB->getModule()->getDataLayout();
615       Value *UnderlyingVal = GetUnderlyingObject(Val, DL);
616       // If 'GetUnderlyingObject' didn't converge, skip it. It won't converge
617       // inside InstructionDereferencesPointer either.
618       if (UnderlyingVal == GetUnderlyingObject(UnderlyingVal, DL, 1)) {
619         for (Instruction &I : *BB) {
620           if (InstructionDereferencesPointer(&I, UnderlyingVal)) {
621             NotNull = true;
622             break;
623           }
624         }
625       }
626     }
627   }
628
629   // If this is the entry block, we must be asking about an argument.  The
630   // value is overdefined.
631   if (BB == &BB->getParent()->getEntryBlock()) {
632     assert(isa<Argument>(Val) && "Unknown live-in to the entry block");
633     if (NotNull) {
634       PointerType *PTy = cast<PointerType>(Val->getType());
635       Result = LVILatticeVal::getNot(ConstantPointerNull::get(PTy));
636     } else {
637       Result.markOverdefined();
638     }
639     BBLV = Result;
640     return true;
641   }
642
643   // Loop over all of our predecessors, merging what we know from them into
644   // result.
645   bool EdgesMissing = false;
646   for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
647     LVILatticeVal EdgeResult;
648     EdgesMissing |= !getEdgeValue(Val, *PI, BB, EdgeResult);
649     if (EdgesMissing)
650       continue;
651
652     Result.mergeIn(EdgeResult, DL);
653
654     // If we hit overdefined, exit early.  The BlockVals entry is already set
655     // to overdefined.
656     if (Result.isOverdefined()) {
657       DEBUG(dbgs() << " compute BB '" << BB->getName()
658             << "' - overdefined because of pred.\n");
659       // If we previously determined that this is a pointer that can't be null
660       // then return that rather than giving up entirely.
661       if (NotNull) {
662         PointerType *PTy = cast<PointerType>(Val->getType());
663         Result = LVILatticeVal::getNot(ConstantPointerNull::get(PTy));
664       }
665
666       BBLV = Result;
667       return true;
668     }
669   }
670   if (EdgesMissing)
671     return false;
672
673   // Return the merged value, which is more precise than 'overdefined'.
674   assert(!Result.isOverdefined());
675   BBLV = Result;
676   return true;
677 }
678
679 bool LazyValueInfoCache::solveBlockValuePHINode(LVILatticeVal &BBLV,
680                                                 PHINode *PN, BasicBlock *BB) {
681   LVILatticeVal Result;  // Start Undefined.
682
683   // Loop over all of our predecessors, merging what we know from them into
684   // result.
685   bool EdgesMissing = false;
686   for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
687     BasicBlock *PhiBB = PN->getIncomingBlock(i);
688     Value *PhiVal = PN->getIncomingValue(i);
689     LVILatticeVal EdgeResult;
690     // Note that we can provide PN as the context value to getEdgeValue, even
691     // though the results will be cached, because PN is the value being used as
692     // the cache key in the caller.
693     EdgesMissing |= !getEdgeValue(PhiVal, PhiBB, BB, EdgeResult, PN);
694     if (EdgesMissing)
695       continue;
696
697     Result.mergeIn(EdgeResult, DL);
698
699     // If we hit overdefined, exit early.  The BlockVals entry is already set
700     // to overdefined.
701     if (Result.isOverdefined()) {
702       DEBUG(dbgs() << " compute BB '" << BB->getName()
703             << "' - overdefined because of pred.\n");
704
705       BBLV = Result;
706       return true;
707     }
708   }
709   if (EdgesMissing)
710     return false;
711
712   // Return the merged value, which is more precise than 'overdefined'.
713   assert(!Result.isOverdefined() && "Possible PHI in entry block?");
714   BBLV = Result;
715   return true;
716 }
717
718 static bool getValueFromFromCondition(Value *Val, ICmpInst *ICI,
719                                       LVILatticeVal &Result,
720                                       bool isTrueDest = true);
721
722 // If we can determine a constant range for the value Val in the context
723 // provided by the instruction BBI, then merge it into BBLV. If we did find a
724 // constant range, return true.
725 void LazyValueInfoCache::mergeAssumeBlockValueConstantRange(Value *Val,
726                                                             LVILatticeVal &BBLV,
727                                                             Instruction *BBI) {
728   BBI = BBI ? BBI : dyn_cast<Instruction>(Val);
729   if (!BBI)
730     return;
731
732   for (auto &AssumeVH : AC->assumptions()) {
733     if (!AssumeVH)
734       continue;
735     auto *I = cast<CallInst>(AssumeVH);
736     if (!isValidAssumeForContext(I, BBI, DT))
737       continue;
738
739     Value *C = I->getArgOperand(0);
740     if (ICmpInst *ICI = dyn_cast<ICmpInst>(C)) {
741       LVILatticeVal Result;
742       if (getValueFromFromCondition(Val, ICI, Result)) {
743         if (BBLV.isOverdefined())
744           BBLV = Result;
745         else
746           BBLV.mergeIn(Result, DL);
747       }
748     }
749   }
750 }
751
752 bool LazyValueInfoCache::solveBlockValueConstantRange(LVILatticeVal &BBLV,
753                                                       Instruction *BBI,
754                                                       BasicBlock *BB) {
755   // Figure out the range of the LHS.  If that fails, bail.
756   if (!hasBlockValue(BBI->getOperand(0), BB)) {
757     if (pushBlockValue(std::make_pair(BB, BBI->getOperand(0))))
758       return false;
759     BBLV.markOverdefined();
760     return true;
761   }
762
763   LVILatticeVal LHSVal = getBlockValue(BBI->getOperand(0), BB);
764   mergeAssumeBlockValueConstantRange(BBI->getOperand(0), LHSVal, BBI);
765   if (!LHSVal.isConstantRange()) {
766     BBLV.markOverdefined();
767     return true;
768   }
769
770   ConstantRange LHSRange = LHSVal.getConstantRange();
771   ConstantRange RHSRange(1);
772   IntegerType *ResultTy = cast<IntegerType>(BBI->getType());
773   if (isa<BinaryOperator>(BBI)) {
774     if (ConstantInt *RHS = dyn_cast<ConstantInt>(BBI->getOperand(1))) {
775       RHSRange = ConstantRange(RHS->getValue());
776     } else {
777       BBLV.markOverdefined();
778       return true;
779     }
780   }
781
782   // NOTE: We're currently limited by the set of operations that ConstantRange
783   // can evaluate symbolically.  Enhancing that set will allows us to analyze
784   // more definitions.
785   LVILatticeVal Result;
786   switch (BBI->getOpcode()) {
787   case Instruction::Add:
788     Result.markConstantRange(LHSRange.add(RHSRange));
789     break;
790   case Instruction::Sub:
791     Result.markConstantRange(LHSRange.sub(RHSRange));
792     break;
793   case Instruction::Mul:
794     Result.markConstantRange(LHSRange.multiply(RHSRange));
795     break;
796   case Instruction::UDiv:
797     Result.markConstantRange(LHSRange.udiv(RHSRange));
798     break;
799   case Instruction::Shl:
800     Result.markConstantRange(LHSRange.shl(RHSRange));
801     break;
802   case Instruction::LShr:
803     Result.markConstantRange(LHSRange.lshr(RHSRange));
804     break;
805   case Instruction::Trunc:
806     Result.markConstantRange(LHSRange.truncate(ResultTy->getBitWidth()));
807     break;
808   case Instruction::SExt:
809     Result.markConstantRange(LHSRange.signExtend(ResultTy->getBitWidth()));
810     break;
811   case Instruction::ZExt:
812     Result.markConstantRange(LHSRange.zeroExtend(ResultTy->getBitWidth()));
813     break;
814   case Instruction::BitCast:
815     Result.markConstantRange(LHSRange);
816     break;
817   case Instruction::And:
818     Result.markConstantRange(LHSRange.binaryAnd(RHSRange));
819     break;
820   case Instruction::Or:
821     Result.markConstantRange(LHSRange.binaryOr(RHSRange));
822     break;
823
824   // Unhandled instructions are overdefined.
825   default:
826     DEBUG(dbgs() << " compute BB '" << BB->getName()
827                  << "' - overdefined because inst def found.\n");
828     Result.markOverdefined();
829     break;
830   }
831
832   BBLV = Result;
833   return true;
834 }
835
836 bool getValueFromFromCondition(Value *Val, ICmpInst *ICI,
837                                LVILatticeVal &Result, bool isTrueDest) {
838   if (ICI && isa<Constant>(ICI->getOperand(1))) {
839     if (ICI->isEquality() && ICI->getOperand(0) == Val) {
840       // We know that V has the RHS constant if this is a true SETEQ or
841       // false SETNE. 
842       if (isTrueDest == (ICI->getPredicate() == ICmpInst::ICMP_EQ))
843         Result = LVILatticeVal::get(cast<Constant>(ICI->getOperand(1)));
844       else
845         Result = LVILatticeVal::getNot(cast<Constant>(ICI->getOperand(1)));
846       return true;
847     }
848
849     // Recognize the range checking idiom that InstCombine produces.
850     // (X-C1) u< C2 --> [C1, C1+C2)
851     ConstantInt *NegOffset = nullptr;
852     if (ICI->getPredicate() == ICmpInst::ICMP_ULT)
853       match(ICI->getOperand(0), m_Add(m_Specific(Val),
854                                       m_ConstantInt(NegOffset)));
855
856     ConstantInt *CI = dyn_cast<ConstantInt>(ICI->getOperand(1));
857     if (CI && (ICI->getOperand(0) == Val || NegOffset)) {
858       // Calculate the range of values that are allowed by the comparison
859       ConstantRange CmpRange(CI->getValue());
860       ConstantRange TrueValues =
861           ConstantRange::makeAllowedICmpRegion(ICI->getPredicate(), CmpRange);
862
863       if (NegOffset) // Apply the offset from above.
864         TrueValues = TrueValues.subtract(NegOffset->getValue());
865
866       // If we're interested in the false dest, invert the condition.
867       if (!isTrueDest) TrueValues = TrueValues.inverse();
868
869       Result = LVILatticeVal::getRange(TrueValues);
870       return true;
871     }
872   }
873
874   return false;
875 }
876
877 /// \brief Compute the value of Val on the edge BBFrom -> BBTo. Returns false if
878 /// Val is not constrained on the edge.
879 static bool getEdgeValueLocal(Value *Val, BasicBlock *BBFrom,
880                               BasicBlock *BBTo, LVILatticeVal &Result) {
881   // TODO: Handle more complex conditionals. If (v == 0 || v2 < 1) is false, we
882   // know that v != 0.
883   if (BranchInst *BI = dyn_cast<BranchInst>(BBFrom->getTerminator())) {
884     // If this is a conditional branch and only one successor goes to BBTo, then
885     // we may be able to infer something from the condition.
886     if (BI->isConditional() &&
887         BI->getSuccessor(0) != BI->getSuccessor(1)) {
888       bool isTrueDest = BI->getSuccessor(0) == BBTo;
889       assert(BI->getSuccessor(!isTrueDest) == BBTo &&
890              "BBTo isn't a successor of BBFrom");
891
892       // If V is the condition of the branch itself, then we know exactly what
893       // it is.
894       if (BI->getCondition() == Val) {
895         Result = LVILatticeVal::get(ConstantInt::get(
896                               Type::getInt1Ty(Val->getContext()), isTrueDest));
897         return true;
898       }
899
900       // If the condition of the branch is an equality comparison, we may be
901       // able to infer the value.
902       if (ICmpInst *ICI = dyn_cast<ICmpInst>(BI->getCondition()))
903         if (getValueFromFromCondition(Val, ICI, Result, isTrueDest))
904           return true;
905     }
906   }
907
908   // If the edge was formed by a switch on the value, then we may know exactly
909   // what it is.
910   if (SwitchInst *SI = dyn_cast<SwitchInst>(BBFrom->getTerminator())) {
911     if (SI->getCondition() != Val)
912       return false;
913
914     bool DefaultCase = SI->getDefaultDest() == BBTo;
915     unsigned BitWidth = Val->getType()->getIntegerBitWidth();
916     ConstantRange EdgesVals(BitWidth, DefaultCase/*isFullSet*/);
917
918     for (SwitchInst::CaseIt i : SI->cases()) {
919       ConstantRange EdgeVal(i.getCaseValue()->getValue());
920       if (DefaultCase) {
921         // It is possible that the default destination is the destination of
922         // some cases. There is no need to perform difference for those cases.
923         if (i.getCaseSuccessor() != BBTo)
924           EdgesVals = EdgesVals.difference(EdgeVal);
925       } else if (i.getCaseSuccessor() == BBTo)
926         EdgesVals = EdgesVals.unionWith(EdgeVal);
927     }
928     Result = LVILatticeVal::getRange(EdgesVals);
929     return true;
930   }
931   return false;
932 }
933
934 /// \brief Compute the value of Val on the edge BBFrom -> BBTo or the value at
935 /// the basic block if the edge does not constrain Val.
936 bool LazyValueInfoCache::getEdgeValue(Value *Val, BasicBlock *BBFrom,
937                                       BasicBlock *BBTo, LVILatticeVal &Result,
938                                       Instruction *CxtI) {
939   // If already a constant, there is nothing to compute.
940   if (Constant *VC = dyn_cast<Constant>(Val)) {
941     Result = LVILatticeVal::get(VC);
942     return true;
943   }
944
945   if (getEdgeValueLocal(Val, BBFrom, BBTo, Result)) {
946     if (!Result.isConstantRange() ||
947         Result.getConstantRange().getSingleElement())
948       return true;
949
950     // FIXME: this check should be moved to the beginning of the function when
951     // LVI better supports recursive values. Even for the single value case, we
952     // can intersect to detect dead code (an empty range).
953     if (!hasBlockValue(Val, BBFrom)) {
954       if (pushBlockValue(std::make_pair(BBFrom, Val)))
955         return false;
956       Result.markOverdefined();
957       return true;
958     }
959
960     // Try to intersect ranges of the BB and the constraint on the edge.
961     LVILatticeVal InBlock = getBlockValue(Val, BBFrom);
962     mergeAssumeBlockValueConstantRange(Val, InBlock, BBFrom->getTerminator());
963     // See note on the use of the CxtI with mergeAssumeBlockValueConstantRange,
964     // and caching, below.
965     mergeAssumeBlockValueConstantRange(Val, InBlock, CxtI);
966     if (!InBlock.isConstantRange())
967       return true;
968
969     ConstantRange Range =
970       Result.getConstantRange().intersectWith(InBlock.getConstantRange());
971     Result = LVILatticeVal::getRange(Range);
972     return true;
973   }
974
975   if (!hasBlockValue(Val, BBFrom)) {
976     if (pushBlockValue(std::make_pair(BBFrom, Val)))
977       return false;
978     Result.markOverdefined();
979     return true;
980   }
981
982   // If we couldn't compute the value on the edge, use the value from the BB.
983   Result = getBlockValue(Val, BBFrom);
984   mergeAssumeBlockValueConstantRange(Val, Result, BBFrom->getTerminator());
985   // We can use the context instruction (generically the ultimate instruction
986   // the calling pass is trying to simplify) here, even though the result of
987   // this function is generally cached when called from the solve* functions
988   // (and that cached result might be used with queries using a different
989   // context instruction), because when this function is called from the solve*
990   // functions, the context instruction is not provided. When called from
991   // LazyValueInfoCache::getValueOnEdge, the context instruction is provided,
992   // but then the result is not cached.
993   mergeAssumeBlockValueConstantRange(Val, Result, CxtI);
994   return true;
995 }
996
997 LVILatticeVal LazyValueInfoCache::getValueInBlock(Value *V, BasicBlock *BB,
998                                                   Instruction *CxtI) {
999   DEBUG(dbgs() << "LVI Getting block end value " << *V << " at '"
1000         << BB->getName() << "'\n");
1001
1002   assert(BlockValueStack.empty() && BlockValueSet.empty());
1003   pushBlockValue(std::make_pair(BB, V));
1004
1005   solve();
1006   LVILatticeVal Result = getBlockValue(V, BB);
1007   mergeAssumeBlockValueConstantRange(V, Result, CxtI);
1008
1009   DEBUG(dbgs() << "  Result = " << Result << "\n");
1010   return Result;
1011 }
1012
1013 LVILatticeVal LazyValueInfoCache::getValueAt(Value *V, Instruction *CxtI) {
1014   DEBUG(dbgs() << "LVI Getting value " << *V << " at '"
1015         << CxtI->getName() << "'\n");
1016
1017   LVILatticeVal Result;
1018   mergeAssumeBlockValueConstantRange(V, Result, CxtI);
1019
1020   DEBUG(dbgs() << "  Result = " << Result << "\n");
1021   return Result;
1022 }
1023
1024 LVILatticeVal LazyValueInfoCache::
1025 getValueOnEdge(Value *V, BasicBlock *FromBB, BasicBlock *ToBB,
1026                Instruction *CxtI) {
1027   DEBUG(dbgs() << "LVI Getting edge value " << *V << " from '"
1028         << FromBB->getName() << "' to '" << ToBB->getName() << "'\n");
1029
1030   LVILatticeVal Result;
1031   if (!getEdgeValue(V, FromBB, ToBB, Result, CxtI)) {
1032     solve();
1033     bool WasFastQuery = getEdgeValue(V, FromBB, ToBB, Result, CxtI);
1034     (void)WasFastQuery;
1035     assert(WasFastQuery && "More work to do after problem solved?");
1036   }
1037
1038   DEBUG(dbgs() << "  Result = " << Result << "\n");
1039   return Result;
1040 }
1041
1042 void LazyValueInfoCache::threadEdge(BasicBlock *PredBB, BasicBlock *OldSucc,
1043                                     BasicBlock *NewSucc) {
1044   // When an edge in the graph has been threaded, values that we could not
1045   // determine a value for before (i.e. were marked overdefined) may be
1046   // possible to solve now. We do NOT try to proactively update these values.
1047   // Instead, we clear their entries from the cache, and allow lazy updating to
1048   // recompute them when needed.
1049
1050   // The updating process is fairly simple: we need to drop cached info
1051   // for all values that were marked overdefined in OldSucc, and for those same
1052   // values in any successor of OldSucc (except NewSucc) in which they were
1053   // also marked overdefined.
1054   std::vector<BasicBlock*> worklist;
1055   worklist.push_back(OldSucc);
1056
1057   auto I = OverDefinedCache.find(OldSucc);
1058   if (I == OverDefinedCache.end())
1059     return; // Nothing to process here.
1060   SmallVector<Value *, 4> ValsToClear(I->second.begin(), I->second.end());
1061
1062   // Use a worklist to perform a depth-first search of OldSucc's successors.
1063   // NOTE: We do not need a visited list since any blocks we have already
1064   // visited will have had their overdefined markers cleared already, and we
1065   // thus won't loop to their successors.
1066   while (!worklist.empty()) {
1067     BasicBlock *ToUpdate = worklist.back();
1068     worklist.pop_back();
1069
1070     // Skip blocks only accessible through NewSucc.
1071     if (ToUpdate == NewSucc) continue;
1072
1073     bool changed = false;
1074     for (Value *V : ValsToClear) {
1075       // If a value was marked overdefined in OldSucc, and is here too...
1076       auto OI = OverDefinedCache.find(ToUpdate);
1077       if (OI == OverDefinedCache.end())
1078         continue;
1079       SmallPtrSetImpl<Value *> &ValueSet = OI->second;
1080       if (!ValueSet.count(V))
1081         continue;
1082
1083       // Remove it from the caches.
1084       ValueCacheEntryTy &Entry = ValueCache[LVIValueHandle(V, this)];
1085       ValueCacheEntryTy::iterator CI = Entry.find(ToUpdate);
1086
1087       assert(CI != Entry.end() && "Couldn't find entry to update?");
1088       Entry.erase(CI);
1089       ValueSet.erase(V);
1090       if (ValueSet.empty())
1091         OverDefinedCache.erase(OI);
1092
1093       // If we removed anything, then we potentially need to update
1094       // blocks successors too.
1095       changed = true;
1096     }
1097
1098     if (!changed) continue;
1099
1100     worklist.insert(worklist.end(), succ_begin(ToUpdate), succ_end(ToUpdate));
1101   }
1102 }
1103
1104 //===----------------------------------------------------------------------===//
1105 //                            LazyValueInfo Impl
1106 //===----------------------------------------------------------------------===//
1107
1108 /// This lazily constructs the LazyValueInfoCache.
1109 static LazyValueInfoCache &getCache(void *&PImpl, AssumptionCache *AC,
1110                                     const DataLayout *DL,
1111                                     DominatorTree *DT = nullptr) {
1112   if (!PImpl) {
1113     assert(DL && "getCache() called with a null DataLayout");
1114     PImpl = new LazyValueInfoCache(AC, *DL, DT);
1115   }
1116   return *static_cast<LazyValueInfoCache*>(PImpl);
1117 }
1118
1119 bool LazyValueInfo::runOnFunction(Function &F) {
1120   AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);
1121   const DataLayout &DL = F.getParent()->getDataLayout();
1122
1123   DominatorTreeWrapperPass *DTWP =
1124       getAnalysisIfAvailable<DominatorTreeWrapperPass>();
1125   DT = DTWP ? &DTWP->getDomTree() : nullptr;
1126
1127   TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
1128
1129   if (PImpl)
1130     getCache(PImpl, AC, &DL, DT).clear();
1131
1132   // Fully lazy.
1133   return false;
1134 }
1135
1136 void LazyValueInfo::getAnalysisUsage(AnalysisUsage &AU) const {
1137   AU.setPreservesAll();
1138   AU.addRequired<AssumptionCacheTracker>();
1139   AU.addRequired<TargetLibraryInfoWrapperPass>();
1140 }
1141
1142 void LazyValueInfo::releaseMemory() {
1143   // If the cache was allocated, free it.
1144   if (PImpl) {
1145     delete &getCache(PImpl, AC, nullptr);
1146     PImpl = nullptr;
1147   }
1148 }
1149
1150 Constant *LazyValueInfo::getConstant(Value *V, BasicBlock *BB,
1151                                      Instruction *CxtI) {
1152   const DataLayout &DL = BB->getModule()->getDataLayout();
1153   LVILatticeVal Result =
1154       getCache(PImpl, AC, &DL, DT).getValueInBlock(V, BB, CxtI);
1155
1156   if (Result.isConstant())
1157     return Result.getConstant();
1158   if (Result.isConstantRange()) {
1159     ConstantRange CR = Result.getConstantRange();
1160     if (const APInt *SingleVal = CR.getSingleElement())
1161       return ConstantInt::get(V->getContext(), *SingleVal);
1162   }
1163   return nullptr;
1164 }
1165
1166 /// Determine whether the specified value is known to be a
1167 /// constant on the specified edge. Return null if not.
1168 Constant *LazyValueInfo::getConstantOnEdge(Value *V, BasicBlock *FromBB,
1169                                            BasicBlock *ToBB,
1170                                            Instruction *CxtI) {
1171   const DataLayout &DL = FromBB->getModule()->getDataLayout();
1172   LVILatticeVal Result =
1173       getCache(PImpl, AC, &DL, DT).getValueOnEdge(V, FromBB, ToBB, CxtI);
1174
1175   if (Result.isConstant())
1176     return Result.getConstant();
1177   if (Result.isConstantRange()) {
1178     ConstantRange CR = Result.getConstantRange();
1179     if (const APInt *SingleVal = CR.getSingleElement())
1180       return ConstantInt::get(V->getContext(), *SingleVal);
1181   }
1182   return nullptr;
1183 }
1184
1185 static LazyValueInfo::Tristate getPredicateResult(unsigned Pred, Constant *C,
1186                                                   LVILatticeVal &Result,
1187                                                   const DataLayout &DL,
1188                                                   TargetLibraryInfo *TLI) {
1189
1190   // If we know the value is a constant, evaluate the conditional.
1191   Constant *Res = nullptr;
1192   if (Result.isConstant()) {
1193     Res = ConstantFoldCompareInstOperands(Pred, Result.getConstant(), C, DL,
1194                                           TLI);
1195     if (ConstantInt *ResCI = dyn_cast<ConstantInt>(Res))
1196       return ResCI->isZero() ? LazyValueInfo::False : LazyValueInfo::True;
1197     return LazyValueInfo::Unknown;
1198   }
1199
1200   if (Result.isConstantRange()) {
1201     ConstantInt *CI = dyn_cast<ConstantInt>(C);
1202     if (!CI) return LazyValueInfo::Unknown;
1203
1204     ConstantRange CR = Result.getConstantRange();
1205     if (Pred == ICmpInst::ICMP_EQ) {
1206       if (!CR.contains(CI->getValue()))
1207         return LazyValueInfo::False;
1208
1209       if (CR.isSingleElement() && CR.contains(CI->getValue()))
1210         return LazyValueInfo::True;
1211     } else if (Pred == ICmpInst::ICMP_NE) {
1212       if (!CR.contains(CI->getValue()))
1213         return LazyValueInfo::True;
1214
1215       if (CR.isSingleElement() && CR.contains(CI->getValue()))
1216         return LazyValueInfo::False;
1217     }
1218
1219     // Handle more complex predicates.
1220     ConstantRange TrueValues =
1221         ICmpInst::makeConstantRange((ICmpInst::Predicate)Pred, CI->getValue());
1222     if (TrueValues.contains(CR))
1223       return LazyValueInfo::True;
1224     if (TrueValues.inverse().contains(CR))
1225       return LazyValueInfo::False;
1226     return LazyValueInfo::Unknown;
1227   }
1228
1229   if (Result.isNotConstant()) {
1230     // If this is an equality comparison, we can try to fold it knowing that
1231     // "V != C1".
1232     if (Pred == ICmpInst::ICMP_EQ) {
1233       // !C1 == C -> false iff C1 == C.
1234       Res = ConstantFoldCompareInstOperands(ICmpInst::ICMP_NE,
1235                                             Result.getNotConstant(), C, DL,
1236                                             TLI);
1237       if (Res->isNullValue())
1238         return LazyValueInfo::False;
1239     } else if (Pred == ICmpInst::ICMP_NE) {
1240       // !C1 != C -> true iff C1 == C.
1241       Res = ConstantFoldCompareInstOperands(ICmpInst::ICMP_NE,
1242                                             Result.getNotConstant(), C, DL,
1243                                             TLI);
1244       if (Res->isNullValue())
1245         return LazyValueInfo::True;
1246     }
1247     return LazyValueInfo::Unknown;
1248   }
1249
1250   return LazyValueInfo::Unknown;
1251 }
1252
1253 /// Determine whether the specified value comparison with a constant is known to
1254 /// be true or false on the specified CFG edge. Pred is a CmpInst predicate.
1255 LazyValueInfo::Tristate
1256 LazyValueInfo::getPredicateOnEdge(unsigned Pred, Value *V, Constant *C,
1257                                   BasicBlock *FromBB, BasicBlock *ToBB,
1258                                   Instruction *CxtI) {
1259   const DataLayout &DL = FromBB->getModule()->getDataLayout();
1260   LVILatticeVal Result =
1261       getCache(PImpl, AC, &DL, DT).getValueOnEdge(V, FromBB, ToBB, CxtI);
1262
1263   return getPredicateResult(Pred, C, Result, DL, TLI);
1264 }
1265
1266 LazyValueInfo::Tristate
1267 LazyValueInfo::getPredicateAt(unsigned Pred, Value *V, Constant *C,
1268                               Instruction *CxtI) {
1269   const DataLayout &DL = CxtI->getModule()->getDataLayout();
1270   LVILatticeVal Result = getCache(PImpl, AC, &DL, DT).getValueAt(V, CxtI);
1271   Tristate Ret = getPredicateResult(Pred, C, Result, DL, TLI);
1272   if (Ret != Unknown)
1273     return Ret;
1274
1275   // TODO: Move this logic inside getValueAt so that it can be cached rather
1276   // than re-queried on each call. This would also allow us to merge the
1277   // underlying lattice values to get more information.
1278   if (CxtI) {
1279     BasicBlock *BB = CxtI->getParent();
1280
1281     // Function entry or an unreachable block.  Bail to avoid confusing
1282     // analysis below.
1283     pred_iterator PI = pred_begin(BB), PE = pred_end(BB);
1284     if (PI == PE)
1285       return Unknown;
1286
1287     // If V is a PHI node in the same block as the context, we need to ask
1288     // questions about the predicate as applied to the incoming value along
1289     // each edge. This is useful for eliminating cases where the predicate is
1290     // known along all incoming edges.
1291     if (auto *PHI = dyn_cast<PHINode>(V))
1292       if (PHI->getParent() == BB) {
1293         Tristate Baseline = Unknown;
1294         for (unsigned i = 0, e = PHI->getNumIncomingValues(); i < e; i++) {
1295           Value *Incoming = PHI->getIncomingValue(i);
1296           BasicBlock *PredBB = PHI->getIncomingBlock(i);
1297           // Note that PredBB may be BB itself.        
1298           Tristate Result = getPredicateOnEdge(Pred, Incoming, C, PredBB, BB,
1299                                                CxtI);
1300           
1301           // Keep going as long as we've seen a consistent known result for
1302           // all inputs.
1303           Baseline = (i == 0) ? Result /* First iteration */
1304             : (Baseline == Result ? Baseline : Unknown); /* All others */
1305           if (Baseline == Unknown)
1306             break;
1307         }
1308         if (Baseline != Unknown)
1309           return Baseline;
1310       }    
1311
1312     // For a comparison where the V is outside this block, it's possible
1313     // that we've branched on it before. Look to see if the value is known
1314     // on all incoming edges.
1315     if (!isa<Instruction>(V) ||
1316         cast<Instruction>(V)->getParent() != BB) {
1317       // For predecessor edge, determine if the comparison is true or false
1318       // on that edge. If they're all true or all false, we can conclude
1319       // the value of the comparison in this block.
1320       Tristate Baseline = getPredicateOnEdge(Pred, V, C, *PI, BB, CxtI);
1321       if (Baseline != Unknown) {
1322         // Check that all remaining incoming values match the first one.
1323         while (++PI != PE) {
1324           Tristate Ret = getPredicateOnEdge(Pred, V, C, *PI, BB, CxtI);
1325           if (Ret != Baseline) break;
1326         }
1327         // If we terminated early, then one of the values didn't match.
1328         if (PI == PE) {
1329           return Baseline;
1330         }
1331       }
1332     }
1333   }
1334   return Unknown;
1335 }
1336
1337 void LazyValueInfo::threadEdge(BasicBlock *PredBB, BasicBlock *OldSucc,
1338                                BasicBlock *NewSucc) {
1339   if (PImpl) {
1340     const DataLayout &DL = PredBB->getModule()->getDataLayout();
1341     getCache(PImpl, AC, &DL, DT).threadEdge(PredBB, OldSucc, NewSucc);
1342   }
1343 }
1344
1345 void LazyValueInfo::eraseBlock(BasicBlock *BB) {
1346   if (PImpl) {
1347     const DataLayout &DL = BB->getModule()->getDataLayout();
1348     getCache(PImpl, AC, &DL, DT).eraseBlock(BB);
1349   }
1350 }