14#ifndef POLLY_ISLTOOLS_H
15#define POLLY_ISLTOOLS_H
17#include "llvm/ADT/Sequence.h"
18#include "llvm/ADT/iterator.h"
42 return static_cast<unsigned>(Size);
46inline namespace noexceptions {
48template <
typename ListT>
51template <
typename ListT>
53 :
public llvm::iterator_facade_base<isl_iterator<ListT>,
54 std::forward_iterator_tag,
55 list_element_type<ListT>> {
156 bool InclFrom,
bool InclTo);
340 bool InclPrevDef,
bool InclNextDef);
404 bool ReadEltInSameInst,
bool InclLastRead,
458 bool InclStart,
bool InclEnd);
bool operator==(const isl_iterator &O) const
ElementT operator*() const
isl_iterator(const ListT &List)
isl_iterator & operator++()
isl_iterator(const ListT &List, int Position)
isl_iterator operator++(int)
list_element_type< ListT > ElementT
decltype(std::declval< ListT >().get_at(0)) list_element_type
isl_iterator< T > end(const T &t)
isl_iterator< T > begin(const T &t)
These are automatically generated checked C++ bindings for isl.
unsigned getNumScatterDims(const isl::union_map &Schedule)
Determine how many dimensions the scatter space of Schedule has.
isl::map betweenScatter(isl::map From, isl::map To, bool InclFrom, bool InclTo)
Construct a range of timepoints between two timepoints.
void dumpExpanded(const isl::set &Set)
Dump all points of the argument to llvm::errs().
isl::map beforeScatter(isl::map Map, bool Strict)
Return the range elements that are lexicographically smaller.
isl::union_map computeReachingWrite(isl::union_map Schedule, isl::union_map Writes, bool Reverse, bool InclPrevDef, bool InclNextDef)
Compute the reaching definition statement or the next overwrite for each definition of an array eleme...
isl::union_map computeArrayUnused(isl::union_map Schedule, isl::union_map Writes, isl::union_map Reads, bool ReadEltInSameInst, bool InclLastRead, bool InclWrite)
Compute the timepoints where the contents of an array element are not used.
isl::val getConstant(isl::pw_aff PwAff, bool Max, bool Min)
If PwAff maps to a constant, return said constant.
isl::map makeIdentityMap(const isl::set &Set, bool RestrictDomain)
Construct an identity map for the given domain values.
isl::map distributeDomain(isl::map Map)
Distribute the domain to the tuples of a wrapped range map.
llvm::iota_range< unsigned > rangeIslSize(unsigned Begin, isl::size End)
Check that End is valid and return an iterator from Begin to End.
isl::map reverseDomain(isl::map Map)
Reverse the nested map tuple in Map's domain.
isl::map subtractParams(isl::map Map, isl::set Params)
Subtract the parameter space Params from Map.
isl::map intersectRange(isl::map Map, isl::union_set Range)
Intersect the range of Map with Range.
isl::union_map liftDomains(isl::union_map UMap, isl::union_set Factor)
Prepend a space to the tuples of a map.
isl::union_map applyDomainRange(isl::union_map UMap, isl::union_map Func)
Apply a map to the 'middle' of another relation.
void dumpPw(const isl::set &Set)
Dump a description of the argument to llvm::errs().
isl::set shiftDim(isl::set Set, int Pos, int Amount)
Add a constant to one dimension of a set.
isl::union_set convertZoneToTimepoints(isl::union_set Zone, bool InclStart, bool InclEnd)
Convert a zone (range between timepoints) to timepoints.
isl::map afterScatter(isl::map Map, bool Strict)
Return the range elements that are lexicographically larger.
isl::map singleton(isl::union_map UMap, isl::space ExpectedSpace)
If by construction a union map is known to contain only a single map, return it.
isl::space getScatterSpace(const isl::union_map &Schedule)
Return the scatter space of a Schedule.
static TupleKindPtr Range("Range")
struct isl_union_set isl_union_set