summaryrefslogtreecommitdiffstats
path: root/polly/lib/Analysis
Commit message (Collapse)AuthorAgeFilesLines
* [NFC] Fixes -Wrange-loop-analysis warningsMark de Wever2020-01-061-1/+1
| | | | | | This avoids new warnings due to D68912 adds -Wrange-loop-analysis to -Wall. Differential Revision: https://reviews.llvm.org/D72210
* [polly][Support] Un-break polly testsAlexandre Ganea2020-01-011-1/+2
| | | | | | Previously, the polly unit tests were stuck in a infinite loop. There was an edge case in StringRef::count() introduced by 9f6b13e5cce96066d7262d224c971d93c2724795, where an empty 'Str' would cause the function to never exit. Also fixed usage in polly.
* Sink all InitializePasses.h includesReid Kleckner2019-11-133-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This file lists every pass in LLVM, and is included by Pass.h, which is very popular. Every time we add, remove, or rename a pass in LLVM, it caused lots of recompilation. I found this fact by looking at this table, which is sorted by the number of times a file was changed over the last 100,000 git commits multiplied by the number of object files that depend on it in the current checkout: recompiles touches affected_files header 342380 95 3604 llvm/include/llvm/ADT/STLExtras.h 314730 234 1345 llvm/include/llvm/InitializePasses.h 307036 118 2602 llvm/include/llvm/ADT/APInt.h 213049 59 3611 llvm/include/llvm/Support/MathExtras.h 170422 47 3626 llvm/include/llvm/Support/Compiler.h 162225 45 3605 llvm/include/llvm/ADT/Optional.h 158319 63 2513 llvm/include/llvm/ADT/Triple.h 140322 39 3598 llvm/include/llvm/ADT/StringRef.h 137647 59 2333 llvm/include/llvm/Support/Error.h 131619 73 1803 llvm/include/llvm/Support/FileSystem.h Before this change, touching InitializePasses.h would cause 1345 files to recompile. After this change, touching it only causes 550 compiles in an incremental rebuild. Reviewers: bkramer, asbirlea, bollu, jdoerfert Differential Revision: https://reviews.llvm.org/D70211
* Fix PollyGuillaume Chatelet2019-10-212-6/+6
| | | | llvm-svn: 375421
* [ScopBuilder] Fix bug 38358 by preserving correct order of ScopStmts.Michael Kruse2019-10-171-6/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | ScopBuilder::buildEqivClassBlockStmts creates ScopStmts for instruction groups in basic block and inserts these ScopStmts into Scop::StmtMap, however, as described in llvm.org/PR38358, comment #5, StmtScops are inserted into vector ScopStmt[BB] in wrong order. As a result, ScopBuilder::buildSchedule creates wrong order sequence node. Looking closer to code, it's clear there is no equivalent classes with interleaving isOrderedInstruction(memory access) instructions after joinOrderedInstructions. Afterwards, ScopStmts need to be created and inserted in the original order of memory access instructions, however, at the moment ScopStmts are inserted in the order of leader instructions which are probably not memory access instructions. The fix is simple with a standalone loop scanning isOrderedInstruction(memory access) instructions in basic block and inserting elements into LeaderToInstList one by one. The patch also removes double reversing operations which are now unnecessary. New test preserve-equiv-class-order-in-basic_block.ll is also added. Differential Revision: https://reviews.llvm.org/D68941 llvm-svn: 375192
* [Polly] Fix formatting violation. NFC.Volodymyr Sapsai2019-10-111-3/+1
| | | | llvm-svn: 374504
* [Stats] Fix polly build due to change in llvm::Statistic constructor in r374490.Volodymyr Sapsai2019-10-111-3/+1
| | | | llvm-svn: 374497
* [ScopBuilder] Skip getting leader when merging statements to close holes.Michael Kruse2019-09-131-4/+10
| | | | | | | | | | | | | | | | | | | | | | | | | Function joinOrderedInstructions merges instructions when a leader is encountered twice. It also notices that leaders in SeenLeaders may lose their leadership in previous merging, and tries to handle the case using following code: Instruction *PrevLeader = UnionFind.getLeaderValue(SeenLeaders.back()); However, this is wrong because it always gets leader for the last element of SeenLeaders, and I believe it's wrong even we get leader for Prev here. As a result, Statements in cases like the one in patch aren't merged as expected. After investigation, I believe it's unnecessary to get leader instruction at all. This is based on fact: Although leaders in SeenLeaders could lose leadership, they only lose to others in SeenLeaders, in other words, one existing leader will be chosen as new leader of merged equivalent statements. We can take advantage of this and simply check if current leader equals to Prev and break merging if it does. The patch also adds a new test. Patch by bin.narwal <bin.narwal@gmail.com> Differential Revision: https://reviews.llvm.org/D67007 llvm-svn: 371801
* [DependenceInfo] Compute WAR dependence info using ISL kills. NFC.Michael Kruse2019-08-291-114/+16
| | | | | | | | | | | | | | | When reading code of Dependences::calculateDependences, I noticed that WAR is computed specifically by buildWAR. Given ISL now supports "kills" in approximate dataflow analysis, this patch takes advantage of it. This patch also cleans up a couple lines redundant codes. Patch by bin.narwal <bin.narwal@gmail.com> Differential Revision: https://reviews.llvm.org/D66741 llvm-svn: 370396
* [ScopBuilder] Remove superfluous while loop in buildDomains. NFC.Michael Kruse2019-08-291-4/+0
| | | | | | | | | | | | The while loop iterating parent loop in ScopBuilder::buildDomains is unnecessary because either L or LD are later unused, this is a simple patch removing it. Patch by bin.narwal <bin.narwal@gmail.com> Differential Revision: https://reviews.llvm.org/D66698 llvm-svn: 370368
* [ScopBuilder] Simplify main statement flag in buildEqivClassBlockStmts. NFC.Michael Kruse2019-08-261-11/+7
| | | | | | | | | | | | | | | | | When reading code in ScopBuilder::buildEqivClassBlockStmts, I think the main statement flag computation can be simplified, here is the patch. It's based on two simple facts that: 1. Instruction won't be removed once it's inserted into UnionFind. 2. Main statement must be set if there is non-trivial statement besides the last one. The patch also saves std::find call. Patch by bin.narwal <bin.narwal@gmail.com> Differential Revision: https://reviews.llvm.org/D66477 llvm-svn: 369972
* [NFC][ScopBuilder] Move buildDomains and its callees to ScopBuilder.Dominik Adamski2019-08-062-924/+906
| | | | | | | | | | | | | | | | | | | | Scope of changes: 1) Moved buildDomains function to ScopBuilder class. 2) Moved buildDomainsWithBranchConstraints function to ScopBuilder class. 3) Moved propagateDomainConstraints to ScopBuilder class. 4) Moved propagateDomainConstraintsToRegionExit to ScopBuilder class. 5) Moved propagateInvalidStmtDomains to ScopBuilder class. 6) Moved getPredecessorDomainConstraints function to ScopBuilder class. 7) Moved addLoopBoundsToHeaderDomain function to ScopBuilder class. 8) Moved getPwAff function to ScopBuilder class. 9) Moved buildConditionSets functions to ScopBuilder class. 10) Added updateMaxLoopDepth, notifyErrorBlock, getOrInitEmptyDomain, isDomainDefined, setDomain functions to Scop class. They are used by ScopBuilder. 11) Moved helper functions: getRegionNodeBasicBlock, getRegionNodeSuccessor, containsErrorBlock, createNextIterationMap, collectBoundedParts, partitionSetParts, buildConditionSet to ScopBuilder.cpp file. Differential Revision: https://reviews.llvm.org/D65729 llvm-svn: 368100
* [NFC][ScopBuilder] Move addUserAssumptions to ScopBuilderDominik Adamski2019-08-062-101/+94
| | | | | | | | | | | Scope of changes: 1) Moved addUserAssumptions function to ScopBuilder class. 2) Moved buildConditionSets functions to polly namespace. 3) Moved getRepresentingInvariantLoadSCEV to public section of the Scop class Differential Revision: https://reviews.llvm.org/D65241 llvm-svn: 368089
* [NFC][ScopBuilder] Move buildSchedule and its callees to ScopBuilder or ↵Dominik Adamski2019-07-172-260/+175
| | | | | | | | | | | | | | | | | | ScopHelper Scope of changes: 1. Moved buildSchedule functions to ScopBuilder. 2. Moved combineInSequence function to ScopBuilder. 3. Moved mapToDimension function to ScopBuilder. 4. Moved LoopStackTy to ScopBuilder. 5. Moved getLoopSurroundingScop to ScopHelper. 6. Moved getNumBlocksInLoop to ScopHelper. 7. Moved getNumBlocksInRegionNode to ScopHelper. 8. Moved getRegionNodeLoop to ScopHelper. Differential Revision: https://reviews.llvm.org/D64223 llvm-svn: 366377
* [NFC][ScopBuilder]Move finalizeAccesses and its callees to ScopBuilderDominik Adamski2019-07-172-190/+190
| | | | | | | | | | | | | | | Scope of changes: 1) Moved finalizeAccesses to ScopBuilder 2) Moved updateAccessDimensionality to ScopBuilder 3) Moved foldSizeConstantsToRight to ScopBuilder 4) Moved foldSizeConstantsToRight to ScopBuilder 5) Moved assumeNoOutOfBounds to ScopBuilder 6) Moved markFortranArrays to ScopBuilder 7) Added iterator range for AccessFunctions vector. Differential Revision: https://reviews.llvm.org/D63794 llvm-svn: 366374
* [NFC][ScopBuilder] Move addUserContext to ScopBuilderDominik Adamski2019-07-162-44/+45
| | | | | | | | | | Scope of changes: 1) Moved addUserContext to ScopBuilder. 2) Moved command line option UserContextStr to ScopBuilder. Differential Revision: https://reviews.llvm.org/D63740 llvm-svn: 366266
* [NFC][ScopBuilder] Move buildAliasChecks and its implementing methods to ↵Dominik Adamski2019-07-162-352/+354
| | | | | | | | | | | | | | | | | | | | | | | | ScopBuilder Scope of changes: 1) Moved buildAliasChecks to ScopBuilder. 2) Moved buildAliasGroup to ScopBuilder. 3) Moved buildAliasGroups to ScopBuilder. 4) Moved buildAliasGroupsForAccesses to ScopBuilder. 5) Moved splitAliasGroupsByDomain to ScopBuilder. 6) Moved addNonEmptyDomainConstraints to ScopBuilder. 7) Moved buildMinMaxAccess to ScopBuilder. 8) Moved calculateMinMaxAccess to ScopBuilder. 9) Moved getAccessDomain to ScopBuilder. 10) Moved command line options used only by buildAliasChecks functions to ScopBuilder. 11) Refactored buildAliasGroup function. Added addAliasGroup function to Scop class for pushing back calculated min/max accesses. 12) Added function incrementNumberOfAliasingAssumptions which increments number of statistic variable AssumptionsAliasing. AssumptionsAliasing variable is defined by STATISTIC macro inside ScopInfo.cpp and it is also used by function trackAssumption from Scop class. 13) Added reference to OptimizationRemarkEmitter to ScopBuilder class. 14) Moved calculateMinMaxAccess function to ScopBuilder class. Differential Revision: https://reviews.llvm.org/D63693 llvm-svn: 366262
* [NFC][ScopBuilder] Move addRecordedAssumption to ScopBuilderDominik Adamski2019-07-162-34/+35
| | | | | | | | | | | | | Scope of changes: 1) Moved addRecordedAssumptions to ScopBuilder. 2) Moved Assumption struct outside Scop class. 3) Refactored addRecordedAssumptions function. Replaced while loop by for range loop. 4) Added function to clear processed Assumptions. Differential Revision: https://reviews.llvm.org/D63572 llvm-svn: 366260
* OpaquePtr: Update polly's calls to Loads.h APITim Northover2019-07-092-3/+5
| | | | | | | | | The Loads.h API changed so that a Type parameter is now mandatory in preparation for pointer types being opaque. Unfortunately I don't build polly routinely and it still had some uses. This just provides the (obvious) load type in each case. llvm-svn: 365470
* [ScopBuilder] Move addInvariantLoads to ScopBuilder. NFC.Michael Kruse2019-06-122-172/+174
| | | | | | | | | | | | | | | | | | | Moved addInvariantLoads and functions listed below to ScopBuilder: isAParameter canAlwaysBeHoisted These functions were referenced only by getNonHoistableCtx. Moved CLI parameter PollyAllowDereferenceOfAllFunctionParams to ScopBuilder. Added iterator range through InvariantEquivClasses. Patch by Dominik Adamski <adamski.dominik@gmail.com> Differential Revision: https://reviews.llvm.org/D63172 llvm-svn: 363216
* [ScopBuilder] Move getNonHoistableCtx to ScopBuilder. NFC.Michael Kruse2019-06-122-119/+119
| | | | | | | | | | | | | | | | | | | | | | | | | | This review is based on review: https://reviews.llvm.org/D62925 . It is part of moving hoistInvariantLoads function and all functions referenced only by hoistInvariantLoads to ScopBuilder. Moved getNonHoistableCtx and functions listed below to ScopBuilder: isRequiredInvariantLoad hasNonHoistableBasePtrInScop isAccessRangeTooComplex These functions were referenced only by getNonHoistableCtx. MaxDimensionsInAccessRange and MaxDisjunctsInDomain constant is marked as extern and it is added to polly namespace. It is used by Scop and ScopBuilder classes. MaxDimensionsInAccessRange constant moved to ScopBuilder. It is not used outside ScopBuilder. Patch by Dominik Adamski <adamski.dominik@gmail.com> Differential Revision: https://reviews.llvm.org/D63066 llvm-svn: 363214
* [ScopBuilder] Move hoistInvariantLoads to ScopBuilder. NFC.Michael Kruse2019-06-122-20/+20
| | | | | | | | | | | | | | | | | Refactor Scop and ScopBuilder class: 1. Move hoistInvariantLoads function from Scop to ScopBuilder class. 2. Private functions (addInvariantLoads, getNonHoistableCtx) are moved to public section of Scop class. hoistInvariantLoads function references these functions. These functions will be moved to ScopBuilder as well in the next steps. Patch by Dominik Adamski <adamski.dominik@gmail.com> Differential Revision: https://reviews.llvm.org/D62925 llvm-svn: 363121
* [ScopBuilder] Move canonicalizeDynamicsBasePtrs from ScopInfo. NFC.Michael Kruse2019-06-042-71/+71
| | | | | | | | | | | Refactor Scop and ScopBuilder class. Move canonicalizeDynamicsBasePtrs and corresponding static functions from ScopInfo.cpp to ScopBuilder.cpp Patch by Dominik Adamski <adamski.dominik@gmail.com> Differential Revision: https://reviews.llvm.org/D62781 llvm-svn: 362554
* [ScopBuilder] Move verifyInvariantLoads function from ScopInfo. NFC.Michael Kruse2019-05-312-15/+15
| | | | | | | | | | | Refactor Scop and ScopBuilder class. Move verifyInvariantLoads from Scop class to ScopBuilder class. Patch by: Dominik Adamski <adamski.dominik@gmail.com> Differential Revision: https://reviews.llvm.org/D62628 llvm-svn: 362258
* [ScheduleOptimizer] Hoist extension nodes after schedule optimization.Michael Kruse2019-05-311-18/+0
| | | | | | | | | | | | | | | | | | | | | | Extension nodes make schedule trees are less flexible: Many operations, such as rescheduling, do not work on such schedule trees with extension. As such, some functionality such as determining parallel loops in isl's AST are disabled. Currently, only the pattern-matching generalized matrix-matrix multiplication optimization adds extension nodes (to add copy-in statements). This patch removes all extension nodes as the last step of the schedule optimization by hoisting the extension node's added domain up to the root domain node. All following passes can assume that schedule trees work without restrictions, including the parallelism test. Mark the outermost loop of the optimized matrix-matrix multiplication as parallel such that -polly-parallel is able to parallelize that loop. Differential Revision: https://reviews.llvm.org/D58202 llvm-svn: 362257
* [ScopBuilder] Move buildInvariantEquivalenceClasses function from ScopInfo. NFC.Michael Kruse2019-05-282-22/+22
| | | | | | | | | | | | Refactor Scop and ScopBuilder class. Move buildInvariantEquivalenceClasses function from Scop class to ScopBuilder class. Patch by: Dominik Adamski <adamski.dominik@gmail.com> Differential Revision: https://reviews.llvm.org/D62351 llvm-svn: 361902
* [DependenceInfo] Remove dead initialization. NFC.Michael Kruse2019-05-201-2/+2
| | | | | | | | | | Fix scan-analyzer issue: Value stored to 'WARMemAccesses' during its initialization is never read Patch by Dominik Adamski <adamski.dominik@gmail.com> Signed-off-by: Dominik Adamski <adamski.dominik@gmail.com> llvm-svn: 361196
* [Polly] Don't crash on invalid delinearization result.Eli Friedman2019-05-141-1/+3
| | | | | | | | | | | | | | | | | | | In certain cases, it's possible for delinearization to decide one of the array dimensions should be some function of an induction variable inside the scop. Make sure if this happens, we refuse to use those dimensions for delinearization. Usually, we end up rejecting the scop before it actually crashes, but it looks like it's possible to slip past other checks in certain cases involving smax expressions. Fixes a crash that started showing up this week on the polly AOSP builder. As far as I can tell, this is a longstanding issue, though; it was just exposed by better SCEV analysis of smin expressions. Differential Revision: https://reviews.llvm.org/D61807 llvm-svn: 360708
* Apply include-what-you-use #include removal suggestions. NFC.Michael Kruse2019-03-287-82/+9
| | | | | | | | | | | | This removes unused includes (and forward declarations) as suggested by include-what-you-use. If a transitive include of a removed include is required to compile a file, I added the required header (or forward declaration if suggested by include-what-you-use). This should reduce compilation time and reduce the number of iterative recompilations when a header was changed. llvm-svn: 357209
* [ConstantRange] Rename isWrappedSet() to isUpperWrapped()Nikita Popov2019-03-271-1/+1
| | | | | | | | | | | | | | Split out from D59749. The current implementation of isWrappedSet() doesn't do what it says on the tin, and treats ranges like [X, Max] as wrapping, because they are represented as [X, 0) when using half-inclusive ranges. This also makes it inconsistent with the semantics of isSignWrappedSet(). This patch renames isWrappedSet() to isUpperWrapped(), in preparation for the introduction of a new isWrappedSet() method with corrected behavior. llvm-svn: 357107
* Fix/unify top comment in lib/Analysis/PolyhedralInfo.cppMichal Gorny2019-01-221-15/+16
| | | | | | | | | | | Change the top comment in PolyhedralInfo.cpp to use // instead of ///, similarly to headers in other files. This fixes the issue of copyright line exceeding textwidth and triggering polly-check-format45 failure, e.g. seen here: http://lab.llvm.org:8011/builders/lldb-amd64-ninja-netbsd8/builds/18293/steps/run%20unit%20tests/logs/stdio llvm-svn: 351808
* Update the file headers across all of the LLVM projects in the monorepoChandler Carruth2019-01-199-36/+27
| | | | | | | | | | | | | | | | | to reflect the new license. We understand that people may be surprised that we're moving the header entirely to discuss the new license. We checked this carefully with the Foundation's lawyer and we believe this is the correct approach. Essentially, all code in the project is now made available by the LLVM project under our new license, so you will see that the license headers include that license only. Some of our contributors have contributed code under our old license, and accordingly, we have retained a copy of our old license notice in the top-level files in each project and repository. llvm-svn: 351636
* Fix clang -Wimplicit-fallthrough warnings across llvm, NFCReid Kleckner2018-11-012-4/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | This patch should not introduce any behavior changes. It consists of mostly one of two changes: 1. Replacing fall through comments with the LLVM_FALLTHROUGH macro 2. Inserting 'break' before falling through into a case block consisting of only 'break'. We were already using this warning with GCC, but its warning behaves slightly differently. In this patch, the following differences are relevant: 1. GCC recognizes comments that say "fall through" as annotations, clang doesn't 2. GCC doesn't warn on "case N: foo(); default: break;", clang does 3. GCC doesn't warn when the case contains a switch, but falls through the outer case. I will enable the warning separately in a follow-up patch so that it can be cleanly reverted if necessary. Reviewers: alexfh, rsmith, lattner, rtrieu, EricWF, bollu Differential Revision: https://reviews.llvm.org/D53950 llvm-svn: 345882
* [TI removal] Generically discuss terminators rather than use the soon toChandler Carruth2018-10-181-1/+1
| | | | | | vanish subclass name. llvm-svn: 344728
* [TI removal] Make `getTerminator()` return a generic `Instruction`.Chandler Carruth2018-10-152-7/+7
| | | | | | | | | | | | | | | | | | | | | | | | This removes the primary remaining API producing `TerminatorInst` which will reduce the rate at which code is introduced trying to use it and generally make it much easier to remove the remaining APIs across the codebase. Also clean up some of the stragglers that the previous mechanical update of variables missed. Users of LLVM and out-of-tree code generally will need to update any explicit variable types to handle this. Replacing `TerminatorInst` with `Instruction` (or `auto`) almost always works. Most of these edits were made in prior commits using the perl one-liner: ``` perl -i -ple 's/TerminatorInst(\b.* = .*getTerminator\(\))/Instruction\1/g' ``` This also my break some rare use cases where people overload for both `Instruction` and `TerminatorInst`, but these should be easily fixed by removing the `TerminatorInst` overload. llvm-svn: 344504
* [ScopDetection] Use addUnknown for calls in the AliasSetTracker.Eli Friedman2018-09-111-2/+6
| | | | | | | | | | | | | | | | | | | | | The general-purpose add() now sometimes adds unexpected loop-variant pointers to the AliasSetTracker, so certain loops would be rejected with -polly-allow-modref-calls. Use addUnknown() instead, which has the old behavior. I'm not completely convinced the resulting behavior is actually correct: ScopDetection::isValidAccess seems to mostly ignore "unknown" instructions in the AliasSetTracker. But it's not any worse than what was happening before. Committing without pre-commit review to unbreak the buildbots; the following tests were failing: test/ScopInfo/mod_ref_access_pointee_arguments.ll test/ScopInfo/mod_ref_read_pointee_arguments.ll test/ScopInfo/multidim_2d_with_modref_call_2.ll llvm-svn: 342010
* [IR] Replace `isa<TerminatorInst>` with `isTerminator()`.Chandler Carruth2018-08-262-3/+4
| | | | | | | | | | | | This is a bit awkward in a handful of places where we didn't even have an instruction and now we have to see if we can build one. But on the whole, this seems like a win and at worst a reasonable cost for removing `TerminatorInst`. All of this is part of the removal of `TerminatorInst` from the `Instruction` type hierarchy. llvm-svn: 340701
* [AST] Adapt Polly to AnalysisSetTracker changes. NFC.Michael Kruse2018-08-171-2/+2
| | | | | | | | | | | | The method AliasSetTracker::getAliasSetForPointer was removed and replaced by AliasSetTracker::getAliasSetFor for the restructuring in r339930. Since Polly uses AliasSetTracker::getAliasSetForPointer, a temporary fix has been committed in r339937 with a comment: Can someone from polly please migrate usage and then delete the wrapper? This commit is doing exactly that. llvm-svn: 340072
* [DepInfo] Use isl++ in Dependences::isValidSchedule. NFC.Michael Kruse2018-08-101-28/+23
| | | | | | | Also change StatementToIslMapTy to hold isl::map, because it is used as a parameter. llvm-svn: 339484
* [ScopBuilder] Set domain to empty instead of NULL.Michael Kruse2018-08-011-2/+5
| | | | | | | | | | | | | | The domain generation used nullptr to mark the domain of an error block as never-executed. Later, nullptr domains are recreated with a zero-tuple domain that then mismatches with the expected domain the error block within the loop. Instead of using nullptr, assign an empty domain which preserves the expected space. Remove empty domains during SCoP simplification. Fixes llvm.org/PR38218. llvm-svn: 338646
* [DependenceInfo] Use isl++ to replace foreach_set with for loopTobias Grosser2018-07-171-9/+13
| | | | llvm-svn: 337248
* [ScopInfo] Replace isl foreach calls with for loopsTobias Grosser2018-07-171-9/+16
| | | | llvm-svn: 337246
* [ScopInfo] Replace isl foreach calls with for loopsTobias Grosser2018-07-161-18/+6
| | | | | | | | After Philip added support for range-based for loops to our C++ bindings, we now convert another bunch of foreach calls to range-for loops. This improves general readability of the code. llvm-svn: 337201
* [ScopInfo] Move foldSizeConstantsToRight() to isl++Tobias Grosser2018-07-051-61/+30
| | | | | | | | | | | | | | Summary: This patch updates the isl interface used in `foldSizeConstantsToRight()` to the new C++ interface. Reviewers: chelini, grosser, philip.pfaffe, Meinersbur Reviewed By: grosser Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D48965 llvm-svn: 336362
* ScopInfo: simplify equivalence classes before storing them [NFCI]Tobias Grosser2018-07-041-0/+2
| | | | | | | | | This change has no impact on upstream Polly directly, but reduces output noise for some internal isl versions we are testing. In general, storing simpler and more canonical output is a good idea. Hence, it seems useful to upstream this change. llvm-svn: 336281
* [ScopHelper] Provide support for recognising collective invariant loadsPhilip Pfaffe2018-06-291-12/+31
| | | | | | | | | | | | | | Summary: This patch aims to provide support for detecting load patterns which are collectively invariant but right now `isHoistableLoad()` is checking each load instruction individually which cannot detect the load pattern as a whole. Patch by: Sahil Girish Yerawar Reviewers: bollu, philip.pfaffe, Meinersbur Reviewed By: philip.pfaffe, Meinersbur Differential Revision: https://reviews.llvm.org/D48026 llvm-svn: 335949
* Move ScopInfo to isl++Tobias Grosser2018-06-191-2/+1
| | | | llvm-svn: 335029
* Adjust for clang-format changesTobias Grosser2018-06-181-6/+6
| | | | llvm-svn: 334941
* [ScopInfo] Move splitAliasGroupsByDomain and getAccessDomain to isl++ [NFCI]Tobias Grosser2018-06-181-10/+8
| | | | llvm-svn: 334940
* [ScopInfo] Move more functions to isl++ [NFCI]Tobias Grosser2018-06-181-24/+17
| | | | | | | | | | | This change includes: - getFortranArrayIds - adjustDomainDimensions - propagateInvalidStmtDomains - buildAliasGroupsForAccesses llvm-svn: 334939
OpenPOWER on IntegriCloud