summaryrefslogtreecommitdiffstats
path: root/polly/unittests
Commit message (Collapse)AuthorAgeFilesLines
* Make Polly tests dependencies explicitserge-sans-paille2020-06-171-0/+2
| | | | | | | | | Due to libPolly now using the component infrastructure, it no longer carries all dependencies as it used to do. Differential Revision: https://reviews.llvm.org/D79295 (cherry picked from commit 8ceee08de135c4c96980bd750bb5e95348126980)
* Update the file headers across all of the LLVM projects in the monorepoChandler Carruth2019-01-194-16/+12
| | | | | | | | | | | | | | | | | 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
* Update isl-cpp bindingsTobias Grosser2018-08-091-8/+8
| | | | | | | | | We upstreamed the export of isl_val_2exp, to the official cpp bindings. In this process, we concluded that pow2 is a better and more widely used name for this functionality. Hence, both the official isl-cpp bindings and our derived variant use now the term pow2. llvm-svn: 339312
* Rebase C++ bindings on top of latest isl bindingsTobias Grosser2018-08-011-34/+46
| | | | | | | | | | | | | | | | | | | | | | The main difference in this change is that isl_stat is now always checked by default. As we elminiated most used of isl_stat, thanks to Philip Pfaffe's implementation of foreach, only a small set of changes is needed. This change does not include the following recent changes to isl's C++ bindings: - stricter error handling for isl_bool - dropping of the isl::namespace qualifiers The former requires a larger patch in Polly and consequently should go through a patch-review. The latter will be applied in the next commit to keep this commit free from noise. We also still apply a couple of other changes on top of the official isl bindings. This delta is expected to shrink over time. llvm-svn: 338504
* [unittest/DeLICM] Replace isl foreach calls with for loopsTobias Grosser2018-07-171-9/+8
| | | | llvm-svn: 337237
* Add missing namespace specifierTobias Grosser2018-06-291-1/+1
| | | | llvm-svn: 335966
* Implement an iterator for isl maps, basic_maps, sets, basic_setsPhilip Pfaffe2018-06-293-0/+31
| | | | | | | | | | | | | | | | | | | | | | | Summary: Provide an iterator to simplify iteration over some isl collections. Since these types do not natively support iteration, they have to be converted to an list first by the caller, but can then be used in a ranged for loop: ``` isl::set S; for (auto SubSet : S.get_basic_set_list ()) { // ... } ``` Reviewers: bollu, Meinersbur, grosser, dexonsmith Reviewed By: bollu Subscribers: hfinkel, mgorny, Meinersbur, mehdi_amini, bollu, steven_wu, llvm-commits Differential Revision: https://reviews.llvm.org/D48136 llvm-svn: 335951
* Remove the last uses of isl::give and isl::takeTobias Grosser2018-04-292-4/+4
| | | | llvm-svn: 331126
* Fix one unit testTobias Grosser2018-04-291-5/+2
| | | | llvm-svn: 331125
* [DeLICM] Remove uses of isl::giveTobias Grosser2018-04-281-4/+4
| | | | llvm-svn: 331122
* [islpp] Remove use of isl::give from unittestsTobias Grosser2018-04-283-31/+24
| | | | | | We do this mostly by just moving directly to pure C++ code. llvm-svn: 331119
* Add isl operator overloads for isl::pw_aff (Try II)Tobias Grosser2018-04-121-0/+103
| | | | | | | | | | | | | | | | | | | | Piecewise affine expressions have directly corresponding mathematical operators. Introduce these operators as overloads as this makes writing code with isl::pw_aff expressions more directly readable. We can now write: A = B + C instead of A = B.add(C) Reviewers: Meinersbur, bollu, sebpop Reviewed By: Meinersbur Subscribers: philip.pfaffe, pollydev, llvm-commits Differential Revision: https://reviews.llvm.org/D45534 llvm-svn: 329880
* Revert r327216 'Add isl operator overloads for isl::pw_aff'Tobias Grosser2018-04-111-68/+0
| | | | | | This commit requires further discussions. llvm-svn: 329825
* Adjust to clang-format changesTobias Grosser2018-03-202-2/+0
| | | | llvm-svn: 328005
* Add isl operator overloads for isl::pw_affTobias Grosser2018-03-101-0/+69
| | | | | | | | | | | | Piecewise affine expressions have directly corresponding mathematical operators. Introduce these operators as overloads as this makes writing code with isl::pw_aff expressions more directly readable. We can now write: A = B + C instead of A = B.add(C) llvm-svn: 327216
* [CMake] Use PRIVATE in target_link_libraries for executablesShoaib Meenai2017-12-051-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We currently use target_link_libraries without an explicit scope specifier (INTERFACE, PRIVATE or PUBLIC) when linking executables. Dependencies added in this way apply to both the target and its dependencies, i.e. they become part of the executable's link interface and are transitive. Transitive dependencies generally don't make sense for executables, since you wouldn't normally be linking against an executable. This also causes issues for generating install export files when using LLVM_DISTRIBUTION_COMPONENTS. For example, clang has a lot of LLVM library dependencies, which are currently added as interface dependencies. If clang is in the distribution components but the LLVM libraries it depends on aren't (which is a perfectly legitimate use case if the LLVM libraries are being built static and there are therefore no run-time dependencies on them), CMake will complain about the LLVM libraries not being in export set when attempting to generate the install export file for clang. This is reasonable behavior on CMake's part, and the right thing is for LLVM's build system to explicitly use PRIVATE dependencies for executables. Unfortunately, CMake doesn't allow you to mix and match the keyword and non-keyword target_link_libraries signatures for a single target; i.e., if a single call to target_link_libraries for a particular target uses one of the INTERFACE, PRIVATE, or PUBLIC keywords, all other calls must also be updated to use those keywords. This means we must do this change in a single shot. I also fully expect to have missed some instances; I tested by enabling all the projects in the monorepo (except dragonegg), and configuring both with and without shared libraries, on both Darwin and Linux, but I'm planning to rely on the buildbots for other configurations (since it should be pretty easy to fix those). Even after this change, we still have a lot of target_link_libraries calls that don't specify a scope keyword, mostly for shared libraries. I'm thinking about addressing those in a follow-up, but that's a separate change IMO. Differential Revision: https://reviews.llvm.org/D40823 llvm-svn: 319840
* [test] Add some test cases for computeArrayUnused.Michael Kruse2017-08-211-0/+49
| | | | llvm-svn: 311404
* [DeLICM] Fix unused zone for writes without in-between read.Michael Kruse2017-08-211-0/+8
| | | | | | | | | | | | | | The implementation of computeArrayUnused did not consider writes without reads before, except for the first write in the SCoP. This caused it to 'forget' writes directly following another write. This patch re-adds the entire reaching defintion of a write that has not been covered before by a read. This fixes Polybench 4.2 2mm where only one of the matrix-multiplication was detected. llvm-svn: 311403
* Add forgotten CMakeLists.txt file in unit-testTobias Grosser2017-08-051-0/+3
| | | | llvm-svn: 310177
* Fix spelling error in previous commitTobias Grosser2017-08-051-3/+3
| | | | llvm-svn: 310176
* [unittests] Add unittest for getPartialTilePrefixesTobias Grosser2017-08-052-0/+61
| | | | | | | | In https://reviews.llvm.org/D36278 it was pointed out that the behavior of getPartialTilePrefixes is not very well understood. To allow for a better understanding, we first provide some basic unittests. llvm-svn: 310175
* Update Polly to reflect a change to a clang-format patch. I'm not sureChandler Carruth2017-06-291-1/+1
| | | | | | | | this is a great test file name based on this update, but I'll let Polly folks sort out how they want this to work long-term, I just want tho bots back. llvm-svn: 306767
* [Polly][NewPM] Reenable ScopPassManager unittestPhilip Pfaffe2017-05-231-0/+1
| | | | llvm-svn: 303629
* Drop nonexisting ScopPassManager directoryTobias Grosser2017-05-151-1/+0
| | | | llvm-svn: 303066
* [Polly][NewPM] Add missing UnittestsPhilip Pfaffe2017-05-152-0/+69
| | | | llvm-svn: 303064
* [Polly][NewPM][WIP] Add a ScopPassManagerPhilip Pfaffe2017-05-151-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds both a ScopAnalysisManager and a ScopPassManager. The ScopAnalysisManager is itself a Function-Analysis, and manages analyses on Scops. The ScopPassManager takes care of building Scop pass pipelines. This patch is marked WIP because I've left two FIXMEs which I need to think about some more. Both of these deal with invalidation: Deferred invalidation is currently not implemented. Deferred invalidation deals with analyses which cache references to other analysis results. If these results are invalidated, invalidation needs to be propagated into the caching analyses. The ScopPassManager as implemented assumes that ScopPasses do not affect other Scops in any way. There has been some discussion about this on other patch threads, however it makes sense to reiterate this for this specific patch. I'm uploading this patch even though it's incomplete to encourage discussion and give you an impression of how this is going to work. Differential Revision: https://reviews.llvm.org/D33192 llvm-svn: 303062
* [CMake] Use object library to build the two flavours of Polly.Michael Kruse2017-04-271-13/+2
| | | | | | | | | | | | | | | | | | | | | Polly comes in two library flavors: One loadable module to use the LLVM framework -load mechanism, and another one that host applications can link to. These have very different requirements for Polly's own dependencies. The loadable module assumes that all its LLVM dependencies are already available in the address space of the host application, and is not allowed to bring in its own copy of any LLVM library (including the NVPTX backend in case of Polly-ACC). The non-module library is intended to be linked to using target_link_libraries. CMake would then resolve all of its dependencies, including NVPTX and ensure that only a single instance of each library will be used. Differential Revision: https://reviews.llvm.org/D32442 llvm-svn: 301558
* [unittests/DeLICM] Add test for Written vs Written.Michael Kruse2017-04-261-0/+3
| | | | | | | | | | | | | The interpretation of multiple known ValInsts for the same element and timepoint is that these are alterntivate names for the same values, for instance a PHINode and the incoming value when knowning it was the last executed block. That means that known values do not conflict if there at least (but necessarily all) one common ValInst. This prinviple also applies to Written values. Add a test for this principle. llvm-svn: 301481
* [unittests/DeLICM] Add test for Occipied vs Occupied.Michael Kruse2017-04-261-0/+3
| | | | | | | | | | | | The interpretation of multiple known ValInsts for the same element and timepoint is that these are alterntivate names for the same values, for instance a PHINode and the incoming value when knowning it was the last executed block. That means that known values do not conflict if there at least (but necessarily all) one common ValInst. Add a case to test this principle. llvm-svn: 301480
* [DeLICM] Use Known information when comparing Occupied and Written.Michael Kruse2017-04-261-0/+20
| | | | | | | | | | | | Do not conflict if a write writes the same value as already known. This change only affects unit tests, but no functional changes are expected on LLVM-IR, as no Known information is yet extracted and consequently this functionality is only triggered through unit tests. Differential Revision: https://reviews.llvm.org/D32026 llvm-svn: 301460
* [DeLICM] Use Known information when comparing Existing.Occupied and ↵Michael Kruse2017-04-251-0/+23
| | | | | | | | | | | | | | Proposed.Occupied. Do not conflict if the value of Existing and Proposed are the same. This change only affects unit tests, but no functional changes are expected on LLVM-IR, as no Known information is yet extracted and consequently this functionality is only triggered through unit tests. Differential Revision: https://reviews.llvm.org/D32025 llvm-svn: 301301
* [unittests] Derive Occupied from Unused when given.Michael Kruse2017-04-251-7/+9
| | | | | | | | | | | When both, OccupiedAndKnown and Unused are given, use the former only for the Known values. The relation Unused \union Occupied must always hold. This allows us to specify Known independently of Occupied. It is needed for an artificial test case in https://reviews.llvm.org/D32025. llvm-svn: 301284
* [unittests] Add postcondition to completeLifetime.Michael Kruse2017-04-251-0/+5
| | | | llvm-svn: 301283
* [CMake] Fix unittests in out-of-LLVM-tree builds.Michael Kruse2017-04-221-13/+13
| | | | | | | | | | | | | Unittests are linked against a subset of LLVM libraries and its transitive dependencies resolved by CMake. The information about indirect library dependency is not available when building separately from LLVM, which result in missing symbol errors while linking. Resolve this issue by querying llvm-config about the available LLVM libraries and link against all of them, since dependence information is still not available. llvm-svn: 301095
* [CMake] Link unittests only against libLLVM.so, if available.Michael Kruse2017-04-211-1/+12
| | | | | | | | | | | | | | We can only link against libLLVM.so or the individual libLLVM*.so components, but not both of them. Doing so results in these components exist twice in the programs address space, since it is already contained in libLLVM.so. The observable effect of this is that command line switches are registered multiple times (once for each instance), which is an error. This fixes llvm.org/PR32735. Reported-by: Singapuram Sanjay Srivallabh <singapuram.sanjay@gmail.com> llvm-svn: 301020
* [DeLICM] Use Known information when comparing Existing.Written and ↵Michael Kruse2017-04-201-0/+8
| | | | | | | | | | | | Proposed.Written. This change only affects unit tests, but no functional changes are expected on LLVM-IR, as no Known information is yet extracted and consequently this functionality is only triggered through unit tests. Differential Revision: https://reviews.llvm.org/D32027 llvm-svn: 300874
* Use isl C++ foreach implementationTobias Grosser2017-04-142-25/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit switches Polly over to the isl::obj::foreach_* implementation, which is part of the new isl bindings and follows the foreach pattern established in Polly by Michael Kruse. The original isl C function: isl_stat isl_union_set_foreach_set(__isl_keep isl_union_set *uset, isl_stat (*fn)(__isl_take isl_set *set, void *user), void *user); which required the user to define a static callback function to which all interesting parameters are passed via a 'void *' user-pointer, is on the C++ side available as a function that takes a std::function<>, which can carry any additional arguments without the need for a user pointer: stat UnionSet::foreach_set(const std::function<stat(set)> &fn) const; The following code illustrates the use of the new C++ interface: auto Lambda = [=, &Result](isl::set Set) -> isl::stat { auto Shifted = shiftDimension(Set, Pos, Amount); Result = Result.add(Shifted); return isl::stat::ok; } UnionSet.foreach_set(Lambda); Polly had some specialized foreach functions which did not require the lambdas to return a status flag. We remove these functions in this commit to move Polly completely over to the new isl interface. We may in the future discuss if functors without return values can be supported easily. Another extension proposed by Michael Kruse is the use of C++ iterators to allow the use of normal for loops to iterate over these sets. Such an extension would allow us to further simplify the code. Reviewed-by: Michael Kruse <llvm@meinersbur.de> Differential Revision: https://reviews.llvm.org/D30620 llvm-svn: 300323
* [DeLICM] Introduce unittesting infrastructure for Known and Written. NFC.Michael Kruse2017-04-131-53/+126
| | | | llvm-svn: 300212
* [DeLICM] Export Known and Written to DeLICMTests. NFC.Michael Kruse2017-04-131-9/+18
| | | | | | | This will allow unittesting of new functionality based on Known and Written. llvm-svn: 300211
* [DeLICM] Rename Knowledge to KnowledgeStr. NFC.Michael Kruse2017-04-131-3/+4
| | | | | | | Some debuggers get confused by different class of the same name defined independently in different translation units. llvm-svn: 300207
* [Support] Add functions to ISLTools.Michael Kruse2017-03-221-0/+103
| | | | | | | | | | | Add shiftDim and convertZoneToTimepoints overloads for isl maps. Add distributeDomain, liftDomains and applyDomainRange functions. These are going to be used in https://reviews.llvm.org/D31247 (Add known array contents to Knowledge) llvm-svn: 298543
* [DeLICM] Refector out parseSetOrNull. NFC.Michael Kruse2017-03-201-21/+13
| | | | | | | | Note that the isl::union_set(isl_ctx,std::string) constructor will auto-convert the char* to an std::string. Converting a nullptr to std::string is undefined in C++11 (sect. 21.4.2.9). llvm-svn: 298259
* [DeLICM] Add forgotten isl_space_set_tuple_id in unittests.Michael Kruse2017-03-201-0/+2
| | | | | | | | Otherwise the isl_id NewId which ensures uniqueness of the created space is unused. None of the tests currently uses an nameless tuple, so there is not change in what is tested. llvm-svn: 298258
* [unittest] Do not convert large unsigned long to isl::valTobias Grosser2017-03-101-2/+2
| | | | | | | | | | | | | | | | | | | | | | Currently the isl::val constructor only takes a signed long as parameter, which on Windows is only 32 bit large and can consequently not be used to obtain the same result when loading from the expression '(1ull << 32) - 1)' that we get when loading this value via isl_val_int_from_ui or when loading the value on Linux systems with 64 bit long data types. We avoid this issue by performing the shift and subtractiong within the isl::val. It would be nice to teach the isl++ bindings to construct isl::val from other integer types, but the current interface is not sufficient to do so. If constructors from both signed long and unsigned long are exposed, then integer literals that are of type 'int' and which must be converted to 'long' to match the constructor have two ambigious constructors to choose from, which result in a compiler error. The right solution is likely to additionally expose constructors from signed and unsigned int, but these are not yet available in the isl C interface and adding those adhoc to our bindings is something I would like to avoid for now. We should address this issue with a proper discussion on the isl side. llvm-svn: 297522
* [unittest] Translate isl tests to C++ bindingsTobias Grosser2017-03-101-114/+94
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For this translation we introduce two functions, valFromAPInt and APIntFromVal, to convert between isl::val and APInt. For now these are just proxies, but in the future they will replace the current isl_val* based conversion functions. The isl unit test cases benefit most from the new isl::boolean (from Michael Kruse), which can be explicitly casted to bool and which -- as part of this cast -- emits a check that no error condition has been triggered so far. This allows us to simplify EXPECT_EQ(isl_bool_true, isl_val_is_zero(IslZero)); to EXPECT_TRUE(IslZero.is_zero()); This simplification also becomes very clear in operator==, which changes from auto IsEqual = isl_set_is_equal(LHS.keep(), RHS.keep()); EXPECT_NE(isl_bool_error, IsEqual); return IsEqual; to just return bool(LHS.is_equal(RHS)); Some background for non-isl users. The isl C interface has an isl_bool type, which can be either true, false, or error. Hence, whenever a function returns a value of type isl_bool, an explicit error check should be considered. By using isl::boolean, we can just cast the isl::boolean to 'bool' or simply use the isl::boolean in a context where it will automatically be casted to bool (e.g., in an if-condition). When doing so, the C++ bindings automatically add code that verifies that the return value is not an error code. If it is, the program will warn about this and abort. For cases where errors are expected, isl::boolean provides checks such as boolean::is_true_or_error() or boolean::is_true_no_error() to explicitly control program behavior in case of error conditions. Thanks to the new automatic memory management, we also can avoid many calls to isl_*_free. For code that had previously been managed by IslPtr<>, many calls to give/take/copy are eliminated. Tags: #polly Reviewed By: Meinersbur Differential Revision: https://reviews.llvm.org/D30618 llvm-svn: 297464
* Introduce isl C++ bindings, Part 1: value_ptr style interfaceTobias Grosser2017-03-102-39/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Over the last couple of months several authors of independent isl C++ bindings worked together to jointly design an official set of isl C++ bindings which combines their experience in developing isl C++ bindings. The new bindings have been designed around a value pointer style interface and remove the need for explicit pointer managenent and instead use C++ language features to manage isl objects. This commit introduces the smart-pointer part of the isl C++ bindings and replaces the current IslPtr<T> classes, which served the very same purpose, but had to be manually maintained. Instead, we now rely on automatically generated classes for each isl object, which provide value_ptr semantics. An isl object has the following smart pointer interface: inline set manage(__isl_take isl_set *ptr); class set { friend inline set manage(__isl_take isl_set *ptr); isl_set *ptr = nullptr; inline explicit set(__isl_take isl_set *ptr); public: inline set(); inline set(const set &obj); inline set &operator=(set obj); inline ~set(); inline __isl_give isl_set *copy() const &; inline __isl_give isl_set *copy() && = delete; inline __isl_keep isl_set *get() const; inline __isl_give isl_set *release(); inline bool is_null() const; } The interface and behavior of the new value pointer style classes is inspired by http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3339.pdf, which proposes a std::value_ptr, a smart pointer that applies value semantics to its pointee. We currently only provide a limited set of public constructors and instead require provide a global overloaded type constructor method "isl::obj isl::manage(isl_obj *)", which allows to convert an isl_set* to an isl::set by calling 'S = isl::manage(s)'. This pattern models the make_unique() constructor for unique pointers. The next two functions isl::obj::get() and isl::obj::release() are taken directly from the std::value_ptr proposal: S.get() extracts the raw pointer of the object managed by S. S.release() extracts the raw pointer of the object managed by S and sets the object in S to null. We additionally add std::obj::copy(). S.copy() returns a raw pointer refering to a copy of S, which is a shortcut for "isl::obj(oldobj).release()", a functionality commonly needed when interacting directly with the isl C interface where all methods marked with __isl_take require consumable raw pointers. S.is_null() checks if S manages a pointer or if the managed object is currently null. We add this function to provide a more explicit way to check if the pointer is empty compared to a direct conversion to bool. This commit also introduces a couple of polly-specific extensions that cover features currently not handled by the official isl C++ bindings draft, but which have been provided by IslPtr<T> and are consequently added to avoid code churn. These extensions include: - operator bool() : Conversion from objects to bool - construction from nullptr_t - get_ctx() method - take/keep/give methods, which match the currently used naming convention of IslPtr<T> in Polly. They just forward to (release/get/manage). - raw_ostream printers We expect that these extensions are over time either removed or upstreamed to the official isl bindings. We also export a couple of classes that have not yet been exported in isl (e.g., isl::space) As part of the code review, the following two questions were asked: - Why do we not use a standard smart pointer? std::value_ptr was a proposal that has not been accepted. It is consequently not available in the standard library. Even if it would be available, we want to expand this interface with a complete method interface that is conveniently available from each managed pointer. The most direct way to achieve this is to generate a specialiced value style pointer class for each isl object type and add any additional methods to this class. The relevant changes follow in subsequent commits. - Why do we not use templates or macros to avoid code duplication? It is certainly possible to use templates or macros, but as this code is auto-generated there is no need to make writing this code more efficient. Also, most of these classes will be specialized with individual member functions in subsequent commits, such that there will be little code reuse to exploit. Hence, we decided to do so at the moment. These bindings are not yet officially part of isl, but the draft is already very stable. The smart pointer interface itself did not change since serveral months. Adding this code to Polly is against our normal policy of only importing official isl code. In this case however, we make an exception to showcase a non-trivial use case of these bindings which should increase confidence in these bindings and will help upstreaming them to isl. Tags: #polly Reviewed By: Meinersbur Differential Revision: https://reviews.llvm.org/D30325 llvm-svn: 297452
* [Support] Remove NonowningIslPtr. NFC.Michael Kruse2017-02-231-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | NonowningIslPtr<isl_X> was used as types of function parameters when the function does not consume the isl object, i.e. an __isl_keep parameter. The alternatives are: 1. IslPtr<isl_X> This has additional calls to isl_X_copy and isl_X_free to increase/decrease the reference counter even though not needed. The caller already owns a reference to the isl object. 2. const IslPtr<isl_X>& This does not change the reference counter, but requires an additional load to get the pointer to the isl object (instead of just passing the pointer itself). Moreover, the compiler cannot rely on the constness of the pointer and has to reload the pointer every time it writes to memory (unless alias analysis such as TBAA says it is not possible). The isl C++ bindings currently in development do not have an equivalent to NonowningIslPtr and adding one would make the binding more complicated and its advantage in performance is small. In order to simplify the transition to these C++ bindings, remove NonowningIslPtr. Change every former use of it to alternative 2 mentioned aboce (const IslPtr<isl_X>&). llvm-svn: 295998
* [DeLICM] Add forgotten unittests in previous commit. NFC.Michael Kruse2017-02-152-0/+189
| | | | llvm-svn: 295204
* [DeLICM] Add Knowledge class. NFC.Michael Kruse2017-02-151-1/+2
| | | | | | | | | | | | | | | The Knowledge class remembers the state of data at any timepoint of a SCoP's execution. Currently, it tracks whether an array element is unused or is occupied by some value, and the writes to it. A future addition will be to also remember which value it contains. Objects are used to determine whether two Knowledge contain conflicting information, i.e. two states cannot be true a the same time. This commit was extracted from the DeLICM algorithm at https://reviews.llvm.org/D24716. llvm-svn: 295197
* [Support] Add convertZoneToTimepoints. NFC.Michael Kruse2017-02-041-0/+53
| | | | | | | | | | | | This function has been extracted from the upcoming DeLICM patch (https://reviews.llvm.org/D24716). In contrast to computeReachingWrite and computeArrayUnused, convertZoneToTimepoints implies a format for zones (ranges between timepoints). Zones at the moment are unique to DeLICM, but convertZoneToTimepoints makes most sense in conjunction with the previous two functions. llvm-svn: 294094
OpenPOWER on IntegriCloud