[llvm] r365520 - Revert "[HardwareLoops] NFC - move hardware loop checking code to isHardwareLoopProfitable()"

Philip Reames via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 9 15:09:14 PDT 2019


When revert, please say why.

Philip

On 7/9/19 10:53 AM, Jinsong Ji via llvm-commits wrote:
> Author: jsji
> Date: Tue Jul  9 10:53:09 2019
> New Revision: 365520
>
> URL: http://llvm.org/viewvc/llvm-project?rev=365520&view=rev
> Log:
> Revert "[HardwareLoops] NFC - move hardware loop checking code to isHardwareLoopProfitable()"
>
> This reverts commit d95557306585404893d610784edb3e32f1bfce18.
>
> Modified:
>      llvm/trunk/include/llvm/Analysis/TargetTransformInfo.h
>      llvm/trunk/lib/Analysis/TargetTransformInfo.cpp
>      llvm/trunk/lib/CodeGen/HardwareLoops.cpp
>
> Modified: llvm/trunk/include/llvm/Analysis/TargetTransformInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/TargetTransformInfo.h?rev=365520&r1=365519&r2=365520&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Analysis/TargetTransformInfo.h (original)
> +++ llvm/trunk/include/llvm/Analysis/TargetTransformInfo.h Tue Jul  9 10:53:09 2019
> @@ -99,8 +99,7 @@ struct HardwareLoopInfo {
>                                     // produces an i1 to guard the loop entry.
>     bool isHardwareLoopCandidate(ScalarEvolution &SE, LoopInfo &LI,
>                                  DominatorTree &DT, bool ForceNestedLoop = false,
> -                               bool ForceHardwareLoopPHI = false,
> -                               bool ForceGuardLoopEntry = false);
> +                               bool ForceHardwareLoopPHI = false);
>     bool canAnalyze(LoopInfo &LI);
>   };
>   
>
> Modified: llvm/trunk/lib/Analysis/TargetTransformInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/TargetTransformInfo.cpp?rev=365520&r1=365519&r2=365520&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Analysis/TargetTransformInfo.cpp (original)
> +++ llvm/trunk/lib/Analysis/TargetTransformInfo.cpp Tue Jul  9 10:53:09 2019
> @@ -20,9 +20,6 @@
>   #include "llvm/Support/ErrorHandling.h"
>   #include "llvm/Analysis/CFG.h"
>   #include "llvm/Analysis/LoopIterator.h"
> -#include "llvm/Transforms/Utils.h"
> -#include "llvm/Transforms/Utils/LoopUtils.h"
> -#include "llvm/Analysis/ScalarEvolutionExpander.h"
>   #include <utility>
>   
>   using namespace llvm;
> @@ -58,8 +55,7 @@ bool HardwareLoopInfo::canAnalyze(LoopIn
>   bool HardwareLoopInfo::isHardwareLoopCandidate(ScalarEvolution &SE,
>                                                  LoopInfo &LI, DominatorTree &DT,
>                                                  bool ForceNestedLoop,
> -                                               bool ForceHardwareLoopPHI,
> -                                               bool ForceGuardLoopEntry) {
> +                                               bool ForceHardwareLoopPHI) {
>     SmallVector<BasicBlock *, 4> ExitingBlocks;
>     L->getExitingBlocks(ExitingBlocks);
>   
> @@ -138,33 +134,6 @@ bool HardwareLoopInfo::isHardwareLoopCan
>   
>     if (!ExitBlock)
>       return false;
> -
> -  BasicBlock *Preheader = L->getLoopPreheader();
> -
> -  // If we don't have a preheader, then insert one.
> -  if (!Preheader)
> -    Preheader = InsertPreheaderForLoop(L, &DT, &LI, nullptr, true);
> -  if (!Preheader)
> -    return false;
> -
> -  // Make sure we have a valid Loop Count
> -  if (!ExitCount->getType()->isPointerTy() && ExitCount->getType() != CountType)
> -    ExitCount = SE.getZeroExtendExpr(ExitCount, CountType);
> -
> -  ExitCount = SE.getAddExpr(ExitCount, SE.getOne(CountType));
> -
> -  BasicBlock *BB = L->getLoopPreheader();
> -
> -  if (ForceGuardLoopEntry && BB->getSinglePredecessor() &&
> -      cast<BranchInst>(BB->getTerminator())->isUnconditional())
> -    BB = BB->getSinglePredecessor();
> -
> -  if (!isSafeToExpandAt(ExitCount, BB->getTerminator(), SE)) {
> -    LLVM_DEBUG(dbgs() << "Not a Hardware Loop: unsafe to expand ExitCount "
> -                      << *ExitCount << "\n");
> -    return false;
> -  }
> -
>     return true;
>   }
>   
>
> Modified: llvm/trunk/lib/CodeGen/HardwareLoops.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/HardwareLoops.cpp?rev=365520&r1=365519&r2=365520&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/HardwareLoops.cpp (original)
> +++ llvm/trunk/lib/CodeGen/HardwareLoops.cpp Tue Jul  9 10:53:09 2019
> @@ -15,6 +15,7 @@
>   ///
>   //===----------------------------------------------------------------------===//
>   
> +#include "llvm/Pass.h"
>   #include "llvm/PassRegistry.h"
>   #include "llvm/PassSupport.h"
>   #include "llvm/ADT/Statistic.h"
> @@ -35,8 +36,10 @@
>   #include "llvm/IR/Value.h"
>   #include "llvm/Support/Debug.h"
>   #include "llvm/Transforms/Scalar.h"
> +#include "llvm/Transforms/Utils.h"
>   #include "llvm/Transforms/Utils/BasicBlockUtils.h"
>   #include "llvm/Transforms/Utils/Local.h"
> +#include "llvm/Transforms/Utils/LoopUtils.h"
>   
>   #define DEBUG_TYPE "hardware-loops"
>   
> @@ -109,6 +112,7 @@ namespace {
>       const DataLayout *DL = nullptr;
>       const TargetTransformInfo *TTI = nullptr;
>       DominatorTree *DT = nullptr;
> +    bool PreserveLCSSA = false;
>       AssumptionCache *AC = nullptr;
>       TargetLibraryInfo *LibInfo = nullptr;
>       Module *M = nullptr;
> @@ -180,6 +184,7 @@ bool HardwareLoops::runOnFunction(Functi
>     DL = &F.getParent()->getDataLayout();
>     auto *TLIP = getAnalysisIfAvailable<TargetLibraryInfoWrapperPass>();
>     LibInfo = TLIP ? &TLIP->getTLI() : nullptr;
> +  PreserveLCSSA = mustPreserveAnalysisID(LCSSAID);
>     AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);
>     M = F.getParent();
>   
> @@ -225,19 +230,25 @@ bool HardwareLoops::TryConvertLoop(Loop
>   
>   bool HardwareLoops::TryConvertLoop(HardwareLoopInfo &HWLoopInfo) {
>   
> -  LLVM_DEBUG(dbgs() << "HWLoops: Try to convert profitable loop: "
> -                    << *HWLoopInfo.L);
> +  Loop *L = HWLoopInfo.L;
> +  LLVM_DEBUG(dbgs() << "HWLoops: Try to convert profitable loop: " << *L);
>   
>     if (!HWLoopInfo.isHardwareLoopCandidate(*SE, *LI, *DT, ForceNestedLoop,
> -                                          ForceHardwareLoopPHI,
> -                                          ForceGuardLoopEntry))
> +                                          ForceHardwareLoopPHI))
>       return false;
>   
>     assert(
>         (HWLoopInfo.ExitBlock && HWLoopInfo.ExitBranch && HWLoopInfo.ExitCount) &&
>         "Hardware Loop must have set exit info.");
>   
> -  // Now start to converting...
> +  BasicBlock *Preheader = L->getLoopPreheader();
> +
> +  // If we don't have a preheader, then insert one.
> +  if (!Preheader)
> +    Preheader = InsertPreheaderForLoop(L, DT, LI, nullptr, PreserveLCSSA);
> +  if (!Preheader)
> +    return false;
> +
>     HardwareLoop HWLoop(HWLoopInfo, *SE, *DL);
>     HWLoop.Create();
>     ++NumHWLoops;
> @@ -246,10 +257,10 @@ bool HardwareLoops::TryConvertLoop(Hardw
>   
>   void HardwareLoop::Create() {
>     LLVM_DEBUG(dbgs() << "HWLoops: Converting loop..\n");
> -
> +
>     Value *LoopCountInit = InitLoopCount();
> -
> -  assert(LoopCountInit && "Hardware Loop must have a loop count");
> +  if (!LoopCountInit)
> +    return;
>   
>     InsertIterationSetup(LoopCountInit);
>   
> @@ -309,22 +320,32 @@ Value *HardwareLoop::InitLoopCount() {
>     // loop counter and tests that is not zero?
>   
>     SCEVExpander SCEVE(SE, DL, "loopcnt");
> +  if (!ExitCount->getType()->isPointerTy() &&
> +      ExitCount->getType() != CountType)
> +    ExitCount = SE.getZeroExtendExpr(ExitCount, CountType);
> +
> +  ExitCount = SE.getAddExpr(ExitCount, SE.getOne(CountType));
>   
>     // If we're trying to use the 'test and set' form of the intrinsic, we need
>     // to replace a conditional branch that is controlling entry to the loop. It
>     // is likely (guaranteed?) that the preheader has an unconditional branch to
>     // the loop header, so also check if it has a single predecessor.
>     if (SE.isLoopEntryGuardedByCond(L, ICmpInst::ICMP_NE, ExitCount,
> -                                  SE.getZero(ExitCount->getType())))
> +                                  SE.getZero(ExitCount->getType()))) {
> +    LLVM_DEBUG(dbgs() << " - Attempting to use test.set counter.\n");
>       UseLoopGuard |= ForceGuardLoopEntry;
> -  else
> +  } else
>       UseLoopGuard = false;
>   
>     BasicBlock *BB = L->getLoopPreheader();
>     if (UseLoopGuard && BB->getSinglePredecessor() &&
> -      cast<BranchInst>(BB->getTerminator())->isUnconditional()) {
> -    LLVM_DEBUG(dbgs() << " - Attempting to use test.set counter.\n");
> +      cast<BranchInst>(BB->getTerminator())->isUnconditional())
>       BB = BB->getSinglePredecessor();
> +
> +  if (!isSafeToExpandAt(ExitCount, BB->getTerminator(), SE)) {
> +    LLVM_DEBUG(dbgs() << "- Bailing, unsafe to expand ExitCount "
> +               << *ExitCount << "\n");
> +    return nullptr;
>     }
>   
>     Value *Count = SCEVE.expandCodeFor(ExitCount, CountType,
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list