Lines Matching full:schedule
9 // Make changes to isl's schedule tree data structure.
23 /// various schedule tree analysis purposes.
59 llvm_unreachable("unimplemented schedule node type"); in visit()
110 /// Recursively visit all nodes of a schedule tree.
122 /// When visiting an entire schedule tree, start at its root node.
123 RetTy visit(const isl::schedule &Schedule, Args... args) { in visit()
124 return getDerived().visit(Schedule.get_root(), std::forward<Args>(args)...); in visit()
127 // Necessary to allow overload resolution with the added visit(isl::schedule)
141 /// Recursively visit all nodes of a schedule tree while allowing changes.
170 /// Rewrite a schedule tree by reconstructing it bottom-up.
172 /// By default, the original schedule tree is reconstructed. To build a
176 /// makes the schedule tree 'anchored' and cannot be modified afterwards. Hence,
180 : public RecursiveScheduleTreeVisitor<Derived, isl::schedule, Args...> {
186 isl::schedule visitDomain(const isl::schedule_node &Node, Args... args) { in visitDomain()
191 isl::schedule visitBand(const isl::schedule_node &Band, Args... args) { in visitBand()
194 isl::schedule NewChild = in visitBand()
211 isl::schedule visitSequence(const isl::schedule_node &Sequence, in visitSequence()
214 isl::schedule Result = in visitSequence()
222 isl::schedule visitSet(const isl::schedule_node &Set, Args... args) { in visitSet()
224 isl::schedule Result = in visitSet()
235 isl::schedule visitLeaf(const isl::schedule_node &Leaf, Args... args) { in visitLeaf()
236 return isl::schedule::from_domain(Leaf.get_domain()); in visitLeaf()
239 isl::schedule visitMark(const isl::schedule_node &Mark, Args... args) { in visitMark()
249 isl::schedule visitExtension(const isl::schedule_node &Extension, in visitExtension()
261 isl::schedule visitFilter(const isl::schedule_node &Filter, Args... args) { in visitFilter()
263 isl::schedule NewSchedule = in visitFilter()
268 isl::schedule visitNode(const isl::schedule_node &Node, Args... args) { in visitNode()
273 /// Rewrite a schedule tree to an equivalent one without extension nodes.
281 /// band nodes to schedule the additional domains at the same position as the
292 isl::schedule visitSchedule(const isl::schedule &Schedule) { in visitSchedule()
294 isl::schedule Result = in visitSchedule()
295 visit(Schedule.get_root(), Schedule.get_domain(), Extensions); in visitSchedule()
300 isl::schedule visitSequence(const isl::schedule_node &Sequence, in visitSequence()
304 isl::schedule NewNode = visit(Sequence.first_child(), Domain, Extensions); in visitSequence()
308 isl::schedule NewChildNode = visit(OldChild, Domain, NewChildExtensions); in visitSequence()
315 isl::schedule visitSet(const isl::schedule_node &Set, in visitSet()
319 isl::schedule NewNode = visit(Set.first_child(), Domain, Extensions); in visitSet()
323 isl::schedule NewChildNode = visit(OldChild, Domain, NewChildExtensions); in visitSet()
331 isl::schedule visitLeaf(const isl::schedule_node &Leaf, in visitLeaf()
336 return isl::schedule::from_domain(Domain); in visitLeaf()
339 isl::schedule visitBand(const isl::schedule_node &OldNode, in visitBand()
347 isl::schedule NewChild = visit(OldChild, Domain, NewChildExtensions); in visitBand()
349 // Add the extensions to the partial schedule. in visitBand()
362 // There might be more outer bands that have to schedule the extensions. in visitBand()
389 isl::schedule visitFilter(const isl::schedule_node &Filter, in visitFilter()
395 // A filter is added implicitly if necessary when joining schedule trees. in visitFilter()
399 isl::schedule visitExtension(const isl::schedule_node &Extension, in visitExtension()
405 isl::schedule NewChild = in visitExtension()
412 /// Collect all AST build options in any schedule tree band.
414 /// ScheduleTreeRewriter cannot apply the schedule tree options. This class
431 /// Apply AST build options to the bands in a schedule tree.
433 /// This rewrites a schedule tree with the AST build options applied. We assume
448 isl::schedule visitSchedule(const isl::schedule &Schedule) { in visitSchedule()
450 isl::schedule Result = visit(Schedule).get_schedule(); in visitSchedule()
466 /// Return whether the schedule contains an extension node.
467 static bool containsExtensionNode(isl::schedule Schedule) { in containsExtensionNode() argument
468 assert(!Schedule.is_null()); in containsExtensionNode()
473 // Stop walking the schedule tree. in containsExtensionNode()
481 Schedule.get(), Callback, nullptr); in containsExtensionNode()
488 isl::schedule polly::hoistExtensionNodes(isl::schedule Sched) { in hoistExtensionNodes()
490 // schedule tree. in hoistExtensionNodes()
494 // Build options can anchor schedule nodes, such that the schedule tree cannot in hoistExtensionNodes()
500 // Rewrite the schedule tree without extension nodes. in hoistExtensionNodes()
502 isl::schedule NewSched = Rewriter.visitSchedule(Sched); in hoistExtensionNodes()