1 //===- CorrelatedValuePropagation.cpp - Propagate CFG-derived info --------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file implements the Correlated Value Propagation pass. 10 // 11 //===----------------------------------------------------------------------===// 12 13 #include "llvm/Transforms/Scalar/CorrelatedValuePropagation.h" 14 #include "llvm/ADT/DepthFirstIterator.h" 15 #include "llvm/ADT/Optional.h" 16 #include "llvm/ADT/SmallVector.h" 17 #include "llvm/ADT/Statistic.h" 18 #include "llvm/Analysis/DomTreeUpdater.h" 19 #include "llvm/Analysis/GlobalsModRef.h" 20 #include "llvm/Analysis/InstructionSimplify.h" 21 #include "llvm/Analysis/LazyValueInfo.h" 22 #include "llvm/Analysis/ValueTracking.h" 23 #include "llvm/IR/Attributes.h" 24 #include "llvm/IR/BasicBlock.h" 25 #include "llvm/IR/CFG.h" 26 #include "llvm/IR/Constant.h" 27 #include "llvm/IR/ConstantRange.h" 28 #include "llvm/IR/Constants.h" 29 #include "llvm/IR/DerivedTypes.h" 30 #include "llvm/IR/Function.h" 31 #include "llvm/IR/IRBuilder.h" 32 #include "llvm/IR/InstrTypes.h" 33 #include "llvm/IR/Instruction.h" 34 #include "llvm/IR/Instructions.h" 35 #include "llvm/IR/IntrinsicInst.h" 36 #include "llvm/IR/Operator.h" 37 #include "llvm/IR/PassManager.h" 38 #include "llvm/IR/Type.h" 39 #include "llvm/IR/Value.h" 40 #include "llvm/InitializePasses.h" 41 #include "llvm/Pass.h" 42 #include "llvm/Support/Casting.h" 43 #include "llvm/Support/CommandLine.h" 44 #include "llvm/Support/Debug.h" 45 #include "llvm/Support/raw_ostream.h" 46 #include "llvm/Transforms/Scalar.h" 47 #include "llvm/Transforms/Utils/Local.h" 48 #include <cassert> 49 #include <utility> 50 51 using namespace llvm; 52 53 #define DEBUG_TYPE "correlated-value-propagation" 54 55 STATISTIC(NumPhis, "Number of phis propagated"); 56 STATISTIC(NumPhiCommon, "Number of phis deleted via common incoming value"); 57 STATISTIC(NumSelects, "Number of selects propagated"); 58 STATISTIC(NumMemAccess, "Number of memory access targets propagated"); 59 STATISTIC(NumCmps, "Number of comparisons propagated"); 60 STATISTIC(NumReturns, "Number of return values propagated"); 61 STATISTIC(NumDeadCases, "Number of switch cases removed"); 62 STATISTIC(NumSDivSRemsNarrowed, 63 "Number of sdivs/srems whose width was decreased"); 64 STATISTIC(NumSDivs, "Number of sdiv converted to udiv"); 65 STATISTIC(NumUDivURemsNarrowed, 66 "Number of udivs/urems whose width was decreased"); 67 STATISTIC(NumAShrs, "Number of ashr converted to lshr"); 68 STATISTIC(NumSRems, "Number of srem converted to urem"); 69 STATISTIC(NumSExt, "Number of sext converted to zext"); 70 STATISTIC(NumAnd, "Number of ands removed"); 71 STATISTIC(NumNW, "Number of no-wrap deductions"); 72 STATISTIC(NumNSW, "Number of no-signed-wrap deductions"); 73 STATISTIC(NumNUW, "Number of no-unsigned-wrap deductions"); 74 STATISTIC(NumAddNW, "Number of no-wrap deductions for add"); 75 STATISTIC(NumAddNSW, "Number of no-signed-wrap deductions for add"); 76 STATISTIC(NumAddNUW, "Number of no-unsigned-wrap deductions for add"); 77 STATISTIC(NumSubNW, "Number of no-wrap deductions for sub"); 78 STATISTIC(NumSubNSW, "Number of no-signed-wrap deductions for sub"); 79 STATISTIC(NumSubNUW, "Number of no-unsigned-wrap deductions for sub"); 80 STATISTIC(NumMulNW, "Number of no-wrap deductions for mul"); 81 STATISTIC(NumMulNSW, "Number of no-signed-wrap deductions for mul"); 82 STATISTIC(NumMulNUW, "Number of no-unsigned-wrap deductions for mul"); 83 STATISTIC(NumShlNW, "Number of no-wrap deductions for shl"); 84 STATISTIC(NumShlNSW, "Number of no-signed-wrap deductions for shl"); 85 STATISTIC(NumShlNUW, "Number of no-unsigned-wrap deductions for shl"); 86 STATISTIC(NumAbs, "Number of llvm.abs intrinsics removed"); 87 STATISTIC(NumOverflows, "Number of overflow checks removed"); 88 STATISTIC(NumSaturating, 89 "Number of saturating arithmetics converted to normal arithmetics"); 90 STATISTIC(NumNonNull, "Number of function pointer arguments marked non-null"); 91 STATISTIC(NumMinMax, "Number of llvm.[us]{min,max} intrinsics removed"); 92 93 namespace { 94 95 class CorrelatedValuePropagation : public FunctionPass { 96 public: 97 static char ID; 98 99 CorrelatedValuePropagation(): FunctionPass(ID) { 100 initializeCorrelatedValuePropagationPass(*PassRegistry::getPassRegistry()); 101 } 102 103 bool runOnFunction(Function &F) override; 104 105 void getAnalysisUsage(AnalysisUsage &AU) const override { 106 AU.addRequired<DominatorTreeWrapperPass>(); 107 AU.addRequired<LazyValueInfoWrapperPass>(); 108 AU.addPreserved<GlobalsAAWrapperPass>(); 109 AU.addPreserved<DominatorTreeWrapperPass>(); 110 AU.addPreserved<LazyValueInfoWrapperPass>(); 111 } 112 }; 113 114 } // end anonymous namespace 115 116 char CorrelatedValuePropagation::ID = 0; 117 118 INITIALIZE_PASS_BEGIN(CorrelatedValuePropagation, "correlated-propagation", 119 "Value Propagation", false, false) 120 INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass) 121 INITIALIZE_PASS_DEPENDENCY(LazyValueInfoWrapperPass) 122 INITIALIZE_PASS_END(CorrelatedValuePropagation, "correlated-propagation", 123 "Value Propagation", false, false) 124 125 // Public interface to the Value Propagation pass 126 Pass *llvm::createCorrelatedValuePropagationPass() { 127 return new CorrelatedValuePropagation(); 128 } 129 130 static bool processSelect(SelectInst *S, LazyValueInfo *LVI) { 131 if (S->getType()->isVectorTy()) return false; 132 if (isa<Constant>(S->getCondition())) return false; 133 134 Constant *C = LVI->getConstant(S->getCondition(), S); 135 if (!C) return false; 136 137 ConstantInt *CI = dyn_cast<ConstantInt>(C); 138 if (!CI) return false; 139 140 Value *ReplaceWith = CI->isOne() ? S->getTrueValue() : S->getFalseValue(); 141 S->replaceAllUsesWith(ReplaceWith); 142 S->eraseFromParent(); 143 144 ++NumSelects; 145 146 return true; 147 } 148 149 /// Try to simplify a phi with constant incoming values that match the edge 150 /// values of a non-constant value on all other edges: 151 /// bb0: 152 /// %isnull = icmp eq i8* %x, null 153 /// br i1 %isnull, label %bb2, label %bb1 154 /// bb1: 155 /// br label %bb2 156 /// bb2: 157 /// %r = phi i8* [ %x, %bb1 ], [ null, %bb0 ] 158 /// --> 159 /// %r = %x 160 static bool simplifyCommonValuePhi(PHINode *P, LazyValueInfo *LVI, 161 DominatorTree *DT) { 162 // Collect incoming constants and initialize possible common value. 163 SmallVector<std::pair<Constant *, unsigned>, 4> IncomingConstants; 164 Value *CommonValue = nullptr; 165 for (unsigned i = 0, e = P->getNumIncomingValues(); i != e; ++i) { 166 Value *Incoming = P->getIncomingValue(i); 167 if (auto *IncomingConstant = dyn_cast<Constant>(Incoming)) { 168 IncomingConstants.push_back(std::make_pair(IncomingConstant, i)); 169 } else if (!CommonValue) { 170 // The potential common value is initialized to the first non-constant. 171 CommonValue = Incoming; 172 } else if (Incoming != CommonValue) { 173 // There can be only one non-constant common value. 174 return false; 175 } 176 } 177 178 if (!CommonValue || IncomingConstants.empty()) 179 return false; 180 181 // The common value must be valid in all incoming blocks. 182 BasicBlock *ToBB = P->getParent(); 183 if (auto *CommonInst = dyn_cast<Instruction>(CommonValue)) 184 if (!DT->dominates(CommonInst, ToBB)) 185 return false; 186 187 // We have a phi with exactly 1 variable incoming value and 1 or more constant 188 // incoming values. See if all constant incoming values can be mapped back to 189 // the same incoming variable value. 190 for (auto &IncomingConstant : IncomingConstants) { 191 Constant *C = IncomingConstant.first; 192 BasicBlock *IncomingBB = P->getIncomingBlock(IncomingConstant.second); 193 if (C != LVI->getConstantOnEdge(CommonValue, IncomingBB, ToBB, P)) 194 return false; 195 } 196 197 // LVI only guarantees that the value matches a certain constant if the value 198 // is not poison. Make sure we don't replace a well-defined value with poison. 199 // This is usually satisfied due to a prior branch on the value. 200 if (!isGuaranteedNotToBePoison(CommonValue, nullptr, P, DT)) 201 return false; 202 203 // All constant incoming values map to the same variable along the incoming 204 // edges of the phi. The phi is unnecessary. 205 P->replaceAllUsesWith(CommonValue); 206 P->eraseFromParent(); 207 ++NumPhiCommon; 208 return true; 209 } 210 211 static bool processPHI(PHINode *P, LazyValueInfo *LVI, DominatorTree *DT, 212 const SimplifyQuery &SQ) { 213 bool Changed = false; 214 215 BasicBlock *BB = P->getParent(); 216 for (unsigned i = 0, e = P->getNumIncomingValues(); i < e; ++i) { 217 Value *Incoming = P->getIncomingValue(i); 218 if (isa<Constant>(Incoming)) continue; 219 220 Value *V = LVI->getConstantOnEdge(Incoming, P->getIncomingBlock(i), BB, P); 221 222 // Look if the incoming value is a select with a scalar condition for which 223 // LVI can tells us the value. In that case replace the incoming value with 224 // the appropriate value of the select. This often allows us to remove the 225 // select later. 226 if (!V) { 227 SelectInst *SI = dyn_cast<SelectInst>(Incoming); 228 if (!SI) continue; 229 230 Value *Condition = SI->getCondition(); 231 if (!Condition->getType()->isVectorTy()) { 232 if (Constant *C = LVI->getConstantOnEdge( 233 Condition, P->getIncomingBlock(i), BB, P)) { 234 if (C->isOneValue()) { 235 V = SI->getTrueValue(); 236 } else if (C->isZeroValue()) { 237 V = SI->getFalseValue(); 238 } 239 // Once LVI learns to handle vector types, we could also add support 240 // for vector type constants that are not all zeroes or all ones. 241 } 242 } 243 244 // Look if the select has a constant but LVI tells us that the incoming 245 // value can never be that constant. In that case replace the incoming 246 // value with the other value of the select. This often allows us to 247 // remove the select later. 248 if (!V) { 249 Constant *C = dyn_cast<Constant>(SI->getFalseValue()); 250 if (!C) continue; 251 252 if (LVI->getPredicateOnEdge(ICmpInst::ICMP_EQ, SI, C, 253 P->getIncomingBlock(i), BB, P) != 254 LazyValueInfo::False) 255 continue; 256 V = SI->getTrueValue(); 257 } 258 259 LLVM_DEBUG(dbgs() << "CVP: Threading PHI over " << *SI << '\n'); 260 } 261 262 P->setIncomingValue(i, V); 263 Changed = true; 264 } 265 266 if (Value *V = SimplifyInstruction(P, SQ)) { 267 P->replaceAllUsesWith(V); 268 P->eraseFromParent(); 269 Changed = true; 270 } 271 272 if (!Changed) 273 Changed = simplifyCommonValuePhi(P, LVI, DT); 274 275 if (Changed) 276 ++NumPhis; 277 278 return Changed; 279 } 280 281 static bool processMemAccess(Instruction *I, LazyValueInfo *LVI) { 282 Value *Pointer = nullptr; 283 if (LoadInst *L = dyn_cast<LoadInst>(I)) 284 Pointer = L->getPointerOperand(); 285 else 286 Pointer = cast<StoreInst>(I)->getPointerOperand(); 287 288 if (isa<Constant>(Pointer)) return false; 289 290 Constant *C = LVI->getConstant(Pointer, I); 291 if (!C) return false; 292 293 ++NumMemAccess; 294 I->replaceUsesOfWith(Pointer, C); 295 return true; 296 } 297 298 /// See if LazyValueInfo's ability to exploit edge conditions or range 299 /// information is sufficient to prove this comparison. Even for local 300 /// conditions, this can sometimes prove conditions instcombine can't by 301 /// exploiting range information. 302 static bool processCmp(CmpInst *Cmp, LazyValueInfo *LVI) { 303 Value *Op0 = Cmp->getOperand(0); 304 auto *C = dyn_cast<Constant>(Cmp->getOperand(1)); 305 if (!C) 306 return false; 307 308 LazyValueInfo::Tristate Result = 309 LVI->getPredicateAt(Cmp->getPredicate(), Op0, C, Cmp, 310 /*UseBlockValue=*/true); 311 if (Result == LazyValueInfo::Unknown) 312 return false; 313 314 ++NumCmps; 315 Constant *TorF = ConstantInt::get(Type::getInt1Ty(Cmp->getContext()), Result); 316 Cmp->replaceAllUsesWith(TorF); 317 Cmp->eraseFromParent(); 318 return true; 319 } 320 321 /// Simplify a switch instruction by removing cases which can never fire. If the 322 /// uselessness of a case could be determined locally then constant propagation 323 /// would already have figured it out. Instead, walk the predecessors and 324 /// statically evaluate cases based on information available on that edge. Cases 325 /// that cannot fire no matter what the incoming edge can safely be removed. If 326 /// a case fires on every incoming edge then the entire switch can be removed 327 /// and replaced with a branch to the case destination. 328 static bool processSwitch(SwitchInst *I, LazyValueInfo *LVI, 329 DominatorTree *DT) { 330 DomTreeUpdater DTU(*DT, DomTreeUpdater::UpdateStrategy::Lazy); 331 Value *Cond = I->getCondition(); 332 BasicBlock *BB = I->getParent(); 333 334 // Analyse each switch case in turn. 335 bool Changed = false; 336 DenseMap<BasicBlock*, int> SuccessorsCount; 337 for (auto *Succ : successors(BB)) 338 SuccessorsCount[Succ]++; 339 340 { // Scope for SwitchInstProfUpdateWrapper. It must not live during 341 // ConstantFoldTerminator() as the underlying SwitchInst can be changed. 342 SwitchInstProfUpdateWrapper SI(*I); 343 344 APInt Low = 345 APInt::getSignedMaxValue(Cond->getType()->getScalarSizeInBits()); 346 APInt High = 347 APInt::getSignedMinValue(Cond->getType()->getScalarSizeInBits()); 348 349 SwitchInst::CaseIt CI = SI->case_begin(); 350 for (auto CE = SI->case_end(); CI != CE;) { 351 ConstantInt *Case = CI->getCaseValue(); 352 LazyValueInfo::Tristate State = 353 LVI->getPredicateAt(CmpInst::ICMP_EQ, Cond, Case, I, 354 /* UseBlockValue */ true); 355 356 if (State == LazyValueInfo::False) { 357 // This case never fires - remove it. 358 BasicBlock *Succ = CI->getCaseSuccessor(); 359 Succ->removePredecessor(BB); 360 CI = SI.removeCase(CI); 361 CE = SI->case_end(); 362 363 // The condition can be modified by removePredecessor's PHI simplification 364 // logic. 365 Cond = SI->getCondition(); 366 367 ++NumDeadCases; 368 Changed = true; 369 if (--SuccessorsCount[Succ] == 0) 370 DTU.applyUpdatesPermissive({{DominatorTree::Delete, BB, Succ}}); 371 continue; 372 } 373 if (State == LazyValueInfo::True) { 374 // This case always fires. Arrange for the switch to be turned into an 375 // unconditional branch by replacing the switch condition with the case 376 // value. 377 SI->setCondition(Case); 378 NumDeadCases += SI->getNumCases(); 379 Changed = true; 380 break; 381 } 382 383 // Get Lower/Upper bound from switch cases. 384 Low = APIntOps::smin(Case->getValue(), Low); 385 High = APIntOps::smax(Case->getValue(), High); 386 387 // Increment the case iterator since we didn't delete it. 388 ++CI; 389 } 390 391 // Try to simplify default case as unreachable 392 if (CI == SI->case_end() && SI->getNumCases() != 0 && 393 !isa<UnreachableInst>(SI->getDefaultDest()->getFirstNonPHIOrDbg())) { 394 const ConstantRange SIRange = 395 LVI->getConstantRange(SI->getCondition(), SI); 396 397 // If the numbered switch cases cover the entire range of the condition, 398 // then the default case is not reachable. 399 if (SIRange.getSignedMin() == Low && SIRange.getSignedMax() == High && 400 SI->getNumCases() == High - Low + 1) { 401 createUnreachableSwitchDefault(SI, &DTU); 402 Changed = true; 403 } 404 } 405 } 406 407 if (Changed) 408 // If the switch has been simplified to the point where it can be replaced 409 // by a branch then do so now. 410 ConstantFoldTerminator(BB, /*DeleteDeadConditions = */ false, 411 /*TLI = */ nullptr, &DTU); 412 return Changed; 413 } 414 415 // See if we can prove that the given binary op intrinsic will not overflow. 416 static bool willNotOverflow(BinaryOpIntrinsic *BO, LazyValueInfo *LVI) { 417 ConstantRange LRange = LVI->getConstantRange(BO->getLHS(), BO); 418 ConstantRange RRange = LVI->getConstantRange(BO->getRHS(), BO); 419 ConstantRange NWRegion = ConstantRange::makeGuaranteedNoWrapRegion( 420 BO->getBinaryOp(), RRange, BO->getNoWrapKind()); 421 return NWRegion.contains(LRange); 422 } 423 424 static void setDeducedOverflowingFlags(Value *V, Instruction::BinaryOps Opcode, 425 bool NewNSW, bool NewNUW) { 426 Statistic *OpcNW, *OpcNSW, *OpcNUW; 427 switch (Opcode) { 428 case Instruction::Add: 429 OpcNW = &NumAddNW; 430 OpcNSW = &NumAddNSW; 431 OpcNUW = &NumAddNUW; 432 break; 433 case Instruction::Sub: 434 OpcNW = &NumSubNW; 435 OpcNSW = &NumSubNSW; 436 OpcNUW = &NumSubNUW; 437 break; 438 case Instruction::Mul: 439 OpcNW = &NumMulNW; 440 OpcNSW = &NumMulNSW; 441 OpcNUW = &NumMulNUW; 442 break; 443 case Instruction::Shl: 444 OpcNW = &NumShlNW; 445 OpcNSW = &NumShlNSW; 446 OpcNUW = &NumShlNUW; 447 break; 448 default: 449 llvm_unreachable("Will not be called with other binops"); 450 } 451 452 auto *Inst = dyn_cast<Instruction>(V); 453 if (NewNSW) { 454 ++NumNW; 455 ++*OpcNW; 456 ++NumNSW; 457 ++*OpcNSW; 458 if (Inst) 459 Inst->setHasNoSignedWrap(); 460 } 461 if (NewNUW) { 462 ++NumNW; 463 ++*OpcNW; 464 ++NumNUW; 465 ++*OpcNUW; 466 if (Inst) 467 Inst->setHasNoUnsignedWrap(); 468 } 469 } 470 471 static bool processBinOp(BinaryOperator *BinOp, LazyValueInfo *LVI); 472 473 // See if @llvm.abs argument is alays positive/negative, and simplify. 474 // Notably, INT_MIN can belong to either range, regardless of the NSW, 475 // because it is negation-invariant. 476 static bool processAbsIntrinsic(IntrinsicInst *II, LazyValueInfo *LVI) { 477 Value *X = II->getArgOperand(0); 478 bool IsIntMinPoison = cast<ConstantInt>(II->getArgOperand(1))->isOne(); 479 480 Type *Ty = X->getType(); 481 Constant *IntMin = 482 ConstantInt::get(Ty, APInt::getSignedMinValue(Ty->getScalarSizeInBits())); 483 LazyValueInfo::Tristate Result; 484 485 // Is X in [0, IntMin]? NOTE: INT_MIN is fine! 486 Result = LVI->getPredicateAt(CmpInst::Predicate::ICMP_ULE, X, IntMin, II, 487 /*UseBlockValue=*/true); 488 if (Result == LazyValueInfo::True) { 489 ++NumAbs; 490 II->replaceAllUsesWith(X); 491 II->eraseFromParent(); 492 return true; 493 } 494 495 // Is X in [IntMin, 0]? NOTE: INT_MIN is fine! 496 Constant *Zero = ConstantInt::getNullValue(Ty); 497 Result = LVI->getPredicateAt(CmpInst::Predicate::ICMP_SLE, X, Zero, II, 498 /*UseBlockValue=*/true); 499 assert(Result != LazyValueInfo::False && "Should have been handled already."); 500 501 if (Result == LazyValueInfo::Unknown) { 502 // Argument's range crosses zero. 503 bool Changed = false; 504 if (!IsIntMinPoison) { 505 // Can we at least tell that the argument is never INT_MIN? 506 Result = LVI->getPredicateAt(CmpInst::Predicate::ICMP_NE, X, IntMin, II, 507 /*UseBlockValue=*/true); 508 if (Result == LazyValueInfo::True) { 509 ++NumNSW; 510 ++NumSubNSW; 511 II->setArgOperand(1, ConstantInt::getTrue(II->getContext())); 512 Changed = true; 513 } 514 } 515 return Changed; 516 } 517 518 IRBuilder<> B(II); 519 Value *NegX = B.CreateNeg(X, II->getName(), /*HasNUW=*/false, 520 /*HasNSW=*/IsIntMinPoison); 521 ++NumAbs; 522 II->replaceAllUsesWith(NegX); 523 II->eraseFromParent(); 524 525 // See if we can infer some no-wrap flags. 526 if (auto *BO = dyn_cast<BinaryOperator>(NegX)) 527 processBinOp(BO, LVI); 528 529 return true; 530 } 531 532 // See if this min/max intrinsic always picks it's one specific operand. 533 static bool processMinMaxIntrinsic(MinMaxIntrinsic *MM, LazyValueInfo *LVI) { 534 CmpInst::Predicate Pred = CmpInst::getNonStrictPredicate(MM->getPredicate()); 535 LazyValueInfo::Tristate Result = LVI->getPredicateAt( 536 Pred, MM->getLHS(), MM->getRHS(), MM, /*UseBlockValue=*/true); 537 if (Result == LazyValueInfo::Unknown) 538 return false; 539 540 ++NumMinMax; 541 MM->replaceAllUsesWith(MM->getOperand(!Result)); 542 MM->eraseFromParent(); 543 return true; 544 } 545 546 // Rewrite this with.overflow intrinsic as non-overflowing. 547 static bool processOverflowIntrinsic(WithOverflowInst *WO, LazyValueInfo *LVI) { 548 IRBuilder<> B(WO); 549 Instruction::BinaryOps Opcode = WO->getBinaryOp(); 550 bool NSW = WO->isSigned(); 551 bool NUW = !WO->isSigned(); 552 553 Value *NewOp = 554 B.CreateBinOp(Opcode, WO->getLHS(), WO->getRHS(), WO->getName()); 555 setDeducedOverflowingFlags(NewOp, Opcode, NSW, NUW); 556 557 StructType *ST = cast<StructType>(WO->getType()); 558 Constant *Struct = ConstantStruct::get(ST, 559 { UndefValue::get(ST->getElementType(0)), 560 ConstantInt::getFalse(ST->getElementType(1)) }); 561 Value *NewI = B.CreateInsertValue(Struct, NewOp, 0); 562 WO->replaceAllUsesWith(NewI); 563 WO->eraseFromParent(); 564 ++NumOverflows; 565 566 // See if we can infer the other no-wrap too. 567 if (auto *BO = dyn_cast<BinaryOperator>(NewOp)) 568 processBinOp(BO, LVI); 569 570 return true; 571 } 572 573 static bool processSaturatingInst(SaturatingInst *SI, LazyValueInfo *LVI) { 574 Instruction::BinaryOps Opcode = SI->getBinaryOp(); 575 bool NSW = SI->isSigned(); 576 bool NUW = !SI->isSigned(); 577 BinaryOperator *BinOp = BinaryOperator::Create( 578 Opcode, SI->getLHS(), SI->getRHS(), SI->getName(), SI); 579 BinOp->setDebugLoc(SI->getDebugLoc()); 580 setDeducedOverflowingFlags(BinOp, Opcode, NSW, NUW); 581 582 SI->replaceAllUsesWith(BinOp); 583 SI->eraseFromParent(); 584 ++NumSaturating; 585 586 // See if we can infer the other no-wrap too. 587 if (auto *BO = dyn_cast<BinaryOperator>(BinOp)) 588 processBinOp(BO, LVI); 589 590 return true; 591 } 592 593 /// Infer nonnull attributes for the arguments at the specified callsite. 594 static bool processCallSite(CallBase &CB, LazyValueInfo *LVI) { 595 596 if (CB.getIntrinsicID() == Intrinsic::abs) { 597 return processAbsIntrinsic(&cast<IntrinsicInst>(CB), LVI); 598 } 599 600 if (auto *MM = dyn_cast<MinMaxIntrinsic>(&CB)) { 601 return processMinMaxIntrinsic(MM, LVI); 602 } 603 604 if (auto *WO = dyn_cast<WithOverflowInst>(&CB)) { 605 if (WO->getLHS()->getType()->isIntegerTy() && willNotOverflow(WO, LVI)) { 606 return processOverflowIntrinsic(WO, LVI); 607 } 608 } 609 610 if (auto *SI = dyn_cast<SaturatingInst>(&CB)) { 611 if (SI->getType()->isIntegerTy() && willNotOverflow(SI, LVI)) { 612 return processSaturatingInst(SI, LVI); 613 } 614 } 615 616 bool Changed = false; 617 618 // Deopt bundle operands are intended to capture state with minimal 619 // perturbance of the code otherwise. If we can find a constant value for 620 // any such operand and remove a use of the original value, that's 621 // desireable since it may allow further optimization of that value (e.g. via 622 // single use rules in instcombine). Since deopt uses tend to, 623 // idiomatically, appear along rare conditional paths, it's reasonable likely 624 // we may have a conditional fact with which LVI can fold. 625 if (auto DeoptBundle = CB.getOperandBundle(LLVMContext::OB_deopt)) { 626 for (const Use &ConstU : DeoptBundle->Inputs) { 627 Use &U = const_cast<Use&>(ConstU); 628 Value *V = U.get(); 629 if (V->getType()->isVectorTy()) continue; 630 if (isa<Constant>(V)) continue; 631 632 Constant *C = LVI->getConstant(V, &CB); 633 if (!C) continue; 634 U.set(C); 635 Changed = true; 636 } 637 } 638 639 SmallVector<unsigned, 4> ArgNos; 640 unsigned ArgNo = 0; 641 642 for (Value *V : CB.args()) { 643 PointerType *Type = dyn_cast<PointerType>(V->getType()); 644 // Try to mark pointer typed parameters as non-null. We skip the 645 // relatively expensive analysis for constants which are obviously either 646 // null or non-null to start with. 647 if (Type && !CB.paramHasAttr(ArgNo, Attribute::NonNull) && 648 !isa<Constant>(V) && 649 LVI->getPredicateAt(ICmpInst::ICMP_EQ, V, 650 ConstantPointerNull::get(Type), &CB, 651 /*UseBlockValue=*/false) == LazyValueInfo::False) 652 ArgNos.push_back(ArgNo); 653 ArgNo++; 654 } 655 656 assert(ArgNo == CB.arg_size() && "sanity check"); 657 658 if (ArgNos.empty()) 659 return Changed; 660 661 NumNonNull += ArgNos.size(); 662 AttributeList AS = CB.getAttributes(); 663 LLVMContext &Ctx = CB.getContext(); 664 AS = AS.addParamAttribute(Ctx, ArgNos, 665 Attribute::get(Ctx, Attribute::NonNull)); 666 CB.setAttributes(AS); 667 668 return true; 669 } 670 671 static bool isNonNegative(Value *V, LazyValueInfo *LVI, Instruction *CxtI) { 672 Constant *Zero = ConstantInt::get(V->getType(), 0); 673 auto Result = LVI->getPredicateAt(ICmpInst::ICMP_SGE, V, Zero, CxtI, 674 /*UseBlockValue=*/true); 675 return Result == LazyValueInfo::True; 676 } 677 678 static bool isNonPositive(Value *V, LazyValueInfo *LVI, Instruction *CxtI) { 679 Constant *Zero = ConstantInt::get(V->getType(), 0); 680 auto Result = LVI->getPredicateAt(ICmpInst::ICMP_SLE, V, Zero, CxtI, 681 /*UseBlockValue=*/true); 682 return Result == LazyValueInfo::True; 683 } 684 685 enum class Domain { NonNegative, NonPositive, Unknown }; 686 687 Domain getDomain(Value *V, LazyValueInfo *LVI, Instruction *CxtI) { 688 if (isNonNegative(V, LVI, CxtI)) 689 return Domain::NonNegative; 690 if (isNonPositive(V, LVI, CxtI)) 691 return Domain::NonPositive; 692 return Domain::Unknown; 693 } 694 695 /// Try to shrink a sdiv/srem's width down to the smallest power of two that's 696 /// sufficient to contain its operands. 697 static bool narrowSDivOrSRem(BinaryOperator *Instr, LazyValueInfo *LVI) { 698 assert(Instr->getOpcode() == Instruction::SDiv || 699 Instr->getOpcode() == Instruction::SRem); 700 if (Instr->getType()->isVectorTy()) 701 return false; 702 703 // Find the smallest power of two bitwidth that's sufficient to hold Instr's 704 // operands. 705 unsigned OrigWidth = Instr->getType()->getIntegerBitWidth(); 706 707 // What is the smallest bit width that can accomodate the entire value ranges 708 // of both of the operands? 709 std::array<Optional<ConstantRange>, 2> CRs; 710 unsigned MinSignedBits = 0; 711 for (auto I : zip(Instr->operands(), CRs)) { 712 std::get<1>(I) = LVI->getConstantRange(std::get<0>(I), Instr); 713 MinSignedBits = std::max(std::get<1>(I)->getMinSignedBits(), MinSignedBits); 714 } 715 716 // sdiv/srem is UB if divisor is -1 and divident is INT_MIN, so unless we can 717 // prove that such a combination is impossible, we need to bump the bitwidth. 718 if (CRs[1]->contains(APInt::getAllOnesValue(OrigWidth)) && 719 CRs[0]->contains( 720 APInt::getSignedMinValue(MinSignedBits).sextOrSelf(OrigWidth))) 721 ++MinSignedBits; 722 723 // Don't shrink below 8 bits wide. 724 unsigned NewWidth = std::max<unsigned>(PowerOf2Ceil(MinSignedBits), 8); 725 726 // NewWidth might be greater than OrigWidth if OrigWidth is not a power of 727 // two. 728 if (NewWidth >= OrigWidth) 729 return false; 730 731 ++NumSDivSRemsNarrowed; 732 IRBuilder<> B{Instr}; 733 auto *TruncTy = Type::getIntNTy(Instr->getContext(), NewWidth); 734 auto *LHS = B.CreateTruncOrBitCast(Instr->getOperand(0), TruncTy, 735 Instr->getName() + ".lhs.trunc"); 736 auto *RHS = B.CreateTruncOrBitCast(Instr->getOperand(1), TruncTy, 737 Instr->getName() + ".rhs.trunc"); 738 auto *BO = B.CreateBinOp(Instr->getOpcode(), LHS, RHS, Instr->getName()); 739 auto *Sext = B.CreateSExt(BO, Instr->getType(), Instr->getName() + ".sext"); 740 if (auto *BinOp = dyn_cast<BinaryOperator>(BO)) 741 if (BinOp->getOpcode() == Instruction::SDiv) 742 BinOp->setIsExact(Instr->isExact()); 743 744 Instr->replaceAllUsesWith(Sext); 745 Instr->eraseFromParent(); 746 return true; 747 } 748 749 /// Try to shrink a udiv/urem's width down to the smallest power of two that's 750 /// sufficient to contain its operands. 751 static bool processUDivOrURem(BinaryOperator *Instr, LazyValueInfo *LVI) { 752 assert(Instr->getOpcode() == Instruction::UDiv || 753 Instr->getOpcode() == Instruction::URem); 754 if (Instr->getType()->isVectorTy()) 755 return false; 756 757 // Find the smallest power of two bitwidth that's sufficient to hold Instr's 758 // operands. 759 760 // What is the smallest bit width that can accomodate the entire value ranges 761 // of both of the operands? 762 unsigned MaxActiveBits = 0; 763 for (Value *Operand : Instr->operands()) { 764 ConstantRange CR = LVI->getConstantRange(Operand, Instr); 765 MaxActiveBits = std::max(CR.getActiveBits(), MaxActiveBits); 766 } 767 // Don't shrink below 8 bits wide. 768 unsigned NewWidth = std::max<unsigned>(PowerOf2Ceil(MaxActiveBits), 8); 769 770 // NewWidth might be greater than OrigWidth if OrigWidth is not a power of 771 // two. 772 if (NewWidth >= Instr->getType()->getIntegerBitWidth()) 773 return false; 774 775 ++NumUDivURemsNarrowed; 776 IRBuilder<> B{Instr}; 777 auto *TruncTy = Type::getIntNTy(Instr->getContext(), NewWidth); 778 auto *LHS = B.CreateTruncOrBitCast(Instr->getOperand(0), TruncTy, 779 Instr->getName() + ".lhs.trunc"); 780 auto *RHS = B.CreateTruncOrBitCast(Instr->getOperand(1), TruncTy, 781 Instr->getName() + ".rhs.trunc"); 782 auto *BO = B.CreateBinOp(Instr->getOpcode(), LHS, RHS, Instr->getName()); 783 auto *Zext = B.CreateZExt(BO, Instr->getType(), Instr->getName() + ".zext"); 784 if (auto *BinOp = dyn_cast<BinaryOperator>(BO)) 785 if (BinOp->getOpcode() == Instruction::UDiv) 786 BinOp->setIsExact(Instr->isExact()); 787 788 Instr->replaceAllUsesWith(Zext); 789 Instr->eraseFromParent(); 790 return true; 791 } 792 793 static bool processSRem(BinaryOperator *SDI, LazyValueInfo *LVI) { 794 assert(SDI->getOpcode() == Instruction::SRem); 795 if (SDI->getType()->isVectorTy()) 796 return false; 797 798 struct Operand { 799 Value *V; 800 Domain D; 801 }; 802 std::array<Operand, 2> Ops; 803 804 for (const auto I : zip(Ops, SDI->operands())) { 805 Operand &Op = std::get<0>(I); 806 Op.V = std::get<1>(I); 807 Op.D = getDomain(Op.V, LVI, SDI); 808 if (Op.D == Domain::Unknown) 809 return false; 810 } 811 812 // We know domains of both of the operands! 813 ++NumSRems; 814 815 // We need operands to be non-negative, so negate each one that isn't. 816 for (Operand &Op : Ops) { 817 if (Op.D == Domain::NonNegative) 818 continue; 819 auto *BO = 820 BinaryOperator::CreateNeg(Op.V, Op.V->getName() + ".nonneg", SDI); 821 BO->setDebugLoc(SDI->getDebugLoc()); 822 Op.V = BO; 823 } 824 825 auto *URem = 826 BinaryOperator::CreateURem(Ops[0].V, Ops[1].V, SDI->getName(), SDI); 827 URem->setDebugLoc(SDI->getDebugLoc()); 828 829 Value *Res = URem; 830 831 // If the divident was non-positive, we need to negate the result. 832 if (Ops[0].D == Domain::NonPositive) 833 Res = BinaryOperator::CreateNeg(Res, Res->getName() + ".neg", SDI); 834 835 SDI->replaceAllUsesWith(Res); 836 SDI->eraseFromParent(); 837 838 // Try to simplify our new urem. 839 processUDivOrURem(URem, LVI); 840 841 return true; 842 } 843 844 /// See if LazyValueInfo's ability to exploit edge conditions or range 845 /// information is sufficient to prove the signs of both operands of this SDiv. 846 /// If this is the case, replace the SDiv with a UDiv. Even for local 847 /// conditions, this can sometimes prove conditions instcombine can't by 848 /// exploiting range information. 849 static bool processSDiv(BinaryOperator *SDI, LazyValueInfo *LVI) { 850 assert(SDI->getOpcode() == Instruction::SDiv); 851 if (SDI->getType()->isVectorTy()) 852 return false; 853 854 struct Operand { 855 Value *V; 856 Domain D; 857 }; 858 std::array<Operand, 2> Ops; 859 860 for (const auto I : zip(Ops, SDI->operands())) { 861 Operand &Op = std::get<0>(I); 862 Op.V = std::get<1>(I); 863 Op.D = getDomain(Op.V, LVI, SDI); 864 if (Op.D == Domain::Unknown) 865 return false; 866 } 867 868 // We know domains of both of the operands! 869 ++NumSDivs; 870 871 // We need operands to be non-negative, so negate each one that isn't. 872 for (Operand &Op : Ops) { 873 if (Op.D == Domain::NonNegative) 874 continue; 875 auto *BO = 876 BinaryOperator::CreateNeg(Op.V, Op.V->getName() + ".nonneg", SDI); 877 BO->setDebugLoc(SDI->getDebugLoc()); 878 Op.V = BO; 879 } 880 881 auto *UDiv = 882 BinaryOperator::CreateUDiv(Ops[0].V, Ops[1].V, SDI->getName(), SDI); 883 UDiv->setDebugLoc(SDI->getDebugLoc()); 884 UDiv->setIsExact(SDI->isExact()); 885 886 Value *Res = UDiv; 887 888 // If the operands had two different domains, we need to negate the result. 889 if (Ops[0].D != Ops[1].D) 890 Res = BinaryOperator::CreateNeg(Res, Res->getName() + ".neg", SDI); 891 892 SDI->replaceAllUsesWith(Res); 893 SDI->eraseFromParent(); 894 895 // Try to simplify our new udiv. 896 processUDivOrURem(UDiv, LVI); 897 898 return true; 899 } 900 901 static bool processSDivOrSRem(BinaryOperator *Instr, LazyValueInfo *LVI) { 902 assert(Instr->getOpcode() == Instruction::SDiv || 903 Instr->getOpcode() == Instruction::SRem); 904 if (Instr->getType()->isVectorTy()) 905 return false; 906 907 if (Instr->getOpcode() == Instruction::SDiv) 908 if (processSDiv(Instr, LVI)) 909 return true; 910 911 if (Instr->getOpcode() == Instruction::SRem) 912 if (processSRem(Instr, LVI)) 913 return true; 914 915 return narrowSDivOrSRem(Instr, LVI); 916 } 917 918 static bool processAShr(BinaryOperator *SDI, LazyValueInfo *LVI) { 919 if (SDI->getType()->isVectorTy()) 920 return false; 921 922 if (!isNonNegative(SDI->getOperand(0), LVI, SDI)) 923 return false; 924 925 ++NumAShrs; 926 auto *BO = BinaryOperator::CreateLShr(SDI->getOperand(0), SDI->getOperand(1), 927 SDI->getName(), SDI); 928 BO->setDebugLoc(SDI->getDebugLoc()); 929 BO->setIsExact(SDI->isExact()); 930 SDI->replaceAllUsesWith(BO); 931 SDI->eraseFromParent(); 932 933 return true; 934 } 935 936 static bool processSExt(SExtInst *SDI, LazyValueInfo *LVI) { 937 if (SDI->getType()->isVectorTy()) 938 return false; 939 940 Value *Base = SDI->getOperand(0); 941 942 if (!isNonNegative(Base, LVI, SDI)) 943 return false; 944 945 ++NumSExt; 946 auto *ZExt = 947 CastInst::CreateZExtOrBitCast(Base, SDI->getType(), SDI->getName(), SDI); 948 ZExt->setDebugLoc(SDI->getDebugLoc()); 949 SDI->replaceAllUsesWith(ZExt); 950 SDI->eraseFromParent(); 951 952 return true; 953 } 954 955 static bool processBinOp(BinaryOperator *BinOp, LazyValueInfo *LVI) { 956 using OBO = OverflowingBinaryOperator; 957 958 if (BinOp->getType()->isVectorTy()) 959 return false; 960 961 bool NSW = BinOp->hasNoSignedWrap(); 962 bool NUW = BinOp->hasNoUnsignedWrap(); 963 if (NSW && NUW) 964 return false; 965 966 Instruction::BinaryOps Opcode = BinOp->getOpcode(); 967 Value *LHS = BinOp->getOperand(0); 968 Value *RHS = BinOp->getOperand(1); 969 970 ConstantRange LRange = LVI->getConstantRange(LHS, BinOp); 971 ConstantRange RRange = LVI->getConstantRange(RHS, BinOp); 972 973 bool Changed = false; 974 bool NewNUW = false, NewNSW = false; 975 if (!NUW) { 976 ConstantRange NUWRange = ConstantRange::makeGuaranteedNoWrapRegion( 977 Opcode, RRange, OBO::NoUnsignedWrap); 978 NewNUW = NUWRange.contains(LRange); 979 Changed |= NewNUW; 980 } 981 if (!NSW) { 982 ConstantRange NSWRange = ConstantRange::makeGuaranteedNoWrapRegion( 983 Opcode, RRange, OBO::NoSignedWrap); 984 NewNSW = NSWRange.contains(LRange); 985 Changed |= NewNSW; 986 } 987 988 setDeducedOverflowingFlags(BinOp, Opcode, NewNSW, NewNUW); 989 990 return Changed; 991 } 992 993 static bool processAnd(BinaryOperator *BinOp, LazyValueInfo *LVI) { 994 if (BinOp->getType()->isVectorTy()) 995 return false; 996 997 // Pattern match (and lhs, C) where C includes a superset of bits which might 998 // be set in lhs. This is a common truncation idiom created by instcombine. 999 Value *LHS = BinOp->getOperand(0); 1000 ConstantInt *RHS = dyn_cast<ConstantInt>(BinOp->getOperand(1)); 1001 if (!RHS || !RHS->getValue().isMask()) 1002 return false; 1003 1004 // We can only replace the AND with LHS based on range info if the range does 1005 // not include undef. 1006 ConstantRange LRange = 1007 LVI->getConstantRange(LHS, BinOp, /*UndefAllowed=*/false); 1008 if (!LRange.getUnsignedMax().ule(RHS->getValue())) 1009 return false; 1010 1011 BinOp->replaceAllUsesWith(LHS); 1012 BinOp->eraseFromParent(); 1013 NumAnd++; 1014 return true; 1015 } 1016 1017 1018 static Constant *getConstantAt(Value *V, Instruction *At, LazyValueInfo *LVI) { 1019 if (Constant *C = LVI->getConstant(V, At)) 1020 return C; 1021 1022 // TODO: The following really should be sunk inside LVI's core algorithm, or 1023 // at least the outer shims around such. 1024 auto *C = dyn_cast<CmpInst>(V); 1025 if (!C) return nullptr; 1026 1027 Value *Op0 = C->getOperand(0); 1028 Constant *Op1 = dyn_cast<Constant>(C->getOperand(1)); 1029 if (!Op1) return nullptr; 1030 1031 LazyValueInfo::Tristate Result = LVI->getPredicateAt( 1032 C->getPredicate(), Op0, Op1, At, /*UseBlockValue=*/false); 1033 if (Result == LazyValueInfo::Unknown) 1034 return nullptr; 1035 1036 return (Result == LazyValueInfo::True) ? 1037 ConstantInt::getTrue(C->getContext()) : 1038 ConstantInt::getFalse(C->getContext()); 1039 } 1040 1041 static bool runImpl(Function &F, LazyValueInfo *LVI, DominatorTree *DT, 1042 const SimplifyQuery &SQ) { 1043 bool FnChanged = false; 1044 // Visiting in a pre-order depth-first traversal causes us to simplify early 1045 // blocks before querying later blocks (which require us to analyze early 1046 // blocks). Eagerly simplifying shallow blocks means there is strictly less 1047 // work to do for deep blocks. This also means we don't visit unreachable 1048 // blocks. 1049 for (BasicBlock *BB : depth_first(&F.getEntryBlock())) { 1050 bool BBChanged = false; 1051 for (BasicBlock::iterator BI = BB->begin(), BE = BB->end(); BI != BE;) { 1052 Instruction *II = &*BI++; 1053 switch (II->getOpcode()) { 1054 case Instruction::Select: 1055 BBChanged |= processSelect(cast<SelectInst>(II), LVI); 1056 break; 1057 case Instruction::PHI: 1058 BBChanged |= processPHI(cast<PHINode>(II), LVI, DT, SQ); 1059 break; 1060 case Instruction::ICmp: 1061 case Instruction::FCmp: 1062 BBChanged |= processCmp(cast<CmpInst>(II), LVI); 1063 break; 1064 case Instruction::Load: 1065 case Instruction::Store: 1066 BBChanged |= processMemAccess(II, LVI); 1067 break; 1068 case Instruction::Call: 1069 case Instruction::Invoke: 1070 BBChanged |= processCallSite(cast<CallBase>(*II), LVI); 1071 break; 1072 case Instruction::SRem: 1073 case Instruction::SDiv: 1074 BBChanged |= processSDivOrSRem(cast<BinaryOperator>(II), LVI); 1075 break; 1076 case Instruction::UDiv: 1077 case Instruction::URem: 1078 BBChanged |= processUDivOrURem(cast<BinaryOperator>(II), LVI); 1079 break; 1080 case Instruction::AShr: 1081 BBChanged |= processAShr(cast<BinaryOperator>(II), LVI); 1082 break; 1083 case Instruction::SExt: 1084 BBChanged |= processSExt(cast<SExtInst>(II), LVI); 1085 break; 1086 case Instruction::Add: 1087 case Instruction::Sub: 1088 case Instruction::Mul: 1089 case Instruction::Shl: 1090 BBChanged |= processBinOp(cast<BinaryOperator>(II), LVI); 1091 break; 1092 case Instruction::And: 1093 BBChanged |= processAnd(cast<BinaryOperator>(II), LVI); 1094 break; 1095 } 1096 } 1097 1098 Instruction *Term = BB->getTerminator(); 1099 switch (Term->getOpcode()) { 1100 case Instruction::Switch: 1101 BBChanged |= processSwitch(cast<SwitchInst>(Term), LVI, DT); 1102 break; 1103 case Instruction::Ret: { 1104 auto *RI = cast<ReturnInst>(Term); 1105 // Try to determine the return value if we can. This is mainly here to 1106 // simplify the writing of unit tests, but also helps to enable IPO by 1107 // constant folding the return values of callees. 1108 auto *RetVal = RI->getReturnValue(); 1109 if (!RetVal) break; // handle "ret void" 1110 if (isa<Constant>(RetVal)) break; // nothing to do 1111 if (auto *C = getConstantAt(RetVal, RI, LVI)) { 1112 ++NumReturns; 1113 RI->replaceUsesOfWith(RetVal, C); 1114 BBChanged = true; 1115 } 1116 } 1117 } 1118 1119 FnChanged |= BBChanged; 1120 } 1121 1122 return FnChanged; 1123 } 1124 1125 bool CorrelatedValuePropagation::runOnFunction(Function &F) { 1126 if (skipFunction(F)) 1127 return false; 1128 1129 LazyValueInfo *LVI = &getAnalysis<LazyValueInfoWrapperPass>().getLVI(); 1130 DominatorTree *DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree(); 1131 1132 return runImpl(F, LVI, DT, getBestSimplifyQuery(*this, F)); 1133 } 1134 1135 PreservedAnalyses 1136 CorrelatedValuePropagationPass::run(Function &F, FunctionAnalysisManager &AM) { 1137 LazyValueInfo *LVI = &AM.getResult<LazyValueAnalysis>(F); 1138 DominatorTree *DT = &AM.getResult<DominatorTreeAnalysis>(F); 1139 1140 bool Changed = runImpl(F, LVI, DT, getBestSimplifyQuery(AM, F)); 1141 1142 PreservedAnalyses PA; 1143 if (!Changed) { 1144 PA = PreservedAnalyses::all(); 1145 } else { 1146 PA.preserve<DominatorTreeAnalysis>(); 1147 PA.preserve<LazyValueAnalysis>(); 1148 } 1149 1150 // Keeping LVI alive is expensive, both because it uses a lot of memory, and 1151 // because invalidating values in LVI is expensive. While CVP does preserve 1152 // LVI, we know that passes after JumpThreading+CVP will not need the result 1153 // of this analysis, so we forcefully discard it early. 1154 PA.abandon<LazyValueAnalysis>(); 1155 return PA; 1156 } 1157