summaryrefslogtreecommitdiffstats
path: root/polly/lib/Analysis
Commit message (Collapse)AuthorAgeFilesLines
...
* [ScopInfo] Translate Scop::getContext to isl++ [NFC]Tobias Grosser2017-08-061-9/+9
| | | | llvm-svn: 310221
* [ScopInfo] Translate Scop::getIdForParam to isl++ [NFC]Tobias Grosser2017-08-061-4/+4
| | | | llvm-svn: 310220
* [ScopInfo] Move get*Writes/getReads/getAccesses to isl++Tobias Grosser2017-08-061-15/+15
| | | | llvm-svn: 310219
* Remove functional changes that sneaked in by accident in r308892Tobias Grosser2017-08-061-9/+0
| | | | llvm-svn: 310218
* [ScopInfo] Move ScopStmt::getSchedule to isl++Tobias Grosser2017-08-063-11/+12
| | | | llvm-svn: 310215
* [ScopInfo] Move getPredecessorDomainConstraints to isl++ [NFC]Tobias Grosser2017-08-061-9/+7
| | | | llvm-svn: 310214
* [ScopInfo] Move InvariantAccess to isl++ [NFC]Tobias Grosser2017-08-061-4/+2
| | | | llvm-svn: 310213
* [ScopInfo] Move ScopArrayInfo::ScopArrayInfo to isl++ [NFC]Tobias Grosser2017-08-061-1/+1
| | | | llvm-svn: 310211
* [ScopInfo] Move ScopStmt::ScopStmt to isl++ [NFC]Tobias Grosser2017-08-061-21/+17
| | | | llvm-svn: 310210
* Move ScopInfo::getDomain(), getDomainSpace(), getDomainId() to isl++Tobias Grosser2017-08-063-44/+38
| | | | llvm-svn: 310209
* Move ScopStmt::Domain to isl++Tobias Grosser2017-08-061-21/+19
| | | | llvm-svn: 310207
* Update to a newer version of isl++Tobias Grosser2017-08-061-1/+1
| | | | llvm-svn: 310206
* [Scopinfo] Fix memory corruption issue that sneaked into the previous commitTobias Grosser2017-08-061-1/+1
| | | | llvm-svn: 310204
* [ScopInfo] Move InvalidDomain to isl++ [NFC]Tobias Grosser2017-08-062-19/+12
| | | | llvm-svn: 310203
* [Polly] Fix for the JSON ExporterTobias Grosser2017-08-061-1/+1
| | | | | | | | | | | | | | | | | | | | | | Summary: Small patch to fix the JSON exporter. Currently, using "opt -polly-export-jscop" does not generate jscop files, but gives an error: *** Error in `opt': corrupted double-linked list: 0x0000000000bc4bb0 *** Updated the function getAccessRelationStr() to work with the current version of getAccessRelation(), fixing the JSON exporter Reviewers: bollu, grosser Reviewed By: grosser Subscribers: grosser, llvm-commits, pollydev Tags: #polly Differential Revision: https://reviews.llvm.org/D36370 llvm-svn: 310199
* [PM] Make the new-pm passes behave more like the legacy passesPhilip Pfaffe2017-08-042-1/+4
| | | | | | | | | | | | | | | | | | | | Summary: Testing the new-pm passes becomes much easier once they behave more like the old passes in terms of the order in which Scops are processed and printed. This requires three changes: - ScopInfo: Use an ordered map to store scops - ScopInfo: Iterate and print Scops in reverse order to match legacy PM behaviour - ScopDetection: print function name in ScopAnalysisPrinter Reviewers: grosser, Meinersbur, bollu Reviewed By: grosser Subscribers: pollydev, llvm-commits Differential Revision: https://reviews.llvm.org/D36303 llvm-svn: 310052
* Make sure that all parameter dimensions are set in scheduleTobias Grosser2017-08-031-43/+53
| | | | | | | | | | | | | | | | | | | | | | | Summary: In case the option -polly-ignore-parameter-bounds is set, not all parameters will be added to context and domains. This is useful to keep the size of the sets and maps we work with small. Unfortunately, for AST generation it is necessary to ensure all parameters are part of the schedule tree. Hence, we modify the GPGPU code generation to make sure this is the case. To obtain the necessary information we expose a new function Scop::getFullParamSpace(). We also make a couple of functions const to be able to make SCoP::getFullParamSpace() const. Reviewers: Meinersbur, bollu, gareevroman, efriedma, huihuiz, sebpop, simbuerg Subscribers: nemanjai, kbarton, pollydev, llvm-commits Tags: #polly Differential Revision: https://reviews.llvm.org/D36243 llvm-svn: 309939
* Move setNewAccessRelation to isl++Tobias Grosser2017-08-021-23/+18
| | | | llvm-svn: 309871
* Move ScopStmt::setAccessRelation to isl++Tobias Grosser2017-08-021-7/+7
| | | | llvm-svn: 309870
* Fix r309826: Appease clang-format check.Philip Pfaffe2017-08-021-1/+1
| | | | llvm-svn: 309853
* Fix r309826: Move intantiation and specialization of ↵Philip Pfaffe2017-08-021-6/+11
| | | | | | | | | | OwningScopAnalysisManagerFunctionProxy to the polly namespace. When compiling with clang, explicit instantiation of the OwningScopAnalysisManagerFunctionProxy needs to happen within the polly namespace. Same goes with the specialization of its run method. llvm-svn: 309835
* [Polly][PM][WIP] Polly pass registrationPhilip Pfaffe2017-08-021-0/+8
| | | | | | | | | | | | | | | | | | | | | Summary: This patch is a first attempt at registering Polly passes with the LLVM tools. Tool plugins are still unsupported, but this registration is usable from the tools if Polly is linked into them (albeit requiring minimal patches to those tools). Registration requires a small amount of machinery (the owning analysis proxies), necessary for injecting ScopAnalysisManager objects into the calling tools. This patch is marked WIP because the registration is incomplete. Parsing manual pipelines is fully supported, but default pass injection into the O3 pipeline is lacking, mostly because there is opportunity for some redesign here, I believe. The first point of order would be insertion points. I think it makes sense to run before the vectorizers. Running Polly Early, however, is weird. Mostly because it actually is the default (which to me is unexpected), and because Polly runs it's own O1 pipeline. Why not instead insert it at an appropriate place somewhere after simplification happend? Running after the loop optimizers seems intuitive, but it also seems wasteful, since multiple consecutive loops might well be a single scop, and we don't need to run for all of them. My second request for comments would be regarding all those smallish helper passes we have, like PollyViewer, PollyPrinter, PollyImportJScop. Right now these are controlled by command line options, deciding whether they should be part of the Polly pipeline. What is your opinion on treating them like real passes, and have the user write an appropriate pipeline if they want to use any of them? Reviewers: grosser, Meinersbur, bollu Reviewed By: grosser Subscribers: llvm-commits, pollydev Tags: #polly Differential Revision: https://reviews.llvm.org/D35458 llvm-svn: 309826
* [PM] Fix proxy invalidationPhilip Pfaffe2017-08-021-4/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: I made a mistake in handling transitive invalidation of analysis results. I've updated the list of preserved analyses as well as the correct result dependences. The Invalidator passed through the invalidate() path can be used to transitively invalidate analyses. It frequently happens that analysis results depend on other analyses, and thus store references to their results. When the dependee now gets invalidated, the depender needs to be invalidated as well. This is the purpose of the Invalidator object, which can be used to check whether some dependee analysis is in the process of being invalidated. I originally was checking the wrong dependee analyses, which is an actual error, you can only check analysis results that are in the cache (which they are if you've captured their reference). The invalidation I'm handling inside the proxy deals with the standard analyses the proxy passes into the Scop pipeline, since I'm capturing their reference. This checking allows us to actually preserve a couple of results outside of the proxy, since the Scop pipeline shouldn't break those, or otherwise should update them accordingly. Reviewers: grosser, Meinersbur, bollu Reviewed By: grosser Subscribers: pollydev, llvm-commits Differential Revision: https://reviews.llvm.org/D36216 llvm-svn: 309811
* [SI][NewPM] Collect loop count statisticsPhilip Pfaffe2017-08-021-0/+3
| | | | llvm-svn: 309807
* [SD] Set PollyUseRuntimeAliasChecks correctlyPhilip Pfaffe2017-08-021-0/+5
| | | | llvm-svn: 309805
* [ScopDetect] add `-polly-ignore-func` flag to ignore functions by name.Siddharth Bhat2017-07-281-6/+21
| | | | | | | | | | Ignore all functions whose name match a regex. Useful because creating a regex that does *not* match a string is somewhat hard. Example: https://stackoverflow.com/questions/1240275/how-to-negate-specific-word-in-regex llvm-svn: 309377
* [ScopBuilder/Simplify] Refactor isEscaping. NFC.Michael Kruse2017-07-272-21/+21
| | | | | | | | | | | | ScopBuilder and Simplify (through VirtualInstruction.cpp) previously used this functionality in their own implementation. Refactor them both into a common one into the Scop class. BlockGenerator also makes use of a similiar functionality, but also records outside users and takes place after region simplification. Merging it as well would be more complicated. llvm-svn: 309273
* [ScopInfo] Never print instruction list of region stmts.Michael Kruse2017-07-261-1/+1
| | | | | | | A region statement's instruction list is always empty and ignored by the code generator. Don't give the impression that it means anything. llvm-svn: 309197
* [ScopInfo] Avoid use of getStmtFor(BB). NFC.Michael Kruse2017-07-261-4/+5
| | | | | | | | | | | | | Since there will be no more a 1:1 correspondence between statements and basic blocks, we would like to get rid of the method getStmtFor(BB) and its uses. Here we remove one of its uses in ScopInfo by fetching the statement in which the call instruction lies. Contributed-by: Nandini Singhal <cs15mtech01004@iith.ac.in> Differential Revision: https://reviews.llvm.org/D35691 llvm-svn: 309110
* [ScopInfo] Rename ScopStmt::contains(BB) to represents(BB). NFC.Michael Kruse2017-07-251-1/+1
| | | | | | | | | | | In future, there will be no more a 1:1 correspondence between statements and basic blocks, the name `contains` does not correctly capture their relationship. A BB may infact comprise of multiple statements; hence we describe a statement 'representing' a basic block. Differential Revision: https://reviews.llvm.org/D35838 llvm-svn: 308982
* Move MemoryAccess::isStride* to isl++Tobias Grosser2017-07-241-34/+27
| | | | llvm-svn: 308927
* Move MemoryAccess::InvalidDomain to isl++Tobias Grosser2017-07-241-10/+9
| | | | llvm-svn: 308923
* Move MemoryAccess::getPwAff to isl++Tobias Grosser2017-07-241-12/+12
| | | | llvm-svn: 308895
* Move MemoryAccess::MemoryAccess to isl++Tobias Grosser2017-07-241-7/+7
| | | | llvm-svn: 308893
* Move ScopArrayInfo::getFromAccessFunction and getFromId to isl++Tobias Grosser2017-07-241-7/+16
| | | | llvm-svn: 308892
* [ForwardOpTree] Support read-only value uses.Michael Kruse2017-07-242-2/+29
| | | | | | | | | | | | Read-only values (values defined before the SCoP) require special handing with -polly-analyze-read-only-scalars=true (which is the default). If active, each use of a value requires a read access. When a copied value uses a read-only value, we must also ensure that such a MemoryAccess is available or is created. Differential Revision: https://reviews.llvm.org/D35764 llvm-svn: 308876
* [Polly] [NFC] [ScopDetection] Make `polly-only-func` perform regex scop name ↵Siddharth Bhat2017-07-241-6/+15
| | | | | | | | | | | | | | match. Summary: - We were using `.count` in `StringRef`, which matches substrings. - We may want to use this for equality as well. - Generalise this, so allow regexes as a parameter to `polly-only-func`. Differential Revision: https://reviews.llvm.org/D35728 llvm-svn: 308875
* Move MemoryAccess::get*ArrayId to isl++Tobias Grosser2017-07-232-11/+9
| | | | llvm-svn: 308843
* Move applyScheduleToAccessRelation to isl++Tobias Grosser2017-07-231-11/+10
| | | | llvm-svn: 308842
* Move MemoryAccess::getAddressFunction to isl++Tobias Grosser2017-07-231-3/+4
| | | | llvm-svn: 308841
* Move MemoryAccess::NewAccessRelation to isl++Tobias Grosser2017-07-232-32/+28
| | | | | | We also move related accessor functions llvm-svn: 308840
* Move MemoryAccess::getOriginalAccessRelation to isl++Tobias Grosser2017-07-231-5/+5
| | | | llvm-svn: 308839
* Move MemoryAccess::AccessRelation to isl++Tobias Grosser2017-07-231-42/+35
| | | | llvm-svn: 308838
* Move MemoryAccess::createBasicAccessMap to isl++Tobias Grosser2017-07-231-8/+8
| | | | llvm-svn: 308837
* Move MemoryAccess::id to isl++Tobias Grosser2017-07-232-6/+5
| | | | llvm-svn: 308836
* [ScopInfo] Adapt indentation of instruction list printing.Michael Kruse2017-07-221-1/+1
| | | | | | | | | | | | | | | | | | | | Change the indention of the last brace to align with the opening line. Before: Instructions { %val = fadd double %arg, 2.100000e+01 store double %val, double* %A } After: Instructions { %val = fadd double %arg, 2.100000e+01 store double %val, double* %A } llvm-svn: 308828
* Move ScopArrayInfo to isl++Tobias Grosser2017-07-211-30/+21
| | | | | | This moves the full ScopArrayInfo class to isl++ llvm-svn: 308801
* Annotate dump() functions with LLVM_DUMP_METHOD. NFC.Michael Kruse2017-07-211-4/+4
| | | | llvm-svn: 308749
* [ScopInfo] Don't compile dump() functions into non-assert builds. NFC.Michael Kruse2017-07-211-0/+8
| | | | | | This follows a convention used in LLVM. llvm-svn: 308748
* [ScopInfo] Print instructions in dump().Michael Kruse2017-07-212-13/+25
| | | | | | | | | | | | | | | | | | | Print a statement's instruction on dump() regardless of -polly-print-instructions. dump() is supposed to be used in the debugger only and never in regression tests. While debugging, get all the information we have and we are not bound to break anything. For non-dump purposes of print, forward the setting of -polly-print-instructions as parameters. Some calls to print() had to be changed because the PollyPrintInstructions setting is only available in ScopInfo.cpp. In ScheduleOptimizer.cpp, dump() was used in regression tests. That's not what dump() is for. The print parameter "PrintInstructions" will also be useful for an explicit print SCoP pass in a future patch. llvm-svn: 308746
OpenPOWER on IntegriCloud