1 //===-- LoopUtils.cpp - Loop Utility functions -------------------------===// 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 common loop utility functions. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "llvm/Transforms/Utils/LoopUtils.h" 15 #include "llvm/ADT/ScopeExit.h" 16 #include "llvm/Analysis/AliasAnalysis.h" 17 #include "llvm/Analysis/BasicAliasAnalysis.h" 18 #include "llvm/Analysis/GlobalsModRef.h" 19 #include "llvm/Analysis/LoopInfo.h" 20 #include "llvm/Analysis/LoopPass.h" 21 #include "llvm/Analysis/ScalarEvolution.h" 22 #include "llvm/Analysis/ScalarEvolutionAliasAnalysis.h" 23 #include "llvm/Analysis/ScalarEvolutionExpander.h" 24 #include "llvm/Analysis/ScalarEvolutionExpressions.h" 25 #include "llvm/Analysis/TargetTransformInfo.h" 26 #include "llvm/IR/Dominators.h" 27 #include "llvm/IR/Instructions.h" 28 #include "llvm/IR/Module.h" 29 #include "llvm/IR/PatternMatch.h" 30 #include "llvm/IR/ValueHandle.h" 31 #include "llvm/Pass.h" 32 #include "llvm/Support/Debug.h" 33 #include "llvm/Transforms/Utils/BasicBlockUtils.h" 34 35 using namespace llvm; 36 using namespace llvm::PatternMatch; 37 38 #define DEBUG_TYPE "loop-utils" 39 40 bool RecurrenceDescriptor::areAllUsesIn(Instruction *I, 41 SmallPtrSetImpl<Instruction *> &Set) { 42 for (User::op_iterator Use = I->op_begin(), E = I->op_end(); Use != E; ++Use) 43 if (!Set.count(dyn_cast<Instruction>(*Use))) 44 return false; 45 return true; 46 } 47 48 bool RecurrenceDescriptor::isIntegerRecurrenceKind(RecurrenceKind Kind) { 49 switch (Kind) { 50 default: 51 break; 52 case RK_IntegerAdd: 53 case RK_IntegerMult: 54 case RK_IntegerOr: 55 case RK_IntegerAnd: 56 case RK_IntegerXor: 57 case RK_IntegerMinMax: 58 return true; 59 } 60 return false; 61 } 62 63 bool RecurrenceDescriptor::isFloatingPointRecurrenceKind(RecurrenceKind Kind) { 64 return (Kind != RK_NoRecurrence) && !isIntegerRecurrenceKind(Kind); 65 } 66 67 bool RecurrenceDescriptor::isArithmeticRecurrenceKind(RecurrenceKind Kind) { 68 switch (Kind) { 69 default: 70 break; 71 case RK_IntegerAdd: 72 case RK_IntegerMult: 73 case RK_FloatAdd: 74 case RK_FloatMult: 75 return true; 76 } 77 return false; 78 } 79 80 Instruction * 81 RecurrenceDescriptor::lookThroughAnd(PHINode *Phi, Type *&RT, 82 SmallPtrSetImpl<Instruction *> &Visited, 83 SmallPtrSetImpl<Instruction *> &CI) { 84 if (!Phi->hasOneUse()) 85 return Phi; 86 87 const APInt *M = nullptr; 88 Instruction *I, *J = cast<Instruction>(Phi->use_begin()->getUser()); 89 90 // Matches either I & 2^x-1 or 2^x-1 & I. If we find a match, we update RT 91 // with a new integer type of the corresponding bit width. 92 if (match(J, m_c_And(m_Instruction(I), m_APInt(M)))) { 93 int32_t Bits = (*M + 1).exactLogBase2(); 94 if (Bits > 0) { 95 RT = IntegerType::get(Phi->getContext(), Bits); 96 Visited.insert(Phi); 97 CI.insert(J); 98 return J; 99 } 100 } 101 return Phi; 102 } 103 104 bool RecurrenceDescriptor::getSourceExtensionKind( 105 Instruction *Start, Instruction *Exit, Type *RT, bool &IsSigned, 106 SmallPtrSetImpl<Instruction *> &Visited, 107 SmallPtrSetImpl<Instruction *> &CI) { 108 109 SmallVector<Instruction *, 8> Worklist; 110 bool FoundOneOperand = false; 111 unsigned DstSize = RT->getPrimitiveSizeInBits(); 112 Worklist.push_back(Exit); 113 114 // Traverse the instructions in the reduction expression, beginning with the 115 // exit value. 116 while (!Worklist.empty()) { 117 Instruction *I = Worklist.pop_back_val(); 118 for (Use &U : I->operands()) { 119 120 // Terminate the traversal if the operand is not an instruction, or we 121 // reach the starting value. 122 Instruction *J = dyn_cast<Instruction>(U.get()); 123 if (!J || J == Start) 124 continue; 125 126 // Otherwise, investigate the operation if it is also in the expression. 127 if (Visited.count(J)) { 128 Worklist.push_back(J); 129 continue; 130 } 131 132 // If the operand is not in Visited, it is not a reduction operation, but 133 // it does feed into one. Make sure it is either a single-use sign- or 134 // zero-extend instruction. 135 CastInst *Cast = dyn_cast<CastInst>(J); 136 bool IsSExtInst = isa<SExtInst>(J); 137 if (!Cast || !Cast->hasOneUse() || !(isa<ZExtInst>(J) || IsSExtInst)) 138 return false; 139 140 // Ensure the source type of the extend is no larger than the reduction 141 // type. It is not necessary for the types to be identical. 142 unsigned SrcSize = Cast->getSrcTy()->getPrimitiveSizeInBits(); 143 if (SrcSize > DstSize) 144 return false; 145 146 // Furthermore, ensure that all such extends are of the same kind. 147 if (FoundOneOperand) { 148 if (IsSigned != IsSExtInst) 149 return false; 150 } else { 151 FoundOneOperand = true; 152 IsSigned = IsSExtInst; 153 } 154 155 // Lastly, if the source type of the extend matches the reduction type, 156 // add the extend to CI so that we can avoid accounting for it in the 157 // cost model. 158 if (SrcSize == DstSize) 159 CI.insert(Cast); 160 } 161 } 162 return true; 163 } 164 165 bool RecurrenceDescriptor::AddReductionVar(PHINode *Phi, RecurrenceKind Kind, 166 Loop *TheLoop, bool HasFunNoNaNAttr, 167 RecurrenceDescriptor &RedDes) { 168 if (Phi->getNumIncomingValues() != 2) 169 return false; 170 171 // Reduction variables are only found in the loop header block. 172 if (Phi->getParent() != TheLoop->getHeader()) 173 return false; 174 175 // Obtain the reduction start value from the value that comes from the loop 176 // preheader. 177 Value *RdxStart = Phi->getIncomingValueForBlock(TheLoop->getLoopPreheader()); 178 179 // ExitInstruction is the single value which is used outside the loop. 180 // We only allow for a single reduction value to be used outside the loop. 181 // This includes users of the reduction, variables (which form a cycle 182 // which ends in the phi node). 183 Instruction *ExitInstruction = nullptr; 184 // Indicates that we found a reduction operation in our scan. 185 bool FoundReduxOp = false; 186 187 // We start with the PHI node and scan for all of the users of this 188 // instruction. All users must be instructions that can be used as reduction 189 // variables (such as ADD). We must have a single out-of-block user. The cycle 190 // must include the original PHI. 191 bool FoundStartPHI = false; 192 193 // To recognize min/max patterns formed by a icmp select sequence, we store 194 // the number of instruction we saw from the recognized min/max pattern, 195 // to make sure we only see exactly the two instructions. 196 unsigned NumCmpSelectPatternInst = 0; 197 InstDesc ReduxDesc(false, nullptr); 198 199 // Data used for determining if the recurrence has been type-promoted. 200 Type *RecurrenceType = Phi->getType(); 201 SmallPtrSet<Instruction *, 4> CastInsts; 202 Instruction *Start = Phi; 203 bool IsSigned = false; 204 205 SmallPtrSet<Instruction *, 8> VisitedInsts; 206 SmallVector<Instruction *, 8> Worklist; 207 208 // Return early if the recurrence kind does not match the type of Phi. If the 209 // recurrence kind is arithmetic, we attempt to look through AND operations 210 // resulting from the type promotion performed by InstCombine. Vector 211 // operations are not limited to the legal integer widths, so we may be able 212 // to evaluate the reduction in the narrower width. 213 if (RecurrenceType->isFloatingPointTy()) { 214 if (!isFloatingPointRecurrenceKind(Kind)) 215 return false; 216 } else { 217 if (!isIntegerRecurrenceKind(Kind)) 218 return false; 219 if (isArithmeticRecurrenceKind(Kind)) 220 Start = lookThroughAnd(Phi, RecurrenceType, VisitedInsts, CastInsts); 221 } 222 223 Worklist.push_back(Start); 224 VisitedInsts.insert(Start); 225 226 // A value in the reduction can be used: 227 // - By the reduction: 228 // - Reduction operation: 229 // - One use of reduction value (safe). 230 // - Multiple use of reduction value (not safe). 231 // - PHI: 232 // - All uses of the PHI must be the reduction (safe). 233 // - Otherwise, not safe. 234 // - By instructions outside of the loop (safe). 235 // * One value may have several outside users, but all outside 236 // uses must be of the same value. 237 // - By an instruction that is not part of the reduction (not safe). 238 // This is either: 239 // * An instruction type other than PHI or the reduction operation. 240 // * A PHI in the header other than the initial PHI. 241 while (!Worklist.empty()) { 242 Instruction *Cur = Worklist.back(); 243 Worklist.pop_back(); 244 245 // No Users. 246 // If the instruction has no users then this is a broken chain and can't be 247 // a reduction variable. 248 if (Cur->use_empty()) 249 return false; 250 251 bool IsAPhi = isa<PHINode>(Cur); 252 253 // A header PHI use other than the original PHI. 254 if (Cur != Phi && IsAPhi && Cur->getParent() == Phi->getParent()) 255 return false; 256 257 // Reductions of instructions such as Div, and Sub is only possible if the 258 // LHS is the reduction variable. 259 if (!Cur->isCommutative() && !IsAPhi && !isa<SelectInst>(Cur) && 260 !isa<ICmpInst>(Cur) && !isa<FCmpInst>(Cur) && 261 !VisitedInsts.count(dyn_cast<Instruction>(Cur->getOperand(0)))) 262 return false; 263 264 // Any reduction instruction must be of one of the allowed kinds. We ignore 265 // the starting value (the Phi or an AND instruction if the Phi has been 266 // type-promoted). 267 if (Cur != Start) { 268 ReduxDesc = isRecurrenceInstr(Cur, Kind, ReduxDesc, HasFunNoNaNAttr); 269 if (!ReduxDesc.isRecurrence()) 270 return false; 271 } 272 273 // A reduction operation must only have one use of the reduction value. 274 if (!IsAPhi && Kind != RK_IntegerMinMax && Kind != RK_FloatMinMax && 275 hasMultipleUsesOf(Cur, VisitedInsts)) 276 return false; 277 278 // All inputs to a PHI node must be a reduction value. 279 if (IsAPhi && Cur != Phi && !areAllUsesIn(Cur, VisitedInsts)) 280 return false; 281 282 if (Kind == RK_IntegerMinMax && 283 (isa<ICmpInst>(Cur) || isa<SelectInst>(Cur))) 284 ++NumCmpSelectPatternInst; 285 if (Kind == RK_FloatMinMax && (isa<FCmpInst>(Cur) || isa<SelectInst>(Cur))) 286 ++NumCmpSelectPatternInst; 287 288 // Check whether we found a reduction operator. 289 FoundReduxOp |= !IsAPhi && Cur != Start; 290 291 // Process users of current instruction. Push non-PHI nodes after PHI nodes 292 // onto the stack. This way we are going to have seen all inputs to PHI 293 // nodes once we get to them. 294 SmallVector<Instruction *, 8> NonPHIs; 295 SmallVector<Instruction *, 8> PHIs; 296 for (User *U : Cur->users()) { 297 Instruction *UI = cast<Instruction>(U); 298 299 // Check if we found the exit user. 300 BasicBlock *Parent = UI->getParent(); 301 if (!TheLoop->contains(Parent)) { 302 // If we already know this instruction is used externally, move on to 303 // the next user. 304 if (ExitInstruction == Cur) 305 continue; 306 307 // Exit if you find multiple values used outside or if the header phi 308 // node is being used. In this case the user uses the value of the 309 // previous iteration, in which case we would loose "VF-1" iterations of 310 // the reduction operation if we vectorize. 311 if (ExitInstruction != nullptr || Cur == Phi) 312 return false; 313 314 // The instruction used by an outside user must be the last instruction 315 // before we feed back to the reduction phi. Otherwise, we loose VF-1 316 // operations on the value. 317 if (!is_contained(Phi->operands(), Cur)) 318 return false; 319 320 ExitInstruction = Cur; 321 continue; 322 } 323 324 // Process instructions only once (termination). Each reduction cycle 325 // value must only be used once, except by phi nodes and min/max 326 // reductions which are represented as a cmp followed by a select. 327 InstDesc IgnoredVal(false, nullptr); 328 if (VisitedInsts.insert(UI).second) { 329 if (isa<PHINode>(UI)) 330 PHIs.push_back(UI); 331 else 332 NonPHIs.push_back(UI); 333 } else if (!isa<PHINode>(UI) && 334 ((!isa<FCmpInst>(UI) && !isa<ICmpInst>(UI) && 335 !isa<SelectInst>(UI)) || 336 !isMinMaxSelectCmpPattern(UI, IgnoredVal).isRecurrence())) 337 return false; 338 339 // Remember that we completed the cycle. 340 if (UI == Phi) 341 FoundStartPHI = true; 342 } 343 Worklist.append(PHIs.begin(), PHIs.end()); 344 Worklist.append(NonPHIs.begin(), NonPHIs.end()); 345 } 346 347 // This means we have seen one but not the other instruction of the 348 // pattern or more than just a select and cmp. 349 if ((Kind == RK_IntegerMinMax || Kind == RK_FloatMinMax) && 350 NumCmpSelectPatternInst != 2) 351 return false; 352 353 if (!FoundStartPHI || !FoundReduxOp || !ExitInstruction) 354 return false; 355 356 // If we think Phi may have been type-promoted, we also need to ensure that 357 // all source operands of the reduction are either SExtInsts or ZEstInsts. If 358 // so, we will be able to evaluate the reduction in the narrower bit width. 359 if (Start != Phi) 360 if (!getSourceExtensionKind(Start, ExitInstruction, RecurrenceType, 361 IsSigned, VisitedInsts, CastInsts)) 362 return false; 363 364 // We found a reduction var if we have reached the original phi node and we 365 // only have a single instruction with out-of-loop users. 366 367 // The ExitInstruction(Instruction which is allowed to have out-of-loop users) 368 // is saved as part of the RecurrenceDescriptor. 369 370 // Save the description of this reduction variable. 371 RecurrenceDescriptor RD( 372 RdxStart, ExitInstruction, Kind, ReduxDesc.getMinMaxKind(), 373 ReduxDesc.getUnsafeAlgebraInst(), RecurrenceType, IsSigned, CastInsts); 374 RedDes = RD; 375 376 return true; 377 } 378 379 /// Returns true if the instruction is a Select(ICmp(X, Y), X, Y) instruction 380 /// pattern corresponding to a min(X, Y) or max(X, Y). 381 RecurrenceDescriptor::InstDesc 382 RecurrenceDescriptor::isMinMaxSelectCmpPattern(Instruction *I, InstDesc &Prev) { 383 384 assert((isa<ICmpInst>(I) || isa<FCmpInst>(I) || isa<SelectInst>(I)) && 385 "Expect a select instruction"); 386 Instruction *Cmp = nullptr; 387 SelectInst *Select = nullptr; 388 389 // We must handle the select(cmp()) as a single instruction. Advance to the 390 // select. 391 if ((Cmp = dyn_cast<ICmpInst>(I)) || (Cmp = dyn_cast<FCmpInst>(I))) { 392 if (!Cmp->hasOneUse() || !(Select = dyn_cast<SelectInst>(*I->user_begin()))) 393 return InstDesc(false, I); 394 return InstDesc(Select, Prev.getMinMaxKind()); 395 } 396 397 // Only handle single use cases for now. 398 if (!(Select = dyn_cast<SelectInst>(I))) 399 return InstDesc(false, I); 400 if (!(Cmp = dyn_cast<ICmpInst>(I->getOperand(0))) && 401 !(Cmp = dyn_cast<FCmpInst>(I->getOperand(0)))) 402 return InstDesc(false, I); 403 if (!Cmp->hasOneUse()) 404 return InstDesc(false, I); 405 406 Value *CmpLeft; 407 Value *CmpRight; 408 409 // Look for a min/max pattern. 410 if (m_UMin(m_Value(CmpLeft), m_Value(CmpRight)).match(Select)) 411 return InstDesc(Select, MRK_UIntMin); 412 else if (m_UMax(m_Value(CmpLeft), m_Value(CmpRight)).match(Select)) 413 return InstDesc(Select, MRK_UIntMax); 414 else if (m_SMax(m_Value(CmpLeft), m_Value(CmpRight)).match(Select)) 415 return InstDesc(Select, MRK_SIntMax); 416 else if (m_SMin(m_Value(CmpLeft), m_Value(CmpRight)).match(Select)) 417 return InstDesc(Select, MRK_SIntMin); 418 else if (m_OrdFMin(m_Value(CmpLeft), m_Value(CmpRight)).match(Select)) 419 return InstDesc(Select, MRK_FloatMin); 420 else if (m_OrdFMax(m_Value(CmpLeft), m_Value(CmpRight)).match(Select)) 421 return InstDesc(Select, MRK_FloatMax); 422 else if (m_UnordFMin(m_Value(CmpLeft), m_Value(CmpRight)).match(Select)) 423 return InstDesc(Select, MRK_FloatMin); 424 else if (m_UnordFMax(m_Value(CmpLeft), m_Value(CmpRight)).match(Select)) 425 return InstDesc(Select, MRK_FloatMax); 426 427 return InstDesc(false, I); 428 } 429 430 RecurrenceDescriptor::InstDesc 431 RecurrenceDescriptor::isRecurrenceInstr(Instruction *I, RecurrenceKind Kind, 432 InstDesc &Prev, bool HasFunNoNaNAttr) { 433 bool FP = I->getType()->isFloatingPointTy(); 434 Instruction *UAI = Prev.getUnsafeAlgebraInst(); 435 if (!UAI && FP && !I->isFast()) 436 UAI = I; // Found an unsafe (unvectorizable) algebra instruction. 437 438 switch (I->getOpcode()) { 439 default: 440 return InstDesc(false, I); 441 case Instruction::PHI: 442 return InstDesc(I, Prev.getMinMaxKind(), Prev.getUnsafeAlgebraInst()); 443 case Instruction::Sub: 444 case Instruction::Add: 445 return InstDesc(Kind == RK_IntegerAdd, I); 446 case Instruction::Mul: 447 return InstDesc(Kind == RK_IntegerMult, I); 448 case Instruction::And: 449 return InstDesc(Kind == RK_IntegerAnd, I); 450 case Instruction::Or: 451 return InstDesc(Kind == RK_IntegerOr, I); 452 case Instruction::Xor: 453 return InstDesc(Kind == RK_IntegerXor, I); 454 case Instruction::FMul: 455 return InstDesc(Kind == RK_FloatMult, I, UAI); 456 case Instruction::FSub: 457 case Instruction::FAdd: 458 return InstDesc(Kind == RK_FloatAdd, I, UAI); 459 case Instruction::FCmp: 460 case Instruction::ICmp: 461 case Instruction::Select: 462 if (Kind != RK_IntegerMinMax && 463 (!HasFunNoNaNAttr || Kind != RK_FloatMinMax)) 464 return InstDesc(false, I); 465 return isMinMaxSelectCmpPattern(I, Prev); 466 } 467 } 468 469 bool RecurrenceDescriptor::hasMultipleUsesOf( 470 Instruction *I, SmallPtrSetImpl<Instruction *> &Insts) { 471 unsigned NumUses = 0; 472 for (User::op_iterator Use = I->op_begin(), E = I->op_end(); Use != E; 473 ++Use) { 474 if (Insts.count(dyn_cast<Instruction>(*Use))) 475 ++NumUses; 476 if (NumUses > 1) 477 return true; 478 } 479 480 return false; 481 } 482 bool RecurrenceDescriptor::isReductionPHI(PHINode *Phi, Loop *TheLoop, 483 RecurrenceDescriptor &RedDes) { 484 485 BasicBlock *Header = TheLoop->getHeader(); 486 Function &F = *Header->getParent(); 487 bool HasFunNoNaNAttr = 488 F.getFnAttribute("no-nans-fp-math").getValueAsString() == "true"; 489 490 if (AddReductionVar(Phi, RK_IntegerAdd, TheLoop, HasFunNoNaNAttr, RedDes)) { 491 DEBUG(dbgs() << "Found an ADD reduction PHI." << *Phi << "\n"); 492 return true; 493 } 494 if (AddReductionVar(Phi, RK_IntegerMult, TheLoop, HasFunNoNaNAttr, RedDes)) { 495 DEBUG(dbgs() << "Found a MUL reduction PHI." << *Phi << "\n"); 496 return true; 497 } 498 if (AddReductionVar(Phi, RK_IntegerOr, TheLoop, HasFunNoNaNAttr, RedDes)) { 499 DEBUG(dbgs() << "Found an OR reduction PHI." << *Phi << "\n"); 500 return true; 501 } 502 if (AddReductionVar(Phi, RK_IntegerAnd, TheLoop, HasFunNoNaNAttr, RedDes)) { 503 DEBUG(dbgs() << "Found an AND reduction PHI." << *Phi << "\n"); 504 return true; 505 } 506 if (AddReductionVar(Phi, RK_IntegerXor, TheLoop, HasFunNoNaNAttr, RedDes)) { 507 DEBUG(dbgs() << "Found a XOR reduction PHI." << *Phi << "\n"); 508 return true; 509 } 510 if (AddReductionVar(Phi, RK_IntegerMinMax, TheLoop, HasFunNoNaNAttr, 511 RedDes)) { 512 DEBUG(dbgs() << "Found a MINMAX reduction PHI." << *Phi << "\n"); 513 return true; 514 } 515 if (AddReductionVar(Phi, RK_FloatMult, TheLoop, HasFunNoNaNAttr, RedDes)) { 516 DEBUG(dbgs() << "Found an FMult reduction PHI." << *Phi << "\n"); 517 return true; 518 } 519 if (AddReductionVar(Phi, RK_FloatAdd, TheLoop, HasFunNoNaNAttr, RedDes)) { 520 DEBUG(dbgs() << "Found an FAdd reduction PHI." << *Phi << "\n"); 521 return true; 522 } 523 if (AddReductionVar(Phi, RK_FloatMinMax, TheLoop, HasFunNoNaNAttr, RedDes)) { 524 DEBUG(dbgs() << "Found an float MINMAX reduction PHI." << *Phi << "\n"); 525 return true; 526 } 527 // Not a reduction of known type. 528 return false; 529 } 530 531 bool RecurrenceDescriptor::isFirstOrderRecurrence( 532 PHINode *Phi, Loop *TheLoop, 533 DenseMap<Instruction *, Instruction *> &SinkAfter, DominatorTree *DT) { 534 535 // Ensure the phi node is in the loop header and has two incoming values. 536 if (Phi->getParent() != TheLoop->getHeader() || 537 Phi->getNumIncomingValues() != 2) 538 return false; 539 540 // Ensure the loop has a preheader and a single latch block. The loop 541 // vectorizer will need the latch to set up the next iteration of the loop. 542 auto *Preheader = TheLoop->getLoopPreheader(); 543 auto *Latch = TheLoop->getLoopLatch(); 544 if (!Preheader || !Latch) 545 return false; 546 547 // Ensure the phi node's incoming blocks are the loop preheader and latch. 548 if (Phi->getBasicBlockIndex(Preheader) < 0 || 549 Phi->getBasicBlockIndex(Latch) < 0) 550 return false; 551 552 // Get the previous value. The previous value comes from the latch edge while 553 // the initial value comes form the preheader edge. 554 auto *Previous = dyn_cast<Instruction>(Phi->getIncomingValueForBlock(Latch)); 555 if (!Previous || !TheLoop->contains(Previous) || isa<PHINode>(Previous) || 556 SinkAfter.count(Previous)) // Cannot rely on dominance due to motion. 557 return false; 558 559 // Ensure every user of the phi node is dominated by the previous value. 560 // The dominance requirement ensures the loop vectorizer will not need to 561 // vectorize the initial value prior to the first iteration of the loop. 562 // TODO: Consider extending this sinking to handle other kinds of instructions 563 // and expressions, beyond sinking a single cast past Previous. 564 if (Phi->hasOneUse()) { 565 auto *I = Phi->user_back(); 566 if (I->isCast() && (I->getParent() == Phi->getParent()) && I->hasOneUse() && 567 DT->dominates(Previous, I->user_back())) { 568 if (!DT->dominates(Previous, I)) // Otherwise we're good w/o sinking. 569 SinkAfter[I] = Previous; 570 return true; 571 } 572 } 573 574 for (User *U : Phi->users()) 575 if (auto *I = dyn_cast<Instruction>(U)) { 576 if (!DT->dominates(Previous, I)) 577 return false; 578 } 579 580 return true; 581 } 582 583 /// This function returns the identity element (or neutral element) for 584 /// the operation K. 585 Constant *RecurrenceDescriptor::getRecurrenceIdentity(RecurrenceKind K, 586 Type *Tp) { 587 switch (K) { 588 case RK_IntegerXor: 589 case RK_IntegerAdd: 590 case RK_IntegerOr: 591 // Adding, Xoring, Oring zero to a number does not change it. 592 return ConstantInt::get(Tp, 0); 593 case RK_IntegerMult: 594 // Multiplying a number by 1 does not change it. 595 return ConstantInt::get(Tp, 1); 596 case RK_IntegerAnd: 597 // AND-ing a number with an all-1 value does not change it. 598 return ConstantInt::get(Tp, -1, true); 599 case RK_FloatMult: 600 // Multiplying a number by 1 does not change it. 601 return ConstantFP::get(Tp, 1.0L); 602 case RK_FloatAdd: 603 // Adding zero to a number does not change it. 604 return ConstantFP::get(Tp, 0.0L); 605 default: 606 llvm_unreachable("Unknown recurrence kind"); 607 } 608 } 609 610 /// This function translates the recurrence kind to an LLVM binary operator. 611 unsigned RecurrenceDescriptor::getRecurrenceBinOp(RecurrenceKind Kind) { 612 switch (Kind) { 613 case RK_IntegerAdd: 614 return Instruction::Add; 615 case RK_IntegerMult: 616 return Instruction::Mul; 617 case RK_IntegerOr: 618 return Instruction::Or; 619 case RK_IntegerAnd: 620 return Instruction::And; 621 case RK_IntegerXor: 622 return Instruction::Xor; 623 case RK_FloatMult: 624 return Instruction::FMul; 625 case RK_FloatAdd: 626 return Instruction::FAdd; 627 case RK_IntegerMinMax: 628 return Instruction::ICmp; 629 case RK_FloatMinMax: 630 return Instruction::FCmp; 631 default: 632 llvm_unreachable("Unknown recurrence operation"); 633 } 634 } 635 636 Value *RecurrenceDescriptor::createMinMaxOp(IRBuilder<> &Builder, 637 MinMaxRecurrenceKind RK, 638 Value *Left, Value *Right) { 639 CmpInst::Predicate P = CmpInst::ICMP_NE; 640 switch (RK) { 641 default: 642 llvm_unreachable("Unknown min/max recurrence kind"); 643 case MRK_UIntMin: 644 P = CmpInst::ICMP_ULT; 645 break; 646 case MRK_UIntMax: 647 P = CmpInst::ICMP_UGT; 648 break; 649 case MRK_SIntMin: 650 P = CmpInst::ICMP_SLT; 651 break; 652 case MRK_SIntMax: 653 P = CmpInst::ICMP_SGT; 654 break; 655 case MRK_FloatMin: 656 P = CmpInst::FCMP_OLT; 657 break; 658 case MRK_FloatMax: 659 P = CmpInst::FCMP_OGT; 660 break; 661 } 662 663 // We only match FP sequences that are 'fast', so we can unconditionally 664 // set it on any generated instructions. 665 IRBuilder<>::FastMathFlagGuard FMFG(Builder); 666 FastMathFlags FMF; 667 FMF.setFast(); 668 Builder.setFastMathFlags(FMF); 669 670 Value *Cmp; 671 if (RK == MRK_FloatMin || RK == MRK_FloatMax) 672 Cmp = Builder.CreateFCmp(P, Left, Right, "rdx.minmax.cmp"); 673 else 674 Cmp = Builder.CreateICmp(P, Left, Right, "rdx.minmax.cmp"); 675 676 Value *Select = Builder.CreateSelect(Cmp, Left, Right, "rdx.minmax.select"); 677 return Select; 678 } 679 680 InductionDescriptor::InductionDescriptor(Value *Start, InductionKind K, 681 const SCEV *Step, BinaryOperator *BOp, 682 SmallVectorImpl<Instruction *> *Casts) 683 : StartValue(Start), IK(K), Step(Step), InductionBinOp(BOp) { 684 assert(IK != IK_NoInduction && "Not an induction"); 685 686 // Start value type should match the induction kind and the value 687 // itself should not be null. 688 assert(StartValue && "StartValue is null"); 689 assert((IK != IK_PtrInduction || StartValue->getType()->isPointerTy()) && 690 "StartValue is not a pointer for pointer induction"); 691 assert((IK != IK_IntInduction || StartValue->getType()->isIntegerTy()) && 692 "StartValue is not an integer for integer induction"); 693 694 // Check the Step Value. It should be non-zero integer value. 695 assert((!getConstIntStepValue() || !getConstIntStepValue()->isZero()) && 696 "Step value is zero"); 697 698 assert((IK != IK_PtrInduction || getConstIntStepValue()) && 699 "Step value should be constant for pointer induction"); 700 assert((IK == IK_FpInduction || Step->getType()->isIntegerTy()) && 701 "StepValue is not an integer"); 702 703 assert((IK != IK_FpInduction || Step->getType()->isFloatingPointTy()) && 704 "StepValue is not FP for FpInduction"); 705 assert((IK != IK_FpInduction || (InductionBinOp && 706 (InductionBinOp->getOpcode() == Instruction::FAdd || 707 InductionBinOp->getOpcode() == Instruction::FSub))) && 708 "Binary opcode should be specified for FP induction"); 709 710 if (Casts) { 711 for (auto &Inst : *Casts) { 712 RedundantCasts.push_back(Inst); 713 } 714 } 715 } 716 717 int InductionDescriptor::getConsecutiveDirection() const { 718 ConstantInt *ConstStep = getConstIntStepValue(); 719 if (ConstStep && (ConstStep->isOne() || ConstStep->isMinusOne())) 720 return ConstStep->getSExtValue(); 721 return 0; 722 } 723 724 ConstantInt *InductionDescriptor::getConstIntStepValue() const { 725 if (isa<SCEVConstant>(Step)) 726 return dyn_cast<ConstantInt>(cast<SCEVConstant>(Step)->getValue()); 727 return nullptr; 728 } 729 730 Value *InductionDescriptor::transform(IRBuilder<> &B, Value *Index, 731 ScalarEvolution *SE, 732 const DataLayout& DL) const { 733 734 SCEVExpander Exp(*SE, DL, "induction"); 735 assert(Index->getType() == Step->getType() && 736 "Index type does not match StepValue type"); 737 switch (IK) { 738 case IK_IntInduction: { 739 assert(Index->getType() == StartValue->getType() && 740 "Index type does not match StartValue type"); 741 742 // FIXME: Theoretically, we can call getAddExpr() of ScalarEvolution 743 // and calculate (Start + Index * Step) for all cases, without 744 // special handling for "isOne" and "isMinusOne". 745 // But in the real life the result code getting worse. We mix SCEV 746 // expressions and ADD/SUB operations and receive redundant 747 // intermediate values being calculated in different ways and 748 // Instcombine is unable to reduce them all. 749 750 if (getConstIntStepValue() && 751 getConstIntStepValue()->isMinusOne()) 752 return B.CreateSub(StartValue, Index); 753 if (getConstIntStepValue() && 754 getConstIntStepValue()->isOne()) 755 return B.CreateAdd(StartValue, Index); 756 const SCEV *S = SE->getAddExpr(SE->getSCEV(StartValue), 757 SE->getMulExpr(Step, SE->getSCEV(Index))); 758 return Exp.expandCodeFor(S, StartValue->getType(), &*B.GetInsertPoint()); 759 } 760 case IK_PtrInduction: { 761 assert(isa<SCEVConstant>(Step) && 762 "Expected constant step for pointer induction"); 763 const SCEV *S = SE->getMulExpr(SE->getSCEV(Index), Step); 764 Index = Exp.expandCodeFor(S, Index->getType(), &*B.GetInsertPoint()); 765 return B.CreateGEP(nullptr, StartValue, Index); 766 } 767 case IK_FpInduction: { 768 assert(Step->getType()->isFloatingPointTy() && "Expected FP Step value"); 769 assert(InductionBinOp && 770 (InductionBinOp->getOpcode() == Instruction::FAdd || 771 InductionBinOp->getOpcode() == Instruction::FSub) && 772 "Original bin op should be defined for FP induction"); 773 774 Value *StepValue = cast<SCEVUnknown>(Step)->getValue(); 775 776 // Floating point operations had to be 'fast' to enable the induction. 777 FastMathFlags Flags; 778 Flags.setFast(); 779 780 Value *MulExp = B.CreateFMul(StepValue, Index); 781 if (isa<Instruction>(MulExp)) 782 // We have to check, the MulExp may be a constant. 783 cast<Instruction>(MulExp)->setFastMathFlags(Flags); 784 785 Value *BOp = B.CreateBinOp(InductionBinOp->getOpcode() , StartValue, 786 MulExp, "induction"); 787 if (isa<Instruction>(BOp)) 788 cast<Instruction>(BOp)->setFastMathFlags(Flags); 789 790 return BOp; 791 } 792 case IK_NoInduction: 793 return nullptr; 794 } 795 llvm_unreachable("invalid enum"); 796 } 797 798 bool InductionDescriptor::isFPInductionPHI(PHINode *Phi, const Loop *TheLoop, 799 ScalarEvolution *SE, 800 InductionDescriptor &D) { 801 802 // Here we only handle FP induction variables. 803 assert(Phi->getType()->isFloatingPointTy() && "Unexpected Phi type"); 804 805 if (TheLoop->getHeader() != Phi->getParent()) 806 return false; 807 808 // The loop may have multiple entrances or multiple exits; we can analyze 809 // this phi if it has a unique entry value and a unique backedge value. 810 if (Phi->getNumIncomingValues() != 2) 811 return false; 812 Value *BEValue = nullptr, *StartValue = nullptr; 813 if (TheLoop->contains(Phi->getIncomingBlock(0))) { 814 BEValue = Phi->getIncomingValue(0); 815 StartValue = Phi->getIncomingValue(1); 816 } else { 817 assert(TheLoop->contains(Phi->getIncomingBlock(1)) && 818 "Unexpected Phi node in the loop"); 819 BEValue = Phi->getIncomingValue(1); 820 StartValue = Phi->getIncomingValue(0); 821 } 822 823 BinaryOperator *BOp = dyn_cast<BinaryOperator>(BEValue); 824 if (!BOp) 825 return false; 826 827 Value *Addend = nullptr; 828 if (BOp->getOpcode() == Instruction::FAdd) { 829 if (BOp->getOperand(0) == Phi) 830 Addend = BOp->getOperand(1); 831 else if (BOp->getOperand(1) == Phi) 832 Addend = BOp->getOperand(0); 833 } else if (BOp->getOpcode() == Instruction::FSub) 834 if (BOp->getOperand(0) == Phi) 835 Addend = BOp->getOperand(1); 836 837 if (!Addend) 838 return false; 839 840 // The addend should be loop invariant 841 if (auto *I = dyn_cast<Instruction>(Addend)) 842 if (TheLoop->contains(I)) 843 return false; 844 845 // FP Step has unknown SCEV 846 const SCEV *Step = SE->getUnknown(Addend); 847 D = InductionDescriptor(StartValue, IK_FpInduction, Step, BOp); 848 return true; 849 } 850 851 /// This function is called when we suspect that the update-chain of a phi node 852 /// (whose symbolic SCEV expression sin \p PhiScev) contains redundant casts, 853 /// that can be ignored. (This can happen when the PSCEV rewriter adds a runtime 854 /// predicate P under which the SCEV expression for the phi can be the 855 /// AddRecurrence \p AR; See createAddRecFromPHIWithCast). We want to find the 856 /// cast instructions that are involved in the update-chain of this induction. 857 /// A caller that adds the required runtime predicate can be free to drop these 858 /// cast instructions, and compute the phi using \p AR (instead of some scev 859 /// expression with casts). 860 /// 861 /// For example, without a predicate the scev expression can take the following 862 /// form: 863 /// (Ext ix (Trunc iy ( Start + i*Step ) to ix) to iy) 864 /// 865 /// It corresponds to the following IR sequence: 866 /// %for.body: 867 /// %x = phi i64 [ 0, %ph ], [ %add, %for.body ] 868 /// %casted_phi = "ExtTrunc i64 %x" 869 /// %add = add i64 %casted_phi, %step 870 /// 871 /// where %x is given in \p PN, 872 /// PSE.getSCEV(%x) is equal to PSE.getSCEV(%casted_phi) under a predicate, 873 /// and the IR sequence that "ExtTrunc i64 %x" represents can take one of 874 /// several forms, for example, such as: 875 /// ExtTrunc1: %casted_phi = and %x, 2^n-1 876 /// or: 877 /// ExtTrunc2: %t = shl %x, m 878 /// %casted_phi = ashr %t, m 879 /// 880 /// If we are able to find such sequence, we return the instructions 881 /// we found, namely %casted_phi and the instructions on its use-def chain up 882 /// to the phi (not including the phi). 883 static bool getCastsForInductionPHI(PredicatedScalarEvolution &PSE, 884 const SCEVUnknown *PhiScev, 885 const SCEVAddRecExpr *AR, 886 SmallVectorImpl<Instruction *> &CastInsts) { 887 888 assert(CastInsts.empty() && "CastInsts is expected to be empty."); 889 auto *PN = cast<PHINode>(PhiScev->getValue()); 890 assert(PSE.getSCEV(PN) == AR && "Unexpected phi node SCEV expression"); 891 const Loop *L = AR->getLoop(); 892 893 // Find any cast instructions that participate in the def-use chain of 894 // PhiScev in the loop. 895 // FORNOW/TODO: We currently expect the def-use chain to include only 896 // two-operand instructions, where one of the operands is an invariant. 897 // createAddRecFromPHIWithCasts() currently does not support anything more 898 // involved than that, so we keep the search simple. This can be 899 // extended/generalized as needed. 900 901 auto getDef = [&](const Value *Val) -> Value * { 902 const BinaryOperator *BinOp = dyn_cast<BinaryOperator>(Val); 903 if (!BinOp) 904 return nullptr; 905 Value *Op0 = BinOp->getOperand(0); 906 Value *Op1 = BinOp->getOperand(1); 907 Value *Def = nullptr; 908 if (L->isLoopInvariant(Op0)) 909 Def = Op1; 910 else if (L->isLoopInvariant(Op1)) 911 Def = Op0; 912 return Def; 913 }; 914 915 // Look for the instruction that defines the induction via the 916 // loop backedge. 917 BasicBlock *Latch = L->getLoopLatch(); 918 if (!Latch) 919 return false; 920 Value *Val = PN->getIncomingValueForBlock(Latch); 921 if (!Val) 922 return false; 923 924 // Follow the def-use chain until the induction phi is reached. 925 // If on the way we encounter a Value that has the same SCEV Expr as the 926 // phi node, we can consider the instructions we visit from that point 927 // as part of the cast-sequence that can be ignored. 928 bool InCastSequence = false; 929 auto *Inst = dyn_cast<Instruction>(Val); 930 while (Val != PN) { 931 // If we encountered a phi node other than PN, or if we left the loop, 932 // we bail out. 933 if (!Inst || !L->contains(Inst)) { 934 return false; 935 } 936 auto *AddRec = dyn_cast<SCEVAddRecExpr>(PSE.getSCEV(Val)); 937 if (AddRec && PSE.areAddRecsEqualWithPreds(AddRec, AR)) 938 InCastSequence = true; 939 if (InCastSequence) { 940 // Only the last instruction in the cast sequence is expected to have 941 // uses outside the induction def-use chain. 942 if (!CastInsts.empty()) 943 if (!Inst->hasOneUse()) 944 return false; 945 CastInsts.push_back(Inst); 946 } 947 Val = getDef(Val); 948 if (!Val) 949 return false; 950 Inst = dyn_cast<Instruction>(Val); 951 } 952 953 return InCastSequence; 954 } 955 956 bool InductionDescriptor::isInductionPHI(PHINode *Phi, const Loop *TheLoop, 957 PredicatedScalarEvolution &PSE, 958 InductionDescriptor &D, 959 bool Assume) { 960 Type *PhiTy = Phi->getType(); 961 962 // Handle integer and pointer inductions variables. 963 // Now we handle also FP induction but not trying to make a 964 // recurrent expression from the PHI node in-place. 965 966 if (!PhiTy->isIntegerTy() && !PhiTy->isPointerTy() && 967 !PhiTy->isFloatTy() && !PhiTy->isDoubleTy() && !PhiTy->isHalfTy()) 968 return false; 969 970 if (PhiTy->isFloatingPointTy()) 971 return isFPInductionPHI(Phi, TheLoop, PSE.getSE(), D); 972 973 const SCEV *PhiScev = PSE.getSCEV(Phi); 974 const auto *AR = dyn_cast<SCEVAddRecExpr>(PhiScev); 975 976 // We need this expression to be an AddRecExpr. 977 if (Assume && !AR) 978 AR = PSE.getAsAddRec(Phi); 979 980 if (!AR) { 981 DEBUG(dbgs() << "LV: PHI is not a poly recurrence.\n"); 982 return false; 983 } 984 985 // Record any Cast instructions that participate in the induction update 986 const auto *SymbolicPhi = dyn_cast<SCEVUnknown>(PhiScev); 987 // If we started from an UnknownSCEV, and managed to build an addRecurrence 988 // only after enabling Assume with PSCEV, this means we may have encountered 989 // cast instructions that required adding a runtime check in order to 990 // guarantee the correctness of the AddRecurence respresentation of the 991 // induction. 992 if (PhiScev != AR && SymbolicPhi) { 993 SmallVector<Instruction *, 2> Casts; 994 if (getCastsForInductionPHI(PSE, SymbolicPhi, AR, Casts)) 995 return isInductionPHI(Phi, TheLoop, PSE.getSE(), D, AR, &Casts); 996 } 997 998 return isInductionPHI(Phi, TheLoop, PSE.getSE(), D, AR); 999 } 1000 1001 bool InductionDescriptor::isInductionPHI( 1002 PHINode *Phi, const Loop *TheLoop, ScalarEvolution *SE, 1003 InductionDescriptor &D, const SCEV *Expr, 1004 SmallVectorImpl<Instruction *> *CastsToIgnore) { 1005 Type *PhiTy = Phi->getType(); 1006 // We only handle integer and pointer inductions variables. 1007 if (!PhiTy->isIntegerTy() && !PhiTy->isPointerTy()) 1008 return false; 1009 1010 // Check that the PHI is consecutive. 1011 const SCEV *PhiScev = Expr ? Expr : SE->getSCEV(Phi); 1012 const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(PhiScev); 1013 1014 if (!AR) { 1015 DEBUG(dbgs() << "LV: PHI is not a poly recurrence.\n"); 1016 return false; 1017 } 1018 1019 if (AR->getLoop() != TheLoop) { 1020 // FIXME: We should treat this as a uniform. Unfortunately, we 1021 // don't currently know how to handled uniform PHIs. 1022 DEBUG(dbgs() << "LV: PHI is a recurrence with respect to an outer loop.\n"); 1023 return false; 1024 } 1025 1026 Value *StartValue = 1027 Phi->getIncomingValueForBlock(AR->getLoop()->getLoopPreheader()); 1028 const SCEV *Step = AR->getStepRecurrence(*SE); 1029 // Calculate the pointer stride and check if it is consecutive. 1030 // The stride may be a constant or a loop invariant integer value. 1031 const SCEVConstant *ConstStep = dyn_cast<SCEVConstant>(Step); 1032 if (!ConstStep && !SE->isLoopInvariant(Step, TheLoop)) 1033 return false; 1034 1035 if (PhiTy->isIntegerTy()) { 1036 D = InductionDescriptor(StartValue, IK_IntInduction, Step, /*BOp=*/ nullptr, 1037 CastsToIgnore); 1038 return true; 1039 } 1040 1041 assert(PhiTy->isPointerTy() && "The PHI must be a pointer"); 1042 // Pointer induction should be a constant. 1043 if (!ConstStep) 1044 return false; 1045 1046 ConstantInt *CV = ConstStep->getValue(); 1047 Type *PointerElementType = PhiTy->getPointerElementType(); 1048 // The pointer stride cannot be determined if the pointer element type is not 1049 // sized. 1050 if (!PointerElementType->isSized()) 1051 return false; 1052 1053 const DataLayout &DL = Phi->getModule()->getDataLayout(); 1054 int64_t Size = static_cast<int64_t>(DL.getTypeAllocSize(PointerElementType)); 1055 if (!Size) 1056 return false; 1057 1058 int64_t CVSize = CV->getSExtValue(); 1059 if (CVSize % Size) 1060 return false; 1061 auto *StepValue = SE->getConstant(CV->getType(), CVSize / Size, 1062 true /* signed */); 1063 D = InductionDescriptor(StartValue, IK_PtrInduction, StepValue); 1064 return true; 1065 } 1066 1067 bool llvm::formDedicatedExitBlocks(Loop *L, DominatorTree *DT, LoopInfo *LI, 1068 bool PreserveLCSSA) { 1069 bool Changed = false; 1070 1071 // We re-use a vector for the in-loop predecesosrs. 1072 SmallVector<BasicBlock *, 4> InLoopPredecessors; 1073 1074 auto RewriteExit = [&](BasicBlock *BB) { 1075 assert(InLoopPredecessors.empty() && 1076 "Must start with an empty predecessors list!"); 1077 auto Cleanup = make_scope_exit([&] { InLoopPredecessors.clear(); }); 1078 1079 // See if there are any non-loop predecessors of this exit block and 1080 // keep track of the in-loop predecessors. 1081 bool IsDedicatedExit = true; 1082 for (auto *PredBB : predecessors(BB)) 1083 if (L->contains(PredBB)) { 1084 if (isa<IndirectBrInst>(PredBB->getTerminator())) 1085 // We cannot rewrite exiting edges from an indirectbr. 1086 return false; 1087 1088 InLoopPredecessors.push_back(PredBB); 1089 } else { 1090 IsDedicatedExit = false; 1091 } 1092 1093 assert(!InLoopPredecessors.empty() && "Must have *some* loop predecessor!"); 1094 1095 // Nothing to do if this is already a dedicated exit. 1096 if (IsDedicatedExit) 1097 return false; 1098 1099 auto *NewExitBB = SplitBlockPredecessors( 1100 BB, InLoopPredecessors, ".loopexit", DT, LI, PreserveLCSSA); 1101 1102 if (!NewExitBB) 1103 DEBUG(dbgs() << "WARNING: Can't create a dedicated exit block for loop: " 1104 << *L << "\n"); 1105 else 1106 DEBUG(dbgs() << "LoopSimplify: Creating dedicated exit block " 1107 << NewExitBB->getName() << "\n"); 1108 return true; 1109 }; 1110 1111 // Walk the exit blocks directly rather than building up a data structure for 1112 // them, but only visit each one once. 1113 SmallPtrSet<BasicBlock *, 4> Visited; 1114 for (auto *BB : L->blocks()) 1115 for (auto *SuccBB : successors(BB)) { 1116 // We're looking for exit blocks so skip in-loop successors. 1117 if (L->contains(SuccBB)) 1118 continue; 1119 1120 // Visit each exit block exactly once. 1121 if (!Visited.insert(SuccBB).second) 1122 continue; 1123 1124 Changed |= RewriteExit(SuccBB); 1125 } 1126 1127 return Changed; 1128 } 1129 1130 /// \brief Returns the instructions that use values defined in the loop. 1131 SmallVector<Instruction *, 8> llvm::findDefsUsedOutsideOfLoop(Loop *L) { 1132 SmallVector<Instruction *, 8> UsedOutside; 1133 1134 for (auto *Block : L->getBlocks()) 1135 // FIXME: I believe that this could use copy_if if the Inst reference could 1136 // be adapted into a pointer. 1137 for (auto &Inst : *Block) { 1138 auto Users = Inst.users(); 1139 if (any_of(Users, [&](User *U) { 1140 auto *Use = cast<Instruction>(U); 1141 return !L->contains(Use->getParent()); 1142 })) 1143 UsedOutside.push_back(&Inst); 1144 } 1145 1146 return UsedOutside; 1147 } 1148 1149 void llvm::getLoopAnalysisUsage(AnalysisUsage &AU) { 1150 // By definition, all loop passes need the LoopInfo analysis and the 1151 // Dominator tree it depends on. Because they all participate in the loop 1152 // pass manager, they must also preserve these. 1153 AU.addRequired<DominatorTreeWrapperPass>(); 1154 AU.addPreserved<DominatorTreeWrapperPass>(); 1155 AU.addRequired<LoopInfoWrapperPass>(); 1156 AU.addPreserved<LoopInfoWrapperPass>(); 1157 1158 // We must also preserve LoopSimplify and LCSSA. We locally access their IDs 1159 // here because users shouldn't directly get them from this header. 1160 extern char &LoopSimplifyID; 1161 extern char &LCSSAID; 1162 AU.addRequiredID(LoopSimplifyID); 1163 AU.addPreservedID(LoopSimplifyID); 1164 AU.addRequiredID(LCSSAID); 1165 AU.addPreservedID(LCSSAID); 1166 // This is used in the LPPassManager to perform LCSSA verification on passes 1167 // which preserve lcssa form 1168 AU.addRequired<LCSSAVerificationPass>(); 1169 AU.addPreserved<LCSSAVerificationPass>(); 1170 1171 // Loop passes are designed to run inside of a loop pass manager which means 1172 // that any function analyses they require must be required by the first loop 1173 // pass in the manager (so that it is computed before the loop pass manager 1174 // runs) and preserved by all loop pasess in the manager. To make this 1175 // reasonably robust, the set needed for most loop passes is maintained here. 1176 // If your loop pass requires an analysis not listed here, you will need to 1177 // carefully audit the loop pass manager nesting structure that results. 1178 AU.addRequired<AAResultsWrapperPass>(); 1179 AU.addPreserved<AAResultsWrapperPass>(); 1180 AU.addPreserved<BasicAAWrapperPass>(); 1181 AU.addPreserved<GlobalsAAWrapperPass>(); 1182 AU.addPreserved<SCEVAAWrapperPass>(); 1183 AU.addRequired<ScalarEvolutionWrapperPass>(); 1184 AU.addPreserved<ScalarEvolutionWrapperPass>(); 1185 } 1186 1187 /// Manually defined generic "LoopPass" dependency initialization. This is used 1188 /// to initialize the exact set of passes from above in \c 1189 /// getLoopAnalysisUsage. It can be used within a loop pass's initialization 1190 /// with: 1191 /// 1192 /// INITIALIZE_PASS_DEPENDENCY(LoopPass) 1193 /// 1194 /// As-if "LoopPass" were a pass. 1195 void llvm::initializeLoopPassPass(PassRegistry &Registry) { 1196 INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass) 1197 INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass) 1198 INITIALIZE_PASS_DEPENDENCY(LoopSimplify) 1199 INITIALIZE_PASS_DEPENDENCY(LCSSAWrapperPass) 1200 INITIALIZE_PASS_DEPENDENCY(AAResultsWrapperPass) 1201 INITIALIZE_PASS_DEPENDENCY(BasicAAWrapperPass) 1202 INITIALIZE_PASS_DEPENDENCY(GlobalsAAWrapperPass) 1203 INITIALIZE_PASS_DEPENDENCY(SCEVAAWrapperPass) 1204 INITIALIZE_PASS_DEPENDENCY(ScalarEvolutionWrapperPass) 1205 } 1206 1207 /// \brief Find string metadata for loop 1208 /// 1209 /// If it has a value (e.g. {"llvm.distribute", 1} return the value as an 1210 /// operand or null otherwise. If the string metadata is not found return 1211 /// Optional's not-a-value. 1212 Optional<const MDOperand *> llvm::findStringMetadataForLoop(Loop *TheLoop, 1213 StringRef Name) { 1214 MDNode *LoopID = TheLoop->getLoopID(); 1215 // Return none if LoopID is false. 1216 if (!LoopID) 1217 return None; 1218 1219 // First operand should refer to the loop id itself. 1220 assert(LoopID->getNumOperands() > 0 && "requires at least one operand"); 1221 assert(LoopID->getOperand(0) == LoopID && "invalid loop id"); 1222 1223 // Iterate over LoopID operands and look for MDString Metadata 1224 for (unsigned i = 1, e = LoopID->getNumOperands(); i < e; ++i) { 1225 MDNode *MD = dyn_cast<MDNode>(LoopID->getOperand(i)); 1226 if (!MD) 1227 continue; 1228 MDString *S = dyn_cast<MDString>(MD->getOperand(0)); 1229 if (!S) 1230 continue; 1231 // Return true if MDString holds expected MetaData. 1232 if (Name.equals(S->getString())) 1233 switch (MD->getNumOperands()) { 1234 case 1: 1235 return nullptr; 1236 case 2: 1237 return &MD->getOperand(1); 1238 default: 1239 llvm_unreachable("loop metadata has 0 or 1 operand"); 1240 } 1241 } 1242 return None; 1243 } 1244 1245 /// Does a BFS from a given node to all of its children inside a given loop. 1246 /// The returned vector of nodes includes the starting point. 1247 SmallVector<DomTreeNode *, 16> 1248 llvm::collectChildrenInLoop(DomTreeNode *N, const Loop *CurLoop) { 1249 SmallVector<DomTreeNode *, 16> Worklist; 1250 auto AddRegionToWorklist = [&](DomTreeNode *DTN) { 1251 // Only include subregions in the top level loop. 1252 BasicBlock *BB = DTN->getBlock(); 1253 if (CurLoop->contains(BB)) 1254 Worklist.push_back(DTN); 1255 }; 1256 1257 AddRegionToWorklist(N); 1258 1259 for (size_t I = 0; I < Worklist.size(); I++) 1260 for (DomTreeNode *Child : Worklist[I]->getChildren()) 1261 AddRegionToWorklist(Child); 1262 1263 return Worklist; 1264 } 1265 1266 void llvm::deleteDeadLoop(Loop *L, DominatorTree *DT = nullptr, 1267 ScalarEvolution *SE = nullptr, 1268 LoopInfo *LI = nullptr) { 1269 assert((!DT || L->isLCSSAForm(*DT)) && "Expected LCSSA!"); 1270 auto *Preheader = L->getLoopPreheader(); 1271 assert(Preheader && "Preheader should exist!"); 1272 1273 // Now that we know the removal is safe, remove the loop by changing the 1274 // branch from the preheader to go to the single exit block. 1275 // 1276 // Because we're deleting a large chunk of code at once, the sequence in which 1277 // we remove things is very important to avoid invalidation issues. 1278 1279 // Tell ScalarEvolution that the loop is deleted. Do this before 1280 // deleting the loop so that ScalarEvolution can look at the loop 1281 // to determine what it needs to clean up. 1282 if (SE) 1283 SE->forgetLoop(L); 1284 1285 auto *ExitBlock = L->getUniqueExitBlock(); 1286 assert(ExitBlock && "Should have a unique exit block!"); 1287 assert(L->hasDedicatedExits() && "Loop should have dedicated exits!"); 1288 1289 auto *OldBr = dyn_cast<BranchInst>(Preheader->getTerminator()); 1290 assert(OldBr && "Preheader must end with a branch"); 1291 assert(OldBr->isUnconditional() && "Preheader must have a single successor"); 1292 // Connect the preheader to the exit block. Keep the old edge to the header 1293 // around to perform the dominator tree update in two separate steps 1294 // -- #1 insertion of the edge preheader -> exit and #2 deletion of the edge 1295 // preheader -> header. 1296 // 1297 // 1298 // 0. Preheader 1. Preheader 2. Preheader 1299 // | | | | 1300 // V | V | 1301 // Header <--\ | Header <--\ | Header <--\ 1302 // | | | | | | | | | | | 1303 // | V | | | V | | | V | 1304 // | Body --/ | | Body --/ | | Body --/ 1305 // V V V V V 1306 // Exit Exit Exit 1307 // 1308 // By doing this is two separate steps we can perform the dominator tree 1309 // update without using the batch update API. 1310 // 1311 // Even when the loop is never executed, we cannot remove the edge from the 1312 // source block to the exit block. Consider the case where the unexecuted loop 1313 // branches back to an outer loop. If we deleted the loop and removed the edge 1314 // coming to this inner loop, this will break the outer loop structure (by 1315 // deleting the backedge of the outer loop). If the outer loop is indeed a 1316 // non-loop, it will be deleted in a future iteration of loop deletion pass. 1317 IRBuilder<> Builder(OldBr); 1318 Builder.CreateCondBr(Builder.getFalse(), L->getHeader(), ExitBlock); 1319 // Remove the old branch. The conditional branch becomes a new terminator. 1320 OldBr->eraseFromParent(); 1321 1322 // Rewrite phis in the exit block to get their inputs from the Preheader 1323 // instead of the exiting block. 1324 for (PHINode &P : ExitBlock->phis()) { 1325 // Set the zero'th element of Phi to be from the preheader and remove all 1326 // other incoming values. Given the loop has dedicated exits, all other 1327 // incoming values must be from the exiting blocks. 1328 int PredIndex = 0; 1329 P.setIncomingBlock(PredIndex, Preheader); 1330 // Removes all incoming values from all other exiting blocks (including 1331 // duplicate values from an exiting block). 1332 // Nuke all entries except the zero'th entry which is the preheader entry. 1333 // NOTE! We need to remove Incoming Values in the reverse order as done 1334 // below, to keep the indices valid for deletion (removeIncomingValues 1335 // updates getNumIncomingValues and shifts all values down into the operand 1336 // being deleted). 1337 for (unsigned i = 0, e = P.getNumIncomingValues() - 1; i != e; ++i) 1338 P.removeIncomingValue(e - i, false); 1339 1340 assert((P.getNumIncomingValues() == 1 && 1341 P.getIncomingBlock(PredIndex) == Preheader) && 1342 "Should have exactly one value and that's from the preheader!"); 1343 } 1344 1345 // Disconnect the loop body by branching directly to its exit. 1346 Builder.SetInsertPoint(Preheader->getTerminator()); 1347 Builder.CreateBr(ExitBlock); 1348 // Remove the old branch. 1349 Preheader->getTerminator()->eraseFromParent(); 1350 1351 if (DT) { 1352 // Update the dominator tree by informing it about the new edge from the 1353 // preheader to the exit. 1354 DT->insertEdge(Preheader, ExitBlock); 1355 // Inform the dominator tree about the removed edge. 1356 DT->deleteEdge(Preheader, L->getHeader()); 1357 } 1358 1359 // Given LCSSA form is satisfied, we should not have users of instructions 1360 // within the dead loop outside of the loop. However, LCSSA doesn't take 1361 // unreachable uses into account. We handle them here. 1362 // We could do it after drop all references (in this case all users in the 1363 // loop will be already eliminated and we have less work to do but according 1364 // to API doc of User::dropAllReferences only valid operation after dropping 1365 // references, is deletion. So let's substitute all usages of 1366 // instruction from the loop with undef value of corresponding type first. 1367 for (auto *Block : L->blocks()) 1368 for (Instruction &I : *Block) { 1369 auto *Undef = UndefValue::get(I.getType()); 1370 for (Value::use_iterator UI = I.use_begin(), E = I.use_end(); UI != E;) { 1371 Use &U = *UI; 1372 ++UI; 1373 if (auto *Usr = dyn_cast<Instruction>(U.getUser())) 1374 if (L->contains(Usr->getParent())) 1375 continue; 1376 // If we have a DT then we can check that uses outside a loop only in 1377 // unreachable block. 1378 if (DT) 1379 assert(!DT->isReachableFromEntry(U) && 1380 "Unexpected user in reachable block"); 1381 U.set(Undef); 1382 } 1383 } 1384 1385 // Remove the block from the reference counting scheme, so that we can 1386 // delete it freely later. 1387 for (auto *Block : L->blocks()) 1388 Block->dropAllReferences(); 1389 1390 if (LI) { 1391 // Erase the instructions and the blocks without having to worry 1392 // about ordering because we already dropped the references. 1393 // NOTE: This iteration is safe because erasing the block does not remove 1394 // its entry from the loop's block list. We do that in the next section. 1395 for (Loop::block_iterator LpI = L->block_begin(), LpE = L->block_end(); 1396 LpI != LpE; ++LpI) 1397 (*LpI)->eraseFromParent(); 1398 1399 // Finally, the blocks from loopinfo. This has to happen late because 1400 // otherwise our loop iterators won't work. 1401 1402 SmallPtrSet<BasicBlock *, 8> blocks; 1403 blocks.insert(L->block_begin(), L->block_end()); 1404 for (BasicBlock *BB : blocks) 1405 LI->removeBlock(BB); 1406 1407 // The last step is to update LoopInfo now that we've eliminated this loop. 1408 LI->erase(L); 1409 } 1410 } 1411 1412 /// Returns true if the instruction in a loop is guaranteed to execute at least 1413 /// once. 1414 bool llvm::isGuaranteedToExecute(const Instruction &Inst, 1415 const DominatorTree *DT, const Loop *CurLoop, 1416 const LoopSafetyInfo *SafetyInfo) { 1417 // We have to check to make sure that the instruction dominates all 1418 // of the exit blocks. If it doesn't, then there is a path out of the loop 1419 // which does not execute this instruction, so we can't hoist it. 1420 1421 // If the instruction is in the header block for the loop (which is very 1422 // common), it is always guaranteed to dominate the exit blocks. Since this 1423 // is a common case, and can save some work, check it now. 1424 if (Inst.getParent() == CurLoop->getHeader()) 1425 // If there's a throw in the header block, we can't guarantee we'll reach 1426 // Inst. 1427 return !SafetyInfo->HeaderMayThrow; 1428 1429 // Somewhere in this loop there is an instruction which may throw and make us 1430 // exit the loop. 1431 if (SafetyInfo->MayThrow) 1432 return false; 1433 1434 // Get the exit blocks for the current loop. 1435 SmallVector<BasicBlock *, 8> ExitBlocks; 1436 CurLoop->getExitBlocks(ExitBlocks); 1437 1438 // Verify that the block dominates each of the exit blocks of the loop. 1439 for (BasicBlock *ExitBlock : ExitBlocks) 1440 if (!DT->dominates(Inst.getParent(), ExitBlock)) 1441 return false; 1442 1443 // As a degenerate case, if the loop is statically infinite then we haven't 1444 // proven anything since there are no exit blocks. 1445 if (ExitBlocks.empty()) 1446 return false; 1447 1448 // FIXME: In general, we have to prove that the loop isn't an infinite loop. 1449 // See http::llvm.org/PR24078 . (The "ExitBlocks.empty()" check above is 1450 // just a special case of this.) 1451 return true; 1452 } 1453 1454 Optional<unsigned> llvm::getLoopEstimatedTripCount(Loop *L) { 1455 // Only support loops with a unique exiting block, and a latch. 1456 if (!L->getExitingBlock()) 1457 return None; 1458 1459 // Get the branch weights for the loop's backedge. 1460 BranchInst *LatchBR = 1461 dyn_cast<BranchInst>(L->getLoopLatch()->getTerminator()); 1462 if (!LatchBR || LatchBR->getNumSuccessors() != 2) 1463 return None; 1464 1465 assert((LatchBR->getSuccessor(0) == L->getHeader() || 1466 LatchBR->getSuccessor(1) == L->getHeader()) && 1467 "At least one edge out of the latch must go to the header"); 1468 1469 // To estimate the number of times the loop body was executed, we want to 1470 // know the number of times the backedge was taken, vs. the number of times 1471 // we exited the loop. 1472 uint64_t TrueVal, FalseVal; 1473 if (!LatchBR->extractProfMetadata(TrueVal, FalseVal)) 1474 return None; 1475 1476 if (!TrueVal || !FalseVal) 1477 return 0; 1478 1479 // Divide the count of the backedge by the count of the edge exiting the loop, 1480 // rounding to nearest. 1481 if (LatchBR->getSuccessor(0) == L->getHeader()) 1482 return (TrueVal + (FalseVal / 2)) / FalseVal; 1483 else 1484 return (FalseVal + (TrueVal / 2)) / TrueVal; 1485 } 1486 1487 /// \brief Adds a 'fast' flag to floating point operations. 1488 static Value *addFastMathFlag(Value *V) { 1489 if (isa<FPMathOperator>(V)) { 1490 FastMathFlags Flags; 1491 Flags.setFast(); 1492 cast<Instruction>(V)->setFastMathFlags(Flags); 1493 } 1494 return V; 1495 } 1496 1497 // Helper to generate a log2 shuffle reduction. 1498 Value * 1499 llvm::getShuffleReduction(IRBuilder<> &Builder, Value *Src, unsigned Op, 1500 RecurrenceDescriptor::MinMaxRecurrenceKind MinMaxKind, 1501 ArrayRef<Value *> RedOps) { 1502 unsigned VF = Src->getType()->getVectorNumElements(); 1503 // VF is a power of 2 so we can emit the reduction using log2(VF) shuffles 1504 // and vector ops, reducing the set of values being computed by half each 1505 // round. 1506 assert(isPowerOf2_32(VF) && 1507 "Reduction emission only supported for pow2 vectors!"); 1508 Value *TmpVec = Src; 1509 SmallVector<Constant *, 32> ShuffleMask(VF, nullptr); 1510 for (unsigned i = VF; i != 1; i >>= 1) { 1511 // Move the upper half of the vector to the lower half. 1512 for (unsigned j = 0; j != i / 2; ++j) 1513 ShuffleMask[j] = Builder.getInt32(i / 2 + j); 1514 1515 // Fill the rest of the mask with undef. 1516 std::fill(&ShuffleMask[i / 2], ShuffleMask.end(), 1517 UndefValue::get(Builder.getInt32Ty())); 1518 1519 Value *Shuf = Builder.CreateShuffleVector( 1520 TmpVec, UndefValue::get(TmpVec->getType()), 1521 ConstantVector::get(ShuffleMask), "rdx.shuf"); 1522 1523 if (Op != Instruction::ICmp && Op != Instruction::FCmp) { 1524 // Floating point operations had to be 'fast' to enable the reduction. 1525 TmpVec = addFastMathFlag(Builder.CreateBinOp((Instruction::BinaryOps)Op, 1526 TmpVec, Shuf, "bin.rdx")); 1527 } else { 1528 assert(MinMaxKind != RecurrenceDescriptor::MRK_Invalid && 1529 "Invalid min/max"); 1530 TmpVec = RecurrenceDescriptor::createMinMaxOp(Builder, MinMaxKind, TmpVec, 1531 Shuf); 1532 } 1533 if (!RedOps.empty()) 1534 propagateIRFlags(TmpVec, RedOps); 1535 } 1536 // The result is in the first element of the vector. 1537 return Builder.CreateExtractElement(TmpVec, Builder.getInt32(0)); 1538 } 1539 1540 /// Create a simple vector reduction specified by an opcode and some 1541 /// flags (if generating min/max reductions). 1542 Value *llvm::createSimpleTargetReduction( 1543 IRBuilder<> &Builder, const TargetTransformInfo *TTI, unsigned Opcode, 1544 Value *Src, TargetTransformInfo::ReductionFlags Flags, 1545 ArrayRef<Value *> RedOps) { 1546 assert(isa<VectorType>(Src->getType()) && "Type must be a vector"); 1547 1548 Value *ScalarUdf = UndefValue::get(Src->getType()->getVectorElementType()); 1549 std::function<Value*()> BuildFunc; 1550 using RD = RecurrenceDescriptor; 1551 RD::MinMaxRecurrenceKind MinMaxKind = RD::MRK_Invalid; 1552 // TODO: Support creating ordered reductions. 1553 FastMathFlags FMFFast; 1554 FMFFast.setFast(); 1555 1556 switch (Opcode) { 1557 case Instruction::Add: 1558 BuildFunc = [&]() { return Builder.CreateAddReduce(Src); }; 1559 break; 1560 case Instruction::Mul: 1561 BuildFunc = [&]() { return Builder.CreateMulReduce(Src); }; 1562 break; 1563 case Instruction::And: 1564 BuildFunc = [&]() { return Builder.CreateAndReduce(Src); }; 1565 break; 1566 case Instruction::Or: 1567 BuildFunc = [&]() { return Builder.CreateOrReduce(Src); }; 1568 break; 1569 case Instruction::Xor: 1570 BuildFunc = [&]() { return Builder.CreateXorReduce(Src); }; 1571 break; 1572 case Instruction::FAdd: 1573 BuildFunc = [&]() { 1574 auto Rdx = Builder.CreateFAddReduce(ScalarUdf, Src); 1575 cast<CallInst>(Rdx)->setFastMathFlags(FMFFast); 1576 return Rdx; 1577 }; 1578 break; 1579 case Instruction::FMul: 1580 BuildFunc = [&]() { 1581 auto Rdx = Builder.CreateFMulReduce(ScalarUdf, Src); 1582 cast<CallInst>(Rdx)->setFastMathFlags(FMFFast); 1583 return Rdx; 1584 }; 1585 break; 1586 case Instruction::ICmp: 1587 if (Flags.IsMaxOp) { 1588 MinMaxKind = Flags.IsSigned ? RD::MRK_SIntMax : RD::MRK_UIntMax; 1589 BuildFunc = [&]() { 1590 return Builder.CreateIntMaxReduce(Src, Flags.IsSigned); 1591 }; 1592 } else { 1593 MinMaxKind = Flags.IsSigned ? RD::MRK_SIntMin : RD::MRK_UIntMin; 1594 BuildFunc = [&]() { 1595 return Builder.CreateIntMinReduce(Src, Flags.IsSigned); 1596 }; 1597 } 1598 break; 1599 case Instruction::FCmp: 1600 if (Flags.IsMaxOp) { 1601 MinMaxKind = RD::MRK_FloatMax; 1602 BuildFunc = [&]() { return Builder.CreateFPMaxReduce(Src, Flags.NoNaN); }; 1603 } else { 1604 MinMaxKind = RD::MRK_FloatMin; 1605 BuildFunc = [&]() { return Builder.CreateFPMinReduce(Src, Flags.NoNaN); }; 1606 } 1607 break; 1608 default: 1609 llvm_unreachable("Unhandled opcode"); 1610 break; 1611 } 1612 if (TTI->useReductionIntrinsic(Opcode, Src->getType(), Flags)) 1613 return BuildFunc(); 1614 return getShuffleReduction(Builder, Src, Opcode, MinMaxKind, RedOps); 1615 } 1616 1617 /// Create a vector reduction using a given recurrence descriptor. 1618 Value *llvm::createTargetReduction(IRBuilder<> &B, 1619 const TargetTransformInfo *TTI, 1620 RecurrenceDescriptor &Desc, Value *Src, 1621 bool NoNaN) { 1622 // TODO: Support in-order reductions based on the recurrence descriptor. 1623 using RD = RecurrenceDescriptor; 1624 RD::RecurrenceKind RecKind = Desc.getRecurrenceKind(); 1625 TargetTransformInfo::ReductionFlags Flags; 1626 Flags.NoNaN = NoNaN; 1627 switch (RecKind) { 1628 case RD::RK_FloatAdd: 1629 return createSimpleTargetReduction(B, TTI, Instruction::FAdd, Src, Flags); 1630 case RD::RK_FloatMult: 1631 return createSimpleTargetReduction(B, TTI, Instruction::FMul, Src, Flags); 1632 case RD::RK_IntegerAdd: 1633 return createSimpleTargetReduction(B, TTI, Instruction::Add, Src, Flags); 1634 case RD::RK_IntegerMult: 1635 return createSimpleTargetReduction(B, TTI, Instruction::Mul, Src, Flags); 1636 case RD::RK_IntegerAnd: 1637 return createSimpleTargetReduction(B, TTI, Instruction::And, Src, Flags); 1638 case RD::RK_IntegerOr: 1639 return createSimpleTargetReduction(B, TTI, Instruction::Or, Src, Flags); 1640 case RD::RK_IntegerXor: 1641 return createSimpleTargetReduction(B, TTI, Instruction::Xor, Src, Flags); 1642 case RD::RK_IntegerMinMax: { 1643 RD::MinMaxRecurrenceKind MMKind = Desc.getMinMaxRecurrenceKind(); 1644 Flags.IsMaxOp = (MMKind == RD::MRK_SIntMax || MMKind == RD::MRK_UIntMax); 1645 Flags.IsSigned = (MMKind == RD::MRK_SIntMax || MMKind == RD::MRK_SIntMin); 1646 return createSimpleTargetReduction(B, TTI, Instruction::ICmp, Src, Flags); 1647 } 1648 case RD::RK_FloatMinMax: { 1649 Flags.IsMaxOp = Desc.getMinMaxRecurrenceKind() == RD::MRK_FloatMax; 1650 return createSimpleTargetReduction(B, TTI, Instruction::FCmp, Src, Flags); 1651 } 1652 default: 1653 llvm_unreachable("Unhandled RecKind"); 1654 } 1655 } 1656 1657 void llvm::propagateIRFlags(Value *I, ArrayRef<Value *> VL, Value *OpValue) { 1658 auto *VecOp = dyn_cast<Instruction>(I); 1659 if (!VecOp) 1660 return; 1661 auto *Intersection = (OpValue == nullptr) ? dyn_cast<Instruction>(VL[0]) 1662 : dyn_cast<Instruction>(OpValue); 1663 if (!Intersection) 1664 return; 1665 const unsigned Opcode = Intersection->getOpcode(); 1666 VecOp->copyIRFlags(Intersection); 1667 for (auto *V : VL) { 1668 auto *Instr = dyn_cast<Instruction>(V); 1669 if (!Instr) 1670 continue; 1671 if (OpValue == nullptr || Opcode == Instr->getOpcode()) 1672 VecOp->andIRFlags(V); 1673 } 1674 } 1675