[llvm] r230619 - IRCE: only touch loops that have been shown to have a high
Hal Finkel
hfinkel at anl.gov
Thu Feb 26 06:13:05 PST 2015
Test case?
-Hal
----- Original Message -----
> From: "Sanjoy Das" <sanjoy at playingwithpointers.com>
> To: llvm-commits at cs.uiuc.edu
> Sent: Thursday, February 26, 2015 2:56:04 AM
> Subject: [llvm] r230619 - IRCE: only touch loops that have been shown to have a high
>
> Author: sanjoy
> Date: Thu Feb 26 02:56:04 2015
> New Revision: 230619
>
> URL: http://llvm.org/viewvc/llvm-project?rev=230619&view=rev
> Log:
> IRCE: only touch loops that have been shown to have a high
> backedge-taken count in profiliing data.
>
>
> Modified:
> llvm/trunk/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp
>
> Modified:
> llvm/trunk/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp?rev=230619&r1=230618&r2=230619&view=diff
> ==============================================================================
> ---
> llvm/trunk/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp
> (original)
> +++
> llvm/trunk/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp
> Thu Feb 26 02:56:04 2015
> @@ -82,6 +82,9 @@ static cl::opt<unsigned> LoopSizeCutoff(
> static cl::opt<bool> PrintChangedLoops("irce-print-changed-loops",
> cl::Hidden,
> cl::init(false));
>
> +static cl::opt<int>
> MaxExitProbReciprocal("irce-max-exit-prob-reciprocal",
> + cl::Hidden, cl::init(10));
> +
> #define DEBUG_TYPE "irce"
>
> namespace {
> @@ -441,7 +444,9 @@ struct LoopStructure {
> return Result;
> }
>
> - static Optional<LoopStructure> parseLoopStructure(ScalarEvolution
> &, Loop &,
> + static Optional<LoopStructure> parseLoopStructure(ScalarEvolution
> &,
> +
> BranchProbabilityInfo
> &BPI,
> + Loop &,
> const char *&);
> };
>
> @@ -615,8 +620,8 @@ static bool CanBeSMin(ScalarEvolution &S
> }
>
> Optional<LoopStructure>
> -LoopStructure::parseLoopStructure(ScalarEvolution &SE, Loop &L,
> - const char *&FailureReason) {
> +LoopStructure::parseLoopStructure(ScalarEvolution &SE,
> BranchProbabilityInfo &BPI,
> + Loop &L, const char
> *&FailureReason) {
> assert(L.isLoopSimplifyForm() && "should follow from
> addRequired<>");
>
> BasicBlock *Latch = L.getLoopLatch();
> @@ -640,6 +645,14 @@ LoopStructure::parseLoopStructure(Scalar
>
> unsigned LatchBrExitIdx = LatchBr->getSuccessor(0) == Header ? 1 :
> 0;
>
> + BranchProbability ExitProbability =
> + BPI.getEdgeProbability(LatchBr->getParent(), LatchBrExitIdx);
> +
> + if (ExitProbability > BranchProbability(1, MaxExitProbReciprocal))
> {
> + FailureReason = "short running loop, not profitable";
> + return None;
> + }
> +
> ICmpInst *ICI = dyn_cast<ICmpInst>(LatchBr->getCondition());
> if (!ICI || !isa<IntegerType>(ICI->getOperand(0)->getType())) {
> FailureReason = "latch terminator branch not conditional on
> integral icmp";
> @@ -1340,7 +1353,7 @@ bool InductiveRangeCheckElimination::run
>
> const char *FailureReason = nullptr;
> Optional<LoopStructure> MaybeLoopStructure =
> - LoopStructure::parseLoopStructure(SE, *L, FailureReason);
> + LoopStructure::parseLoopStructure(SE, BPI, *L, FailureReason);
> if (!MaybeLoopStructure.hasValue()) {
> DEBUG(dbgs() << "irce: could not parse loop structure: " <<
> FailureReason
> << "\n";);
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
--
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory
More information about the llvm-commits
mailing list