diff options
author | Jonas Paulsson <paulsson@linux.vnet.ibm.com> | 2016-09-28 09:41:38 +0000 |
---|---|---|
committer | Jonas Paulsson <paulsson@linux.vnet.ibm.com> | 2016-09-28 09:41:38 +0000 |
commit | 58c5a7f55af4a5601d453f2c09ee3d0d9b4cc59d (patch) | |
tree | 8210d274329291131ebfed2c0f2969a0ef7bc53c /llvm/lib/Transforms | |
parent | 963f75efc27bb55dba7c21e8107b0013e5a12021 (diff) | |
download | bcm5719-llvm-58c5a7f55af4a5601d453f2c09ee3d0d9b4cc59d.tar.gz bcm5719-llvm-58c5a7f55af4a5601d453f2c09ee3d0d9b4cc59d.zip |
[SystemZ] Implementation of getUnrollingPreferences().
This commit enables more unrolling for SystemZ by implementing the
SystemZTargetTransformInfo::getUnrollingPreferences() method.
It has been found that it is better to only unroll moderately, so the
DefaultUnrollRuntimeCount has been moved into UnrollingPreferences in order
to set this to a lower value for SystemZ (4).
Reviewers: Evgeny Stupachenko, Ulrich Weigand.
https://reviews.llvm.org/D24451
llvm-svn: 282570
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp b/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp index dbbffee96e2..a8442e64832 100644 --- a/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp +++ b/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp @@ -102,10 +102,6 @@ static cl::opt<unsigned> PragmaUnrollThreshold( /// code expansion would result. static const unsigned NoThreshold = UINT_MAX; -/// Default unroll count for loops with run-time trip count if -/// -unroll-count is not set -static const unsigned DefaultUnrollRuntimeCount = 8; - /// Gather the various unrolling parameters based on the defaults, compiler /// flags, TTI overrides and user specified parameters. static TargetTransformInfo::UnrollingPreferences gatherUnrollingPreferences( @@ -122,6 +118,7 @@ static TargetTransformInfo::UnrollingPreferences gatherUnrollingPreferences( UP.PartialThreshold = UP.Threshold; UP.PartialOptSizeThreshold = 0; UP.Count = 0; + UP.DefaultUnrollRuntimeCount = 8; UP.MaxCount = UINT_MAX; UP.FullUnrollMaxCount = UINT_MAX; UP.Partial = false; @@ -803,7 +800,7 @@ static bool computeUnrollCount(Loop *L, const TargetTransformInfo &TTI, // largest power-of-two factor that satisfies the threshold limit. // As we'll create fixup loop, do the type of unrolling only if // remainder loop is allowed. - UP.Count = DefaultUnrollRuntimeCount; + UP.Count = UP.DefaultUnrollRuntimeCount; UnrolledSize = (LoopSize - BEInsns) * UP.Count + BEInsns; while (UP.Count != 0 && UnrolledSize > UP.PartialThreshold) { UP.Count >>= 1; @@ -852,7 +849,7 @@ static bool computeUnrollCount(Loop *L, const TargetTransformInfo &TTI, return false; } if (UP.Count == 0) - UP.Count = DefaultUnrollRuntimeCount; + UP.Count = UP.DefaultUnrollRuntimeCount; UnrolledSize = (LoopSize - BEInsns) * UP.Count + BEInsns; // Reduce unroll count to be the largest power-of-two factor of |