| #
82a1c7de |
| 14-Aug-2015 |
Michael Kruse <[email protected]> |
Make TempScopInfo a RegionPass
This modifies the order in which Polly passes are executed.
Assuming a function has two scops (A and B), the order before was:
FunctionPassManager ScopDetection
Make TempScopInfo a RegionPass
This modifies the order in which Polly passes are executed.
Assuming a function has two scops (A and B), the order before was:
FunctionPassManager ScopDetection IndependentBlocks TempScopInfo for A and B RegionPassManager ScopInfo for A DependenceInfo for A IslScheduleOptimizer for A IslAstInfo for A CodeGeneration for A ScopInfo for B DependenceInfo for B IslScheduleOptimizer for B IslAstInfo for B CodeGeneration for B
After this patch:
FunctionPassManager ScopDetection IndependentBlocks RegionPassManager TempScopInfo for A ScopInfo for A DependenceInfo for A IslScheduleOptimizer for A IslAstInfo for A CodeGeneration for A TempScopInfo for B ScopInfo for B DependenceInfo for B IslScheduleOptimizer for B IslAstInfo for B CodeGeneration for B
TempScopInfo for B might store information and references to the IR that CodeGeneration for A might modify. Changing the order ensures that the IR is not modified from the analysis of a region until code generation.
Reviewers: grosser
Differential Revision: http://reviews.llvm.org/D12014
llvm-svn: 245091
show more ...
|
| #
9c483c58 |
| 11-Aug-2015 |
Michael Kruse <[email protected]> |
Assign regions to all BBs from CodeGeneration
In order to have a valid region analysis, we assign all newly created blocks to the parent of the scop's region. This is correct for any pre-existing re
Assign regions to all BBs from CodeGeneration
In order to have a valid region analysis, we assign all newly created blocks to the parent of the scop's region. This is correct for any pre-existing regions (including the scop's region and its parent), but does not discover any region inside the generated code. For Polly this is not necessary because we do not want to re-run Polly on its own generated code anyway.
Reviewers: grosser
Part of Differential Revision: http://reviews.llvm.org/D11867
llvm-svn: 244608
show more ...
|
| #
22370884 |
| 11-Aug-2015 |
Michael Kruse <[email protected]> |
Revise the simplification of regions
The previous code had several problems:
For newly created BasicBlocks it did not (always) call RegionInfo::setRegionFor in order to update its analysis. At the
Revise the simplification of regions
The previous code had several problems:
For newly created BasicBlocks it did not (always) call RegionInfo::setRegionFor in order to update its analysis. At the moment RegionInfo does not verify its BBMap, but will in the future. This is fixed by determining the region new BBs belong to and set it accordingly. The new executeScopConditionally() requires accurate getRegionFor information.
Which block is created by SplitEdge depends on the incoming and outgoing edges of the blocks it connects, which makes handling its output more difficult than it needs to be. Especially for finding which block has been created an to assign a region to it for the setRegionFor problem above. This patch uses an implementation for splitEdge that always creates a block between the predecessor and successor. simplifyRegion has also been simplified by using SplitBlockPredecessors instead of SplitEdge. Isolating the entries and exits have been refectored into individual functions.
Previously simplifyRegion did more than just ensuring that there is only one entering and one exiting edge. It ensured that the entering block had no other outgoing edge which was necessary for executeScopConditionally(). Now the latter uses the alternative splitEdge implementation which can handle this situation so simplifyRegion really only needs to simplify the region.
Also, executeScopConditionally assumed that there can be no PHI nodes in blocks with one incoming edge. This is wrong and LCSSA deliberately produces such edges. However, previous passes ensured that there can be no such PHIs in exit nodes, but which will no longer hold in the future.
The new code that the property that it preserves the identity of region block (the property that the memory address of the BasicBlock containing the instructions remains the same; new blocks only contain PHI nodes and a terminator), especially the entry block. As a result, there is no need to update the reference to the BasicBlock of ScopStmt that contain its instructions because they have been moved to other basic blocks.
Reviewers: grosser
Part of Differential Revision: http://reviews.llvm.org/D11867
llvm-svn: 244606
show more ...
|
|
Revision tags: llvmorg-3.7.0-rc2, llvmorg-3.7.0-rc1, llvmorg-3.6.2, llvmorg-3.6.2-rc1 |
|
| #
ecff11dc |
| 22-May-2015 |
Johannes Doerfert <[email protected]> |
Add scalar and phi code generation
To reduce compile time and to allow more and better quality SCoPs in the long run we introduced scalar dependences and PHI-modeling. This patch will now allo
Add scalar and phi code generation
To reduce compile time and to allow more and better quality SCoPs in the long run we introduced scalar dependences and PHI-modeling. This patch will now allow us to generate code if one or both of those options are set. While the principle of demoting scalars as well as PHIs to memory in order to communicate their value stays the same, this allows to delay the demotion till the very end (the actual code generation). Consequently: - We __almost__ do not modify the code if we do not generate code for an optimized SCoP in the end. Thus, the early exit as well as the unprofitable option will now actually preven us from introducing regressions in case we will probably not get better code. - Polly can be used as a "pure" analyzer tool as long as the code generator is set to none. - The original SCoP is almost not touched when the optimized version is placed next to it. Runtime regressions if the runtime checks chooses the original are not to be expected and later optimizations do not need to revert the demotion for that part. - We will generate direct accesses to the demoted values, thus there are no "trivial GEPs" that select the first element of a scalar we demoted and treated as an array.
Differential Revision: http://reviews.llvm.org/D7513
llvm-svn: 238070
show more ...
|
|
Revision tags: llvmorg-3.6.1 |
|
| #
09d30697 |
| 12-May-2015 |
Tobias Grosser <[email protected]> |
Rename IslCodeGeneration to CodeGeneration
Besides class, function and file names, we also change the command line option from -polly-codegen-isl to just -polly-codegen. The isl postfix is a leftove
Rename IslCodeGeneration to CodeGeneration
Besides class, function and file names, we also change the command line option from -polly-codegen-isl to just -polly-codegen. The isl postfix is a leftover from the times when we still had the CLooG based -polly-codegen. Today it is just redundant and we drop it.
llvm-svn: 237099
show more ...
|
|
Revision tags: llvmorg-3.6.1-rc1, llvmorg-3.5.2, llvmorg-3.5.2-rc1, llvmorg-3.6.0, llvmorg-3.6.0-rc4, llvmorg-3.6.0-rc3, llvmorg-3.6.0-rc2, llvmorg-3.6.0-rc1, llvmorg-3.5.1, llvmorg-3.5.1-rc2, llvmorg-3.5.1-rc1 |
|
| #
683b8e44 |
| 30-Nov-2014 |
Tobias Grosser <[email protected]> |
Remove -polly-codegen-scev option and related code
SCEV based code generation has been the default for two weeks after having been tested for a long time. We now drop the support the non-scev-based
Remove -polly-codegen-scev option and related code
SCEV based code generation has been the default for two weeks after having been tested for a long time. We now drop the support the non-scev-based code generation.
llvm-svn: 222978
show more ...
|
| #
c98a8fcc |
| 14-Nov-2014 |
Tobias Grosser <[email protected]> |
Use nullptr instead of '0' for pointers
llvm-svn: 221982
|
| #
f084edd0 |
| 22-Oct-2014 |
Tobias Grosser <[email protected]> |
Use braces in multi-statement DEBUG() code [NFC]
By adding braces into the DEBUG statement we can make clang-format format code such as:
DEBUG(stmt1(); stmt2())
as multi-line code:
DEBUG({
Use braces in multi-statement DEBUG() code [NFC]
By adding braces into the DEBUG statement we can make clang-format format code such as:
DEBUG(stmt1(); stmt2())
as multi-line code:
DEBUG({ stmt1(); stmt2(); });
This makes control-flow in debug statements easier to read.
llvm-svn: 220441
show more ...
|
| #
12b355a2 |
| 03-Oct-2014 |
Johannes Doerfert <[email protected]> |
[Refactor] Generalize parallel code generation
+ Generalized function names and comments + Removed OpenMP (omp) from the names and comments + Use common names (non OpenMP specific) for run
[Refactor] Generalize parallel code generation
+ Generalized function names and comments + Removed OpenMP (omp) from the names and comments + Use common names (non OpenMP specific) for runtime library call creation methodes + Commented the parallel code generator and all its member functions + Refactored some values and methodes
Differential Revision: http://reviews.llvm.org/D4990
llvm-svn: 219003
show more ...
|
| #
38262244 |
| 10-Sep-2014 |
Johannes Doerfert <[email protected]> |
[Refactor] Cleanup isl code generation
Summary: + Refactor the runtime check (RTC) build function + Added helper function to create an PollyIRBuilder + Change the simplify region function to c
[Refactor] Cleanup isl code generation
Summary: + Refactor the runtime check (RTC) build function + Added helper function to create an PollyIRBuilder + Change the simplify region function to create not only unique entry and exit edges but also enfore that the entry edge is unconditional + Cleaned the IslCodeGeneration runOnScop function: - less post-creation changes of the created IR + Adjusted and added test cases
Reviewers: grosser, sebpop, simbuerg, dpeixott
Subscribers: llvm-commits, #polly
Differential Revision: http://reviews.llvm.org/D5076
llvm-svn: 217508
show more ...
|
| #
0244ee87 |
| 10-Sep-2014 |
Tobias Grosser <[email protected]> |
Use "const auto &" in range based for loops
This previous code added in r216842 most likely created unnecessary copies.
Reported-by: Duncan P. N. Exon Smith <[email protected]> llvm-svn: 217507
|
|
Revision tags: llvmorg-3.5.0 |
|
| #
6a4d3f74 |
| 31-Aug-2014 |
Tobias Grosser <[email protected]> |
Fix formatting
llvm-svn: 216844
|
| #
1fee67d6 |
| 31-Aug-2014 |
Tobias Grosser <[email protected]> |
Use range based for loops
llvm-svn: 216842
|
|
Revision tags: llvmorg-3.5.0-rc4, llvmorg-3.5.0-rc3 |
|
| #
28735947 |
| 16-Aug-2014 |
Tobias Grosser <[email protected]> |
Revert "[Refactor] Cleanup runtime code generation"
This reverts commit 215466 (and 215528, a trivial formatting fix).
The intention of these commits is a good one, but unfortunately they broke our
Revert "[Refactor] Cleanup runtime code generation"
This reverts commit 215466 (and 215528, a trivial formatting fix).
The intention of these commits is a good one, but unfortunately they broke our LNT buildbot:
http://lab.llvm.org:8011/builders/perf-x86_64-penryn-O3-polly-codegen-isl
Several of the cleanup changes that have been combined in this 'fixup' are trivial and could probably be committed as obvious changes without risking to break the build. The remaining changes are little and it should be easy to figure out what went wrong.
llvm-svn: 215817
show more ...
|
| #
9744c4af |
| 12-Aug-2014 |
Johannes Doerfert <[email protected]> |
[Refactor] Cleanup runtime code generation
+ Use regexp in two test case. + Refactor the runtime condition build function
llvm-svn: 215466
|
| #
c5129d85 |
| 08-Aug-2014 |
Johannes Doerfert <[email protected]> |
[Fix] Broken build after r215121
llvm-svn: 215183
|
|
Revision tags: llvmorg-3.5.0-rc2 |
|
| #
d9e1dbd3 |
| 29-Jul-2014 |
Johannes Doerfert <[email protected]> |
[Refactor] Use non-const MemoryAccess base addresses
llvm-svn: 214168
|
| #
515f8577 |
| 28-Jul-2014 |
Johannes Doerfert <[email protected]> |
Replace the dependences parallelism check by the IslAst one
llvm-svn: 214061
|
|
Revision tags: llvmorg-3.5.0-rc1 |
|
| #
8ca36815 |
| 19-Jul-2014 |
Matt Arsenault <[email protected]> |
Update for RegionInfo changes.
Mostly related to missing includes and renaming of the pass to RegionInfoPass.
llvm-svn: 213457
|
| #
483a90d1 |
| 09-Jul-2014 |
Tobias Grosser <[email protected]> |
clang-format polly to avoid buildbot noise
llvm-svn: 212609
|
| #
083d3d3c |
| 28-Jun-2014 |
Tobias Grosser <[email protected]> |
[C++11] Use more range based fors
llvm-svn: 211981
|
| #
868832b3 |
| 19-Jun-2014 |
Tobias Grosser <[email protected]> |
Update for ScopStmt iterator name change in LLVM r210927
Contributed-by: Yabin Hu <[email protected]> llvm-svn: 211280
|
|
Revision tags: llvmorg-3.4.2, llvmorg-3.4.2-rc1 |
|
| #
ba1724da |
| 07-May-2014 |
Tobias Grosser <[email protected]> |
Remove unnecessary explicit typing in std::make_pair
Contributed-by: Yabin Hu <[email protected]> llvm-svn: 208181
|
| #
cfee96a4 |
| 07-May-2014 |
Tobias Grosser <[email protected]> |
Add the missing 'LoopToScev' parameter
Contributed-by: Yabin Hu <[email protected]> llvm-svn: 208180
|
|
Revision tags: llvmorg-3.4.1, llvmorg-3.4.1-rc2 |
|
| #
95fef944 |
| 22-Apr-2014 |
Chandler Carruth <[email protected]> |
[Modules] Fix potential ODR violations by sinking the DEBUG_TYPE definition below all of the header #include lines, Polly edition.
If you want to know more details about this, you can see the recent
[Modules] Fix potential ODR violations by sinking the DEBUG_TYPE definition below all of the header #include lines, Polly edition.
If you want to know more details about this, you can see the recent commits to Debug.h in LLVM. This is just the Polly segment of a cleanup I'm doing globally for this macro.
llvm-svn: 206852
show more ...
|