[LoopUnroll] Enable advanced unrolling analysis by default.
Summary: This patch turns on LoopUnrollAnalyzer by default. To mitigate compile time regressions, I chose very conservative thresholds for now. Later we can make them more aggressive, but it might require being smarter in which loops we're optimizing. E.g. currently the biggest issue is that with more agressive thresholds we unroll many cold loops, which increases compile time for no performance benefit (performance of those loops is improved, but it doesn't matter since they are cold). Test results for compile time(using 4 samples to reduce noise): ``` MultiSource/Benchmarks/VersaBench/ecbdes/ecbdes 5.19% SingleSource/Benchmarks/Polybench/medley/reg_detect/reg_detect 4.19% MultiSource/Benchmarks/FreeBench/fourinarow/fourinarow 3.39% MultiSource/Applications/JM/lencod/lencod 1.47% MultiSource/Benchmarks/Fhourstones-3_1/fhourstones3_1 -6.06% ``` I didn't see any performance changes in the testsuite, but it improves some internal tests. Reviewers: hfinkel, chandlerc Subscribers: llvm-commits, mzolotukhin Differential Revision: http://reviews.llvm.org/D20482 llvm-svn: 270478
This commit is contained in:
parent
f6f4a2a972
commit
be080fc51d
|
@ -45,18 +45,18 @@ static cl::opt<unsigned>
|
|||
cl::desc("The baseline cost threshold for loop unrolling"));
|
||||
|
||||
static cl::opt<unsigned> UnrollPercentDynamicCostSavedThreshold(
|
||||
"unroll-percent-dynamic-cost-saved-threshold", cl::Hidden,
|
||||
"unroll-percent-dynamic-cost-saved-threshold", cl::init(50), cl::Hidden,
|
||||
cl::desc("The percentage of estimated dynamic cost which must be saved by "
|
||||
"unrolling to allow unrolling up to the max threshold."));
|
||||
|
||||
static cl::opt<unsigned> UnrollDynamicCostSavingsDiscount(
|
||||
"unroll-dynamic-cost-savings-discount", cl::Hidden,
|
||||
"unroll-dynamic-cost-savings-discount", cl::init(100), cl::Hidden,
|
||||
cl::desc("This is the amount discounted from the total unroll cost when "
|
||||
"the unrolled form has a high dynamic cost savings (triggered by "
|
||||
"the '-unroll-perecent-dynamic-cost-saved-threshold' flag)."));
|
||||
|
||||
static cl::opt<unsigned> UnrollMaxIterationsCountToAnalyze(
|
||||
"unroll-max-iteration-count-to-analyze", cl::init(0), cl::Hidden,
|
||||
"unroll-max-iteration-count-to-analyze", cl::init(10), cl::Hidden,
|
||||
cl::desc("Don't allow loop unrolling to simulate more than this number of"
|
||||
"iterations when checking full unroll profitability"));
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
; RUN: opt < %s -S -unroll-threshold=20 -loop-unroll -unroll-allow-partial -unroll-runtime | FileCheck %s
|
||||
; RUN: opt < %s -S -unroll-threshold=20 -loop-unroll -unroll-allow-partial -unroll-runtime -unroll-dynamic-cost-savings-discount=0 | FileCheck %s
|
||||
|
||||
; The Loop TripCount is 9. However unroll factors 3 or 9 exceed given threshold.
|
||||
; The test checks that we choose a smaller, power-of-two, unroll count and do not give up on unrolling.
|
||||
|
|
Loading…
Reference in New Issue