Lines Matching refs:isl
171 static isl::set addRangeBoundsToSet(isl::set S, const ConstantRange &Range, in addRangeBoundsToSet()
172 int dim, isl::dim type) { in addRangeBoundsToSet()
173 isl::val V; in addRangeBoundsToSet()
174 isl::ctx Ctx = S.ctx(); in addRangeBoundsToSet()
194 isl::set SLB = S.lower_bound_val(type, dim, V); in addRangeBoundsToSet()
198 isl::set SUB = S.upper_bound_val(type, dim, V); in addRangeBoundsToSet()
228 ScopArrayInfo::ScopArrayInfo(Value *BasePtr, Type *ElementType, isl::ctx Ctx, in ScopArrayInfo()
238 Id = isl::id::alloc(Ctx, BasePtrName, this); in ScopArrayInfo()
254 isl::space ScopArrayInfo::getSpace() const { in getSpace()
255 auto Space = isl::space(Id.ctx(), 0, getNumberOfDimensions()); in getSpace()
256 Space = Space.set_tuple_id(isl::dim::set, Id); in getSpace()
261 isl::union_set WriteSet = S.getWrites().range(); in isReadOnly()
262 isl::space Space = getSpace(); in isReadOnly()
324 DimensionSizesPw.push_back(isl::pw_aff()); in updateSizes()
327 isl::pw_aff Size = S.getPwAffOnly(Expr); in updateSizes()
339 isl::id ScopArrayInfo::getBasePtrId() const { return Id; } in getBasePtrId()
357 isl::pw_aff Size = getDimensionSizePw(u); in print()
375 ScopArrayInfo::getFromAccessFunction(isl::pw_multi_aff PMA) { in getFromAccessFunction()
376 isl::id Id = PMA.get_tuple_id(isl::dim::out); in getFromAccessFunction()
381 const ScopArrayInfo *ScopArrayInfo::getFromId(isl::id Id) { in getFromId()
389 isl::space ArraySpace = SAI->getSpace(); in wrapConstantDimensions()
390 isl::ctx Ctx = ArraySpace.ctx(); in wrapConstantDimensions()
393 isl::multi_aff DivModAff = isl::multi_aff::identity( in wrapConstantDimensions()
395 isl::local_space LArraySpace = isl::local_space(ArraySpace); in wrapConstantDimensions()
410 isl::val DimSizeVal = in wrapConstantDimensions()
412 isl::aff Var = isl::aff::var_on_domain(LArraySpace, isl::dim::set, i); in wrapConstantDimensions()
413 isl::aff PrevVar = in wrapConstantDimensions()
414 isl::aff::var_on_domain(LArraySpace, isl::dim::set, i - 1); in wrapConstantDimensions()
418 isl::aff Modulo = Var.mod(DimSizeVal); in wrapConstantDimensions()
422 isl::aff Divide = Var.div(isl::aff(LArraySpace, DimSizeVal)); in wrapConstantDimensions()
433 isl::map Relation = AccessRelation; in wrapConstantDimensions()
434 Relation = Relation.apply_range(isl::map::from_multi_aff(DivModAff)); in wrapConstantDimensions()
441 isl::space ArraySpace = SAI->getSpace(); in updateDimensionality()
442 isl::space AccessSpace = AccessRelation.get_space().range(); in updateDimensionality()
443 isl::ctx Ctx = ArraySpace.ctx(); in updateDimensionality()
445 unsigned DimsArray = unsignedFromIslSize(ArraySpace.dim(isl::dim::set)); in updateDimensionality()
446 unsigned DimsAccess = unsignedFromIslSize(AccessSpace.dim(isl::dim::set)); in updateDimensionality()
455 isl::map Map = isl::map::from_domain_and_range( in updateDimensionality()
456 isl::set::universe(AccessSpace), isl::set::universe(ArraySpace)); in updateDimensionality()
459 Map = Map.fix_si(isl::dim::out, i, 0); in updateDimensionality()
462 Map = Map.equate(isl::dim::in, i - DimsMissing, isl::dim::out, i); in updateDimensionality()
477 isl::val V = isl::val(Ctx, ArrayElemSize); in updateDimensionality()
501 isl::map Map = isl::map::from_domain_and_range( in updateDimensionality()
502 isl::set::universe(ArraySpace), isl::set::universe(ArraySpace)); in updateDimensionality()
504 Map = Map.equate(isl::dim::in, i, isl::dim::out, i); in updateDimensionality()
506 isl::constraint C; in updateDimensionality()
507 isl::local_space LS; in updateDimensionality()
509 LS = isl::local_space(Map.get_space()); in updateDimensionality()
512 C = isl::constraint::alloc_inequality(LS); in updateDimensionality()
513 C = C.set_constant_val(isl::val(Ctx, Num - 1)); in updateDimensionality()
514 C = C.set_coefficient_si(isl::dim::in, DimsArray - 1, 1); in updateDimensionality()
515 C = C.set_coefficient_si(isl::dim::out, DimsArray - 1, -1); in updateDimensionality()
518 C = isl::constraint::alloc_inequality(LS); in updateDimensionality()
519 C = C.set_coefficient_si(isl::dim::in, DimsArray - 1, -1); in updateDimensionality()
520 C = C.set_coefficient_si(isl::dim::out, DimsArray - 1, 1); in updateDimensionality()
521 C = C.set_constant_val(isl::val(Ctx, 0)); in updateDimensionality()
548 isl::id ArrayId = getArrayId(); in getOriginalScopArrayInfo()
555 isl::id ArrayId = getLatestArrayId(); in getLatestScopArrayInfo()
561 isl::id MemoryAccess::getOriginalArrayId() const { in getOriginalArrayId()
562 return AccessRelation.get_tuple_id(isl::dim::out); in getOriginalArrayId()
565 isl::id MemoryAccess::getLatestArrayId() const { in getLatestArrayId()
568 return NewAccessRelation.get_tuple_id(isl::dim::out); in getLatestArrayId()
571 isl::map MemoryAccess::getAddressFunction() const { in getAddressFunction()
575 isl::pw_multi_aff
576 MemoryAccess::applyScheduleToAccessRelation(isl::union_map USchedule) const { in applyScheduleToAccessRelation()
577 isl::map Schedule, ScheduledAccRel; in applyScheduleToAccessRelation()
578 isl::union_set UDomain; in applyScheduleToAccessRelation()
582 Schedule = isl::map::from_union_map(USchedule); in applyScheduleToAccessRelation()
584 return isl::pw_multi_aff::from_map(ScheduledAccRel); in applyScheduleToAccessRelation()
587 isl::map MemoryAccess::getOriginalAccessRelation() const { in getOriginalAccessRelation()
595 isl::space MemoryAccess::getOriginalAccessRelationSpace() const { in getOriginalAccessRelationSpace()
599 isl::map MemoryAccess::getNewAccessRelation() const { in getNewAccessRelation()
611 isl::basic_map MemoryAccess::createBasicAccessMap(ScopStmt *Statement) { in createBasicAccessMap()
612 isl::space Space = isl::space(Statement->getIslCtx(), 0, 1); in createBasicAccessMap()
615 return isl::basic_map::from_domain_and_range( in createBasicAccessMap()
616 isl::basic_set::universe(Statement->getDomainSpace()), in createBasicAccessMap()
617 isl::basic_set::universe(Space)); in createBasicAccessMap()
641 isl::set MemoryAccess::assumeNoOutOfBound() { in assumeNoOutOfBound()
643 isl::space Space = getOriginalAccessRelationSpace().range(); in assumeNoOutOfBound()
644 isl::set Outside = isl::set::empty(Space); in assumeNoOutOfBound()
645 for (int i = 1, Size = Space.dim(isl::dim::set).release(); i < Size; ++i) { in assumeNoOutOfBound()
646 isl::local_space LS(Space); in assumeNoOutOfBound()
647 isl::pw_aff Var = isl::pw_aff::var_on_domain(LS, isl::dim::set, i); in assumeNoOutOfBound()
648 isl::pw_aff Zero = isl::pw_aff(LS); in assumeNoOutOfBound()
650 isl::set DimOutside = Var.lt_set(Zero); in assumeNoOutOfBound()
651 isl::pw_aff SizeE = SAI->getDimensionSizePw(i); in assumeNoOutOfBound()
652 SizeE = SizeE.add_dims(isl::dim::in, Space.dim(isl::dim::set).release()); in assumeNoOutOfBound()
653 SizeE = SizeE.set_tuple_id(isl::dim::in, Space.get_tuple_id(isl::dim::set)); in assumeNoOutOfBound()
679 isl::pw_aff SubscriptPWA = getPwAff(Subscripts[0]); in buildMemIntrinsicAccessRelation()
680 isl::map SubscriptMap = isl::map::from_pw_aff(SubscriptPWA); in buildMemIntrinsicAccessRelation()
682 isl::map LengthMap; in buildMemIntrinsicAccessRelation()
684 LengthMap = isl::map::universe(SubscriptMap.get_space()); in buildMemIntrinsicAccessRelation()
686 isl::pw_aff LengthPWA = getPwAff(Subscripts[1]); in buildMemIntrinsicAccessRelation()
687 LengthMap = isl::map::from_pw_aff(LengthPWA); in buildMemIntrinsicAccessRelation()
688 isl::space RangeSpace = LengthMap.get_space().range(); in buildMemIntrinsicAccessRelation()
689 LengthMap = LengthMap.apply_range(isl::map::lex_gt(RangeSpace)); in buildMemIntrinsicAccessRelation()
691 LengthMap = LengthMap.lower_bound_si(isl::dim::out, 0, 0); in buildMemIntrinsicAccessRelation()
696 LengthMap.set_tuple_id(isl::dim::in, getStatement()->getDomainId()); in buildMemIntrinsicAccessRelation()
737 isl::map Relation = AccessRelation; in computeBoundsOnAccessRelation()
738 isl::set AccessRange = Relation.range(); in computeBoundsOnAccessRelation()
740 isl::dim::set); in computeBoundsOnAccessRelation()
750 isl::map NewAccessRelation = AccessRelation; in foldAccessRelation()
753 isl::space Space; in foldAccessRelation()
754 isl::map MapOne, MapTwo; in foldAccessRelation()
755 isl::pw_aff DimSize = getPwAff(Sizes[i + 1]); in foldAccessRelation()
757 isl::space SpaceSize = DimSize.get_space(); in foldAccessRelation()
758 isl::id ParamId = SpaceSize.get_dim_id(isl::dim::param, 0); in foldAccessRelation()
764 int ParamLocation = Space.find_dim_by_id(isl::dim::param, ParamId); in foldAccessRelation()
766 MapOne = isl::map::universe(Space); in foldAccessRelation()
768 MapOne = MapOne.equate(isl::dim::in, j, isl::dim::out, j); in foldAccessRelation()
769 MapOne = MapOne.lower_bound_si(isl::dim::in, i + 1, 0); in foldAccessRelation()
771 MapTwo = isl::map::universe(Space); in foldAccessRelation()
774 MapTwo = MapTwo.equate(isl::dim::in, j, isl::dim::out, j); in foldAccessRelation()
776 isl::local_space LS(Space); in foldAccessRelation()
777 isl::constraint C; in foldAccessRelation()
778 C = isl::constraint::alloc_equality(LS); in foldAccessRelation()
780 C = C.set_coefficient_si(isl::dim::in, i, 1); in foldAccessRelation()
781 C = C.set_coefficient_si(isl::dim::out, i, -1); in foldAccessRelation()
783 C = isl::constraint::alloc_equality(LS); in foldAccessRelation()
784 C = C.set_coefficient_si(isl::dim::in, i + 1, 1); in foldAccessRelation()
785 C = C.set_coefficient_si(isl::dim::out, i + 1, -1); in foldAccessRelation()
786 C = C.set_coefficient_si(isl::dim::param, ParamLocation, 1); in foldAccessRelation()
788 MapTwo = MapTwo.upper_bound_si(isl::dim::in, i + 1, -1); in foldAccessRelation()
794 isl::id BaseAddrId = getScopArrayInfo()->getBasePtrId(); in foldAccessRelation()
795 isl::space Space = Statement->getDomainSpace(); in foldAccessRelation()
797 isl::dim::in, Space.get_tuple_id(isl::dim::set)); in foldAccessRelation()
798 NewAccessRelation = NewAccessRelation.set_tuple_id(isl::dim::out, BaseAddrId); in foldAccessRelation()
816 isl::set StmtInvalidDomain = getStatement()->getInvalidDomain(); in buildAccessRelation()
817 InvalidDomain = isl::set::empty(StmtInvalidDomain.get_space()); in buildAccessRelation()
819 isl::ctx Ctx = Id.ctx(); in buildAccessRelation()
820 isl::id BaseAddrId = SAI->getBasePtrId(); in buildAccessRelation()
824 AccessRelation = AccessRelation.set_tuple_id(isl::dim::out, BaseAddrId); in buildAccessRelation()
836 AccessRelation = AccessRelation.set_tuple_id(isl::dim::out, BaseAddrId); in buildAccessRelation()
840 isl::space Space = isl::space(Ctx, 0, Statement->getNumIterators(), 0); in buildAccessRelation()
841 AccessRelation = isl::map::universe(Space); in buildAccessRelation()
844 isl::pw_aff Affine = getPwAff(Subscripts[i]); in buildAccessRelation()
845 isl::map SubscriptMap = isl::map::from_pw_aff(Affine); in buildAccessRelation()
851 isl::dim::in, Space.get_tuple_id(isl::dim::set)); in buildAccessRelation()
852 AccessRelation = AccessRelation.set_tuple_id(isl::dim::out, BaseAddrId); in buildAccessRelation()
873 Id = isl::id::alloc(Stmt->getParent()->getIslCtx(), IdName, this); in MemoryAccess()
876 MemoryAccess::MemoryAccess(ScopStmt *Stmt, AccessType AccType, isl::map AccRel) in MemoryAccess()
879 isl::id ArrayInfoId = NewAccessRelation.get_tuple_id(isl::dim::out); in MemoryAccess()
890 Id = isl::id::alloc(Stmt->getParent()->getIslCtx(), IdName, this); in MemoryAccess()
896 isl::set Ctx = Statement->getParent()->getContext(); in realignParams()
902 isl::space CtxSpace = Ctx.get_space(); in realignParams()
911 isl::id MemoryAccess::getId() const { return Id; } in getId()
947 isl::pw_aff MemoryAccess::getPwAff(const SCEV *E) { in getPwAff()
950 isl::set StmtDom = getStatement()->getDomain(); in getPwAff()
952 isl::set NewInvalidDom = StmtDom.intersect(PWAC.second); in getPwAff()
969 static isl::map getEqualAndLarger(isl::space SetDomain) { in getEqualAndLarger()
970 isl::space Space = SetDomain.map_from_set(); in getEqualAndLarger()
971 isl::map Map = isl::map::universe(Space); in getEqualAndLarger()
979 Map = Map.equate(isl::dim::in, i, isl::dim::out, i); in getEqualAndLarger()
985 Map = Map.order_lt(isl::dim::in, lastDimension, isl::dim::out, lastDimension); in getEqualAndLarger()
989 isl::set MemoryAccess::getStride(isl::map Schedule) const { in getStride()
990 isl::map AccessRelation = getAccessRelation(); in getStride()
991 isl::space Space = Schedule.get_space().range(); in getStride()
992 isl::map NextScatt = getEqualAndLarger(Space); in getStride()
1002 isl::set Deltas = NextScatt.deltas(); in getStride()
1006 bool MemoryAccess::isStrideX(isl::map Schedule, int StrideWidth) const { in isStrideX()
1007 isl::set Stride, StrideX; in isStrideX()
1011 StrideX = isl::set::universe(Stride.get_space()); in isStrideX()
1014 StrideX = StrideX.fix_si(isl::dim::set, i, 0); in isStrideX()
1015 StrideX = StrideX.fix_si(isl::dim::set, Size - 1, StrideWidth); in isStrideX()
1021 bool MemoryAccess::isStrideZero(isl::map Schedule) const { in isStrideZero()
1025 bool MemoryAccess::isStrideOne(isl::map Schedule) const { in isStrideOne()
1029 void MemoryAccess::setAccessRelation(isl::map NewAccess) { in setAccessRelation()
1033 void MemoryAccess::setNewAccessRelation(isl::map NewAccess) { in setNewAccessRelation()
1038 isl::space NewSpace = NewAccess.get_space(); in setNewAccessRelation()
1039 isl::space NewDomainSpace = NewSpace.domain(); in setNewAccessRelation()
1040 isl::space OriginalDomainSpace = getStatement()->getDomainSpace(); in setNewAccessRelation()
1047 isl::set StmtDomain = getStatement()->getDomain(); in setNewAccessRelation()
1048 isl::set DefinedContext = in setNewAccessRelation()
1051 isl::set NewDomain = NewAccess.domain(); in setNewAccessRelation()
1056 isl::space NewAccessSpace = NewAccess.get_space(); in setNewAccessRelation()
1057 assert(NewAccessSpace.has_tuple_id(isl::dim::set) && in setNewAccessRelation()
1059 isl::id NewArrayId = NewAccessSpace.get_tuple_id(isl::dim::set); in setNewAccessRelation()
1075 unsigned SpaceSize = unsignedFromIslSize(NewAccessSpace.dim(isl::dim::set)); in setNewAccessRelation()
1085 isl::set StmtDom = getStatement()->getDomain(); in isLatestPartialAccess()
1086 isl::set AccDom = getLatestAccessRelation().domain(); in isLatestPartialAccess()
1093 isl::map ScopStmt::getSchedule() const { in getSchedule()
1094 isl::set Domain = getDomain(); in getSchedule()
1096 return isl::map::from_aff(isl::aff(isl::local_space(getDomainSpace()))); in getSchedule()
1100 Schedule = Schedule.intersect_domain(isl::union_set(Domain)); in getSchedule()
1102 return isl::map::from_aff(isl::aff(isl::local_space(getDomainSpace()))); in getSchedule()
1103 isl::map M = M.from_union_map(Schedule); in getSchedule()
1110 void ScopStmt::restrictDomain(isl::set NewDomain) { in restrictDomain()
1158 isl::set Ctx = Parent.getContext(); in realignParams()
1164 isl::space CtxSpace = Ctx.get_space(); in realignParams()
1182 ScopStmt::ScopStmt(Scop &parent, isl::map SourceRel, isl::map TargetRel, in ScopStmt()
1183 isl::set NewDomain) in ScopStmt()
1187 isl::id Id = isl::id::alloc(getIslCtx(), getBaseName(), this); in ScopStmt()
1189 TargetRel = TargetRel.set_tuple_id(isl::dim::in, Id); in ScopStmt()
1194 SourceRel = SourceRel.set_tuple_id(isl::dim::in, Id); in ScopStmt()
1208 void ScopStmt::setInvalidDomain(isl::set ID) { InvalidDomain = ID; } in setInvalidDomain()
1224 isl::ctx ScopStmt::getIslCtx() const { return Parent.getIslCtx(); } in getIslCtx()
1226 isl::set ScopStmt::getDomain() const { return Domain; } in getDomain()
1228 isl::space ScopStmt::getDomainSpace() const { return Domain.get_space(); } in getDomainSpace()
1230 isl::id ScopStmt::getDomainId() const { return Domain.get_tuple_id(); } in getDomainId()
1353 void Scop::setContext(isl::set NewContext) { in setContext()
1461 isl::id Id = isl::id::alloc(getIslCtx(), ParameterName, in createParameterId()
1477 isl::id Scop::getIdForParam(const SCEV *Parameter) const { in getIdForParam()
1488 isl::space Space = isl::space::params_alloc(getIslCtx(), 0); in buildContext()
1489 Context = isl::set::universe(Space); in buildContext()
1490 InvalidContext = isl::set::empty(Space); in buildContext()
1491 AssumedContext = isl::set::universe(Space); in buildContext()
1492 DefinedBehaviorContext = isl::set::universe(Space); in buildContext()
1499 Context = addRangeBoundsToSet(Context, SRange, PDim++, isl::dim::param); in addParameterBounds()
1509 isl::space Space = getFullParamSpace(); in realignParams()
1529 static isl::set simplifyAssumptionContext(isl::set AssumptionContext, in simplifyAssumptionContext()
1581 isl::set Scop::getDomainConditions(const ScopStmt *Stmt) const { in getDomainConditions()
1585 isl::set Scop::getDomainConditions(BasicBlock *BB) const { in getDomainConditions()
1678 isl::set Domain = DomainMap.lookup(Stmt.getEntryBlock()); in removeStmtNotInDomainMap()
1823 isl::set Scop::getContext() const { return Context; } in getContext()
1825 isl::space Scop::getParamSpace() const { return getContext().get_space(); } in getParamSpace()
1827 isl::space Scop::getFullParamSpace() const { in getFullParamSpace()
1829 isl::space Space = isl::space::params_alloc(getIslCtx(), ParameterIds.size()); in getFullParamSpace()
1833 isl::id Id = getIdForParam(Parameter); in getFullParamSpace()
1834 Space = Space.set_dim_id(isl::dim::param, PDim++, Id); in getFullParamSpace()
1840 isl::set Scop::getAssumedContext() const { in getAssumedContext()
1877 isl::set PositiveContext = getAssumedContext(); in hasFeasibleRuntimeContext()
1878 isl::set NegativeContext = getInvalidContext(); in hasFeasibleRuntimeContext()
1925 bool Scop::isEffectiveAssumption(isl::set Set, AssumptionSign Sign) { in isEffectiveAssumption()
1942 bool Scop::trackAssumption(AssumptionKind Kind, isl::set Set, DebugLoc Loc, in trackAssumption()
1949 isl::set Univ; in trackAssumption()
1951 Univ = isl::set::universe(Set.get_space()); in trackAssumption()
2005 void Scop::addAssumption(AssumptionKind Kind, isl::set Set, DebugLoc Loc, in addAssumption()
2024 void Scop::intersectDefinedBehavior(isl::set Set, AssumptionSign Sign) { in intersectDefinedBehavior()
2046 addAssumption(Kind, isl::set::empty(getParamSpace()), Loc, AS_ASSUMPTION, BB); in invalidate()
2049 isl::set Scop::getInvalidContext() const { return InvalidContext; } in getInvalidContext()
2164 isl::ctx Scop::getIslCtx() const { return IslCtx.get(); } in getIslCtx()
2191 isl::union_set Scop::getDomains() const { in getDomains()
2198 return isl::manage(Domain); in getDomains()
2201 isl::pw_aff Scop::getPwAffOnly(const SCEV *E, BasicBlock *BB, in getPwAffOnly()
2207 isl::union_map
2209 isl::union_map Accesses = isl::union_map::empty(getIslCtx()); in getAccessesOfType()
2216 isl::set Domain = Stmt.getDomain(); in getAccessesOfType()
2217 isl::map AccessDomain = MA->getAccessRelation(); in getAccessesOfType()
2226 isl::union_map Scop::getMustWrites() { in getMustWrites()
2230 isl::union_map Scop::getMayWrites() { in getMayWrites()
2234 isl::union_map Scop::getWrites() { in getWrites()
2238 isl::union_map Scop::getReads() { in getReads()
2242 isl::union_map Scop::getAccesses() { in getAccesses()
2246 isl::union_map Scop::getAccesses(ScopArrayInfo *Array) { in getAccesses()
2251 isl::union_map Scop::getSchedule() const { in getSchedule()
2256 isl::schedule Scop::getScheduleTree() const { in getScheduleTree()
2260 void Scop::setSchedule(isl::union_map NewSchedule) { in setSchedule()
2261 auto S = isl::schedule::from_domain(getDomains()); in setSchedule()
2263 isl::multi_union_pw_aff::from_union_map(NewSchedule)); in setSchedule()
2267 void Scop::setScheduleTree(isl::schedule NewSchedule) { in setScheduleTree()
2272 bool Scop::restrictDomains(isl::union_set Domain) { in restrictDomains()
2275 isl::union_set StmtDomain = isl::union_set(Stmt.getDomain()); in restrictDomains()
2276 isl::union_set NewStmtDomain = StmtDomain.intersect(Domain); in restrictDomains()
2286 Stmt.restrictDomain(isl::set::empty(Stmt.getDomainSpace())); in restrictDomains()
2288 Stmt.restrictDomain(isl::set(NewStmtDomain)); in restrictDomains()
2332 ScopStmt *Scop::addScopStmt(isl::map SourceRel, isl::map TargetRel, in addScopStmt()
2333 isl::set Domain) { in addScopStmt()
2335 isl::set SourceDomain = SourceRel.domain(); in addScopStmt()
2336 isl::set TargetDomain = TargetRel.domain(); in addScopStmt()
2506 isl::set Domain = Stmt.getDomain().intersect_params(getContext()); in getStatistics()
2524 isl::set AccSet = in getStatistics()