Skip to content

Commit

Permalink
[Polly] Add -polly-isl-arg command line option.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Meinersbur committed Apr 6, 2020
1 parent 880ec42 commit 4dded1a
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 0 deletions.
5 changes: 5 additions & 0 deletions polly/docs/ReleaseNotes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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.
22 changes: 22 additions & 0 deletions polly/lib/Analysis/ScopInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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();
Expand Down
36 changes: 36 additions & 0 deletions polly/test/Isl/isl-args.ll
Original file line number Diff line number Diff line change
@@ -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
}

0 comments on commit 4dded1a

Please sign in to comment.