[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