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