diff options
Diffstat (limited to 'contrib/llvm/lib/Transforms/Utils/LoopUnrollAndJam.cpp')
| -rw-r--r-- | contrib/llvm/lib/Transforms/Utils/LoopUnrollAndJam.cpp | 17 | 
1 files changed, 9 insertions, 8 deletions
diff --git a/contrib/llvm/lib/Transforms/Utils/LoopUnrollAndJam.cpp b/contrib/llvm/lib/Transforms/Utils/LoopUnrollAndJam.cpp index e26762639c13..ff49d83f25c5 100644 --- a/contrib/llvm/lib/Transforms/Utils/LoopUnrollAndJam.cpp +++ b/contrib/llvm/lib/Transforms/Utils/LoopUnrollAndJam.cpp @@ -1,9 +1,8 @@  //===-- LoopUnrollAndJam.cpp - Loop unrolling utilities -------------------===//  // -//                     The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception  //  //===----------------------------------------------------------------------===//  // @@ -198,8 +197,8 @@ LoopUnrollResult llvm::UnrollAndJamLoop(    if (TripMultiple == 1 || TripMultiple % Count != 0) {      if (!UnrollRuntimeLoopRemainder(L, Count, /*AllowExpensiveTripCount*/ false,                                      /*UseEpilogRemainder*/ true, -                                    UnrollRemainder, LI, SE, DT, AC, true, -                                    EpilogueLoop)) { +                                    UnrollRemainder, /*ForgetAllSCEV*/ false, +                                    LI, SE, DT, AC, true, EpilogueLoop)) {        LLVM_DEBUG(dbgs() << "Won't unroll-and-jam; remainder loop could not be "                             "generated when assuming runtime trip count\n");        return LoopUnrollResult::Unmodified; @@ -301,7 +300,7 @@ LoopUnrollResult llvm::UnrollAndJamLoop(        for (Instruction &I : *BB)          if (!isa<DbgInfoIntrinsic>(&I))            if (const DILocation *DIL = I.getDebugLoc()) { -            auto NewDIL = DIL->cloneWithDuplicationFactor(Count); +            auto NewDIL = DIL->cloneByMultiplyingDuplicationFactor(Count);              if (NewDIL)                I.setDebugLoc(NewDIL.getValue());              else @@ -539,12 +538,14 @@ LoopUnrollResult llvm::UnrollAndJamLoop(    MergeBlocks.insert(ForeBlocksLast.begin(), ForeBlocksLast.end());    MergeBlocks.insert(SubLoopBlocksLast.begin(), SubLoopBlocksLast.end());    MergeBlocks.insert(AftBlocksLast.begin(), AftBlocksLast.end()); +  DomTreeUpdater DTU(DT, DomTreeUpdater::UpdateStrategy::Eager);    while (!MergeBlocks.empty()) {      BasicBlock *BB = *MergeBlocks.begin();      BranchInst *Term = dyn_cast<BranchInst>(BB->getTerminator());      if (Term && Term->isUnconditional() && L->contains(Term->getSuccessor(0))) {        BasicBlock *Dest = Term->getSuccessor(0); -      if (BasicBlock *Fold = foldBlockIntoPredecessor(Dest, LI, SE, DT)) { +      BasicBlock *Fold = Dest->getUniquePredecessor(); +      if (MergeBlockIntoPredecessor(Dest, &DTU, LI)) {          // Don't remove BB and add Fold as they are the same BB          assert(Fold == BB);          (void)Fold;  | 
