forked from OSchip/llvm-project
Update isl to isl-0.17.1-84-g72ffe88
This is a regular maintenance update to ensure we are testing with a recent version of isl. llvm-svn: 273597
This commit is contained in:
parent
1f99da54c2
commit
8a12bd9035
|
@ -1 +1 @@
|
||||||
isl-0.17.1-57-g1879898
|
isl-0.17.1-84-g72ffe88
|
||||||
|
|
|
@ -9,7 +9,9 @@ CLEANFILES = \
|
||||||
manual.out \
|
manual.out \
|
||||||
manual.blg \
|
manual.blg \
|
||||||
manual.log \
|
manual.log \
|
||||||
manual.brf
|
manual.brf \
|
||||||
|
manual.bcf \
|
||||||
|
manual.run.xml
|
||||||
|
|
||||||
if GENERATE_DOC
|
if GENERATE_DOC
|
||||||
export TEXINPUTS := $(srcdir):$(TEXINPUTS)
|
export TEXINPUTS := $(srcdir):$(TEXINPUTS)
|
||||||
|
|
|
@ -283,7 +283,9 @@ CLEANFILES = \
|
||||||
manual.out \
|
manual.out \
|
||||||
manual.blg \
|
manual.blg \
|
||||||
manual.log \
|
manual.log \
|
||||||
manual.brf
|
manual.brf \
|
||||||
|
manual.bcf \
|
||||||
|
manual.run.xml
|
||||||
|
|
||||||
all: all-am
|
all: all-am
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -3457,6 +3457,12 @@ be created.
|
||||||
__isl_give isl_printer *isl_printer_to_str(isl_ctx *ctx);
|
__isl_give isl_printer *isl_printer_to_str(isl_ctx *ctx);
|
||||||
__isl_null isl_printer *isl_printer_free(
|
__isl_null isl_printer *isl_printer_free(
|
||||||
__isl_take isl_printer *printer);
|
__isl_take isl_printer *printer);
|
||||||
|
|
||||||
|
C<isl_printer_to_file> prints to the given file, while
|
||||||
|
C<isl_printer_to_str> prints to a string that can be extracted
|
||||||
|
using the following function.
|
||||||
|
|
||||||
|
#include <isl/printer.h>
|
||||||
__isl_give char *isl_printer_get_str(
|
__isl_give char *isl_printer_get_str(
|
||||||
__isl_keep isl_printer *printer);
|
__isl_keep isl_printer *printer);
|
||||||
|
|
||||||
|
@ -8189,6 +8195,9 @@ Several node types have their own functions for querying
|
||||||
isl_schedule_node_band_set_ast_build_options(
|
isl_schedule_node_band_set_ast_build_options(
|
||||||
__isl_take isl_schedule_node *node,
|
__isl_take isl_schedule_node *node,
|
||||||
__isl_take isl_union_set *options);
|
__isl_take isl_union_set *options);
|
||||||
|
__isl_give isl_set *
|
||||||
|
isl_schedule_node_band_get_ast_isolate_option(
|
||||||
|
__isl_keep isl_schedule_node *node);
|
||||||
|
|
||||||
The function C<isl_schedule_node_band_get_space> returns the space
|
The function C<isl_schedule_node_band_get_space> returns the space
|
||||||
of the partial schedule of the band.
|
of the partial schedule of the band.
|
||||||
|
@ -8217,6 +8226,9 @@ may return C<isl_ast_loop_error> if an error occurs.
|
||||||
The AST build options govern how an AST is generated for
|
The AST build options govern how an AST is generated for
|
||||||
the individual schedule dimensions during AST generation.
|
the individual schedule dimensions during AST generation.
|
||||||
See L</"AST Generation Options (Schedule Tree)">.
|
See L</"AST Generation Options (Schedule Tree)">.
|
||||||
|
The isolate option for the given node can be extracted from these
|
||||||
|
AST build options using the function
|
||||||
|
C<isl_schedule_node_band_get_ast_isolate_option>.
|
||||||
|
|
||||||
#include <isl/schedule_node.h>
|
#include <isl/schedule_node.h>
|
||||||
__isl_give isl_set *
|
__isl_give isl_set *
|
||||||
|
@ -8498,6 +8510,8 @@ using the following function.
|
||||||
The resulting outer band node contains the first C<pos> dimensions of
|
The resulting outer band node contains the first C<pos> dimensions of
|
||||||
the schedule of C<node> while the inner band contains the remaining dimensions.
|
the schedule of C<node> while the inner band contains the remaining dimensions.
|
||||||
The schedules of the two band nodes live in anonymous spaces.
|
The schedules of the two band nodes live in anonymous spaces.
|
||||||
|
The loop AST generation type options and the isolate option
|
||||||
|
are split over the the two band nodes.
|
||||||
|
|
||||||
A band node can be moved down to the leaves of the subtree rooted
|
A band node can be moved down to the leaves of the subtree rooted
|
||||||
at the band node using the following function.
|
at the band node using the following function.
|
||||||
|
|
|
@ -110,6 +110,8 @@ __isl_give isl_union_set *isl_schedule_node_band_get_ast_build_options(
|
||||||
__isl_keep isl_schedule_node *node);
|
__isl_keep isl_schedule_node *node);
|
||||||
__isl_give isl_schedule_node *isl_schedule_node_band_set_ast_build_options(
|
__isl_give isl_schedule_node *isl_schedule_node_band_set_ast_build_options(
|
||||||
__isl_take isl_schedule_node *node, __isl_take isl_union_set *options);
|
__isl_take isl_schedule_node *node, __isl_take isl_union_set *options);
|
||||||
|
__isl_give isl_set *isl_schedule_node_band_get_ast_isolate_option(
|
||||||
|
__isl_keep isl_schedule_node *node);
|
||||||
unsigned isl_schedule_node_band_n_member(__isl_keep isl_schedule_node *node);
|
unsigned isl_schedule_node_band_n_member(__isl_keep isl_schedule_node *node);
|
||||||
__isl_export
|
__isl_export
|
||||||
isl_bool isl_schedule_node_band_member_get_coincident(
|
isl_bool isl_schedule_node_band_member_get_coincident(
|
||||||
|
|
|
@ -2387,9 +2387,6 @@ enum isl_ast_loop_type isl_ast_build_get_loop_type(
|
||||||
__isl_give isl_ast_build *isl_ast_build_extract_isolated(
|
__isl_give isl_ast_build *isl_ast_build_extract_isolated(
|
||||||
__isl_take isl_ast_build *build)
|
__isl_take isl_ast_build *build)
|
||||||
{
|
{
|
||||||
isl_space *space, *space2;
|
|
||||||
isl_union_set *options;
|
|
||||||
int n, n2;
|
|
||||||
isl_set *isolated;
|
isl_set *isolated;
|
||||||
|
|
||||||
if (!build)
|
if (!build)
|
||||||
|
@ -2403,27 +2400,7 @@ __isl_give isl_ast_build *isl_ast_build_extract_isolated(
|
||||||
if (!build)
|
if (!build)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
options = isl_schedule_node_band_get_ast_build_options(build->node);
|
isolated = isl_schedule_node_band_get_ast_isolate_option(build->node);
|
||||||
|
|
||||||
space = isl_multi_aff_get_space(build->internal2input);
|
|
||||||
space = isl_space_range(space);
|
|
||||||
space2 = isl_set_get_space(build->domain);
|
|
||||||
if (isl_space_is_wrapping(space2))
|
|
||||||
space2 = isl_space_range(isl_space_unwrap(space2));
|
|
||||||
n2 = isl_space_dim(space2, isl_dim_set);
|
|
||||||
n = isl_space_dim(space, isl_dim_set);
|
|
||||||
if (n < n2)
|
|
||||||
isl_die(isl_ast_build_get_ctx(build), isl_error_internal,
|
|
||||||
"total input space dimension cannot be smaller "
|
|
||||||
"than dimension of innermost band",
|
|
||||||
space = isl_space_free(space));
|
|
||||||
space = isl_space_drop_dims(space, isl_dim_set, n - n2, n2);
|
|
||||||
space = isl_space_map_from_domain_and_range(space, space2);
|
|
||||||
space = isl_space_wrap(space);
|
|
||||||
space = isl_space_set_tuple_name(space, isl_dim_set, "isolate");
|
|
||||||
isolated = isl_union_set_extract_set(options, space);
|
|
||||||
isl_union_set_free(options);
|
|
||||||
|
|
||||||
isolated = isl_set_flatten(isolated);
|
isolated = isl_set_flatten(isolated);
|
||||||
isolated = isl_set_preimage_multi_aff(isolated,
|
isolated = isl_set_preimage_multi_aff(isolated,
|
||||||
isl_multi_aff_copy(build->internal2input));
|
isl_multi_aff_copy(build->internal2input));
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -79,6 +79,11 @@ int isl_basic_set_constraint_is_redundant(struct isl_basic_set **bset,
|
||||||
* constraints. If the minimal value along the normal of a constraint
|
* constraints. If the minimal value along the normal of a constraint
|
||||||
* is the same if the constraint is removed, then the constraint is redundant.
|
* is the same if the constraint is removed, then the constraint is redundant.
|
||||||
*
|
*
|
||||||
|
* Since some constraints may be mutually redundant, sort the constraints
|
||||||
|
* first such that constraints that involve existentially quantified
|
||||||
|
* variables are considered for removal before those that do not.
|
||||||
|
* The sorting is also need for the use in map_simple_hull.
|
||||||
|
*
|
||||||
* Alternatively, we could have intersected the basic map with the
|
* Alternatively, we could have intersected the basic map with the
|
||||||
* corresponding equality and then checked if the dimension was that
|
* corresponding equality and then checked if the dimension was that
|
||||||
* of a facet.
|
* of a facet.
|
||||||
|
@ -99,6 +104,7 @@ __isl_give isl_basic_map *isl_basic_map_remove_redundancies(
|
||||||
if (bmap->n_ineq <= 1)
|
if (bmap->n_ineq <= 1)
|
||||||
return bmap;
|
return bmap;
|
||||||
|
|
||||||
|
bmap = isl_basic_map_sort_constraints(bmap);
|
||||||
tab = isl_tab_from_basic_map(bmap, 0);
|
tab = isl_tab_from_basic_map(bmap, 0);
|
||||||
if (isl_tab_detect_implicit_equalities(tab) < 0)
|
if (isl_tab_detect_implicit_equalities(tab) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -2399,11 +2405,12 @@ static __isl_give isl_basic_map *cached_simple_hull(__isl_take isl_map *map,
|
||||||
* by only (translates of) the constraints in the constituents of map.
|
* by only (translates of) the constraints in the constituents of map.
|
||||||
* Translation is only allowed if "shift" is set.
|
* Translation is only allowed if "shift" is set.
|
||||||
*
|
*
|
||||||
* Sort the constraints before removing redundant constraints
|
* The constraints are sorted while removing redundant constraints
|
||||||
* in order to indicate a preference of which constraints should
|
* in order to indicate a preference of which constraints should
|
||||||
* be preserved. In particular, pairs of constraints that are
|
* be preserved. In particular, pairs of constraints that are
|
||||||
* sorted together are preferred to either both be preserved
|
* sorted together are preferred to either both be preserved
|
||||||
* or both be removed.
|
* or both be removed. The sorting is performed inside
|
||||||
|
* isl_basic_map_remove_redundancies.
|
||||||
*
|
*
|
||||||
* The result of the computation is stored in map->cached_simple_hull[shift]
|
* The result of the computation is stored in map->cached_simple_hull[shift]
|
||||||
* such that it can be reused in subsequent calls. The cache is cleared
|
* such that it can be reused in subsequent calls. The cache is cleared
|
||||||
|
@ -2444,7 +2451,6 @@ static __isl_give isl_basic_map *map_simple_hull(__isl_take isl_map *map,
|
||||||
hull = isl_basic_map_overlying_set(bset, model);
|
hull = isl_basic_map_overlying_set(bset, model);
|
||||||
|
|
||||||
hull = isl_basic_map_intersect(hull, affine_hull);
|
hull = isl_basic_map_intersect(hull, affine_hull);
|
||||||
hull = isl_basic_map_sort_constraints(hull);
|
|
||||||
hull = isl_basic_map_remove_redundancies(hull);
|
hull = isl_basic_map_remove_redundancies(hull);
|
||||||
|
|
||||||
if (hull) {
|
if (hull) {
|
||||||
|
|
|
@ -907,6 +907,57 @@ error:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return the "isolate" option associated to "band", assuming
|
||||||
|
* it at appears at schedule depth "depth".
|
||||||
|
*
|
||||||
|
* The isolate option is of the form
|
||||||
|
*
|
||||||
|
* isolate[[flattened outer bands] -> band]
|
||||||
|
*/
|
||||||
|
__isl_give isl_set *isl_schedule_band_get_ast_isolate_option(
|
||||||
|
__isl_keep isl_schedule_band *band, int depth)
|
||||||
|
{
|
||||||
|
isl_space *space;
|
||||||
|
isl_set *isolate;
|
||||||
|
|
||||||
|
if (!band)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
space = isl_schedule_band_get_space(band);
|
||||||
|
space = isl_space_from_range(space);
|
||||||
|
space = isl_space_add_dims(space, isl_dim_in, depth);
|
||||||
|
space = isl_space_wrap(space);
|
||||||
|
space = isl_space_set_tuple_name(space, isl_dim_set, "isolate");
|
||||||
|
|
||||||
|
isolate = isl_union_set_extract_set(band->ast_build_options, space);
|
||||||
|
|
||||||
|
return isolate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Replace the option "drop" in the AST build options by "add".
|
||||||
|
* That is, remove "drop" and add "add".
|
||||||
|
*/
|
||||||
|
__isl_give isl_schedule_band *isl_schedule_band_replace_ast_build_option(
|
||||||
|
__isl_take isl_schedule_band *band, __isl_take isl_set *drop,
|
||||||
|
__isl_take isl_set *add)
|
||||||
|
{
|
||||||
|
isl_union_set *options;
|
||||||
|
|
||||||
|
band = isl_schedule_band_cow(band);
|
||||||
|
if (!band)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
options = band->ast_build_options;
|
||||||
|
options = isl_union_set_subtract(options, isl_union_set_from_set(drop));
|
||||||
|
options = isl_union_set_union(options, isl_union_set_from_set(add));
|
||||||
|
band->ast_build_options = options;
|
||||||
|
|
||||||
|
if (!band->ast_build_options)
|
||||||
|
return isl_schedule_band_free(band);
|
||||||
|
|
||||||
|
return band;
|
||||||
|
}
|
||||||
|
|
||||||
/* Multiply the partial schedule of "band" with the factors in "mv".
|
/* Multiply the partial schedule of "band" with the factors in "mv".
|
||||||
* Replace the result by its greatest integer part to ensure
|
* Replace the result by its greatest integer part to ensure
|
||||||
* that the schedule is always integral.
|
* that the schedule is always integral.
|
||||||
|
@ -1117,8 +1168,7 @@ error:
|
||||||
* We apply the transformation even if "n" is zero to ensure consistent
|
* We apply the transformation even if "n" is zero to ensure consistent
|
||||||
* behavior with respect to changes in the schedule space.
|
* behavior with respect to changes in the schedule space.
|
||||||
*
|
*
|
||||||
* The loop AST generation types for the isolated part become
|
* The caller is responsible for updating the isolate option.
|
||||||
* meaningless after dropping dimensions, so we remove them.
|
|
||||||
*/
|
*/
|
||||||
__isl_give isl_schedule_band *isl_schedule_band_drop(
|
__isl_give isl_schedule_band *isl_schedule_band_drop(
|
||||||
__isl_take isl_schedule_band *band, int pos, int n)
|
__isl_take isl_schedule_band *band, int pos, int n)
|
||||||
|
@ -1144,8 +1194,10 @@ __isl_give isl_schedule_band *isl_schedule_band_drop(
|
||||||
if (band->loop_type)
|
if (band->loop_type)
|
||||||
for (i = pos + n; i < band->n; ++i)
|
for (i = pos + n; i < band->n; ++i)
|
||||||
band->loop_type[i - n] = band->loop_type[i];
|
band->loop_type[i - n] = band->loop_type[i];
|
||||||
free(band->isolate_loop_type);
|
if (band->isolate_loop_type)
|
||||||
band->isolate_loop_type = NULL;
|
for (i = pos + n; i < band->n; ++i)
|
||||||
|
band->isolate_loop_type[i - n] =
|
||||||
|
band->isolate_loop_type[i];
|
||||||
|
|
||||||
band->n -= n;
|
band->n -= n;
|
||||||
|
|
||||||
|
|
|
@ -80,6 +80,11 @@ __isl_give isl_union_set *isl_schedule_band_get_ast_build_options(
|
||||||
__isl_keep isl_schedule_band *band);
|
__isl_keep isl_schedule_band *band);
|
||||||
__isl_give isl_schedule_band *isl_schedule_band_set_ast_build_options(
|
__isl_give isl_schedule_band *isl_schedule_band_set_ast_build_options(
|
||||||
__isl_take isl_schedule_band *band, __isl_take isl_union_set *options);
|
__isl_take isl_schedule_band *band, __isl_take isl_union_set *options);
|
||||||
|
__isl_give isl_set *isl_schedule_band_get_ast_isolate_option(
|
||||||
|
__isl_keep isl_schedule_band *band, int depth);
|
||||||
|
__isl_give isl_schedule_band *isl_schedule_band_replace_ast_build_option(
|
||||||
|
__isl_take isl_schedule_band *band, __isl_take isl_set *drop,
|
||||||
|
__isl_take isl_set *add);
|
||||||
|
|
||||||
int isl_schedule_band_n_member(__isl_keep isl_schedule_band *band);
|
int isl_schedule_band_n_member(__isl_keep isl_schedule_band *band);
|
||||||
isl_bool isl_schedule_band_member_get_coincident(
|
isl_bool isl_schedule_band_member_get_coincident(
|
||||||
|
|
|
@ -1670,6 +1670,20 @@ error:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return the "isolate" option associated to band node "node".
|
||||||
|
*/
|
||||||
|
__isl_give isl_set *isl_schedule_node_band_get_ast_isolate_option(
|
||||||
|
__isl_keep isl_schedule_node *node)
|
||||||
|
{
|
||||||
|
int depth;
|
||||||
|
|
||||||
|
if (!node)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
depth = isl_schedule_node_get_schedule_depth(node);
|
||||||
|
return isl_schedule_tree_band_get_ast_isolate_option(node->tree, depth);
|
||||||
|
}
|
||||||
|
|
||||||
/* Make sure that that spaces of "node" and "mv" are the same.
|
/* Make sure that that spaces of "node" and "mv" are the same.
|
||||||
* Return -1 on error, reporting the error to the user.
|
* Return -1 on error, reporting the error to the user.
|
||||||
*/
|
*/
|
||||||
|
@ -1945,14 +1959,18 @@ __isl_give isl_schedule_node *isl_schedule_node_band_sink(
|
||||||
/* Split "node" into two nested band nodes, one with the first "pos"
|
/* Split "node" into two nested band nodes, one with the first "pos"
|
||||||
* dimensions and one with the remaining dimensions.
|
* dimensions and one with the remaining dimensions.
|
||||||
* The schedules of the two band nodes live in anonymous spaces.
|
* The schedules of the two band nodes live in anonymous spaces.
|
||||||
|
* The loop AST generation type options and the isolate option
|
||||||
|
* are split over the the two band nodes.
|
||||||
*/
|
*/
|
||||||
__isl_give isl_schedule_node *isl_schedule_node_band_split(
|
__isl_give isl_schedule_node *isl_schedule_node_band_split(
|
||||||
__isl_take isl_schedule_node *node, int pos)
|
__isl_take isl_schedule_node *node, int pos)
|
||||||
{
|
{
|
||||||
|
int depth;
|
||||||
isl_schedule_tree *tree;
|
isl_schedule_tree *tree;
|
||||||
|
|
||||||
|
depth = isl_schedule_node_get_schedule_depth(node);
|
||||||
tree = isl_schedule_node_get_tree(node);
|
tree = isl_schedule_node_get_tree(node);
|
||||||
tree = isl_schedule_tree_band_split(tree, pos);
|
tree = isl_schedule_tree_band_split(tree, pos, depth);
|
||||||
return isl_schedule_node_graft_tree(node, tree);
|
return isl_schedule_node_graft_tree(node, tree);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1284,6 +1284,22 @@ error:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return the "isolate" option associated to the band tree root of "tree",
|
||||||
|
* which is assumed to appear at schedule depth "depth".
|
||||||
|
*/
|
||||||
|
__isl_give isl_set *isl_schedule_tree_band_get_ast_isolate_option(
|
||||||
|
__isl_keep isl_schedule_tree *tree, int depth)
|
||||||
|
{
|
||||||
|
if (!tree)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (tree->type != isl_schedule_node_band)
|
||||||
|
isl_die(isl_schedule_tree_get_ctx(tree), isl_error_invalid,
|
||||||
|
"not a band node", return NULL);
|
||||||
|
|
||||||
|
return isl_schedule_band_get_ast_isolate_option(tree->band, depth);
|
||||||
|
}
|
||||||
|
|
||||||
/* Return the context of the context tree root.
|
/* Return the context of the context tree root.
|
||||||
*/
|
*/
|
||||||
__isl_give isl_set *isl_schedule_tree_context_get_context(
|
__isl_give isl_set *isl_schedule_tree_context_get_context(
|
||||||
|
@ -2164,14 +2180,95 @@ error:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Given an isolate AST generation option "isolate" for a band of size pos + n,
|
||||||
|
* return the corresponding option for a band covering the first "pos"
|
||||||
|
* members.
|
||||||
|
*
|
||||||
|
* The input isolate option is of the form
|
||||||
|
*
|
||||||
|
* isolate[[flattened outer bands] -> [pos; n]]
|
||||||
|
*
|
||||||
|
* The output isolate option is of the form
|
||||||
|
*
|
||||||
|
* isolate[[flattened outer bands] -> [pos]]
|
||||||
|
*/
|
||||||
|
static __isl_give isl_set *isolate_initial(__isl_keep isl_set *isolate,
|
||||||
|
int pos, int n)
|
||||||
|
{
|
||||||
|
isl_id *id;
|
||||||
|
isl_map *map;
|
||||||
|
|
||||||
|
isolate = isl_set_copy(isolate);
|
||||||
|
id = isl_set_get_tuple_id(isolate);
|
||||||
|
map = isl_set_unwrap(isolate);
|
||||||
|
map = isl_map_project_out(map, isl_dim_out, pos, n);
|
||||||
|
isolate = isl_map_wrap(map);
|
||||||
|
isolate = isl_set_set_tuple_id(isolate, id);
|
||||||
|
|
||||||
|
return isolate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Given an isolate AST generation option "isolate" for a band of size pos + n,
|
||||||
|
* return the corresponding option for a band covering the final "n"
|
||||||
|
* members within a band covering the first "pos" members.
|
||||||
|
*
|
||||||
|
* The input isolate option is of the form
|
||||||
|
*
|
||||||
|
* isolate[[flattened outer bands] -> [pos; n]]
|
||||||
|
*
|
||||||
|
* The output isolate option is of the form
|
||||||
|
*
|
||||||
|
* isolate[[flattened outer bands; pos] -> [n]]
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* The range is first split into
|
||||||
|
*
|
||||||
|
* isolate[[flattened outer bands] -> [[pos] -> [n]]]
|
||||||
|
*
|
||||||
|
* and then the first pos members are moved to the domain
|
||||||
|
*
|
||||||
|
* isolate[[[flattened outer bands] -> [pos]] -> [n]]
|
||||||
|
*
|
||||||
|
* after which the domain is flattened to obtain the desired output.
|
||||||
|
*/
|
||||||
|
static __isl_give isl_set *isolate_final(__isl_keep isl_set *isolate,
|
||||||
|
int pos, int n)
|
||||||
|
{
|
||||||
|
isl_id *id;
|
||||||
|
isl_space *space;
|
||||||
|
isl_multi_aff *ma1, *ma2;
|
||||||
|
isl_map *map;
|
||||||
|
|
||||||
|
isolate = isl_set_copy(isolate);
|
||||||
|
id = isl_set_get_tuple_id(isolate);
|
||||||
|
map = isl_set_unwrap(isolate);
|
||||||
|
space = isl_space_range(isl_map_get_space(map));
|
||||||
|
ma1 = isl_multi_aff_project_out_map(isl_space_copy(space),
|
||||||
|
isl_dim_set, pos, n);
|
||||||
|
ma2 = isl_multi_aff_project_out_map(space, isl_dim_set, 0, pos);
|
||||||
|
ma1 = isl_multi_aff_range_product(ma1, ma2);
|
||||||
|
map = isl_map_apply_range(map, isl_map_from_multi_aff(ma1));
|
||||||
|
map = isl_map_uncurry(map);
|
||||||
|
map = isl_map_flatten_domain(map);
|
||||||
|
isolate = isl_map_wrap(map);
|
||||||
|
isolate = isl_set_set_tuple_id(isolate, id);
|
||||||
|
|
||||||
|
return isolate;
|
||||||
|
}
|
||||||
|
|
||||||
/* Split the band root node of "tree" into two nested band nodes,
|
/* Split the band root node of "tree" into two nested band nodes,
|
||||||
* one with the first "pos" dimensions and
|
* one with the first "pos" dimensions and
|
||||||
* one with the remaining dimensions.
|
* one with the remaining dimensions.
|
||||||
|
* The tree is itself positioned at schedule depth "depth".
|
||||||
|
*
|
||||||
|
* The loop AST generation type options and the isolate option
|
||||||
|
* are split over the the two band nodes.
|
||||||
*/
|
*/
|
||||||
__isl_give isl_schedule_tree *isl_schedule_tree_band_split(
|
__isl_give isl_schedule_tree *isl_schedule_tree_band_split(
|
||||||
__isl_take isl_schedule_tree *tree, int pos)
|
__isl_take isl_schedule_tree *tree, int pos, int depth)
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
|
isl_set *isolate, *tree_isolate, *child_isolate;
|
||||||
isl_schedule_tree *child;
|
isl_schedule_tree *child;
|
||||||
|
|
||||||
if (!tree)
|
if (!tree)
|
||||||
|
@ -2192,8 +2289,16 @@ __isl_give isl_schedule_tree *isl_schedule_tree_band_split(
|
||||||
if (!tree || !child)
|
if (!tree || !child)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
|
isolate = isl_schedule_tree_band_get_ast_isolate_option(tree, depth);
|
||||||
|
tree_isolate = isolate_initial(isolate, pos, n - pos);
|
||||||
|
child_isolate = isolate_final(isolate, pos, n - pos);
|
||||||
child->band = isl_schedule_band_drop(child->band, 0, pos);
|
child->band = isl_schedule_band_drop(child->band, 0, pos);
|
||||||
|
child->band = isl_schedule_band_replace_ast_build_option(child->band,
|
||||||
|
isl_set_copy(isolate), child_isolate);
|
||||||
tree->band = isl_schedule_band_drop(tree->band, pos, n - pos);
|
tree->band = isl_schedule_band_drop(tree->band, pos, n - pos);
|
||||||
|
tree->band = isl_schedule_band_replace_ast_build_option(tree->band,
|
||||||
|
isl_set_copy(isolate), tree_isolate);
|
||||||
|
isl_set_free(isolate);
|
||||||
if (!child->band || !tree->band)
|
if (!child->band || !tree->band)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
|
|
|
@ -142,6 +142,8 @@ __isl_give isl_union_set *isl_schedule_tree_band_get_ast_build_options(
|
||||||
__isl_keep isl_schedule_tree *tree);
|
__isl_keep isl_schedule_tree *tree);
|
||||||
__isl_give isl_schedule_tree *isl_schedule_tree_band_set_ast_build_options(
|
__isl_give isl_schedule_tree *isl_schedule_tree_band_set_ast_build_options(
|
||||||
__isl_take isl_schedule_tree *tree, __isl_take isl_union_set *options);
|
__isl_take isl_schedule_tree *tree, __isl_take isl_union_set *options);
|
||||||
|
__isl_give isl_set *isl_schedule_tree_band_get_ast_isolate_option(
|
||||||
|
__isl_keep isl_schedule_tree *tree, int depth);
|
||||||
__isl_give isl_set *isl_schedule_tree_context_get_context(
|
__isl_give isl_set *isl_schedule_tree_context_get_context(
|
||||||
__isl_keep isl_schedule_tree *tree);
|
__isl_keep isl_schedule_tree *tree);
|
||||||
__isl_give isl_union_set *isl_schedule_tree_domain_get_domain(
|
__isl_give isl_union_set *isl_schedule_tree_domain_get_domain(
|
||||||
|
@ -230,7 +232,7 @@ __isl_give isl_schedule_tree *isl_schedule_tree_band_shift(
|
||||||
__isl_take isl_schedule_tree *tree,
|
__isl_take isl_schedule_tree *tree,
|
||||||
__isl_take isl_multi_union_pw_aff *shift);
|
__isl_take isl_multi_union_pw_aff *shift);
|
||||||
__isl_give isl_schedule_tree *isl_schedule_tree_band_split(
|
__isl_give isl_schedule_tree *isl_schedule_tree_band_split(
|
||||||
__isl_take isl_schedule_tree *tree, int pos);
|
__isl_take isl_schedule_tree *tree, int pos, int depth);
|
||||||
__isl_give isl_schedule_tree *isl_schedule_tree_band_gist(
|
__isl_give isl_schedule_tree *isl_schedule_tree_band_gist(
|
||||||
__isl_take isl_schedule_tree *tree, __isl_take isl_union_set *context);
|
__isl_take isl_schedule_tree *tree, __isl_take isl_union_set *context);
|
||||||
|
|
||||||
|
|
|
@ -1839,6 +1839,31 @@ struct {
|
||||||
},
|
},
|
||||||
{ 1, "[n] -> { [a,b] : (exists e : 1 <= a <= 7e and 9e <= b <= n) or "
|
{ 1, "[n] -> { [a,b] : (exists e : 1 <= a <= 7e and 9e <= b <= n) or "
|
||||||
"(0 <= a <= b <= n) }" },
|
"(0 <= a <= b <= n) }" },
|
||||||
|
{ 1, "{ [a, b] : 0 <= a <= 2 and b >= 0 and "
|
||||||
|
"((0 < b <= 13) or (2*floor((a + b)/2) >= -5 + a + 2b)) }" },
|
||||||
|
{ 1, "{ [a] : (2 <= a <= 5) or (a mod 2 = 1 and 1 <= a <= 5) }" },
|
||||||
|
{ 1, "{ [a, b, c] : (b = -1 + a and 0 < a <= 3 and "
|
||||||
|
"9*floor((-4a + 2c)/9) <= -3 - 4a + 2c) or "
|
||||||
|
"(exists (e0 = floor((-16 + 2c)/9): a = 4 and "
|
||||||
|
"b = 3 and 9e0 <= -19 + 2c)) }" },
|
||||||
|
{ 0, "{ [a, b, c] : (b <= 2 and b <= -2 + a) or "
|
||||||
|
"(b = -1 + a and 0 < a <= 3 and "
|
||||||
|
"9*floor((-4a + 2c)/9) <= -3 - 4a + 2c) or "
|
||||||
|
"(exists (e0 = floor((-16 + 2c)/9): a = 4 and "
|
||||||
|
"b = 3 and 9e0 <= -19 + 2c)) }" },
|
||||||
|
{ 1, "{ [y, x] : (x - y) mod 3 = 2 and 2 <= y <= 200 and 0 <= x <= 2;"
|
||||||
|
"[1, 0] }" },
|
||||||
|
{ 1, "{ [x, y] : (x - y) mod 3 = 2 and 2 <= y <= 200 and 0 <= x <= 2;"
|
||||||
|
"[0, 1] }" },
|
||||||
|
{ 1, "{ [1, y] : -1 <= y <= 1; [x, -x] : 0 <= x <= 1 }" },
|
||||||
|
{ 1, "{ [1, y] : 0 <= y <= 1; [x, -x] : 0 <= x <= 1 }" },
|
||||||
|
{ 1, "{ [x, y] : 0 <= x <= 10 and x - 4*floor(x/4) <= 1 and y <= 0; "
|
||||||
|
"[x, y] : 0 <= x <= 10 and x - 4*floor(x/4) > 1 and y <= 0; "
|
||||||
|
"[x, y] : 0 <= x <= 10 and x - 5*floor(x/5) <= 1 and 0 < y; "
|
||||||
|
"[x, y] : 0 <= x <= 10 and x - 5*floor(x/5) > 1 and 0 < y }" },
|
||||||
|
{ 1, "{ [x, 0] : 0 <= x <= 10 and x mod 2 = 0; "
|
||||||
|
"[x, 0] : 0 <= x <= 10 and x mod 2 = 1; "
|
||||||
|
"[x, y] : 0 <= x <= 10 and 1 <= y <= 10 }" },
|
||||||
};
|
};
|
||||||
|
|
||||||
/* A specialized coalescing test case that would result
|
/* A specialized coalescing test case that would result
|
||||||
|
|
|
@ -1,53 +1,53 @@
|
||||||
for (int c0 = 0; c0 < m; c0 += 32)
|
for (int c0 = 0; c0 < m; c0 += 32)
|
||||||
for (int c1 = (n >= 32 && m >= c0 + 2) || (m == 1 && c0 == 0) ? 0 : 32 * n - 32 * floord(31 * n + 31, 32); c1 <= ((n <= -1 && c0 == 0) || (m == 1 && n >= 0 && c0 == 0) ? max(0, n - 1) : n); c1 += 32)
|
for (int c1 = (n >= 32 && m >= c0 + 2) || (m == 1 && c0 == 0) ? 0 : 32 * n - 32 * floord(31 * n + 31, 32); c1 <= ((n <= -1 && c0 == 0) || (m == 1 && n >= 0 && c0 == 0) ? max(0, n - 1) : n); c1 += 32)
|
||||||
for (int c2 = c0; c2 <= (m >= 2 && c0 + 31 >= m && n >= c1 && c1 + 31 >= n ? 2 * m - 3 : (m >= 2 * c0 + 63 && c1 <= -32 && n >= c1 && c1 + 31 >= n) || (m >= c0 + 32 && 2 * c0 + 62 >= m && n >= c1 && c1 + 31 >= n) || (n >= 0 && c0 >= 32 && m >= 2 * c0 + 63 && c1 == n) || (m >= 63 && n >= 32 && c0 == 0 && c1 == n) ? 2 * c0 + 61 : m - 1); c2 += 32) {
|
for (int c2 = c0; c2 <= (m >= 2 && c0 + 31 >= m && n >= c1 && c1 + 31 >= n ? 2 * m - 3 : (m >= 2 * c0 + 63 && c1 <= -32 && n >= c1 && c1 + 31 >= n) || (m >= c0 + 32 && 2 * c0 + 62 >= m && n >= c1 && c1 + 31 >= n) || (n >= 0 && c0 >= 32 && m >= 2 * c0 + 63 && c1 == n) || (m >= 63 && n >= 32 && c0 == 0 && c1 == n) ? 2 * c0 + 61 : m - 1); c2 += 32) {
|
||||||
if (c1 >= n) {
|
if (m >= 2) {
|
||||||
if (c0 == 0 && c1 == 0)
|
if (n <= 0 && c0 == 0 && c1 == 0)
|
||||||
for (int c5 = 0; c5 <= min(31, m - c2 - 1); c5 += 1)
|
for (int c5 = 0; c5 <= min(31, m - c2 - 1); c5 += 1)
|
||||||
S_14(c2 + c5);
|
S_14(c2 + c5);
|
||||||
if (c1 == n)
|
if (n >= 0 && c1 == n) {
|
||||||
for (int c3 = max(0, (c2 / 2) - c0 + 1); c3 <= min(31, m - c0 - 1); c3 += 1)
|
for (int c3 = max(0, (c2 / 2) - c0 + 1); c3 <= min(31, m - c0 - 2); c3 += 1)
|
||||||
for (int c5 = max(0, c0 - c2 + c3); c5 <= min(31, 2 * c0 - c2 + 2 * c3 - 1); c5 += 1)
|
for (int c5 = max(0, c0 - c2 + c3); c5 <= min(31, 2 * c0 - c2 + 2 * c3 - 1); c5 += 1)
|
||||||
S_29(-c0 + c2 - c3 + c5, c0 + c3);
|
S_29(-c0 + c2 - c3 + c5, c0 + c3);
|
||||||
} else if (c1 >= 0 && m >= c2 + 1) {
|
} else if (n >= c1 + 1 && c1 >= 0 && c1 + 31 >= n && c2 >= m) {
|
||||||
for (int c3 = 0; c3 <= min(min(31, m - c0 - 2), -c0 + c2 + 30); c3 += 1) {
|
for (int c3 = max(0, (c2 / 2) - c0 + 1); c3 <= min(31, m - c0 - 2); c3 += 1)
|
||||||
for (int c4 = 0; c4 <= min(31, n - c1 - 1); c4 += 1) {
|
for (int c5 = 0; c5 <= min(31, 2 * c0 - c2 + 2 * c3 - 1); c5 += 1)
|
||||||
if (c0 == 0 && c2 == 0 && c3 == 0) {
|
S_29(-c0 + c2 - c3 + c5, c0 + c3);
|
||||||
if (c1 == 0 && c4 == 0)
|
} else if (c1 <= -32 && n >= c1 && c1 + 31 >= n) {
|
||||||
S_14(0);
|
for (int c3 = max(0, (c2 / 2) - c0 + 1); c3 <= min(31, m - c0 - 2); c3 += 1)
|
||||||
S_19(c1 + c4, 0);
|
for (int c5 = max(0, c0 - c2 + c3); c5 <= min(31, 2 * c0 - c2 + 2 * c3 - 1); c5 += 1)
|
||||||
}
|
S_29(-c0 + c2 - c3 + c5, c0 + c3);
|
||||||
for (int c5 = max(0, c0 - c2 + c3 + 1); c5 <= min(31, m - c2 - 1); c5 += 1) {
|
} else if (n >= c1 + 1 && c1 >= 0 && m >= c2 + 1) {
|
||||||
if (c0 == 0 && c1 == 0 && c3 == 0 && c4 == 0)
|
for (int c3 = 0; c3 <= min(min(31, m - c0 - 2), -c0 + c2 + 30); c3 += 1) {
|
||||||
S_14(c2 + c5);
|
for (int c4 = 0; c4 <= min(31, n - c1 - 1); c4 += 1) {
|
||||||
if (c0 == 0 && c3 == 0)
|
if (c0 == 0 && c2 == 0 && c3 == 0) {
|
||||||
S_19(c1 + c4, c2 + c5);
|
if (c1 == 0 && c4 == 0)
|
||||||
S_27(c0 + c3, c2 + c5, c1 + c4);
|
S_14(0);
|
||||||
|
S_19(c1 + c4, 0);
|
||||||
|
}
|
||||||
|
for (int c5 = max(0, c0 - c2 + c3 + 1); c5 <= min(31, m - c2 - 1); c5 += 1) {
|
||||||
|
if (c0 == 0 && c1 == 0 && c3 == 0 && c4 == 0)
|
||||||
|
S_14(c2 + c5);
|
||||||
|
if (c0 == 0 && c3 == 0)
|
||||||
|
S_19(c1 + c4, c2 + c5);
|
||||||
|
S_27(c0 + c3, c2 + c5, c1 + c4);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (c1 + 31 >= n)
|
||||||
|
for (int c5 = max(0, c0 - c2 + c3); c5 <= min(31, 2 * c0 - c2 + 2 * c3 - 1); c5 += 1)
|
||||||
|
S_29(-c0 + c2 - c3 + c5, c0 + c3);
|
||||||
}
|
}
|
||||||
if (c1 + 31 >= n)
|
|
||||||
for (int c5 = max(0, c0 - c2 + c3); c5 <= min(31, 2 * c0 - c2 + 2 * c3 - 1); c5 += 1)
|
|
||||||
S_29(-c0 + c2 - c3 + c5, c0 + c3);
|
|
||||||
}
|
}
|
||||||
if (c0 + 31 >= m && c1 + 31 >= n && c2 == c0) {
|
if (c0 + 32 >= m && n >= c1 && c1 + 31 >= n) {
|
||||||
for (int c5 = m - c0 - 1; c5 <= min(31, 2 * m - c0 - 3); c5 += 1)
|
for (int c5 = max(0, m - c2 - 1); c5 <= min(31, 2 * m - c2 - 3); c5 += 1)
|
||||||
S_29(-m + c0 + c5 + 1, m - 1);
|
S_29(-m + c2 + c5 + 1, m - 1);
|
||||||
} else if (m >= c0 + 32 && c1 + 31 >= n && c2 == c0) {
|
} else if (m >= c0 + 33 && n >= c1 + 1 && c1 >= 0 && c1 + 31 >= n && c2 == c0) {
|
||||||
S_29(0, c0 + 31);
|
S_29(0, c0 + 31);
|
||||||
}
|
}
|
||||||
} else if (c1 + 31 >= n && c2 >= m) {
|
} else if (c1 >= 32 && c2 == 0) {
|
||||||
for (int c3 = max(0, (c2 / 2) - c0 + 1); c3 <= min(31, m - c0 - 1); c3 += 1)
|
|
||||||
for (int c5 = 0; c5 <= min(31, 2 * c0 - c2 + 2 * c3 - 1); c5 += 1)
|
|
||||||
S_29(-c0 + c2 - c3 + c5, c0 + c3);
|
|
||||||
} else if (c1 <= -32 && c1 + 31 >= n && m >= c2 + 1) {
|
|
||||||
for (int c3 = max(0, (c2 / 2) - c0 + 1); c3 <= min(31, m - c0 - 1); c3 += 1)
|
|
||||||
for (int c5 = max(0, c0 - c2 + c3); c5 <= min(31, 2 * c0 - c2 + 2 * c3 - 1); c5 += 1)
|
|
||||||
S_29(-c0 + c2 - c3 + c5, c0 + c3);
|
|
||||||
}
|
|
||||||
if (m == 1 && c0 == 0 && c1 >= 32 && c2 == 0) {
|
|
||||||
for (int c4 = 0; c4 <= min(31, n - c1 - 1); c4 += 1)
|
for (int c4 = 0; c4 <= min(31, n - c1 - 1); c4 += 1)
|
||||||
S_19(c1 + c4, 0);
|
S_19(c1 + c4, 0);
|
||||||
} else if (m == 1 && n >= 1 && c0 == 0 && c1 == 0 && c2 == 0) {
|
} else if (c1 == 0 && c2 == 0) {
|
||||||
S_14(0);
|
S_14(0);
|
||||||
for (int c4 = 0; c4 <= min(31, n - 1); c4 += 1)
|
for (int c4 = 0; c4 <= min(31, n - 1); c4 += 1)
|
||||||
S_19(c4, 0);
|
S_19(c4, 0);
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
for (int c0 = 1; c0 <= 5; c0 += 1)
|
for (int c0 = 1; c0 <= 5; c0 += 1)
|
||||||
for (int c1 = t1 - 64 * b + 64; c1 <= min(70, -((c0 - 1) % 2) - c0 + 73); c1 += 64)
|
if (c0 <= 3 || (b == 1 && t1 + c0 >= 10) || (t1 == 5 && b == 1 && c0 == 4))
|
||||||
A(c0, 64 * b + c1 - 8);
|
for (int c1 = t1 - 64 * b + 64; c1 <= min(70, -c0 + 73); c1 += 64)
|
||||||
|
if (c0 <= 3 || (t1 + c0 >= 10 && c1 == t1) || c1 == 5)
|
||||||
|
A(c0, 64 * b + c1 - 8);
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
for (int c0 = 0; c0 <= 3; c0 += 1)
|
for (int c0 = 0; c0 <= 3; c0 += 1)
|
||||||
for (int c1 = max(2 * c0 - 3, c0 / 2); c1 <= min(3, c0 + 1); c1 += 1)
|
for (int c1 = max(0, 2 * c0 - 3); c1 <= min(3, c0 + 1); c1 += 1)
|
||||||
for (int c2 = c0; c2 <= min(min(3, 2 * c0 - c1 + 1), 3 * c1 + 2); c2 += 1)
|
for (int c2 = c0; c2 <= min(min(3, 2 * c0 - c1 + 1), 3 * c1 + 2); c2 += 1)
|
||||||
for (int c3 = max(max(max(0, c1 - (-c1 + 3) / 3), 2 * c0 - (c0 + c1 + 1) / 3 - 1), c2 + floord(3 * c1 - c2 - 1, 6)); c3 <= min(3, c0 + 1); c3 += 1)
|
for (int c3 = max(max(max(0, c1 - (-c1 + 3) / 3), c0 - (-c2 + 3) / 3), c2 + floord(3 * c1 - c2 - 1, 6)); c3 <= min(3, c0 + 1); c3 += 1)
|
||||||
for (int c4 = max(max(max(max(-200 * c1 + 400 * c3 - 199, 250 * c3 + 1), 667 * c0 - 333 * c1 - (c0 + c1 + 3) / 3 - 332), 333 * c1 + c1 / 3), 333 * c2 + (c2 + 1) / 3); c4 <= min(min(min(min(1000, 500 * c0 + 499), -200 * c1 + 400 * c3 + 400), 333 * c2 - (-c2 + 3) / 3 + 333), 333 * c3 - (-c3 + 3) / 3 + 334); c4 += 1)
|
for (int c4 = max(max(max(max(-200 * c1 + 400 * c3 - 199, 250 * c3 + 1), 667 * c0 - 333 * c1 - (c0 + c1 + 3) / 3 - 332), 333 * c1 + c1 / 3), 333 * c2 + (c2 + 1) / 3); c4 <= min(min(min(min(1000, 500 * c0 + 499), -200 * c1 + 400 * c3 + 400), 333 * c2 - (-c2 + 3) / 3 + 333), 333 * c3 - (-c3 + 3) / 3 + 334); c4 += 1)
|
||||||
for (int c5 = max(max(max(c4, 1000 * c0 - c4), 1000 * c3 - 2 * c4 + 2), 500 * c1 + (c4 + 1) / 2); c5 <= min(min(min(2 * c4 + 1, 1000 * c0 - c4 + 999), 1000 * c3 - 2 * c4 + 1001), 500 * c1 + (c4 + 1) / 2 + 499); c5 += 1)
|
for (int c5 = max(max(max(c4, 1000 * c0 - c4), 1000 * c3 - 2 * c4 + 2), 500 * c1 + (c4 + 1) / 2); c5 <= min(min(min(2 * c4 + 1, 1000 * c0 - c4 + 999), 1000 * c3 - 2 * c4 + 1001), 500 * c1 + (c4 + 1) / 2 + 499); c5 += 1)
|
||||||
s0(c0, c1, c2, c3, c4, c5);
|
s0(c0, c1, c2, c3, c4, c5);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
for (int c0 = 0; c0 <= 3; c0 += 1)
|
for (int c0 = 0; c0 <= 3; c0 += 1)
|
||||||
for (int c1 = max(0, 2 * c0 - 3); c1 <= min(3, c0 + 1); c1 += 1)
|
for (int c1 = max(0, 2 * c0 - 3); c1 <= min(c0 + 1, -c0 + 6); c1 += 1)
|
||||||
for (int c2 = c0; c2 <= min(min(3, 2 * c0 - c1 + 1), 3 * c1 + 2); c2 += 1)
|
for (int c2 = c0; c2 <= min(min(3, 2 * c0 - c1 + 1), 3 * c1 + 2); c2 += 1)
|
||||||
for (int c3 = max(max(max(0, c1 - (-c1 + 3) / 3), c0 - (-c2 + 3) / 3), c2 + floord(3 * c1 - c2 - 1, 6)); c3 <= min(3, c0 + 1); c3 += 1)
|
for (int c3 = max(max(max(0, c1 - (-c1 + 3) / 3), c0 - (-c2 + 3) / 3), c2 + floord(3 * c1 - c2 - 1, 6)); c3 <= min(3, c0 + 1); c3 += 1)
|
||||||
for (int c5 = max(max(max(max(0, 2 * c3 - 4), c1 - (-c1 + 3) / 3), c2 - (c2 + 3) / 3), c3 - (c3 + 3) / 3); c5 <= min(min(c1 + 1, c3), -c2 + 2 * c3 - (c2 + 3) / 3 + 2); c5 += 1)
|
for (int c5 = max(max(max(max(0, 2 * c3 - 4), c1 - (-c1 + 3) / 3), c2 - (c2 + 3) / 3), c3 - (c3 + 3) / 3); c5 <= min(min(c1 + 1, c3), -c2 + 2 * c3 - (c2 + 3) / 3 + 2); c5 += 1)
|
||||||
|
|
|
@ -1,25 +1,23 @@
|
||||||
{
|
if (c2 >= d2 + 1) {
|
||||||
|
for (int c0 = a1; c0 <= b1; c0 += 1)
|
||||||
|
for (int c1_0 = c1; c1_0 <= d1; c1_0 += 1)
|
||||||
|
s0(c0, c1_0);
|
||||||
|
} else {
|
||||||
for (int c0 = a1; c0 <= min(b1, a2 - 1); c0 += 1)
|
for (int c0 = a1; c0 <= min(b1, a2 - 1); c0 += 1)
|
||||||
for (int c1_0 = c1; c1_0 <= d1; c1_0 += 1)
|
for (int c1_0 = c1; c1_0 <= d1; c1_0 += 1)
|
||||||
s0(c0, c1_0);
|
s0(c0, c1_0);
|
||||||
if (c2 >= d2 + 1) {
|
for (int c0 = a2; c0 <= b2; c0 += 1) {
|
||||||
for (int c0 = max(a1, a2); c0 <= min(b1, b2); c0 += 1)
|
if (c0 >= a1 && b1 >= c0)
|
||||||
for (int c1_0 = c1; c1_0 <= d1; c1_0 += 1)
|
for (int c1_0 = c1; c1_0 <= min(d1, c2 - 1); c1_0 += 1)
|
||||||
s0(c0, c1_0);
|
s0(c0, c1_0);
|
||||||
} else {
|
for (int c1_0 = c2; c1_0 <= d2; c1_0 += 1) {
|
||||||
for (int c0 = a2; c0 <= b2; c0 += 1) {
|
if (c0 >= a1 && b1 >= c0 && c1_0 >= c1 && d1 >= c1_0)
|
||||||
if (c0 >= a1 && b1 >= c0)
|
s0(c0, c1_0);
|
||||||
for (int c1_0 = c1; c1_0 <= min(d1, c2 - 1); c1_0 += 1)
|
s1(c0, c1_0);
|
||||||
s0(c0, c1_0);
|
|
||||||
for (int c1_0 = c2; c1_0 <= d2; c1_0 += 1) {
|
|
||||||
if (c0 >= a1 && b1 >= c0 && c1_0 >= c1 && d1 >= c1_0)
|
|
||||||
s0(c0, c1_0);
|
|
||||||
s1(c0, c1_0);
|
|
||||||
}
|
|
||||||
if (c0 >= a1 && b1 >= c0)
|
|
||||||
for (int c1_0 = max(c1, d2 + 1); c1_0 <= d1; c1_0 += 1)
|
|
||||||
s0(c0, c1_0);
|
|
||||||
}
|
}
|
||||||
|
if (c0 >= a1 && b1 >= c0)
|
||||||
|
for (int c1_0 = max(c1, d2 + 1); c1_0 <= d1; c1_0 += 1)
|
||||||
|
s0(c0, c1_0);
|
||||||
}
|
}
|
||||||
for (int c0 = max(max(a1, a2), b2 + 1); c0 <= b1; c0 += 1)
|
for (int c0 = max(max(a1, a2), b2 + 1); c0 <= b1; c0 += 1)
|
||||||
for (int c1_0 = c1; c1_0 <= d1; c1_0 += 1)
|
for (int c1_0 = c1; c1_0 <= d1; c1_0 += 1)
|
||||||
|
|
|
@ -1,33 +1,31 @@
|
||||||
{
|
if (c2 >= d2 + 1) {
|
||||||
|
for (int c0 = a1; c0 <= b1; c0 += 1)
|
||||||
|
for (int c1_0 = c1; c1_0 <= d1; c1_0 += 1)
|
||||||
|
s0(c0, c1_0);
|
||||||
|
} else {
|
||||||
for (int c0 = a1; c0 <= min(b1, a2 - 1); c0 += 1)
|
for (int c0 = a1; c0 <= min(b1, a2 - 1); c0 += 1)
|
||||||
for (int c1_0 = c1; c1_0 <= d1; c1_0 += 1)
|
for (int c1_0 = c1; c1_0 <= d1; c1_0 += 1)
|
||||||
s0(c0, c1_0);
|
s0(c0, c1_0);
|
||||||
if (c2 >= d2 + 1) {
|
for (int c0 = a2; c0 <= b2; c0 += 1) {
|
||||||
for (int c0 = max(a1, a2); c0 <= min(b1, b2); c0 += 1)
|
if (a1 >= c0 + 1) {
|
||||||
for (int c1_0 = c1; c1_0 <= d1; c1_0 += 1)
|
for (int c1_0 = c2; c1_0 <= d2; c1_0 += 1)
|
||||||
|
s1(c0, c1_0);
|
||||||
|
} else if (c0 >= b1 + 1) {
|
||||||
|
for (int c1_0 = c2; c1_0 <= d2; c1_0 += 1)
|
||||||
|
s1(c0, c1_0);
|
||||||
|
} else {
|
||||||
|
for (int c1_0 = c1; c1_0 <= min(d1, c2 - 1); c1_0 += 1)
|
||||||
s0(c0, c1_0);
|
s0(c0, c1_0);
|
||||||
} else {
|
for (int c1_0 = c2; c1_0 <= min(c1 - 1, d2); c1_0 += 1)
|
||||||
for (int c0 = a2; c0 <= b2; c0 += 1) {
|
s1(c0, c1_0);
|
||||||
if (a1 >= c0 + 1) {
|
for (int c1_0 = max(c1, c2); c1_0 <= min(d1, d2); c1_0 += 1) {
|
||||||
for (int c1_0 = c2; c1_0 <= d2; c1_0 += 1)
|
s0(c0, c1_0);
|
||||||
s1(c0, c1_0);
|
s1(c0, c1_0);
|
||||||
} else if (c0 >= b1 + 1) {
|
|
||||||
for (int c1_0 = c2; c1_0 <= d2; c1_0 += 1)
|
|
||||||
s1(c0, c1_0);
|
|
||||||
} else {
|
|
||||||
for (int c1_0 = c1; c1_0 <= min(d1, c2 - 1); c1_0 += 1)
|
|
||||||
s0(c0, c1_0);
|
|
||||||
for (int c1_0 = c2; c1_0 <= min(c1 - 1, d2); c1_0 += 1)
|
|
||||||
s1(c0, c1_0);
|
|
||||||
for (int c1_0 = max(c1, c2); c1_0 <= min(d1, d2); c1_0 += 1) {
|
|
||||||
s0(c0, c1_0);
|
|
||||||
s1(c0, c1_0);
|
|
||||||
}
|
|
||||||
for (int c1_0 = max(c1, d2 + 1); c1_0 <= d1; c1_0 += 1)
|
|
||||||
s0(c0, c1_0);
|
|
||||||
for (int c1_0 = max(max(c1, d1 + 1), c2); c1_0 <= d2; c1_0 += 1)
|
|
||||||
s1(c0, c1_0);
|
|
||||||
}
|
}
|
||||||
|
for (int c1_0 = max(c1, d2 + 1); c1_0 <= d1; c1_0 += 1)
|
||||||
|
s0(c0, c1_0);
|
||||||
|
for (int c1_0 = max(max(c1, d1 + 1), c2); c1_0 <= d2; c1_0 += 1)
|
||||||
|
s1(c0, c1_0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (int c0 = max(max(a1, a2), b2 + 1); c0 <= b1; c0 += 1)
|
for (int c0 = max(max(a1, a2), b2 + 1); c0 <= b1; c0 += 1)
|
||||||
|
|
|
@ -2,14 +2,14 @@
|
||||||
write_shared_A(3, ((t1 + 3) % 4) + 1, ((t2 + 31) % 32) + 1);
|
write_shared_A(3, ((t1 + 3) % 4) + 1, ((t2 + 31) % 32) + 1);
|
||||||
if (t2 >= 1 && t2 <= 2 && t1 % 3 == 0)
|
if (t2 >= 1 && t2 <= 2 && t1 % 3 == 0)
|
||||||
write_shared_A(3, (-t1 / 3) + 4, t2 + 32);
|
write_shared_A(3, (-t1 / 3) + 4, t2 + 32);
|
||||||
if ((t1 >= 1 && t1 <= 2 && t2 >= 3 && t2 <= 4) || ((-((t1 + 3) % 4) + t2 + 30) % 32) + t1 >= -4 * ((-t1 + 4) / 4) + 4)
|
if (((-((t1 + 3) % 4) + t2 + 30) % 32) + t1 >= ((t1 + 3) % 4) + ((t2 + 1) % 2) - 4 * ((-t1 + 4) / 4) + 1)
|
||||||
write_shared_A(3, ((t1 + 3) % 4) + 5, -((((t1 + 3) % 4) - t2 + 33) % 32) + t1 + 4 * ((-t1 + 4) / 4) + 32);
|
write_shared_A(3, ((t1 + 3) % 4) + 5, -((((t1 + 3) % 4) - t2 + 33) % 32) + t1 + 4 * ((-t1 + 4) / 4) + 32);
|
||||||
if (t1 >= 1 && t2 >= t1 + 1 && t2 <= 4)
|
if (t1 >= 1 && t2 >= t1 + 1 && t2 <= 4)
|
||||||
write_shared_A(3, t1 + 4, t2 + 32);
|
write_shared_A(3, t1 + 4, t2 + 32);
|
||||||
write_shared_A(4, ((t1 + 3) % 4) + 1, ((t2 + 31) % 32) + 1);
|
write_shared_A(4, ((t1 + 3) % 4) + 1, ((t2 + 31) % 32) + 1);
|
||||||
if (t2 >= 1 && t2 <= 2 && t1 % 3 == 0)
|
if (t2 >= 1 && t2 <= 2 && t1 % 3 == 0)
|
||||||
write_shared_A(4, (-t1 / 3) + 4, t2 + 32);
|
write_shared_A(4, (-t1 / 3) + 4, t2 + 32);
|
||||||
if ((t1 >= 1 && t1 <= 2 && t2 >= 3 && t2 <= 4) || ((-((t1 + 3) % 4) + t2 + 30) % 32) + t1 >= -4 * ((-t1 + 4) / 4) + 4)
|
if (((-((t1 + 3) % 4) + t2 + 30) % 32) + t1 >= ((t1 + 3) % 4) + ((t2 + 1) % 2) - 4 * ((-t1 + 4) / 4) + 1)
|
||||||
write_shared_A(4, ((t1 + 3) % 4) + 5, -((((t1 + 3) % 4) - t2 + 33) % 32) + t1 + 4 * ((-t1 + 4) / 4) + 32);
|
write_shared_A(4, ((t1 + 3) % 4) + 5, -((((t1 + 3) % 4) - t2 + 33) % 32) + t1 + 4 * ((-t1 + 4) / 4) + 32);
|
||||||
if (t1 >= 1 && t2 >= t1 + 1 && t2 <= 4)
|
if (t1 >= 1 && t2 >= t1 + 1 && t2 <= 4)
|
||||||
write_shared_A(4, t1 + 4, t2 + 32);
|
write_shared_A(4, t1 + 4, t2 + 32);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
if (nn >= 128 * g + 6 && nn >= ((t1 + 127) % 128) + 128 * g + 3 && ((t1 + 127) % 128) + 128 * g >= 0)
|
if (g >= 0 && nn >= 128 * g + 6 && nn >= ((t1 + 127) % 128) + 128 * g + 3)
|
||||||
for (int c1 = 393214; c1 < nn - 1; c1 += 393216)
|
for (int c1 = 393214; c1 < nn - 1; c1 += 393216)
|
||||||
A(c1, ((t1 + 127) % 128) + 128 * g + 1, ((t1 + 127) % 128) + 1);
|
A(c1, ((t1 + 127) % 128) + 128 * g + 1, ((t1 + 127) % 128) + 1);
|
||||||
if (t1 >= 1 && t1 <= 2 && nn >= t1 + 128 * g + 130 && t1 + 128 * g >= -127)
|
if (t1 >= 1 && t1 <= 2 && nn >= t1 + 128 * g + 130 && t1 + 128 * g >= -127)
|
||||||
|
|
Loading…
Reference in New Issue