[polly] 4dded1a - [Polly] Add -polly-isl-arg command line option.
Michael Kruse via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 6 06:57:28 PDT 2020
Author: Michael Kruse
Date: 2020-04-06T08:56:57-05:00
New Revision: 4dded1a7cb7cdc4a21a0b092ad3380e7ccae27b2
URL: https://github.com/llvm/llvm-project/commit/4dded1a7cb7cdc4a21a0b092ad3380e7ccae27b2
DIFF: https://github.com/llvm/llvm-project/commit/4dded1a7cb7cdc4a21a0b092ad3380e7ccae27b2.diff
LOG: [Polly] Add -polly-isl-arg command line option.
The option is passed as argv to ISL's command line option parser.
Polly's own own command line options take precedence over options passed
as `-polly-isl-arg`. For instance,
`-polly-isl-arg=--schedule-outer-coincidence` will be ignored in favor
of `-polly-opt-outer-coincidence`.
Reviewed By: grosser
Differential Revision: https://reviews.llvm.org/D77303
Added:
polly/test/Isl/isl-args.ll
Modified:
polly/docs/ReleaseNotes.rst
polly/lib/Analysis/ScopInfo.cpp
Removed:
################################################################################
diff --git a/polly/docs/ReleaseNotes.rst b/polly/docs/ReleaseNotes.rst
index aa039774f1c8..ab95eae4e57e 100644
--- a/polly/docs/ReleaseNotes.rst
+++ b/polly/docs/ReleaseNotes.rst
@@ -11,3 +11,8 @@ In Polly 11 the following important changes have been incorporated.
branch.
- Change ...
+
+ * The LLVM option -polly-isl-arg was added to pass options to ISL's
+ command line option parser. For instance,
+ -polly-isl-arg=--schedule-algorithm=feautrier switches to the
+ Feautrier scheduling algorithm.
diff --git a/polly/lib/Analysis/ScopInfo.cpp b/polly/lib/Analysis/ScopInfo.cpp
index d8b741c11280..fdb06be00546 100644
--- a/polly/lib/Analysis/ScopInfo.cpp
+++ b/polly/lib/Analysis/ScopInfo.cpp
@@ -157,6 +157,11 @@ static cl::opt<bool> PollyPrintInstructions(
"polly-print-instructions", cl::desc("Output instructions per ScopStmt"),
cl::Hidden, cl::Optional, cl::init(false), cl::cat(PollyCategory));
+static cl::list<std::string> IslArgs("polly-isl-arg",
+ cl::value_desc("argument"),
+ cl::desc("Option passed to ISL"),
+ cl::ZeroOrMore, cl::cat(PollyCategory));
+
//===----------------------------------------------------------------------===//
static isl::set addRangeBoundsToSet(isl::set S, const ConstantRange &Range,
@@ -1698,6 +1703,23 @@ Scop::Scop(Region &R, ScalarEvolution &ScalarEvolution, LoopInfo &LI,
: IslCtx(isl_ctx_alloc(), isl_ctx_free), SE(&ScalarEvolution), DT(&DT),
R(R), name(None), HasSingleExitEdge(R.getExitingBlock()), DC(DC),
ORE(ORE), Affinator(this, LI), ID(ID) {
+ SmallVector<char *, 8> IslArgv;
+ IslArgv.reserve(1 + IslArgs.size());
+
+ // Substitute for program name.
+ IslArgv.push_back(const_cast<char *>("-polly-isl-arg"));
+
+ for (std::string &Arg : IslArgs)
+ IslArgv.push_back(const_cast<char *>(Arg.c_str()));
+
+ // Abort if unknown argument is passed.
+ // Note that "-V" (print isl version) will always call exit(0), so we cannot
+ // avoid ISL aborting the program at this point.
+ unsigned IslParseFlags = ISL_ARG_ALL;
+
+ isl_ctx_parse_options(IslCtx.get(), IslArgv.size(), IslArgv.data(),
+ IslParseFlags);
+
if (IslOnErrorAbort)
isl_options_set_on_error(getIslCtx().get(), ISL_ON_ERROR_ABORT);
buildContext();
diff --git a/polly/test/Isl/isl-args.ll b/polly/test/Isl/isl-args.ll
new file mode 100644
index 000000000000..84207983f3a0
--- /dev/null
+++ b/polly/test/Isl/isl-args.ll
@@ -0,0 +1,36 @@
+; RUN: opt %loadPolly -polly-scops -disable-output -polly-isl-arg=-V < %s | FileCheck %s -match-full-lines --check-prefix=VERSION
+; RUN: opt %loadPolly -polly-scops -disable-output -polly-isl-arg=-h < %s | FileCheck %s -match-full-lines --check-prefix=HELP
+; RUN: not opt %loadPolly -polly-scops -disable-output -polly-isl-arg=-asdf < %s 2>&1| FileCheck %s -match-full-lines --check-prefix=UNKNOWN
+; RUN: opt %loadPolly -polly-scops -disable-output -polly-isl-arg=--schedule-algorithm=feautrier < %s
+
+; VERSION: isl-{{.*}}-IMath-32
+; HELP: Usage: -polly-isl-arg [OPTION...]
+; UNKNOWN: -polly-isl-arg: unrecognized option: -asdf
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+
+; Any valid SCoP causing the creation of a ScopInfo object.
+define void @foo_1d(float* %A) {
+bb:
+ br label %bb1
+
+bb1: ; preds = %bb6, %bb
+ %i.0 = phi i64 [ 0, %bb ], [ %tmp7, %bb6 ]
+ %exitcond = icmp ne i64 %i.0, 1024
+ br i1 %exitcond, label %bb2, label %bb8
+
+bb2: ; preds = %bb1
+ %tmp = sitofp i64 %i.0 to float
+ %tmp3 = getelementptr inbounds float, float* %A, i64 %i.0
+ %tmp4 = load float, float* %tmp3, align 4
+ %tmp5 = fadd float %tmp4, %tmp
+ store float %tmp5, float* %tmp3, align 4
+ br label %bb6
+
+bb6: ; preds = %bb2
+ %tmp7 = add nuw nsw i64 %i.0, 1
+ br label %bb1
+
+bb8: ; preds = %bb1
+ ret void
+}
More information about the llvm-commits
mailing list