Lines Matching +full:polly +full:- +full:build

1 //===- polly/ScheduleTreeTransform.cpp --------------------------*- C++ -*-===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
11 //===----------------------------------------------------------------------===//
13 #include "polly/ScheduleTreeTransform.h"
14 #include "polly/Support/GICHelper.h"
15 #include "polly/Support/ISLTools.h"
16 #include "polly/Support/ScopHelper.h"
24 #include "polly/Support/PollyDebug.h"
25 #define DEBUG_TYPE "polly-opt-isl"
27 using namespace polly;
73 // Instead of creating a zero-member band, don't create a band at all.
122 /// Rewrite a schedule tree by reconstructing it bottom-up.
124 /// By default, the original schedule tree is reconstructed. To build a
127 /// Note that AST build options are not applied; Setting the isolate[] option
129 /// AST build options must be set after the tree has been constructed.
300 unsigned OuterDims = ExtDims - BandDims;
356 /// Collect all AST build options in any schedule tree band.
375 /// Apply AST build options to the bands in a schedule tree.
377 /// This rewrites a schedule tree with the AST build options applied. We assume
379 /// build options were collected, typically by CollectASTBuildOptions.
395 "AST build options must match to band nodes");
412 void *User) -> isl_bool {
460 // user followup-MD
465 Attr->Metadata = FollowupLoopMD;
520 /// Return the (one-dimensional) set of numbers that are divisible by @p Factor
543 /// Make the last dimension of Set to take values from 0 to VectorWidth - 1.
554 ExtConstr = ExtConstr.set_coefficient_si(isl::dim::set, Dims - 1, 1);
557 ExtConstr = ExtConstr.set_constant_si(VectorWidth - 1);
558 ExtConstr = ExtConstr.set_coefficient_si(isl::dim::set, Dims - 1, -1);
686 /// everything that we already know is executed in-order.
696 // { Scatter[] -> Domain[] }
699 // { Scatter[] -> Scatter[] }
702 // { Domain[] -> Domain[] }
706 // { Domain[] -> Domain[] }
736 // { LHSDomain[] -> Scatter[] }
740 // { Domain[] -> Scatter[] }
745 // will not be anymore after fusion. { DefDomain[] -> UseDomain[] }
753 // { Scatter[] -> Scatter[] }
760 // { LHSDomain[] -> RHSDomain[] }
795 // Reconstruct the non-outermost (not going to be fused) loops from both
821 // TODO: Non-bands could be interpreted as a band with just as single
833 /// Fuse all fusable loop top-down in a schedule tree.
849 // { Domain[] -> Scatter[] }
856 // { Scatter[] -> Domain[] }
861 // in-order execution if the loop iteration. A dependency with small scatter
863 // Domain[] -> Domain[] }
867 // { DefDomain[] -> UseDomain[] }
879 // preferable to use the direct child if not if its non-direct children is
944 // Top-down recursion: If the outermost loop has been fused, their nested
961 bool polly::isBandMark(const isl::schedule_node &Node) {
966 BandAttr *polly::getBandAttr(isl::schedule_node MarkOrBand) {
974 isl::schedule polly::hoistExtensionNodes(isl::schedule Sched) {
980 // Build options can anchor schedule nodes, such that the schedule tree cannot
981 // be modified anymore. Therefore, apply build options after the tree has been
990 // Reapply the AST build options. The rewriter must not change the iteration
998 isl::schedule polly::applyFullUnroll(isl::schedule_node BandToUnroll) {
1022 ScatterList.foreach_point([&Elts](isl::point P) -> isl::stat {
1028 llvm::sort(Elts, [](isl::point P1, isl::point P2) -> bool {
1050 isl::schedule polly::applyPartialUnroll(isl::schedule_node BandToUnroll,
1063 // { Stmt[] -> [x] }
1072 &ValFactor](isl::pw_aff PwAff) -> isl::stat {
1083 // { Stmt[] -> [x] }
1103 if (Attr && Attr->Metadata)
1105 findOptionalNodeOperand(Attr->Metadata, LLVMLoopUnrollFollowupUnrolled);
1114 isl::set polly::getPartialTilePrefixes(isl::set ScheduleRange,
1119 ScheduleRange.drop_constraints_involving_dims(isl::dim::set, Dims - 1, 1);
1122 BadPrefixes = BadPrefixes.project_out(isl::dim::set, Dims - 1, 1);
1123 LoopPrefixes = LoopPrefixes.project_out(isl::dim::set, Dims - 1, 1);
1127 isl::union_set polly::getIsolateOptions(isl::set IsolateDomain,
1137 Dims - OutDimsNum, OutDimsNum);
1144 isl::union_set polly::getDimOptions(isl::ctx Ctx, const char *Option) {
1152 isl::schedule_node polly::tileNode(isl::schedule_node Node,
1164 auto TileLoopMarkerStr = IdentifierString + " - Tiles";
1171 auto PointLoopMarkerStr = IdentifierString + " - Points";
1178 isl::schedule_node polly::applyRegisterTiling(isl::schedule_node Node,
1187 /// Find statements and sub-loops in (possibly nested) sequences.
1207 isl::schedule polly::applyMaxFission(isl::schedule_node BandToFission) {
1230 isl::schedule polly::applyGreedyFusion(isl::schedule Sched,
1241 // GreedyFusionRewriter due to working loop-by-loop, bands with multiple loops