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