[llvm] r230619 - IRCE: only touch loops that have been shown to have a high
Sanjoy Das
sanjoy at playingwithpointers.com
Thu Feb 26 12:17:54 PST 2015
Thanks for poking me on this. :)
Checked in a test case in rL230680.
On Thu, Feb 26, 2015 at 6:13 AM, Hal Finkel <hfinkel at anl.gov> wrote:
> 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