diff options
author | Tobias Grosser <tobias@grosser.es> | 2017-01-14 07:14:54 +0000 |
---|---|---|
committer | Tobias Grosser <tobias@grosser.es> | 2017-01-14 07:14:54 +0000 |
commit | 67e94fb435de3a89346481b39faa8c5af3c4e829 (patch) | |
tree | 7c8decf35c0b2c619fa63ca0b71f3e1dffddd5b2 | |
parent | cc1f65ca304824601bf08980bd5dc716203027b8 (diff) | |
download | bcm5719-llvm-67e94fb435de3a89346481b39faa8c5af3c4e829.tar.gz bcm5719-llvm-67e94fb435de3a89346481b39faa8c5af3c4e829.zip |
ScheduleOptimizer: Allow to set register width in command line
We use this option to set a fixed register width in our test cases to make
sure the results are identical accross platforms.
llvm-svn: 292002
4 files changed, 46 insertions, 5 deletions
diff --git a/polly/lib/Transform/ScheduleOptimizer.cpp b/polly/lib/Transform/ScheduleOptimizer.cpp index 13bfaee0158..fc549e0d274 100644 --- a/polly/lib/Transform/ScheduleOptimizer.cpp +++ b/polly/lib/Transform/ScheduleOptimizer.cpp @@ -162,6 +162,12 @@ static cl::opt<int> SecondCacheLevelSize( cl::desc("The size of the second level specified in bytes."), cl::Hidden, cl::init(262144), cl::ZeroOrMore, cl::cat(PollyCategory)); +static cl::opt<int> VectorRegisterBitwidth( + "polly-target-vector-register-bitwidth", + cl::desc("The size in bits of a vector register (if not set, this " + "information is taken from LLVM's target information."), + cl::Hidden, cl::init(-1), cl::ZeroOrMore, cl::cat(PollyCategory)); + static cl::opt<int> FirstLevelDefaultTileSize( "polly-default-tile-size", cl::desc("The default tile size (if not enough were provided by" @@ -599,7 +605,11 @@ getMicroKernelParams(const llvm::TargetTransformInfo *TTI) { // Nvec - Number of double-precision floating-point numbers that can be hold // by a vector register. Use 2 by default. - auto Nvec = TTI->getRegisterBitWidth(true) / 64; + long RegisterBitwidth = VectorRegisterBitwidth; + + if (RegisterBitwidth == -1) + RegisterBitwidth = TTI->getRegisterBitWidth(true); + auto Nvec = RegisterBitwidth / 64; if (Nvec == 0) Nvec = 2; int Nr = diff --git a/polly/test/ScheduleOptimizer/mat_mul_pattern_data_layout.ll b/polly/test/ScheduleOptimizer/mat_mul_pattern_data_layout.ll index 4b2504717b9..ab3b6430e35 100644 --- a/polly/test/ScheduleOptimizer/mat_mul_pattern_data_layout.ll +++ b/polly/test/ScheduleOptimizer/mat_mul_pattern_data_layout.ll @@ -1,4 +1,13 @@ -; RUN: opt %loadPolly -polly-opt-isl -polly-pattern-matching-based-opts=true -polly-target-throughput-vector-fma=1 -polly-target-latency-vector-fma=8 -polly-target-1st-cache-level-associativity=8 -polly-target-2nd-cache-level-associativity=8 -polly-target-1st-cache-level-size=32768 -polly-target-2nd-cache-level-size=262144 -polly-optimized-scops < %s 2>&1 | FileCheck %s +; RUN: opt %loadPolly -polly-opt-isl -polly-pattern-matching-based-opts=true \ +; RUN: -polly-target-throughput-vector-fma=1 \ +; RUN: -polly-target-latency-vector-fma=8 \ +; RUN: -polly-target-1st-cache-level-associativity=8 \ +; RUN: -polly-target-2nd-cache-level-associativity=8 \ +; RUN: -polly-target-1st-cache-level-size=32768 \ +; RUN: -polly-target-2nd-cache-level-size=262144 \ +; RUN: -polly-optimized-scops \ +; RUN: -polly-target-vector-register-bitwidth=256 \ +; RUN: < %s 2>&1 | FileCheck %s ; ; /* C := alpha*A*B + beta*C */ ; for (i = 0; i < _PB_NI; i++) diff --git a/polly/test/ScheduleOptimizer/mat_mul_pattern_data_layout_2.ll b/polly/test/ScheduleOptimizer/mat_mul_pattern_data_layout_2.ll index a5d0b5fc2ff..62d9feb1d31 100644 --- a/polly/test/ScheduleOptimizer/mat_mul_pattern_data_layout_2.ll +++ b/polly/test/ScheduleOptimizer/mat_mul_pattern_data_layout_2.ll @@ -1,4 +1,12 @@ -; RUN: opt %loadPolly -polly-opt-isl -polly-pattern-matching-based-opts=true -polly-target-throughput-vector-fma=1 -polly-target-latency-vector-fma=8 -polly-target-1st-cache-level-associativity=8 -polly-target-2nd-cache-level-associativity=8 -polly-target-1st-cache-level-size=32768 -polly-target-2nd-cache-level-size=262144 -polly-ast -analyze < %s | FileCheck %s +; RUN: opt %loadPolly -polly-opt-isl -polly-pattern-matching-based-opts=true \ +; RUN: -polly-target-throughput-vector-fma=1 \ +; RUN: -polly-target-latency-vector-fma=8 \ +; RUN: -polly-target-1st-cache-level-associativity=8 \ +; RUN: -polly-target-2nd-cache-level-associativity=8 \ +; RUN: -polly-target-1st-cache-level-size=32768 \ +; RUN: -polly-target-2nd-cache-level-size=262144 -polly-ast \ +; RUN: -polly-target-vector-register-bitwidth=256 \ +; RUN: -analyze < %s | FileCheck %s ; ; /* C := alpha*A*B + beta*C */ ; /* _PB_NK % Kc != 0 */ diff --git a/polly/test/ScheduleOptimizer/pattern-matching-based-opts_3.ll b/polly/test/ScheduleOptimizer/pattern-matching-based-opts_3.ll index d6447f62f52..75e81587007 100644 --- a/polly/test/ScheduleOptimizer/pattern-matching-based-opts_3.ll +++ b/polly/test/ScheduleOptimizer/pattern-matching-based-opts_3.ll @@ -1,5 +1,19 @@ -; RUN: opt %loadPolly -polly-opt-isl -polly-pattern-matching-based-opts=true -polly-target-throughput-vector-fma=1 -polly-target-latency-vector-fma=8 -analyze -polly-ast -polly-target-1st-cache-level-size=0 < %s 2>&1 | FileCheck %s -; RUN: opt %loadPolly -polly-opt-isl -polly-pattern-matching-based-opts=true -polly-target-throughput-vector-fma=1 -polly-target-latency-vector-fma=8 -analyze -polly-ast -polly-target-1st-cache-level-associativity=8 -polly-target-2nd-cache-level-associativity=8 -polly-target-1st-cache-level-size=32768 -polly-target-2nd-cache-level-size=262144 < %s 2>&1 | FileCheck %s --check-prefix=EXTRACTION-OF-MACRO-KERNEL +; RUN: opt %loadPolly -polly-opt-isl -polly-pattern-matching-based-opts=true \ +; RUN: -polly-target-throughput-vector-fma=1 \ +; RUN: -polly-target-latency-vector-fma=8 \ +; RUN: -analyze -polly-ast -polly-target-1st-cache-level-size=0 \ +; RUN: -polly-target-vector-register-bitwidth=256 \ +; RUN: < %s 2>&1 | FileCheck %s + +; RUN: opt %loadPolly -polly-opt-isl -polly-pattern-matching-based-opts=true \ +; RUN: -polly-target-throughput-vector-fma=1 \ +; RUN: -polly-target-latency-vector-fma=8 \ +; RUN: -analyze -polly-ast -polly-target-1st-cache-level-associativity=8 \ +; RUN: -polly-target-2nd-cache-level-associativity=8 \ +; RUN: -polly-target-1st-cache-level-size=32768 \ +; RUN: -polly-target-vector-register-bitwidth=256 \ +; RUN: -polly-target-2nd-cache-level-size=262144 < %s 2>&1 \ +; RUN: | FileCheck %s --check-prefix=EXTRACTION-OF-MACRO-KERNEL ; ; /* C := alpha*A*B + beta*C */ ; for (i = 0; i < _PB_NI; i++) |