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