Commit Graph

780 Commits

Author SHA1 Message Date
Tobias Grosser 5db6ffd76f LoopGenerators: Construct loops such that they are already loop rotated
BeforeBB
                   |
                   v
                GuardBB
                /      \
       __  PreHeaderBB  \
      /  \    /         |
   latch  HeaderBB      |
      \  /    \         /
       <       \       /
                \     /
                ExitBB

This does not only remove the need for an explicit loop rotate pass, but it also
gives us the possibility to skip the construction of the guard condition in case
the loop is known to be executed at least once. We do not yet exploit this, but
by implementing this analysis in the isl code generator we should be able to
remove more guards than the generic loop rotate pass can.  Another point is that
loop rotation can introduce additional PHI nodes, which may hide that a loop can
be executed in parallel. This change avoids this complication and will make it
easier to move the openmp code generation into a separate pass.

llvm-svn: 181986
2013-05-16 06:40:06 +00:00
Tobias Grosser 83628182f7 Sort includes
llvm-svn: 181297
2013-05-07 08:11:54 +00:00
Tobias Grosser 637bd63123 Move polly options into separate option category
Use the new cl::OptionCategory support to move the Polly options into a separate
option category. The aim is to hide most options and show by default only the
options a user needs to influence '-O3 -polly'. The available options probably
need some care, but here is the current status:

Polly Options:
Configure the polly loop optimizer

  -enable-polly-openmp              - Generate OpenMP parallel code
  -polly                            - Enable the polly optimizer (only at -O3)
  -polly-no-tiling                  - Disable tiling in the scheduler
  -polly-only-func=<function-name>  - Only run on a single function
  -polly-report                     - Print information about the activities
                                      of Polly
  -polly-vectorizer                 - Select the vectorization strategy
    =none                           -   No Vectorization
    =polly                          -   Polly internal vectorizer
    =unroll-only                    -   Only grouped unroll the vectorize
                                        candidate loops
    =bb                             -   The Basic Block vectorizer driven by
                                        Polly

llvm-svn: 181295
2013-05-07 07:31:10 +00:00
Tobias Grosser e602a07662 Reformat with clang-format
clang-format become way more stable. This time we mainly reformat function
signatures.

llvm-svn: 181294
2013-05-07 07:30:56 +00:00
Tobias Grosser d0fe8371bf cmake: Add target to reformat with clang-format
Calling 'make polly-update-format' will format all Polly files with
clang-format.

llvm-svn: 181293
2013-05-07 07:30:31 +00:00
Tobias Grosser e8df5bd92b IndependentBlocks: We can only reconstruct PHI nodes that are within the ScoP
In the classical (non -polly-codegen-scev) mode, we assume that we can always
recreate PHI nodes during code generation. This is not true. We can only
reconstruct them from the polyhedral information, in case the entire loop of the
PHI node is part of the SCoP and consequently the PHI node was translated in
the polyhedral description.

llvm-svn: 179674
2013-04-17 07:20:36 +00:00
Tobias Grosser b5f92892d1 Remove unneeded RegionSimplify pass.
We now support regions with multiple entries and multiple exits natively.
Regions are not needed to be simplified to single entry and single exit.

We need to XFAIL two test cases as this change increases the scop coverage
and uncoveres two failures in the independent blocks pass. The first failure
will be fixed in a subsequent commit, the second one is in the non-default
-polly-codegen-scev mode and still needs to be fixed.

Contributed-by: Star Tan <tanmx_star@yeah.net>
llvm-svn: 179673
2013-04-17 07:20:30 +00:00
Tobias Grosser 36a01b0a28 tests: Fix 'instruction does not dominate all its uses' error
The LLVM-IR of this test case was apperently incorrect.

llvm-svn: 179672
2013-04-17 07:20:17 +00:00
Tobias Grosser 8edce4ee62 Support SCoPs with multiple entry edges.
Regions that have multiple entry edges are very common. A simple if condition
yields e.g. such a region:

  if
 /   \
then  else
 \   /
for_region

This for_region contains two entry edges 'then' -> 'for_region' and 'else' -> 'for_region'.

Previously we scheduled the RegionSimplify pass to translate such regions into
simple regions. With this patch, we now support them natively when the region is
in -loop-simplify form, which means the entry block should not be a loop header.

Contributed by:  Star Tan <tanmx_star@yeah.net>

llvm-svn: 179586
2013-04-16 08:04:42 +00:00
Tobias Grosser 3ed2600cab SCEVValidator: Correctly store 'k * p' as a parameter
We do not only need to understand that 'k * p' is a parameter expression, but
also need to store this expression in the set of parameters. Before this patch
we wrongly stored the two individual parameters %k and %p.

Reported by: Sebastian Pop <spop@codeaurora.org>

llvm-svn: 179485
2013-04-14 13:15:59 +00:00
Tobias Grosser 249c4b1ad5 ScheduleOptimizer: Use isl_map_from_union_map to extract map.
llvm-svn: 179268
2013-04-11 05:55:13 +00:00
Tobias Grosser f242b806ac ScheduleOpt: Do not crash on statements with empty iteration domains
Statements with an empty iteration domain may not have a schedule assigned by
the isl schedule optimizer. As Polly expects each statement to have a schedule,
we keep the old schedule for such statements.

This fixes http://llvm.org/PR15645`

Reported-by: Johannes Doerfert  <johannesdoerfert@gmx.de>
llvm-svn: 179233
2013-04-10 22:48:08 +00:00
Sebastian Pop 1006614228 fix testcase
llvm-svn: 179183
2013-04-10 16:44:08 +00:00
Tobias Grosser ecb5092707 ScopDetect: Allow multiplications of the form <param> * <param>
We handle these by treating this result of the multiplication as an additional
parameter.

llvm-svn: 179163
2013-04-10 07:42:28 +00:00
Tobias Grosser d7e58640a5 Update formatting to latest version of clang-format
llvm-svn: 179160
2013-04-10 06:55:45 +00:00
Tobias Grosser 0ee50f6ee4 Support SCoPs with multiple exit edges
Regions that have multiple exit edges are very common. A simple if condition
yields e.g. such a region:

        if
      /   \
  then     else
      \   /
      after

Region: if -> after

This regions contains the bbs 'if', 'then', 'else', but not 'after'. It has
two exit edges 'then' -> 'after' and 'else' -> 'after'.

Previously we scheduled the RegionSimplify pass to translate such regions into
simple regions. With this patch, we now support them natively.

Contributed-by: Star Tan <tanmx_star@yeah.net>
llvm-svn: 179159
2013-04-10 06:55:31 +00:00
Tobias Grosser 03fc9acbe5 Codegen: Replace region exit and entries recursively
During code generation we split the original entry and exit basic blocks
of the scop to make room for the newly generated code. To keep the region tree
up to date, we need to update the region tree. This patch ensures that not only
the region of the scop is updated, but also all child regions that share the
same entry or exit block.

We have now test case here, as the bug is only exposed by the subsequent commit.
The test cases of that commit also cover this bug.

Contributed-by: Star Tan <tanmx_star@yeah.net>
llvm-svn: 179158
2013-04-10 06:55:20 +00:00
Sebastian Pop e7a7beec7d fix typos
llvm-svn: 179149
2013-04-10 04:09:12 +00:00
Sebastian Pop 9f57c5b695 scop detection: properly instantiate SCEVs to the place where they are used
Fix inspired from c2d4a0627e95c34a819b9d4ffb4db62daa78dade.

    Given the following code

        for (i = 0; i < 10; i++) {
          ;
        }

    S:  A[i] = 0

    When translate the data reference A[i] in statement S using scev, we need to
    retrieve the scev of 'i' at the location of 'S'. If we do not do this the
    scev that we obtain will be expressed as {0,+,1}_for and will reference loop
    iterators that do not surround 'S'. What we really want is the scev to be
    instantiated to the value of 'i' after the loop. This value is {10}.

This used to crash in:

    int loopDimension = getLoopDepth(Expr->getLoop());

    isl_aff *LAff = isl_aff_set_coefficient_si(
        isl_aff_zero_on_domain(LocalSpace), isl_dim_in, loopDimension, 1);

(gdb) p Expr->dump()
{8,+,8}<nw><%do.body>

(gdb) p getLoopDepth(Expr->getLoop())
$5 = 0

    isl_space *Space = isl_space_set_alloc(Ctx, 0, NbLoopSpaces);
    isl_local_space *LocalSpace = isl_local_space_from_space(Space);

As we are trying to create a memory access in a stmt that is outside all loops,
LocalSpace has 0 dimensions:

(gdb) p NbLoopSpaces
$12 = 0

(gdb) p Statement.BB->dump()

if.then:                                          ; preds = %do.end
  %0 = load float* %add.ptr, align 4
  store float %0, float* %q.1.reg2mem, align 4
  br label %if.end.single_exit

and so the scev for %add.ptr should be taken at the place where it is used,
i.e., it should be the value on the last iteration of the do.body loop, and not
"{8,+,8}<nw><%do.body>".

llvm-svn: 179148
2013-04-10 04:05:18 +00:00
Sebastian Pop 9ca6612731 IndependentBlocks: translate out of SSA all uses escaping the region
llvm-svn: 179019
2013-04-08 13:05:41 +00:00
Sebastian Pop cefec6d7e4 SCEVCodegen should not run createIndVarSimplifyPass
llvm-svn: 179018
2013-04-08 13:05:37 +00:00
Tobias Grosser aeabcf24df ScopDetection: Use isTopLevelRegion
Contributed-by: Star Tan <tanmx_star@yeah.net>
llvm-svn: 178530
2013-04-02 06:41:48 +00:00
Tobias Grosser c2bdf1973b RegisterPasses: Improve comments
llvm-svn: 177831
2013-03-23 21:35:52 +00:00
Tobias Grosser 7670bb5c31 Cloog: Add virtual destructor to silence gcc warning
This silences the following warning:

  'polly::ClastVisitor' has virtual functions but non-virtual destructor
  [-Wnon-virtual-dtor]

llvm-svn: 177798
2013-03-23 01:10:53 +00:00
Tobias Grosser 4d96c8d714 clang-format: Many more files
After this commit, polly is clang-format clean. This can be tested with
'ninja polly-check-format'. Updates to clang-format may change this, but the
differences will hopefully be both small and general improvements to the
formatting.

We currently have some not very nice formatting for a couple of items, DEBUG()
stmts for example. I believe the benefit of being clang-format clean outweights
the not perfect layout of this code.

llvm-svn: 177796
2013-03-23 01:05:07 +00:00
Tobias Grosser 0db04b4778 cmake: Do not clang-format check the externally imported json library
llvm-svn: 177795
2013-03-23 01:04:48 +00:00
Tobias Grosser 45af235e09 RegisterPasses: clang-format
llvm-svn: 177787
2013-03-23 00:32:21 +00:00
Tobias Grosser f008da125c Instvarsimplify: clang-format
Even though we will soon get rid of this pass, we reformat it on the way to
make polly clang-format clean.

llvm-svn: 177786
2013-03-23 00:32:18 +00:00
Tobias Grosser 9abbfc0b69 IndependentBlocks: clang-format and remove includes
llvm-svn: 177785
2013-03-23 00:32:15 +00:00
Tobias Grosser c30d9cc678 DeadCodeElimination: clang-format and comment
llvm-svn: 177782
2013-03-23 00:16:05 +00:00
Tobias Grosser 33bc2e93be CodePreparation: Comment and format the file properly
llvm-svn: 177781
2013-03-23 00:13:39 +00:00
Tobias Grosser 369430ffca codegen: properly instantiate SCEVs to the place where they are used
Given the following code

    for (i = 0; i < 10; i++) {
      ;
    }

S:  A[i] = 0

When code generating S using scev based code generation, we need to retrieve
the scev of 'i' at the location of 'S'. If we do not do this the scev that
we obtain will be expressed as {0,+,1}_for and will reference loop iterators
that do not surround 'S' and that we consequently do not know how to code
generate. What we really want is the scev to be instantiated to the value of 'i'
after the loop. This value is {10} and it can be code generated without
troubles.

llvm-svn: 177777
2013-03-22 23:42:53 +00:00
Sebastian Pop 27c10c6b1f ScopInfo: do not call getCanonicalInductionVariable for SCEVCodegen
llvm-svn: 177771
2013-03-22 22:07:43 +00:00
Tobias Grosser 8ff029ccf1 Add failing test case
llvm-svn: 177645
2013-03-21 16:14:55 +00:00
Tobias Grosser 4e318abece Do not canonicalize indvars with scev based codegen
Scev code generation can now handle scops with non canonical induction
variables. Hence there is no need to introduce canonical ones any more.

llvm-svn: 177644
2013-03-21 16:14:53 +00:00
Tobias Grosser 826b2af112 Remove last uses of canoncial induction variable when scev code generating
We now detect scops without a canonical induction variable and can generate a
polyhedral representation for them. There was no modification necessary to
code generate these scops.

llvm-svn: 177643
2013-03-21 16:14:50 +00:00
Tobias Grosser 1f0d82c7d7 TempScop: Make assert more descriptive
llvm-svn: 177642
2013-03-21 16:14:45 +00:00
Tobias Grosser 5bfa4f8eb8 CodePrepare: Do not require canonical induction variables for scev based mode
llvm-svn: 177593
2013-03-20 22:41:53 +00:00
Tobias Grosser db8b8a5b8e ScopDetect: Test case to verify that base pointers are scop invariant
llvm-svn: 177582
2013-03-20 21:40:11 +00:00
Tobias Grosser e4584f6abf ScopDetect: Add test cases for non-simple regions
llvm-svn: 177567
2013-03-20 20:02:35 +00:00
Tobias Grosser ecfe21b792 Remove dependence on canonical induction variable
When using the scev based code generation, we now do not rely on the presence
of a canonical induction variable any more. This commit prepares the path to
(conditionally) disable the induction variable canonicalization pass.

llvm-svn: 177548
2013-03-20 18:03:18 +00:00
Andy Gibbs 36e6ca0143 Remove unnecessary explicit typing in std::make_pair
llvm-svn: 177528
2013-03-20 15:42:59 +00:00
Tobias Grosser b921e6377b Add option -polly-code-generator=none
This allows us to test Polly and the Polly optimizer without actually doing
code generation at the end. By enabling this option, we can also measure the
compile time overhead due to code generation and the cost of LLVM optimizing the
newly generated code.t

llvm-svn: 177516
2013-03-20 13:03:26 +00:00
Tobias Grosser 0fbbbf6aa7 Silence 'variable unused' warning in release mode
llvm-svn: 177515
2013-03-20 13:03:25 +00:00
Tobias Grosser 84b81dee55 ScopDetect: Remove some redundant semicolons
llvm-svn: 177444
2013-03-19 21:44:07 +00:00
Tobias Grosser d2fbbf0f74 IndependentBlocks: Add a couple of test cases.
llvm-svn: 177438
2013-03-19 21:11:25 +00:00
Tobias Grosser d4ff632fa9 ScopDetection: Add a couple of test cases
llvm-svn: 177433
2013-03-19 20:15:19 +00:00
Sebastian Pop 97cb813c29 Correct function to decide if a SCEV can be ignored
When doing SCEV based code generation, we ignore instructions calculating values
that are fully defined by a SCEV expression. The values that are calculated by
this instructions are recalculated on demand.

This commit improves the check to verify if certain instructions can be ignored
and recalculated on demand.

llvm-svn: 177313
2013-03-18 20:21:13 +00:00
Tobias Grosser 0db0878ead ScopHelper: clang-format
llvm-svn: 177309
2013-03-18 19:19:57 +00:00
Tobias Grosser 0d1cf2b875 ScopHelper: Remove some dead code
llvm-svn: 177307
2013-03-18 19:17:07 +00:00
Sebastian Pop e039bb1fdb use the canonical IV only when it exists
llvm-svn: 177306
2013-03-18 19:09:49 +00:00
Tobias Grosser 7f54714dcc tests: Properly check if asserts are available
In my previous commits I failed to realise that my new requires lines fully
disabled these tests. We now properly check if we are in an asserts build and
only disable the tests if assertions are not available.

Reported-by: Sean Silva <silvas@purdue.edu>
llvm-svn: 176900
2013-03-12 21:27:39 +00:00
Tobias Grosser ee9423920e Missed on test case in the last commit
llvm-svn: 176864
2013-03-12 13:39:40 +00:00
Tobias Grosser c9a72919a5 Move tests that depend on -stats under 'requires asserts'
This fixes issues caused by the following commit:

  r176733 | jvoung | 2013-03-08 17:56:31 -0500
  Disable statistics on Release builds and move tests that depend on -stats.

Reported by: Jack Howarth <howarth@bromo.med.uc.edu>

llvm-svn: 176856
2013-03-12 08:45:15 +00:00
Tobias Grosser b2863ca2dc Print function names under --polly-report
llvm-svn: 176446
2013-03-04 19:49:51 +00:00
Bill Wendling 83e9312ece Use attributes references on call/invoke instructions.
llvm-svn: 175881
2013-02-22 09:29:15 +00:00
Tobias Grosser de49b8fa3b Support: clang-format
llvm-svn: 175874
2013-02-22 08:21:52 +00:00
Tobias Grosser 7242ad9226 CodeGen: clang-format
llvm-svn: 175872
2013-02-22 08:07:06 +00:00
Sebastian Pop 47d4ee3ed4 capitalize SCEV to match the current naming convention
llvm-svn: 175306
2013-02-15 21:26:53 +00:00
Sebastian Pop d768601be1 check that clang-format exists
llvm-svn: 175305
2013-02-15 21:26:50 +00:00
Sebastian Pop f30d3b2d89 don't store a pointer to the loop in IVS
llvm-svn: 175304
2013-02-15 21:26:48 +00:00
Sebastian Pop 860e021fe6 add NestLoops to remove some uses of IVS
llvm-svn: 175303
2013-02-15 21:26:44 +00:00
Sebastian Pop 637b23dc63 use apply and ScevParameterRewriter::rewrite instead of SCEVRewriter
llvm-svn: 175296
2013-02-15 20:56:01 +00:00
Sebastian Pop 9d10fffa33 add LoopToScev maps
llvm-svn: 175295
2013-02-15 20:55:59 +00:00
Tobias Grosser 482706f31f Do not run formatting checks by default
llvm-svn: 175178
2013-02-14 16:42:50 +00:00
Tobias Grosser d535f55146 Formatting fixes
llvm-svn: 175177
2013-02-14 16:42:45 +00:00
Tobias Grosser 02d9a6a100 clang-format: Really check all files
llvm-svn: 175174
2013-02-14 16:25:44 +00:00
Tobias Grosser f471c3e63a Report formatting problems as with 'diff -u'
llvm-svn: 175171
2013-02-14 16:20:55 +00:00
Tobias Grosser c38af88764 cmake: add command polly-check-format
This command runs clang-format on all files and reports formatting problems

llvm-svn: 175170
2013-02-14 16:19:16 +00:00
Tobias Grosser e2417fc2a4 clang-format a file
llvm-svn: 175012
2013-02-12 22:05:48 +00:00
Tobias Grosser d1d40a9e0a Use documented isl function
llvm-svn: 175011
2013-02-12 22:05:43 +00:00
Tobias Grosser c92c8f06ec [isl-codegen]: Fix off by one in getNumberOfIterations
We need to remove one dimension. Any is correct as long as it exists. We have
choosen for whatever reason the dimension #dims - 2. This is incorrect if
there is just one dimension. For CLooG this case did never happen. For isl
however, the case can happen and causes undefined behavior including crashes.
We choose now always the last dimension #dims - 1. We could have choosen
dimension '0' but the last dimension is what we remove conceptionally in the
algorithm, so it seems better to actually program it that way.

While at it remove another piece of undefined behavior.

llvm-svn: 174894
2013-02-11 17:52:36 +00:00
Tobias Grosser 7b3ac71920 [cmake] Make CLooG optional
CLooG is already optional in the autoconf build.

llvm-svn: 174872
2013-02-11 10:36:19 +00:00
Tobias Grosser c14582f276 CodeGen: clang-format goodness
The changed files are not yet clang-format clean, but we are getting close.

llvm-svn: 174403
2013-02-05 18:01:29 +00:00
Tobias Grosser 1f11b44939 TempScopInfo: clang-format
llvm-svn: 174368
2013-02-05 12:27:23 +00:00
Tobias Grosser 14f4c3e9fa Dependences: clang-format
Everything except INITIALIZE_PASS_* macros

llvm-svn: 174367
2013-02-05 12:27:22 +00:00
Tobias Grosser abfbe637bc ScopInfo: clang-format file
clang-format was able to format the entire file except the final
INITIALIZE_PASS_* macros.

llvm-svn: 174366
2013-02-05 12:09:06 +00:00
Tobias Grosser 0d1eee3298 ScopDetect: clang-format pointer types in templates
llvm-svn: 174365
2013-02-05 11:56:05 +00:00
Tobias Grosser af3c00b87b ScopDetection: clang-format some more code
llvm-svn: 174362
2013-02-05 09:40:22 +00:00
Tobias Grosser 428b3e48e2 ScopDetection: Improve printing of alias sets
We now show the all members of the alias set that may couse possible aliasing.
In case a alias set member is not a named instruction (unnamed instructions or
constant expressions), we show the expression itself.

This improves our error message

from:

  Possible aliasing for value: .reg2mem

to:

  Possible aliasing: ".reg2mem",
                     "[0 x double]* inttoptr (i64 47255179264 to [0 x double]*)

llvm-svn: 174329
2013-02-04 15:46:25 +00:00
Tobias Grosser 71036882d2 cmake: Install all polly include files
Contributed-by: Richard Membarth <richard.membarth@informatik.uni-erlangen.de>
llvm-svn: 172903
2013-01-19 14:17:52 +00:00
Tobias Grosser f75ba19697 www: Add kernelgen publications
Contributed by: Dmitry Mikushin <dmitry@kernelgen.org>

llvm-svn: 172772
2013-01-18 00:26:39 +00:00
Tobias Grosser 18b1abb137 Add missing __isl_give
Contributed by: Sameer Abu Asal <sameer.abuasal@gmail.com>

llvm-svn: 172771
2013-01-18 00:09:42 +00:00
Tobias Grosser 74394f0dcf clang-format goodness
llvm-svn: 172486
2013-01-14 22:40:23 +00:00
Tobias Grosser b1304ba9b2 Dead code elimination: Make variable names uppercase
llvm-svn: 171844
2013-01-08 08:53:58 +00:00
Tobias Grosser 184e2fcd9c clang-format the dead code elimination pass
llvm-svn: 171843
2013-01-08 08:27:46 +00:00
Chandler Carruth 535d52c7ca Rewrite #includes for llvm/Foo.h to llvm/IR/Foo.h as appropriate to
reflect the migration in r171366.

llvm-svn: 171370
2013-01-02 11:47:44 +00:00
NAKAMURA Takumi 43632a26a5 Update the copyright coredits -- Happy new year 2013!
llvm-svn: 171342
2013-01-01 10:00:19 +00:00
Tobias Grosser ae2d83ec41 Formatting: Break lines after binary operators such as '&&'
assert(Condition
       && "Text");

->

assert(Condition &&
       "Text);

This aligns Polly with the style used in LLVM.

llvm-svn: 171242
2012-12-29 23:57:18 +00:00
Tobias Grosser 1bb59b0dcf Fix obvious formatting problems.
We fix the following formatting problems found by clang-format:

  - 80 cols violations
  - Obvious problems with missing or too many spaces
  - multiple new lines in a row

clang-format suggests many more changes, most of them falling in the following
two categories:

  1) clang-format does not at all format a piece of code nicely

  2) The style that clang-format suggests does not match the style used in
     Polly/LLVM

I consider differences caused by reason 1) bugs, which should be fixed by
improving clang-format. Differences due to 2) need to be investigated closer
to understand the cause of the difference and the solution that should be taken.

llvm-svn: 171241
2012-12-29 23:47:38 +00:00
Tobias Grosser 16242dab74 www: Add news to Polly website
llvm-svn: 171231
2012-12-29 17:40:09 +00:00
Tobias Grosser 317b5ef24d www: Add new Polly publication
Polly - Performing polyhedral optimizations on a low-level intermediate
representation

Tobias Grosser, Armin Groesslinger, Christian Lengauer Parallel
Processing Letters 2012 22:04

llvm-svn: 171228
2012-12-29 16:47:41 +00:00
Tobias Grosser 7a2f39534f 'chmod -x' on files that do not need the executable bits
llvm-svn: 171224
2012-12-29 15:09:03 +00:00
Sebastian Pop ab9ea13f64 avoid initializing twice
llvm-svn: 170854
2012-12-21 07:27:17 +00:00
Sebastian Pop eb283143e2 do not access Info when it is NULL
llvm-svn: 170853
2012-12-21 07:27:13 +00:00
Sebastian Pop 2aa5c24a3a return -1 when polly::getNumberOfIterations returns -1
llvm-svn: 170422
2012-12-18 08:56:51 +00:00
Sebastian Pop 04c4ce32ae isl: vector code generation based on ISL ast
Original patch by Tobias Grosser, slightly modified by Sebastian Pop.

llvm-svn: 170420
2012-12-18 07:46:13 +00:00
Sebastian Pop a00a029115 change interface for isStride
isStride now takes a partial schedule as input.

Patch from Tobias Grosser <tobias@grosser.es>.

llvm-svn: 170419
2012-12-18 07:46:06 +00:00
Sebastian Pop e252c85545 isl: detect vector parallelism
llvm-svn: 170138
2012-12-13 16:52:41 +00:00
Tobias Grosser e36abf6d5d isl: Detect openmp parallelism
Based on code written by Riyadh Baghdadi.

llvm-svn: 170102
2012-12-13 06:24:06 +00:00
Andy Gibbs 9936b214c0 Integrate polly test-suite into an llvm "make check-all" if built as part of the whole using cmake.
llvm-svn: 169487
2012-12-06 07:59:18 +00:00
Tobias Grosser 7e07b14d0b User isl sha commit id instead of the git tag
Apperently the git tag causes trouble in some scripts.

llvm-svn: 169313
2012-12-04 21:54:37 +00:00
Sebastian Pop a267d9b829 adapt cloog codegen testcases to isl
llvm-svn: 169161
2012-12-03 21:34:09 +00:00
Sebastian Pop 47987128b6 use -polly-ast instead of -polly-cloog
llvm-svn: 169160
2012-12-03 21:33:55 +00:00
Sebastian Pop b08a52898a execute cloog specific testcases only with CLOOG_FOUND
llvm-svn: 169159
2012-12-03 21:33:40 +00:00
Tobias Grosser e50df53625 Update CLooG
This cloog versions passes all tests with isl 0.11.

llvm-svn: 169150
2012-12-03 20:47:57 +00:00
Tobias Grosser c1e1b26f0a Use isl 0.11
We now switch to the newly released isl 0.11. This adds a couple of bug fixes
on top of the recent update.

llvm-svn: 169127
2012-12-03 14:44:14 +00:00
Tobias Grosser b2e572c6df Update the recommended isl version
Recent changes in isl:

- Allow analysis of loops during code generation

This simplifies the detection of parallel loops.

- Simplify the way costumized ast printers are defined

This enables us to highlight parallel / vector loops in our debug output.

- Compile time improvements for codegen contexts that include parameters

- Various bug fixes

This update also gets us in sync for the isl 0.11 release.

llvm-svn: 169100
2012-12-01 21:51:10 +00:00
Tobias Grosser 46c6abb306 Remove unneeded preservation and restore of ValueMap and ClastVars in GPGPU code
generation.

We don't use the exact same way to build loop body for GPGPU codegen as openmp
codegen and other transformations do currently, in which cases 'createLoop'
function is called recursively. GPGPU codegen may fail due to improper restore
of ValueMap and ClastVars .

Contributed by:  Yabin Hu <yabin.hwu@gmail.com>

llvm-svn: 168966
2012-11-30 01:05:05 +00:00
Tobias Grosser 6f3d0633a4 Add an additional input argument according to chanages of function polly::createLoop.
Contributed-by:  Yabin Hu <yabin.hwu@gmail.com>
llvm-svn: 168964
2012-11-30 00:39:49 +00:00
Tobias Grosser 5087d0adcb Update to Polly for LLVM r165262 which changes TargetData to Datalayout.
Contributed by: Yabin Hu <yabin.hwu@gmail.com>

llvm-svn: 168903
2012-11-29 17:34:50 +00:00
Patrik Hägglund b476cdfde5 Fix tests with broken datalayout strings.
Buildbot failure at r168785.

llvm-svn: 168791
2012-11-28 13:30:31 +00:00
Tobias Grosser 70325bb308 cmake: Fix installation of include files
Install the configured Config/config.h file, rather than the
Config/config.h.cmake and Config/Config.h.in source files.

Contributed-by: Richard Membarth <richard.membarth@informatik.uni-erlangen.de>
llvm-svn: 168780
2012-11-28 10:12:21 +00:00
Sebastian Pop ee4baf3eec do not execute the OpenMP tests when cloog is not found
llvm-svn: 168724
2012-11-27 21:15:15 +00:00
Sebastian Pop facd36e5c7 make IslAstInfo::printScop compatible with CloogInfo::printScop
llvm-svn: 168714
2012-11-27 18:50:41 +00:00
Sebastian Pop f2379e0848 do not require cloog from configure
llvm-svn: 168628
2012-11-26 23:03:41 +00:00
Sebastian Pop 7cf3104b7c fix typo
Caught while compiling polly without cloog:

../tools/polly/lib/RegisterPasses.cpp:77: error: use of enum 'CodegenChoice' without previous declaration

llvm-svn: 168624
2012-11-26 22:16:19 +00:00
Sebastian Pop 98b3544705 remove dependence on CLOOG_FOUND for PollyVectorizerChoice
When polly was configured with cmake without cloog, compilation stopped with:

../tools/polly/lib/CodeGen/BlockGenerators.cpp:662: error: 'PollyVectorizerChoice' was not declared in this scope
../tools/polly/lib/CodeGen/BlockGenerators.cpp:662: error: 'VECTORIZER_FIRST_NEED_GROUPED_UNROLL' was not declared in this scope

llvm-svn: 168623
2012-11-26 22:16:17 +00:00
Sebastian Pop 05c1f00cae remove dead code
llvm-svn: 168621
2012-11-26 22:07:30 +00:00
Sebastian Pop b35ae612ea remove unused flag
llvm-svn: 168620
2012-11-26 22:07:27 +00:00
Tobias Grosser c1b6cec0e7 Make polly -Wdocumentation clean
llvm-svn: 168311
2012-11-19 12:26:25 +00:00
Sebastian Pop bea5a36b01 utils: use rmdir instead of rm to remove empty dirs
as suggested by Sven Verdoolaege <skimo-polly@kotnet.org>

llvm-svn: 168279
2012-11-18 04:34:31 +00:00
Sebastian Pop 328bd58b55 utils: remove the isl directory after cloning cloog
This fixes my previous commit, thanks to "Dmitry N. Mikushin"
<maemarcus@gmail.com>

llvm-svn: 168252
2012-11-17 04:57:41 +00:00
Sebastian Pop 0dace3939d utils: remove existing cloog and isl dirs before git cloning
Patch adapted from "Dmitry N. Mikushin" <maemarcus@gmail.com>.

llvm-svn: 168250
2012-11-17 03:43:48 +00:00
Sebastian Pop 654b7754bc autoconf: isl depends on gmp include files
When libgmp header files are not installed in the default /usr/include location,
configure used to fail to find the gmp headers when testing for isl/ast.h.  This
patch adds the gmp include path to the compiler flags before testing for ISL.

llvm-svn: 168090
2012-11-15 21:20:22 +00:00
Tobias Grosser 3344f733fd test: LLVM supports now vectors of arbitrary pointers
This allows Polly to vectorize more code. Fix the relevant test cases.

llvm-svn: 167923
2012-11-14 08:25:52 +00:00
Tobias Grosser 38ea9cd721 Tests: Pipe test files into 'opt'
Use 'opt < %s' instead of just 'opt %s' to ensure that no temporary files are
created.

llvm-svn: 167372
2012-11-04 16:56:20 +00:00
Tobias Grosser dcebf1e9da Tests: remove ModuleID lines
llvm-svn: 167284
2012-11-02 06:09:20 +00:00
Tobias Grosser 41b20a62c9 Tests: move content of .c files in .ll
llvm-svn: 167283
2012-11-02 06:08:39 +00:00
Tobias Grosser 3eb851f370 Remove runtime tests from polly test suite
Similar to LLVM we now follow the policy of only having LLVM-IR level tests in
the Polly test suite. Testing for miscompilation of larger programs should be
done with the llvm test suite.

llvm-svn: 167255
2012-11-01 21:44:59 +00:00
Tobias Grosser 81a1c75035 Dependences: Add support to calculate memory based dependences
Instead of calculating exact value (flow) dependences, it is also possible to
calculate memory based dependences. Sometimes memory based dependences are a lot
easier to calculate. To evaluate the benefits, we add an option to calculate
memory based dependences (use -polly-value-dependences=false).

llvm-svn: 167251
2012-11-01 21:28:32 +00:00
Tobias Grosser 531891e980 ScopDetection: Print line numbers of detected scops
If the flags '-polly-report -g' are given, we print file name and line numbers
for the beginning and end of all detected scops.

  linear-algebra/kernels/gemm/gemm.c:23: Scop start
  linear-algebra/kernels/gemm/gemm.c:42: Scop end
  linear-algebra/kernels/gemm/gemm.c:77: Scop start
  linear-algebra/kernels/gemm/gemm.c:82: Scop end

llvm-svn: 167235
2012-11-01 16:45:20 +00:00
Tobias Grosser 5d01691d76 Revert multiple adress space changes in Polly
llvm-svn: 167234
2012-11-01 16:45:18 +00:00
Tobias Grosser ebe8c8cea2 Codegen: Selectively copy in array addresses for OpenMP code
The detection of values that need to be copied in to the generated OpenMP
subfunction also detects the array base addresses needed in the SCoP. Hence, it
is not necessary to unconditionally copy all the base addresses to the generated
function.

Test cases are modified to reflect this change. Arrays which are global
variables do not occur in the struct passed to the subfunction anymore. A test
case for base address copy-in is added in copy_in_array.{c,ll}.

Committed with slight modifications

Contributed by:  Armin Groesslinger <armin.groesslinger@uni-passau.de>

llvm-svn: 167215
2012-11-01 05:34:55 +00:00
Tobias Grosser 177982c478 CodeGen: Add scop-parameters to the OpenMP context
In addition to the arrays and clast variables a SCoP statement may also refer to
values defined before the SCoP or to function arguments. Detect these values and
add them to the set of values passed to the function generated for OpenMP
parallel execution of a clast.

Committed with additional test cases and some refactoring.

Contributed by:  Armin Groesslinger  <armin.groesslinger@uni-passau.de>

llvm-svn: 167214
2012-11-01 05:34:48 +00:00
Tobias Grosser a17f666f99 Codegen: Copy and restore the ValueMap and ClastVars explicitly
When generating OpenMP or GPGPU code the original ValueMap and ClastVars must be
kept. We already recovered the original ClastVars by reverting the changes, but
we did not keep the content of the ValueMap. This patch keeps now an explicit
copy of both maps and restores them after generating OpenMP or GPGPU code.

This is an adapted version of a patch contributed by:
Armin Groesslinger  <armin.groesslinger@uni-passau.de>

llvm-svn: 167213
2012-11-01 05:34:35 +00:00
Chandler Carruth f6562ed2d3 Another speculative commit to try to fix Polly's build. This is more delta than
I like to make w/o being able to build, but I don't have the dependencies to
build and test polly. I'll revert if the build bots don't like it.

llvm-svn: 166670
2012-10-25 08:43:18 +00:00
Chandler Carruth acdc5e812d Another fix for a build-bot reported API mismatch.
llvm-svn: 166668
2012-10-25 07:42:03 +00:00
Chandler Carruth 2435330ead Try to revive the Polly builders after this LLVM API change.
llvm-svn: 166666
2012-10-25 07:25:56 +00:00
Tobias Grosser 0c55514a43 autoconf/cmake: Always require isl code generation.
This change ensures that isl is only detected if it includes code generation
support. This allows us to remove a lot of conditional compilation and also
avoids missing test cases in case the feature is not available.

llvm-svn: 166403
2012-10-21 21:48:21 +00:00
Tobias Grosser 6c8e696618 cmake: Use suffix for shared modules instead of the one for shared libraries
On Linux there is no difference between shared modules and shared libaries, both
are '.so' files. However, on darwin only shared modules are '.so' files. Shared
libraries have the '.dynlib' suffix.

Fix test cases on darwin by expecting a shared module suffix for Polly instead
of a shared library suffix.

This fixes PR14135

Reported by:  Jack Howarth  <howarth@bromo.med.uc.edu>

llvm-svn: 166402
2012-10-21 21:08:29 +00:00
Tobias Grosser 56ac181189 RegisterPasses: Remove unreachable default case in switch
llvm-svn: 166397
2012-10-21 18:31:27 +00:00
Tobias Grosser ce32148bf4 www: Correct command line that loads polly into dragonegg
Reported by:  Jack Howarth  <howarth@bromo.med.uc.edu>

llvm-svn: 166396
2012-10-21 17:33:00 +00:00
Tobias Grosser bc822eb25f Introduce a separate file for CMake macros
Contributed by:  Sameer Sahasrabuddhe <sameer.sahasrabuddhe@amd.com>

llvm-svn: 166394
2012-10-21 15:51:49 +00:00
Tobias Grosser 28781423b2 isl scheduler: Do not fail when returning an empty band list
The bug was within isl. To fix it, we simply update the isl version that
is used by Polly. We still have some changes within Polly to be able to
write a proper test case.

Reported-by: Sameer Sahasrabuddhe <Sameer.Sahasrabuddhe@amd.com>
llvm-svn: 166021
2012-10-16 07:29:19 +00:00
Tobias Grosser c967d8e6e9 isl-codegen: Support '<' and '>'
Previously isl always generated '<=' or '>='. However, in many cases '<' or '>'
leads to simpler code. This commit updates isl and adds the relevant code
generation support to Polly.

llvm-svn: 166020
2012-10-16 07:29:13 +00:00
Tobias Grosser ff639688e3 www: Clarify that GMP is LGPL licensed
llvm-svn: 165789
2012-10-12 07:44:38 +00:00
Sameer Sahasrabuddhe 1646a6ec44 Trivial change to the README, mainly to test commit access.
llvm-svn: 165481
2012-10-09 04:59:42 +00:00
Micah Villmow 7a3d8209c3 Move TargetData to DataLayout to fix build breakage caused by LLVM r16540
llvm-svn: 165408
2012-10-08 17:26:19 +00:00
Tobias Grosser 660b58ddab Rename TargetData -> DataLayout
Contributed by: Sameer Sahasrabuddhe <sameer.sahasrabuddhe@amd.com>

llvm-svn: 165387
2012-10-08 08:56:52 +00:00