summaryrefslogtreecommitdiffstats
path: root/polly/lib/Analysis/DependenceInfo.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* [GSoC] Do not process SCoPs with infeasible runtime contextJohannes Doerfert2016-07-251-1/+3
| | | | | | | | | | | | Do not process SCoPs with infeasible runtime context in the new ScopInfoWrapperPass. Do not compute dependences for such SCoPs in the new DependenceInfoWrapperPass. Patch by Utpal Bora <cs14mtech11017@iith.ac.in> Differential Revision: https://reviews.llvm.org/D22402 llvm-svn: 276631
* Propagate on-error statusTobias Grosser2016-06-301-1/+3
| | | | | | | | | | | | | | | | This ensures that the error status set with -polly-on-isl-error-abort is maintained even after running DependenceInfo and ScheduleOptimizer. Both passes temporarily set the error status to CONTINUE as the dependence analysis uses a compute-out and the scheduler may not be able to derive a schedule. In both cases we want to not abort, but to handle the error gracefully. Before this commit, we always set the error reporting to ABORT after these passes. After this commit, we use the error reporting mode that was active earlier. This comes without a test case as this would require us to introduce (memory) errors which would trigger the isl errors. llvm-svn: 274272
* [GSoC 2016] New function pass DependenceInfoWrapperPassJohannes Doerfert2016-06-271-0/+56
| | | | | | | | | | | | | | This patch addresses: - A new function pass to compute polyhedral dependences. This is required to avoid the region pass manager. - Stores a map of Scop to Dependence object for all the scops present in a function. By default, access wise dependences are stored. Patch by Utpal Bora <cs14mtech11017@iith.ac.in> Differential Revision: http://reviews.llvm.org/D21105 llvm-svn: 273881
* clang-tidy: apply modern-use-nullptr fixesTobias Grosser2016-06-221-1/+1
| | | | | | | | | | Instead of using 0 or NULL use the C++11 nullptr symbol when referencing null pointers. This cleanup was suggested by Eugene Zelenko <eugene.zelenko@gmail.com> in http://reviews.llvm.org/D21488 and was split out to increase readability. llvm-svn: 273435
* Decouple SCoP building logic from passJohannes Doerfert2016-05-311-2/+2
| | | | | | | | | | | | | | | | Created a new pass ScopInfoRegionPass. As name suggests, it is a region pass and it is there to preserve compatibility with our existing Polly passes. ScopInfoRegionPass will return a SCoP object for a valid region while the creation of the SCoP stays in the ScopInfo class. Contributed-by: Utpal Bora <cs14mtech11017@iith.ac.in> Reviewed-by: Tobias Grosser <tobias@grosser.es>, Johannes Doerfert <doerfert@cs.uni-saarland.de> Differential Revision: http://reviews.llvm.org/D20770 llvm-svn: 271259
* Add __isl_give annotations to return types [NFC]Johannes Doerfert2016-04-091-2/+3
| | | | llvm-svn: 265882
* Add fine-grain dependences analysis to release notes.Hongbin Zheng2016-03-281-3/+3
| | | | | | Differential Revision: http://reviews.llvm.org/D17905 llvm-svn: 264575
* Allow the client of DependenceInfo to obtain dependences at different ↵Hongbin Zheng2016-03-031-25/+46
| | | | | | granularities. llvm-svn: 262591
* Introduce fine-grain dependence analysis by tagging access functions and ↵Hongbin Zheng2016-02-261-3/+75
| | | | | | | | schedules tree with either the id of memory access or memory references. Differential Revision: http://reviews.llvm.org/D17381 llvm-svn: 262039
* Coalesce Read/Write/MayWrite right after we collected them. NFCHongbin Zheng2016-02-261-4/+4
| | | | llvm-svn: 261993
* Introduce helper function to build isl_flow, NFC.Hongbin Zheng2016-02-201-24/+22
| | | | llvm-svn: 261436
* Add the missing modifier 'static' for addZeroPaddingToSchedule, NFCHongbin Zheng2016-02-201-1/+1
| | | | llvm-svn: 261435
* [Refactor] Move isl_ctx into Scop.Hongbin Zheng2016-02-171-10/+10
| | | | | | | | | | | | | | | | | | | | After we moved isl_ctx into Scop, we need to free the isl_ctx after freeing all isl objects, which requires the ScopInfo pass to be freed at last. But this is not guaranteed by the PassManager, and we need extra code to free the isl_ctx at the right time. We introduced a shared pointer to manage the isl_ctx, and distribute it to all analyses that create isl objects. As such, whenever we free an analyses with the shared_ptr (and also free the isl objects which are created by the analyses), we decrease the (shared) reference counter of the shared_ptr by 1. Whenever the reference counter reach 0 in the releaseMemory function of an analysis, that analysis will be the last one that hold any isl objects, and we can safely free the isl_ctx with that analysis. Differential Revision: http://reviews.llvm.org/D17241 llvm-svn: 261100
* Do not use the assumed context in the dependence analysis any moreTobias Grosser2015-09-171-2/+0
| | | | | | | | | This information is implicitly available through the multi-dimensionality of memory accesses. This reduces compile time for 3mm from 430ms to 400ms and should generally benefit compile time for cases where the assumed context is complex. llvm-svn: 247907
* Add option to enable/disable reduction usage in dependence analysisTobias Grosser2015-09-161-4/+11
| | | | llvm-svn: 247781
* Use schedule trees to compute dependencesTobias Grosser2015-08-181-5/+3
| | | | | | | | | | | | | | | | | | | This patch changes Polly to compute the data-dependences on the schedule tree instead of a flat schedule representation. Calculating dependences directly on the schedule tree results in some good compile-time improvements (adi : -23.35%, 3mm : -9.57%), as the structure of the schedule can be exploited for increased efficiency. Earlier experiments with schedule tree based dependence analysis in Polly showed some compile-time regressions. These regressions arose due to the schedule tree based dependence analysis not taking into account the domain constraints of the schedule tree. As a result, the computed dependences were different and this difference caused in some cases the schedule optimizer to take a very long time. Since isl version fe865996 the schedule tree based dependence analysis takes domain constraints into account, which fixes the earlier compile-time issues. Contributed-by: Pratik Bhatu <cs12b1010@iith.ac.in> llvm-svn: 245300
* Dependences: Zero pad the schedule mapTobias Grosser2015-08-021-2/+32
| | | | | | | | | The schedule map we derive from a schedule tree map may map statements into schedule spaces of different dimensionality. This change adds zero padding to ensure just a single schedule space is used and the translation from a union_map to an isl_multi_union_pw_aff does not fail. llvm-svn: 243849
* Use schedule trees to represent execution order of statementsTobias Grosser2015-07-141-12/+22
| | | | | | | | | | | | | | | | | | Instead of flat schedules, we now use so-called schedule trees to represent the execution order of the statements in a SCoP. Schedule trees make it a lot easier to analyze, understand and modify properties of a schedule, as specific nodes in the tree can be choosen and possibly replaced. This patch does not yet fully move our DependenceInfo pass to schedule trees, as some additional performance analysis is needed here. (In general schedule trees should be faster in compile-time, as the more structured representation is generally easier to analyze and work with). We also can not yet perform the reduction analysis on schedule trees. For more information regarding schedule trees, please see Section 6 of https://lirias.kuleuven.be/handle/123456789/497238 llvm-svn: 242130
* Increase the dependence-analysis compute outTobias Grosser2015-06-261-1/+1
| | | | | | | | | | | | | As Polly got a lot faster after the small-integer-optimization imath patch, we now increase the compute out to optimize larger kernels. This should also expose additional slow-downs for us to address. In LNT this gives us a 3.4x speedup on 3mm, at a cost of a 2x increase in compile time (now 0.77s). reg_detect, oorafft and adi also show some compile time increases. This compile time cost is divided between more time in isl and more time in LLVM's backends due to increased code size (versioning and tiling). llvm-svn: 240840
* Orthography: substracting -> subtractingMichael Kruse2015-06-151-1/+1
| | | | | | This is a test commit for being granted commit-after-approval access. llvm-svn: 239725
* Update isl to 93b8e43dTobias Grosser2015-05-281-2/+2
| | | | | | | This update brings mostly interface cleanups, but also fixes two bugs in imath (a memory leak, some undefined behavior). llvm-svn: 238422
* Use value semantics for list of ScopStmt(s) instead of std::owningptrTobias Grosser2015-05-271-15/+15
| | | | | | | | | | | | | | | | David Blaike suggested this as an alternative to the use of owningptr(s) for our memory management, as value semantics allow to avoid the additional interface complexity caused by owningptr while still providing similar memory consistency guarantees. We could also have used a std::vector, but the use of std::vector would yield possibly changing pointers which currently causes problems as for example the memory accesses carry pointers to their parent statements. Such pointers should not change. Reviewer: jblaikie, jdoerfert Differential Revision: http://reviews.llvm.org/D10041 llvm-svn: 238290
* Use unique_ptr to clarify ownership of ScopStmtTobias Grosser2015-05-231-7/+7
| | | | llvm-svn: 238090
* Add explicit #includes for used isl featuresTobias Grosser2015-05-091-0/+2
| | | | llvm-svn: 236931
* Sort include directivesTobias Grosser2015-05-091-2/+1
| | | | | | | | | | Upcoming revisions of isl require us to include header files explicitly, which have previously been already transitively included. Before we add them, we sort the existing includes. Thanks to Chandler for sort_includes.py. A simple, but very convenient script. llvm-svn: 236930
* Fix some formatting issuesTobias Grosser2015-04-211-2/+3
| | | | llvm-svn: 235381
* Rename 'scattering' to 'schedule'Tobias Grosser2015-04-211-22/+22
| | | | | | | | | | | | | | | | In Polly we used both the term 'scattering' and the term 'schedule' to describe the execution order of a statement without actually distinguishing between them. We now uniformly use the term 'schedule' for the execution order. This corresponds to the terminology of isl. History: CLooG introduced the term scattering as the generated code can be used as a sequential execution order (schedule) or as a parallel dimension enumerating different threads of execution (placement). In Polly and/or isl the term placement was never used, but we uniformly refer to an execution order as a schedule and only later introduce parallelism. When doing so we do not talk about about specific placement dimensions. llvm-svn: 235380
* Pass an actual schedule to the isl_union_access [NFC]Tobias Grosser2015-04-211-14/+14
| | | | | | | | | | This change is a step towards using a single isl_schedule object throughout Polly. At the moment the schedule is just constructed from the flat isl_union_map that defines the schedule. Later we will obtain it directly from the scop and potentially obtain a schedule with a non-trivial internal structure that will allow faster dependence analysis. llvm-svn: 235378
* Move to isl's new dependence analysis interface [NFC]Tobias Grosser2015-04-211-28/+58
| | | | | | | | | | isl_union_map_compute_flow() has been replaced by isl_union_access_info_compute_flow(). This change does not intend to change funcitonality, yet. However, it will allow us to pass in subsequent changes schedule trees to the dependence analysis instead of flat schedules. This should speed up dependence analysis for important cases significantly. llvm-svn: 235373
* Dependences: Allow to disable dependences computeoutTobias Grosser2015-04-191-2/+3
| | | | llvm-svn: 235271
* Fix leftover Dependences.cpp -> DependenceInfo.cppTobias Grosser2015-03-051-1/+1
| | | | llvm-svn: 231355
* Create a dependence struct to hold dependence information for a SCoP.Johannes Doerfert2015-03-051-36/+36
| | | | | | | | | | | The new Dependences struct in the DependenceInfo holds all information that was formerly part of the DependenceInfo. It also provides the same interface for the user to access this information. This is another step to a more general ScopPass interface that does allow multiple SCoPs to be "in flight". llvm-svn: 231327
* Rename the Dependences pass to DependenceInfo [NFC]Johannes Doerfert2015-03-041-0/+638
We rename the Dependences pass to DependenceInfo as a first step to a caching pass policy. The new DependenceInfo pass will later provide "Dependences" for a SCoP. To keep consistency the test folder is renamed too. llvm-svn: 231308
OpenPOWER on IntegriCloud