A DenseMap of a std::map isn't a very good idea because the "grow()" method will
[oota-llvm.git] / lib / Analysis / LazyValueInfo.cpp
1 //===- LazyValueInfo.cpp - Value constraint analysis ----------------------===//
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 #define DEBUG_TYPE "lazy-value-info"
16 #include "llvm/Analysis/LazyValueInfo.h"
17 #include "llvm/Analysis/ValueTracking.h"
18 #include "llvm/Constants.h"
19 #include "llvm/Instructions.h"
20 #include "llvm/IntrinsicInst.h"
21 #include "llvm/Analysis/ConstantFolding.h"
22 #include "llvm/Target/TargetData.h"
23 #include "llvm/Target/TargetLibraryInfo.h"
24 #include "llvm/Support/CFG.h"
25 #include "llvm/Support/ConstantRange.h"
26 #include "llvm/Support/Debug.h"
27 #include "llvm/Support/raw_ostream.h"
28 #include "llvm/Support/ValueHandle.h"
29 #include "llvm/ADT/DenseMap.h"
30 #include "llvm/ADT/DenseSet.h"
31 #include "llvm/ADT/STLExtras.h"
32 #include <map>
33 #include <stack>
34 using namespace llvm;
35
36 char LazyValueInfo::ID = 0;
37 INITIALIZE_PASS_BEGIN(LazyValueInfo, "lazy-value-info",
38                 "Lazy Value Information Analysis", false, true)
39 INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfo)
40 INITIALIZE_PASS_END(LazyValueInfo, "lazy-value-info",
41                 "Lazy Value Information Analysis", false, true)
42
43 namespace llvm {
44   FunctionPass *createLazyValueInfoPass() { return new LazyValueInfo(); }
45 }
46
47
48 //===----------------------------------------------------------------------===//
49 //                               LVILatticeVal
50 //===----------------------------------------------------------------------===//
51
52 /// LVILatticeVal - This is the information tracked by LazyValueInfo for each
53 /// value.
54 ///
55 /// FIXME: This is basically just for bringup, this can be made a lot more rich
56 /// in the future.
57 ///
58 namespace {
59 class LVILatticeVal {
60   enum LatticeValueTy {
61     /// undefined - This Value has no known value yet.
62     undefined,
63     
64     /// constant - This Value has a specific constant value.
65     constant,
66     /// notconstant - This Value is known to not have the specified value.
67     notconstant,
68
69     /// constantrange - The Value falls within this range.
70     constantrange,
71
72     /// overdefined - This value is not known to be constant, and we know that
73     /// it has a value.
74     overdefined
75   };
76   
77   /// Val: This stores the current lattice value along with the Constant* for
78   /// the constant if this is a 'constant' or 'notconstant' value.
79   LatticeValueTy Tag;
80   Constant *Val;
81   ConstantRange Range;
82   
83 public:
84   LVILatticeVal() : Tag(undefined), Val(0), Range(1, true) {}
85
86   static LVILatticeVal get(Constant *C) {
87     LVILatticeVal Res;
88     if (!isa<UndefValue>(C))
89       Res.markConstant(C);
90     return Res;
91   }
92   static LVILatticeVal getNot(Constant *C) {
93     LVILatticeVal Res;
94     if (!isa<UndefValue>(C))
95       Res.markNotConstant(C);
96     return Res;
97   }
98   static LVILatticeVal getRange(ConstantRange CR) {
99     LVILatticeVal Res;
100     Res.markConstantRange(CR);
101     return Res;
102   }
103   
104   bool isUndefined() const     { return Tag == undefined; }
105   bool isConstant() const      { return Tag == constant; }
106   bool isNotConstant() const   { return Tag == notconstant; }
107   bool isConstantRange() const { return Tag == constantrange; }
108   bool isOverdefined() const   { return Tag == overdefined; }
109   
110   Constant *getConstant() const {
111     assert(isConstant() && "Cannot get the constant of a non-constant!");
112     return Val;
113   }
114   
115   Constant *getNotConstant() const {
116     assert(isNotConstant() && "Cannot get the constant of a non-notconstant!");
117     return Val;
118   }
119   
120   ConstantRange getConstantRange() const {
121     assert(isConstantRange() &&
122            "Cannot get the constant-range of a non-constant-range!");
123     return Range;
124   }
125   
126   /// markOverdefined - Return true if this is a change in status.
127   bool markOverdefined() {
128     if (isOverdefined())
129       return false;
130     Tag = overdefined;
131     return true;
132   }
133
134   /// markConstant - Return true if this is a change in status.
135   bool markConstant(Constant *V) {
136     assert(V && "Marking constant with NULL");
137     if (ConstantInt *CI = dyn_cast<ConstantInt>(V))
138       return markConstantRange(ConstantRange(CI->getValue()));
139     if (isa<UndefValue>(V))
140       return false;
141
142     assert((!isConstant() || getConstant() == V) &&
143            "Marking constant with different value");
144     assert(isUndefined());
145     Tag = constant;
146     Val = V;
147     return true;
148   }
149   
150   /// markNotConstant - Return true if this is a change in status.
151   bool markNotConstant(Constant *V) {
152     assert(V && "Marking constant with NULL");
153     if (ConstantInt *CI = dyn_cast<ConstantInt>(V))
154       return markConstantRange(ConstantRange(CI->getValue()+1, CI->getValue()));
155     if (isa<UndefValue>(V))
156       return false;
157
158     assert((!isConstant() || getConstant() != V) &&
159            "Marking constant !constant with same value");
160     assert((!isNotConstant() || getNotConstant() == V) &&
161            "Marking !constant with different value");
162     assert(isUndefined() || isConstant());
163     Tag = notconstant;
164     Val = V;
165     return true;
166   }
167   
168   /// markConstantRange - Return true if this is a change in status.
169   bool markConstantRange(const ConstantRange NewR) {
170     if (isConstantRange()) {
171       if (NewR.isEmptySet())
172         return markOverdefined();
173       
174       bool changed = Range == NewR;
175       Range = NewR;
176       return changed;
177     }
178     
179     assert(isUndefined());
180     if (NewR.isEmptySet())
181       return markOverdefined();
182     
183     Tag = constantrange;
184     Range = NewR;
185     return true;
186   }
187   
188   /// mergeIn - Merge the specified lattice value into this one, updating this
189   /// one and returning true if anything changed.
190   bool mergeIn(const LVILatticeVal &RHS) {
191     if (RHS.isUndefined() || isOverdefined()) return false;
192     if (RHS.isOverdefined()) return markOverdefined();
193
194     if (isUndefined()) {
195       Tag = RHS.Tag;
196       Val = RHS.Val;
197       Range = RHS.Range;
198       return true;
199     }
200
201     if (isConstant()) {
202       if (RHS.isConstant()) {
203         if (Val == RHS.Val)
204           return false;
205         return markOverdefined();
206       }
207
208       if (RHS.isNotConstant()) {
209         if (Val == RHS.Val)
210           return markOverdefined();
211
212         // Unless we can prove that the two Constants are different, we must
213         // move to overdefined.
214         // FIXME: use TargetData/TargetLibraryInfo for smarter constant folding.
215         if (ConstantInt *Res = dyn_cast<ConstantInt>(
216                 ConstantFoldCompareInstOperands(CmpInst::ICMP_NE,
217                                                 getConstant(),
218                                                 RHS.getNotConstant())))
219           if (Res->isOne())
220             return markNotConstant(RHS.getNotConstant());
221
222         return markOverdefined();
223       }
224
225       // RHS is a ConstantRange, LHS is a non-integer Constant.
226
227       // FIXME: consider the case where RHS is a range [1, 0) and LHS is
228       // a function. The correct result is to pick up RHS.
229
230       return markOverdefined();
231     }
232
233     if (isNotConstant()) {
234       if (RHS.isConstant()) {
235         if (Val == RHS.Val)
236           return markOverdefined();
237
238         // Unless we can prove that the two Constants are different, we must
239         // move to overdefined.
240         // FIXME: use TargetData/TargetLibraryInfo for smarter constant folding.
241         if (ConstantInt *Res = dyn_cast<ConstantInt>(
242                 ConstantFoldCompareInstOperands(CmpInst::ICMP_NE,
243                                                 getNotConstant(),
244                                                 RHS.getConstant())))
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   /// LVIValueHandle - A callback value handle update the cache when
297   /// values are erased.
298   class LazyValueInfoCache;
299   struct LVIValueHandle : public CallbackVH {
300     LazyValueInfoCache *Parent;
301       
302     LVIValueHandle(Value *V, LazyValueInfoCache *P)
303       : CallbackVH(V), Parent(P) { }
304       
305     void deleted();
306     void allUsesReplacedWith(Value *V) {
307       deleted();
308     }
309   };
310 }
311
312 namespace llvm {
313   template<>
314   struct DenseMapInfo<LVIValueHandle> {
315     typedef DenseMapInfo<Value*> PointerInfo;
316     static inline LVIValueHandle getEmptyKey() {
317       return LVIValueHandle(PointerInfo::getEmptyKey(),
318                             static_cast<LazyValueInfoCache*>(0));
319     }
320     static inline LVIValueHandle getTombstoneKey() {
321       return LVIValueHandle(PointerInfo::getTombstoneKey(),
322                             static_cast<LazyValueInfoCache*>(0));
323     }
324     static unsigned getHashValue(const LVIValueHandle &Val) {
325       return PointerInfo::getHashValue(Val);
326     }
327     static bool isEqual(const LVIValueHandle &LHS, const LVIValueHandle &RHS) {
328       return LHS == RHS;
329     }
330   };
331   
332   template<>
333   struct DenseMapInfo<std::pair<AssertingVH<BasicBlock>, Value*> > {
334     typedef std::pair<AssertingVH<BasicBlock>, Value*> PairTy;
335     typedef DenseMapInfo<AssertingVH<BasicBlock> > APointerInfo;
336     typedef DenseMapInfo<Value*> BPointerInfo;
337     static inline PairTy getEmptyKey() {
338       return std::make_pair(APointerInfo::getEmptyKey(),
339                             BPointerInfo::getEmptyKey());
340     }
341     static inline PairTy getTombstoneKey() {
342       return std::make_pair(APointerInfo::getTombstoneKey(), 
343                             BPointerInfo::getTombstoneKey());
344     }
345     static unsigned getHashValue( const PairTy &Val) {
346       return APointerInfo::getHashValue(Val.first) ^ 
347              BPointerInfo::getHashValue(Val.second);
348     }
349     static bool isEqual(const PairTy &LHS, const PairTy &RHS) {
350       return APointerInfo::isEqual(LHS.first, RHS.first) &&
351              BPointerInfo::isEqual(LHS.second, RHS.second);
352     }
353   };
354 }
355
356 namespace { 
357   /// LazyValueInfoCache - This is the cache kept by LazyValueInfo which
358   /// maintains information about queries across the clients' queries.
359   class LazyValueInfoCache {
360     /// ValueCacheEntryTy - This is all of the cached block information for
361     /// exactly one Value*.  The entries are sorted by the BasicBlock* of the
362     /// entries, allowing us to do a lookup with a binary search.
363     typedef std::map<AssertingVH<BasicBlock>, LVILatticeVal> ValueCacheEntryTy;
364
365     /// ValueCache - This is all of the cached information for all values,
366     /// mapped from Value* to key information.
367     std::map<LVIValueHandle, ValueCacheEntryTy> ValueCache;
368     
369     /// OverDefinedCache - This tracks, on a per-block basis, the set of 
370     /// values that are over-defined at the end of that block.  This is required
371     /// for cache updating.
372     typedef std::pair<AssertingVH<BasicBlock>, Value*> OverDefinedPairTy;
373     DenseSet<OverDefinedPairTy> OverDefinedCache;
374
375     /// SeenBlocks - Keep track of all blocks that we have ever seen, so we
376     /// don't spend time removing unused blocks from our caches.
377     DenseSet<AssertingVH<BasicBlock> > SeenBlocks;
378
379     /// BlockValueStack - This stack holds the state of the value solver
380     /// during a query.  It basically emulates the callstack of the naive
381     /// recursive value lookup process.
382     std::stack<std::pair<BasicBlock*, Value*> > BlockValueStack;
383     
384     friend struct LVIValueHandle;
385     
386     /// OverDefinedCacheUpdater - A helper object that ensures that the
387     /// OverDefinedCache is updated whenever solveBlockValue returns.
388     struct OverDefinedCacheUpdater {
389       LazyValueInfoCache *Parent;
390       Value *Val;
391       BasicBlock *BB;
392       LVILatticeVal &BBLV;
393       
394       OverDefinedCacheUpdater(Value *V, BasicBlock *B, LVILatticeVal &LV,
395                        LazyValueInfoCache *P)
396         : Parent(P), Val(V), BB(B), BBLV(LV) { }
397       
398       bool markResult(bool changed) { 
399         if (changed && BBLV.isOverdefined())
400           Parent->OverDefinedCache.insert(std::make_pair(BB, Val));
401         return changed;
402       }
403     };
404     
405
406
407     LVILatticeVal getBlockValue(Value *Val, BasicBlock *BB);
408     bool getEdgeValue(Value *V, BasicBlock *F, BasicBlock *T,
409                       LVILatticeVal &Result);
410     bool hasBlockValue(Value *Val, BasicBlock *BB);
411
412     // These methods process one work item and may add more. A false value
413     // returned means that the work item was not completely processed and must
414     // be revisited after going through the new items.
415     bool solveBlockValue(Value *Val, BasicBlock *BB);
416     bool solveBlockValueNonLocal(LVILatticeVal &BBLV,
417                                  Value *Val, BasicBlock *BB);
418     bool solveBlockValuePHINode(LVILatticeVal &BBLV,
419                                 PHINode *PN, BasicBlock *BB);
420     bool solveBlockValueConstantRange(LVILatticeVal &BBLV,
421                                       Instruction *BBI, BasicBlock *BB);
422
423     void solve();
424     
425     ValueCacheEntryTy &lookup(Value *V) {
426       return ValueCache[LVIValueHandle(V, this)];
427     }
428
429   public:
430     /// getValueInBlock - This is the query interface to determine the lattice
431     /// value for the specified Value* at the end of the specified block.
432     LVILatticeVal getValueInBlock(Value *V, BasicBlock *BB);
433
434     /// getValueOnEdge - This is the query interface to determine the lattice
435     /// value for the specified Value* that is true on the specified edge.
436     LVILatticeVal getValueOnEdge(Value *V, BasicBlock *FromBB,BasicBlock *ToBB);
437     
438     /// threadEdge - This is the update interface to inform the cache that an
439     /// edge from PredBB to OldSucc has been threaded to be from PredBB to
440     /// NewSucc.
441     void threadEdge(BasicBlock *PredBB,BasicBlock *OldSucc,BasicBlock *NewSucc);
442     
443     /// eraseBlock - This is part of the update interface to inform the cache
444     /// that a block has been deleted.
445     void eraseBlock(BasicBlock *BB);
446     
447     /// clear - Empty the cache.
448     void clear() {
449       SeenBlocks.clear();
450       ValueCache.clear();
451       OverDefinedCache.clear();
452     }
453   };
454 } // end anonymous namespace
455
456 void LVIValueHandle::deleted() {
457   typedef std::pair<AssertingVH<BasicBlock>, Value*> OverDefinedPairTy;
458   
459   SmallVector<OverDefinedPairTy, 4> ToErase;
460   for (DenseSet<OverDefinedPairTy>::iterator 
461        I = Parent->OverDefinedCache.begin(),
462        E = Parent->OverDefinedCache.end();
463        I != E; ++I) {
464     if (I->second == getValPtr())
465       ToErase.push_back(*I);
466   }
467   
468   for (SmallVector<OverDefinedPairTy, 4>::iterator I = ToErase.begin(),
469        E = ToErase.end(); I != E; ++I)
470     Parent->OverDefinedCache.erase(*I);
471   
472   // This erasure deallocates *this, so it MUST happen after we're done
473   // using any and all members of *this.
474   Parent->ValueCache.erase(*this);
475 }
476
477 void LazyValueInfoCache::eraseBlock(BasicBlock *BB) {
478   // Shortcut if we have never seen this block.
479   DenseSet<AssertingVH<BasicBlock> >::iterator I = SeenBlocks.find(BB);
480   if (I == SeenBlocks.end())
481     return;
482   SeenBlocks.erase(I);
483
484   SmallVector<OverDefinedPairTy, 4> ToErase;
485   for (DenseSet<OverDefinedPairTy>::iterator  I = OverDefinedCache.begin(),
486        E = OverDefinedCache.end(); I != E; ++I) {
487     if (I->first == BB)
488       ToErase.push_back(*I);
489   }
490   
491   for (SmallVector<OverDefinedPairTy, 4>::iterator I = ToErase.begin(),
492        E = ToErase.end(); I != E; ++I)
493     OverDefinedCache.erase(*I);
494
495   for (std::map<LVIValueHandle, ValueCacheEntryTy>::iterator
496        I = ValueCache.begin(), E = ValueCache.end(); I != E; ++I)
497     I->second.erase(BB);
498 }
499
500 void LazyValueInfoCache::solve() {
501   while (!BlockValueStack.empty()) {
502     std::pair<BasicBlock*, Value*> &e = BlockValueStack.top();
503     if (solveBlockValue(e.second, e.first))
504       BlockValueStack.pop();
505   }
506 }
507
508 bool LazyValueInfoCache::hasBlockValue(Value *Val, BasicBlock *BB) {
509   // If already a constant, there is nothing to compute.
510   if (isa<Constant>(Val))
511     return true;
512
513   LVIValueHandle ValHandle(Val, this);
514   if (!ValueCache.count(ValHandle)) return false;
515   return ValueCache[ValHandle].count(BB);
516 }
517
518 LVILatticeVal LazyValueInfoCache::getBlockValue(Value *Val, BasicBlock *BB) {
519   // If already a constant, there is nothing to compute.
520   if (Constant *VC = dyn_cast<Constant>(Val))
521     return LVILatticeVal::get(VC);
522
523   SeenBlocks.insert(BB);
524   return lookup(Val)[BB];
525 }
526
527 bool LazyValueInfoCache::solveBlockValue(Value *Val, BasicBlock *BB) {
528   if (isa<Constant>(Val))
529     return true;
530
531   ValueCacheEntryTy &Cache = lookup(Val);
532   SeenBlocks.insert(BB);
533   LVILatticeVal &BBLV = Cache[BB];
534   
535   // OverDefinedCacheUpdater is a helper object that will update
536   // the OverDefinedCache for us when this method exits.  Make sure to
537   // call markResult on it as we exist, passing a bool to indicate if the
538   // cache needs updating, i.e. if we have solve a new value or not.
539   OverDefinedCacheUpdater ODCacheUpdater(Val, BB, BBLV, this);
540
541   // If we've already computed this block's value, return it.
542   if (!BBLV.isUndefined()) {
543     DEBUG(dbgs() << "  reuse BB '" << BB->getName() << "' val=" << BBLV <<'\n');
544     
545     // Since we're reusing a cached value here, we don't need to update the 
546     // OverDefinedCahce.  The cache will have been properly updated 
547     // whenever the cached value was inserted.
548     ODCacheUpdater.markResult(false);
549     return true;
550   }
551
552   // Otherwise, this is the first time we're seeing this block.  Reset the
553   // lattice value to overdefined, so that cycles will terminate and be
554   // conservatively correct.
555   BBLV.markOverdefined();
556   
557   Instruction *BBI = dyn_cast<Instruction>(Val);
558   if (BBI == 0 || BBI->getParent() != BB) {
559     return ODCacheUpdater.markResult(solveBlockValueNonLocal(BBLV, Val, BB));
560   }
561
562   if (PHINode *PN = dyn_cast<PHINode>(BBI)) {
563     return ODCacheUpdater.markResult(solveBlockValuePHINode(BBLV, PN, BB));
564   }
565
566   if (AllocaInst *AI = dyn_cast<AllocaInst>(BBI)) {
567     BBLV = LVILatticeVal::getNot(ConstantPointerNull::get(AI->getType()));
568     return ODCacheUpdater.markResult(true);
569   }
570
571   // We can only analyze the definitions of certain classes of instructions
572   // (integral binops and casts at the moment), so bail if this isn't one.
573   LVILatticeVal Result;
574   if ((!isa<BinaryOperator>(BBI) && !isa<CastInst>(BBI)) ||
575      !BBI->getType()->isIntegerTy()) {
576     DEBUG(dbgs() << " compute BB '" << BB->getName()
577                  << "' - overdefined because inst def found.\n");
578     BBLV.markOverdefined();
579     return ODCacheUpdater.markResult(true);
580   }
581
582   // FIXME: We're currently limited to binops with a constant RHS.  This should
583   // be improved.
584   BinaryOperator *BO = dyn_cast<BinaryOperator>(BBI);
585   if (BO && !isa<ConstantInt>(BO->getOperand(1))) { 
586     DEBUG(dbgs() << " compute BB '" << BB->getName()
587                  << "' - overdefined because inst def found.\n");
588
589     BBLV.markOverdefined();
590     return ODCacheUpdater.markResult(true);
591   }
592
593   return ODCacheUpdater.markResult(solveBlockValueConstantRange(BBLV, BBI, BB));
594 }
595
596 static bool InstructionDereferencesPointer(Instruction *I, Value *Ptr) {
597   if (LoadInst *L = dyn_cast<LoadInst>(I)) {
598     return L->getPointerAddressSpace() == 0 &&
599         GetUnderlyingObject(L->getPointerOperand()) ==
600         GetUnderlyingObject(Ptr);
601   }
602   if (StoreInst *S = dyn_cast<StoreInst>(I)) {
603     return S->getPointerAddressSpace() == 0 &&
604         GetUnderlyingObject(S->getPointerOperand()) ==
605         GetUnderlyingObject(Ptr);
606   }
607   if (MemIntrinsic *MI = dyn_cast<MemIntrinsic>(I)) {
608     if (MI->isVolatile()) return false;
609
610     // FIXME: check whether it has a valuerange that excludes zero?
611     ConstantInt *Len = dyn_cast<ConstantInt>(MI->getLength());
612     if (!Len || Len->isZero()) return false;
613
614     if (MI->getDestAddressSpace() == 0)
615       if (MI->getRawDest() == Ptr || MI->getDest() == Ptr)
616         return true;
617     if (MemTransferInst *MTI = dyn_cast<MemTransferInst>(MI))
618       if (MTI->getSourceAddressSpace() == 0)
619         if (MTI->getRawSource() == Ptr || MTI->getSource() == Ptr)
620           return true;
621   }
622   return false;
623 }
624
625 bool LazyValueInfoCache::solveBlockValueNonLocal(LVILatticeVal &BBLV,
626                                                  Value *Val, BasicBlock *BB) {
627   LVILatticeVal Result;  // Start Undefined.
628
629   // If this is a pointer, and there's a load from that pointer in this BB,
630   // then we know that the pointer can't be NULL.
631   bool NotNull = false;
632   if (Val->getType()->isPointerTy()) {
633     if (isa<AllocaInst>(Val)) {
634       NotNull = true;
635     } else {
636       for (BasicBlock::iterator BI = BB->begin(), BE = BB->end();BI != BE;++BI){
637         if (InstructionDereferencesPointer(BI, Val)) {
638           NotNull = true;
639           break;
640         }
641       }
642     }
643   }
644
645   // If this is the entry block, we must be asking about an argument.  The
646   // value is overdefined.
647   if (BB == &BB->getParent()->getEntryBlock()) {
648     assert(isa<Argument>(Val) && "Unknown live-in to the entry block");
649     if (NotNull) {
650       PointerType *PTy = cast<PointerType>(Val->getType());
651       Result = LVILatticeVal::getNot(ConstantPointerNull::get(PTy));
652     } else {
653       Result.markOverdefined();
654     }
655     BBLV = Result;
656     return true;
657   }
658
659   // Loop over all of our predecessors, merging what we know from them into
660   // result.
661   bool EdgesMissing = false;
662   for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
663     LVILatticeVal EdgeResult;
664     EdgesMissing |= !getEdgeValue(Val, *PI, BB, EdgeResult);
665     if (EdgesMissing)
666       continue;
667
668     Result.mergeIn(EdgeResult);
669
670     // If we hit overdefined, exit early.  The BlockVals entry is already set
671     // to overdefined.
672     if (Result.isOverdefined()) {
673       DEBUG(dbgs() << " compute BB '" << BB->getName()
674             << "' - overdefined because of pred.\n");
675       // If we previously determined that this is a pointer that can't be null
676       // then return that rather than giving up entirely.
677       if (NotNull) {
678         PointerType *PTy = cast<PointerType>(Val->getType());
679         Result = LVILatticeVal::getNot(ConstantPointerNull::get(PTy));
680       }
681       
682       BBLV = Result;
683       return true;
684     }
685   }
686   if (EdgesMissing)
687     return false;
688
689   // Return the merged value, which is more precise than 'overdefined'.
690   assert(!Result.isOverdefined());
691   BBLV = Result;
692   return true;
693 }
694   
695 bool LazyValueInfoCache::solveBlockValuePHINode(LVILatticeVal &BBLV,
696                                                 PHINode *PN, BasicBlock *BB) {
697   LVILatticeVal Result;  // Start Undefined.
698
699   // Loop over all of our predecessors, merging what we know from them into
700   // result.
701   bool EdgesMissing = false;
702   for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
703     BasicBlock *PhiBB = PN->getIncomingBlock(i);
704     Value *PhiVal = PN->getIncomingValue(i);
705     LVILatticeVal EdgeResult;
706     EdgesMissing |= !getEdgeValue(PhiVal, PhiBB, BB, EdgeResult);
707     if (EdgesMissing)
708       continue;
709
710     Result.mergeIn(EdgeResult);
711
712     // If we hit overdefined, exit early.  The BlockVals entry is already set
713     // to overdefined.
714     if (Result.isOverdefined()) {
715       DEBUG(dbgs() << " compute BB '" << BB->getName()
716             << "' - overdefined because of pred.\n");
717       
718       BBLV = Result;
719       return true;
720     }
721   }
722   if (EdgesMissing)
723     return false;
724
725   // Return the merged value, which is more precise than 'overdefined'.
726   assert(!Result.isOverdefined() && "Possible PHI in entry block?");
727   BBLV = Result;
728   return true;
729 }
730
731 bool LazyValueInfoCache::solveBlockValueConstantRange(LVILatticeVal &BBLV,
732                                                       Instruction *BBI,
733                                                       BasicBlock *BB) {
734   // Figure out the range of the LHS.  If that fails, bail.
735   if (!hasBlockValue(BBI->getOperand(0), BB)) {
736     BlockValueStack.push(std::make_pair(BB, BBI->getOperand(0)));
737     return false;
738   }
739
740   LVILatticeVal LHSVal = getBlockValue(BBI->getOperand(0), BB);
741   if (!LHSVal.isConstantRange()) {
742     BBLV.markOverdefined();
743     return true;
744   }
745   
746   ConstantRange LHSRange = LHSVal.getConstantRange();
747   ConstantRange RHSRange(1);
748   IntegerType *ResultTy = cast<IntegerType>(BBI->getType());
749   if (isa<BinaryOperator>(BBI)) {
750     if (ConstantInt *RHS = dyn_cast<ConstantInt>(BBI->getOperand(1))) {
751       RHSRange = ConstantRange(RHS->getValue());
752     } else {
753       BBLV.markOverdefined();
754       return true;
755     }
756   }
757
758   // NOTE: We're currently limited by the set of operations that ConstantRange
759   // can evaluate symbolically.  Enhancing that set will allows us to analyze
760   // more definitions.
761   LVILatticeVal Result;
762   switch (BBI->getOpcode()) {
763   case Instruction::Add:
764     Result.markConstantRange(LHSRange.add(RHSRange));
765     break;
766   case Instruction::Sub:
767     Result.markConstantRange(LHSRange.sub(RHSRange));
768     break;
769   case Instruction::Mul:
770     Result.markConstantRange(LHSRange.multiply(RHSRange));
771     break;
772   case Instruction::UDiv:
773     Result.markConstantRange(LHSRange.udiv(RHSRange));
774     break;
775   case Instruction::Shl:
776     Result.markConstantRange(LHSRange.shl(RHSRange));
777     break;
778   case Instruction::LShr:
779     Result.markConstantRange(LHSRange.lshr(RHSRange));
780     break;
781   case Instruction::Trunc:
782     Result.markConstantRange(LHSRange.truncate(ResultTy->getBitWidth()));
783     break;
784   case Instruction::SExt:
785     Result.markConstantRange(LHSRange.signExtend(ResultTy->getBitWidth()));
786     break;
787   case Instruction::ZExt:
788     Result.markConstantRange(LHSRange.zeroExtend(ResultTy->getBitWidth()));
789     break;
790   case Instruction::BitCast:
791     Result.markConstantRange(LHSRange);
792     break;
793   case Instruction::And:
794     Result.markConstantRange(LHSRange.binaryAnd(RHSRange));
795     break;
796   case Instruction::Or:
797     Result.markConstantRange(LHSRange.binaryOr(RHSRange));
798     break;
799   
800   // Unhandled instructions are overdefined.
801   default:
802     DEBUG(dbgs() << " compute BB '" << BB->getName()
803                  << "' - overdefined because inst def found.\n");
804     Result.markOverdefined();
805     break;
806   }
807   
808   BBLV = Result;
809   return true;
810 }
811
812 /// getEdgeValue - This method attempts to infer more complex 
813 bool LazyValueInfoCache::getEdgeValue(Value *Val, BasicBlock *BBFrom,
814                                       BasicBlock *BBTo, LVILatticeVal &Result) {
815   // If already a constant, there is nothing to compute.
816   if (Constant *VC = dyn_cast<Constant>(Val)) {
817     Result = LVILatticeVal::get(VC);
818     return true;
819   }
820   
821   // TODO: Handle more complex conditionals.  If (v == 0 || v2 < 1) is false, we
822   // know that v != 0.
823   if (BranchInst *BI = dyn_cast<BranchInst>(BBFrom->getTerminator())) {
824     // If this is a conditional branch and only one successor goes to BBTo, then
825     // we maybe able to infer something from the condition. 
826     if (BI->isConditional() &&
827         BI->getSuccessor(0) != BI->getSuccessor(1)) {
828       bool isTrueDest = BI->getSuccessor(0) == BBTo;
829       assert(BI->getSuccessor(!isTrueDest) == BBTo &&
830              "BBTo isn't a successor of BBFrom");
831       
832       // If V is the condition of the branch itself, then we know exactly what
833       // it is.
834       if (BI->getCondition() == Val) {
835         Result = LVILatticeVal::get(ConstantInt::get(
836                               Type::getInt1Ty(Val->getContext()), isTrueDest));
837         return true;
838       }
839       
840       // If the condition of the branch is an equality comparison, we may be
841       // able to infer the value.
842       ICmpInst *ICI = dyn_cast<ICmpInst>(BI->getCondition());
843       if (ICI && ICI->getOperand(0) == Val &&
844           isa<Constant>(ICI->getOperand(1))) {
845         if (ICI->isEquality()) {
846           // We know that V has the RHS constant if this is a true SETEQ or
847           // false SETNE. 
848           if (isTrueDest == (ICI->getPredicate() == ICmpInst::ICMP_EQ))
849             Result = LVILatticeVal::get(cast<Constant>(ICI->getOperand(1)));
850           else
851             Result = LVILatticeVal::getNot(cast<Constant>(ICI->getOperand(1)));
852           return true;
853         }
854
855         if (ConstantInt *CI = dyn_cast<ConstantInt>(ICI->getOperand(1))) {
856           // Calculate the range of values that would satisfy the comparison.
857           ConstantRange CmpRange(CI->getValue(), CI->getValue()+1);
858           ConstantRange TrueValues =
859             ConstantRange::makeICmpRegion(ICI->getPredicate(), CmpRange);
860
861           // If we're interested in the false dest, invert the condition.
862           if (!isTrueDest) TrueValues = TrueValues.inverse();
863           
864           // Figure out the possible values of the query BEFORE this branch.  
865           if (!hasBlockValue(Val, BBFrom)) {
866             BlockValueStack.push(std::make_pair(BBFrom, Val));
867             return false;
868           }
869           
870           LVILatticeVal InBlock = getBlockValue(Val, BBFrom);
871           if (!InBlock.isConstantRange()) {
872             Result = LVILatticeVal::getRange(TrueValues);
873             return true;
874           }
875
876           // Find all potential values that satisfy both the input and output
877           // conditions.
878           ConstantRange PossibleValues =
879             TrueValues.intersectWith(InBlock.getConstantRange());
880
881           Result = LVILatticeVal::getRange(PossibleValues);
882           return true;
883         }
884       }
885     }
886   }
887
888   // If the edge was formed by a switch on the value, then we may know exactly
889   // what it is.
890   if (SwitchInst *SI = dyn_cast<SwitchInst>(BBFrom->getTerminator())) {
891     if (SI->getCondition() == Val) {
892       // We don't know anything in the default case.
893       if (SI->getDefaultDest() == BBTo) {
894         Result.markOverdefined();
895         return true;
896       }
897       
898       // We only know something if there is exactly one value that goes from
899       // BBFrom to BBTo.
900       unsigned NumEdges = 0;
901       ConstantInt *EdgeVal = 0;
902       for (unsigned i = 1, e = SI->getNumSuccessors(); i != e; ++i) {
903         if (SI->getSuccessor(i) != BBTo) continue;
904         if (NumEdges++) break;
905         EdgeVal = SI->getCaseValue(i);
906       }
907       assert(EdgeVal && "Missing successor?");
908       if (NumEdges == 1) {
909         Result = LVILatticeVal::get(EdgeVal);
910         return true;
911       }
912     }
913   }
914   
915   // Otherwise see if the value is known in the block.
916   if (hasBlockValue(Val, BBFrom)) {
917     Result = getBlockValue(Val, BBFrom);
918     return true;
919   }
920   BlockValueStack.push(std::make_pair(BBFrom, Val));
921   return false;
922 }
923
924 LVILatticeVal LazyValueInfoCache::getValueInBlock(Value *V, BasicBlock *BB) {
925   DEBUG(dbgs() << "LVI Getting block end value " << *V << " at '"
926         << BB->getName() << "'\n");
927   
928   BlockValueStack.push(std::make_pair(BB, V));
929   solve();
930   LVILatticeVal Result = getBlockValue(V, BB);
931
932   DEBUG(dbgs() << "  Result = " << Result << "\n");
933   return Result;
934 }
935
936 LVILatticeVal LazyValueInfoCache::
937 getValueOnEdge(Value *V, BasicBlock *FromBB, BasicBlock *ToBB) {
938   DEBUG(dbgs() << "LVI Getting edge value " << *V << " from '"
939         << FromBB->getName() << "' to '" << ToBB->getName() << "'\n");
940   
941   LVILatticeVal Result;
942   if (!getEdgeValue(V, FromBB, ToBB, Result)) {
943     solve();
944     bool WasFastQuery = getEdgeValue(V, FromBB, ToBB, Result);
945     (void)WasFastQuery;
946     assert(WasFastQuery && "More work to do after problem solved?");
947   }
948
949   DEBUG(dbgs() << "  Result = " << Result << "\n");
950   return Result;
951 }
952
953 void LazyValueInfoCache::threadEdge(BasicBlock *PredBB, BasicBlock *OldSucc,
954                                     BasicBlock *NewSucc) {
955   // When an edge in the graph has been threaded, values that we could not 
956   // determine a value for before (i.e. were marked overdefined) may be possible
957   // to solve now.  We do NOT try to proactively update these values.  Instead,
958   // we clear their entries from the cache, and allow lazy updating to recompute
959   // them when needed.
960   
961   // The updating process is fairly simple: we need to dropped cached info
962   // for all values that were marked overdefined in OldSucc, and for those same
963   // values in any successor of OldSucc (except NewSucc) in which they were
964   // also marked overdefined.
965   std::vector<BasicBlock*> worklist;
966   worklist.push_back(OldSucc);
967   
968   DenseSet<Value*> ClearSet;
969   for (DenseSet<OverDefinedPairTy>::iterator I = OverDefinedCache.begin(),
970        E = OverDefinedCache.end(); I != E; ++I) {
971     if (I->first == OldSucc)
972       ClearSet.insert(I->second);
973   }
974   
975   // Use a worklist to perform a depth-first search of OldSucc's successors.
976   // NOTE: We do not need a visited list since any blocks we have already
977   // visited will have had their overdefined markers cleared already, and we
978   // thus won't loop to their successors.
979   while (!worklist.empty()) {
980     BasicBlock *ToUpdate = worklist.back();
981     worklist.pop_back();
982     
983     // Skip blocks only accessible through NewSucc.
984     if (ToUpdate == NewSucc) continue;
985     
986     bool changed = false;
987     for (DenseSet<Value*>::iterator I = ClearSet.begin(), E = ClearSet.end();
988          I != E; ++I) {
989       // If a value was marked overdefined in OldSucc, and is here too...
990       DenseSet<OverDefinedPairTy>::iterator OI =
991         OverDefinedCache.find(std::make_pair(ToUpdate, *I));
992       if (OI == OverDefinedCache.end()) continue;
993
994       // Remove it from the caches.
995       ValueCacheEntryTy &Entry = ValueCache[LVIValueHandle(*I, this)];
996       ValueCacheEntryTy::iterator CI = Entry.find(ToUpdate);
997
998       assert(CI != Entry.end() && "Couldn't find entry to update?");
999       Entry.erase(CI);
1000       OverDefinedCache.erase(OI);
1001
1002       // If we removed anything, then we potentially need to update 
1003       // blocks successors too.
1004       changed = true;
1005     }
1006
1007     if (!changed) continue;
1008     
1009     worklist.insert(worklist.end(), succ_begin(ToUpdate), succ_end(ToUpdate));
1010   }
1011 }
1012
1013 //===----------------------------------------------------------------------===//
1014 //                            LazyValueInfo Impl
1015 //===----------------------------------------------------------------------===//
1016
1017 /// getCache - This lazily constructs the LazyValueInfoCache.
1018 static LazyValueInfoCache &getCache(void *&PImpl) {
1019   if (!PImpl)
1020     PImpl = new LazyValueInfoCache();
1021   return *static_cast<LazyValueInfoCache*>(PImpl);
1022 }
1023
1024 bool LazyValueInfo::runOnFunction(Function &F) {
1025   if (PImpl)
1026     getCache(PImpl).clear();
1027
1028   TD = getAnalysisIfAvailable<TargetData>();
1029   TLI = &getAnalysis<TargetLibraryInfo>();
1030
1031   // Fully lazy.
1032   return false;
1033 }
1034
1035 void LazyValueInfo::getAnalysisUsage(AnalysisUsage &AU) const {
1036   AU.setPreservesAll();
1037   AU.addRequired<TargetLibraryInfo>();
1038 }
1039
1040 void LazyValueInfo::releaseMemory() {
1041   // If the cache was allocated, free it.
1042   if (PImpl) {
1043     delete &getCache(PImpl);
1044     PImpl = 0;
1045   }
1046 }
1047
1048 Constant *LazyValueInfo::getConstant(Value *V, BasicBlock *BB) {
1049   LVILatticeVal Result = getCache(PImpl).getValueInBlock(V, BB);
1050   
1051   if (Result.isConstant())
1052     return Result.getConstant();
1053   if (Result.isConstantRange()) {
1054     ConstantRange CR = Result.getConstantRange();
1055     if (const APInt *SingleVal = CR.getSingleElement())
1056       return ConstantInt::get(V->getContext(), *SingleVal);
1057   }
1058   return 0;
1059 }
1060
1061 /// getConstantOnEdge - Determine whether the specified value is known to be a
1062 /// constant on the specified edge.  Return null if not.
1063 Constant *LazyValueInfo::getConstantOnEdge(Value *V, BasicBlock *FromBB,
1064                                            BasicBlock *ToBB) {
1065   LVILatticeVal Result = getCache(PImpl).getValueOnEdge(V, FromBB, ToBB);
1066   
1067   if (Result.isConstant())
1068     return Result.getConstant();
1069   if (Result.isConstantRange()) {
1070     ConstantRange CR = Result.getConstantRange();
1071     if (const APInt *SingleVal = CR.getSingleElement())
1072       return ConstantInt::get(V->getContext(), *SingleVal);
1073   }
1074   return 0;
1075 }
1076
1077 /// getPredicateOnEdge - Determine whether the specified value comparison
1078 /// with a constant is known to be true or false on the specified CFG edge.
1079 /// Pred is a CmpInst predicate.
1080 LazyValueInfo::Tristate
1081 LazyValueInfo::getPredicateOnEdge(unsigned Pred, Value *V, Constant *C,
1082                                   BasicBlock *FromBB, BasicBlock *ToBB) {
1083   LVILatticeVal Result = getCache(PImpl).getValueOnEdge(V, FromBB, ToBB);
1084   
1085   // If we know the value is a constant, evaluate the conditional.
1086   Constant *Res = 0;
1087   if (Result.isConstant()) {
1088     Res = ConstantFoldCompareInstOperands(Pred, Result.getConstant(), C, TD,
1089                                           TLI);
1090     if (ConstantInt *ResCI = dyn_cast<ConstantInt>(Res))
1091       return ResCI->isZero() ? False : True;
1092     return Unknown;
1093   }
1094   
1095   if (Result.isConstantRange()) {
1096     ConstantInt *CI = dyn_cast<ConstantInt>(C);
1097     if (!CI) return Unknown;
1098     
1099     ConstantRange CR = Result.getConstantRange();
1100     if (Pred == ICmpInst::ICMP_EQ) {
1101       if (!CR.contains(CI->getValue()))
1102         return False;
1103       
1104       if (CR.isSingleElement() && CR.contains(CI->getValue()))
1105         return True;
1106     } else if (Pred == ICmpInst::ICMP_NE) {
1107       if (!CR.contains(CI->getValue()))
1108         return True;
1109       
1110       if (CR.isSingleElement() && CR.contains(CI->getValue()))
1111         return False;
1112     }
1113     
1114     // Handle more complex predicates.
1115     ConstantRange TrueValues =
1116         ICmpInst::makeConstantRange((ICmpInst::Predicate)Pred, CI->getValue());
1117     if (TrueValues.contains(CR))
1118       return True;
1119     if (TrueValues.inverse().contains(CR))
1120       return False;
1121     return Unknown;
1122   }
1123   
1124   if (Result.isNotConstant()) {
1125     // If this is an equality comparison, we can try to fold it knowing that
1126     // "V != C1".
1127     if (Pred == ICmpInst::ICMP_EQ) {
1128       // !C1 == C -> false iff C1 == C.
1129       Res = ConstantFoldCompareInstOperands(ICmpInst::ICMP_NE,
1130                                             Result.getNotConstant(), C, TD,
1131                                             TLI);
1132       if (Res->isNullValue())
1133         return False;
1134     } else if (Pred == ICmpInst::ICMP_NE) {
1135       // !C1 != C -> true iff C1 == C.
1136       Res = ConstantFoldCompareInstOperands(ICmpInst::ICMP_NE,
1137                                             Result.getNotConstant(), C, TD,
1138                                             TLI);
1139       if (Res->isNullValue())
1140         return True;
1141     }
1142     return Unknown;
1143   }
1144   
1145   return Unknown;
1146 }
1147
1148 void LazyValueInfo::threadEdge(BasicBlock *PredBB, BasicBlock *OldSucc,
1149                                BasicBlock *NewSucc) {
1150   if (PImpl) getCache(PImpl).threadEdge(PredBB, OldSucc, NewSucc);
1151 }
1152
1153 void LazyValueInfo::eraseBlock(BasicBlock *BB) {
1154   if (PImpl) getCache(PImpl).eraseBlock(BB);
1155 }