2021-07-31 04:17:45 +08:00
|
|
|
@LIT_SITE_CFG_IN_HEADER@
|
|
|
|
|
2011-04-29 14:27:02 +08:00
|
|
|
config.llvm_src_root = "@LLVM_SOURCE_DIR@"
|
|
|
|
config.llvm_obj_root = "@LLVM_BINARY_DIR@"
|
|
|
|
config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
|
|
|
|
config.llvm_libs_dir = "@LLVM_LIBS_DIR@"
|
|
|
|
config.polly_obj_root = "@POLLY_BINARY_DIR@"
|
2012-03-16 22:34:20 +08:00
|
|
|
config.polly_lib_dir = "@POLLY_LIB_DIR@"
|
2011-04-29 14:27:02 +08:00
|
|
|
config.target_triple = "@TARGET_TRIPLE@"
|
2016-07-14 18:22:19 +08:00
|
|
|
config.enable_gpgpu_codegen = "@GPU_CODEGEN@"
|
2019-06-08 23:37:47 +08:00
|
|
|
config.llvm_polly_link_into_tools = "@LLVM_POLLY_LINK_INTO_TOOLS@"
|
2017-03-03 11:38:50 +08:00
|
|
|
config.targets_to_build = "@TARGETS_TO_BUILD@"
|
[Polly][CMake] Use the CMake Package instead of llvm-config in out-of-tree builds
Summary:
As of now, Polly uses llvm-config to set up LLVM dependencies in an out-of-tree build.
This is problematic for two reasons:
1) Right now, in-tree and out-of-tree builds in fact do different things. E.g., in an in-tree build, libPolly depends on a handful of LLVM libraries, while in an out-of-tree build it depends on all of them. This means that we often need to treat both paths seperately.
2) I'm specifically unhappy with the way libPolly is linked right now, because it just blindly links against all the LLVM libs. That doesn't make a lot of sense. For instance, one of these libs is LLVMTableGen, which contains a command line definition of a -o option. This means that I can not link an out-of-tree libPolly into a tool which might want to offer a -o option as well.
This patch (mostly) drop the use of llvm-config in favor of LLVMs exported cmake package. However, building Polly with unittests requires access to the gtest sources (in the LLVM source tree). If we're building against an LLVM installation, this source tree is unavailable and must specified. I'm using llvm-config to provide a default in this case.
Reviewers: Meinersbur, grosser
Reviewed By: grosser
Subscribers: tstellar, bollu, chapuni, mgorny, pollydev, llvm-commits
Differential Revision: https://reviews.llvm.org/D33299
llvm-svn: 307650
2017-07-11 19:24:25 +08:00
|
|
|
config.extra_paths = "@POLLY_TEST_EXTRA_PATHS@".split(";")
|
2011-04-29 14:27:02 +08:00
|
|
|
|
2012-03-29 21:10:10 +08:00
|
|
|
## Check the current platform with regex
|
|
|
|
import re
|
|
|
|
EAT_ERR_ON_X86 = ' '
|
|
|
|
if (re.match(r'^x86_64*', '@TARGET_TRIPLE@') == None) :
|
|
|
|
EAT_ERR_ON_X86 = '|| echo \"error is eaten\"'
|
|
|
|
|
2017-03-03 11:38:50 +08:00
|
|
|
for arch in config.targets_to_build.split():
|
|
|
|
config.available_features.add(arch.lower() + '-registered-target')
|
|
|
|
|
2011-04-29 14:27:02 +08:00
|
|
|
# Support substitution of the tools and libs dirs with user parameters. This is
|
|
|
|
# used when we can't determine the tool dir at configuration time.
|
|
|
|
try:
|
2013-08-10 05:54:36 +08:00
|
|
|
config.llvm_tools_dir = config.llvm_tools_dir % lit_config.params
|
|
|
|
config.llvm_libs_dir = config.llvm_libs_dir % lit_config.params
|
2015-07-25 04:33:22 +08:00
|
|
|
except KeyError:
|
|
|
|
e = sys.exc_info()[1]
|
2011-04-29 14:27:02 +08:00
|
|
|
key, = e.args
|
2013-08-10 05:54:36 +08:00
|
|
|
lit_config.fatal("unable to find %r parameter, use '--param=%s=VALUE'" % (key,key))
|
2011-04-29 14:27:02 +08:00
|
|
|
|
[GPGPU] Add support for NVIDIA libdevice
Summary:
This allows us to map functions such as exp, expf, expl, for which no
LLVM intrinsics exist. Instead, we link to NVIDIA's libdevice which provides
high-performance implementations of a wide range of (math) functions. We
currently link only a small subset, the exp, cos and copysign functions. Other
functions will be enabled as needed.
Reviewers: bollu, singam-sanjay
Reviewed By: bollu
Subscribers: tstellar, tra, nemanjai, pollydev, mgorny, llvm-commits, kbarton
Tags: #polly
Differential Revision: https://reviews.llvm.org/D35703
llvm-svn: 309560
2017-07-31 22:03:16 +08:00
|
|
|
# excludes: A list of directories to exclude from the testsuite. The 'Inputs'
|
|
|
|
# subdirectories contain auxiliary inputs for various tests in their parent
|
|
|
|
# directories.
|
|
|
|
config.excludes = ['Inputs']
|
|
|
|
|
2019-06-08 23:37:47 +08:00
|
|
|
if config.llvm_polly_link_into_tools == '' or \
|
|
|
|
config.llvm_polly_link_into_tools.lower() == '0' or \
|
|
|
|
config.llvm_polly_link_into_tools.lower() == 'n' or \
|
|
|
|
config.llvm_polly_link_into_tools.lower() == 'no' or \
|
|
|
|
config.llvm_polly_link_into_tools.lower() == 'off' or \
|
|
|
|
config.llvm_polly_link_into_tools.lower() == 'false' or \
|
|
|
|
config.llvm_polly_link_into_tools.lower() == 'notfound' or \
|
|
|
|
config.llvm_polly_link_into_tools.lower() == 'llvm_polly_link_into_tools-notfound':
|
2014-03-14 12:04:36 +08:00
|
|
|
config.substitutions.append(('%loadPolly', '-load '
|
2015-10-06 23:30:26 +08:00
|
|
|
+ config.polly_lib_dir + '/LLVMPolly@LLVM_SHLIBEXT@'
|
2018-04-17 15:59:46 +08:00
|
|
|
+ ' -load-pass-plugin '
|
|
|
|
+ config.polly_lib_dir + '/LLVMPolly@LLVM_SHLIBEXT@'
|
2015-10-07 00:10:29 +08:00
|
|
|
+ ' -polly-process-unprofitable '
|
2016-04-13 00:09:44 +08:00
|
|
|
+ ' -polly-remarks-minimal '
|
[ScopInfo] Do not use LLVM names to identify statements, arrays, and parameters
LLVM-IR names are commonly available in debug builds, but often not in release
builds. Hence, using LLVM-IR names to identify statements or memory reference
results makes the behavior of Polly depend on the compile mode. This is
undesirable. Hence, we now just number the statements instead of using LLVM-IR
names to identify them (this issue has previously been brought up by Zino
Benaissa).
However, as LLVM-IR names help in making test cases more readable, we add an
option '-polly-use-llvm-names' to still use LLVM-IR names. This flag is by
default set in the polly tests to make test cases more readable.
This change reduces the time in ScopInfo from 32 seconds to 2 seconds for the
following test case provided by Eli Friedman <efriedma@codeaurora.org> (already
used in one of the previous commits):
struct X { int x; };
void a();
#define SIG (int x, X **y, X **z)
typedef void (*fn)SIG;
#define FN { for (int i = 0; i < x; ++i) { (*y)[i].x += (*z)[i].x; } a(); }
#define FN5 FN FN FN FN FN
#define FN25 FN5 FN5 FN5 FN5
#define FN125 FN25 FN25 FN25 FN25 FN25
#define FN250 FN125 FN125
#define FN1250 FN250 FN250 FN250 FN250 FN250
void x SIG { FN1250 }
For a larger benchmark I have on-hand (10000 loops), this reduces the time for
running -polly-scops from 5 minutes to 4 minutes, a reduction by 20%.
The reason for this large speedup is that our previous use of printAsOperand
had a quadratic cost, as for each printed and unnamed operand the full function
was scanned to find the instruction number that identifies the operand.
We do not need to adjust the way memory reference ids are constructured, as
they do not use LLVM values.
Reviewed by: efriedma
Tags: #polly
Differential Revision: https://reviews.llvm.org/D32789
llvm-svn: 302072
2017-05-04 04:08:52 +08:00
|
|
|
+ ' -polly-use-llvm-names '
|
2017-07-11 19:07:01 +08:00
|
|
|
+ ' -polly-import-jscop-dir=%S '
|
2017-09-18 20:34:11 +08:00
|
|
|
+ ' -polly-codegen-verify '
|
2015-10-06 23:30:26 +08:00
|
|
|
))
|
2014-03-14 12:04:36 +08:00
|
|
|
else:
|
2015-10-06 23:30:26 +08:00
|
|
|
config.substitutions.append(('%loadPolly', ''
|
2015-10-07 00:10:29 +08:00
|
|
|
+ ' -polly-process-unprofitable '
|
2016-04-13 00:09:44 +08:00
|
|
|
+ ' -polly-remarks-minimal '
|
[ScopInfo] Do not use LLVM names to identify statements, arrays, and parameters
LLVM-IR names are commonly available in debug builds, but often not in release
builds. Hence, using LLVM-IR names to identify statements or memory reference
results makes the behavior of Polly depend on the compile mode. This is
undesirable. Hence, we now just number the statements instead of using LLVM-IR
names to identify them (this issue has previously been brought up by Zino
Benaissa).
However, as LLVM-IR names help in making test cases more readable, we add an
option '-polly-use-llvm-names' to still use LLVM-IR names. This flag is by
default set in the polly tests to make test cases more readable.
This change reduces the time in ScopInfo from 32 seconds to 2 seconds for the
following test case provided by Eli Friedman <efriedma@codeaurora.org> (already
used in one of the previous commits):
struct X { int x; };
void a();
#define SIG (int x, X **y, X **z)
typedef void (*fn)SIG;
#define FN { for (int i = 0; i < x; ++i) { (*y)[i].x += (*z)[i].x; } a(); }
#define FN5 FN FN FN FN FN
#define FN25 FN5 FN5 FN5 FN5
#define FN125 FN25 FN25 FN25 FN25 FN25
#define FN250 FN125 FN125
#define FN1250 FN250 FN250 FN250 FN250 FN250
void x SIG { FN1250 }
For a larger benchmark I have on-hand (10000 loops), this reduces the time for
running -polly-scops from 5 minutes to 4 minutes, a reduction by 20%.
The reason for this large speedup is that our previous use of printAsOperand
had a quadratic cost, as for each printed and unnamed operand the full function
was scanned to find the instruction number that identifies the operand.
We do not need to adjust the way memory reference ids are constructured, as
they do not use LLVM values.
Reviewed by: efriedma
Tags: #polly
Differential Revision: https://reviews.llvm.org/D32789
llvm-svn: 302072
2017-05-04 04:08:52 +08:00
|
|
|
+ ' -polly-use-llvm-names '
|
2017-07-11 19:07:01 +08:00
|
|
|
+ ' -polly-import-jscop-dir=%S '
|
2017-09-18 20:34:11 +08:00
|
|
|
+ ' -polly-codegen-verify '
|
2015-10-06 23:30:26 +08:00
|
|
|
))
|
2014-03-14 12:04:36 +08:00
|
|
|
|
2016-07-14 18:22:19 +08:00
|
|
|
if config.enable_gpgpu_codegen == 'TRUE' :
|
|
|
|
config.available_features.add('pollyacc')
|
|
|
|
|
2021-07-31 04:17:45 +08:00
|
|
|
import lit.llvm
|
|
|
|
lit.llvm.initialize(lit_config, config)
|
|
|
|
|
2011-04-29 14:27:02 +08:00
|
|
|
# Let the main config do the real work.
|
2013-08-10 05:54:36 +08:00
|
|
|
lit_config.load_config(config, "@POLLY_SOURCE_DIR@/test/lit.cfg")
|