[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