Lines Matching defs:build

65  * "build" is the input build.
69 isl_ast_build *build;
76 __isl_take isl_ast_build *build);
78 __isl_take isl_union_map *executed, __isl_take isl_ast_build *build,
104 isl_ast_build *build;
107 build = isl_ast_build_copy(data->build);
111 build = isl_ast_build_set_single_valued(build, 1);
113 list = generate_code(isl_union_map_from_map(executed), build, 1);
121 * after recording the current inverse schedule in the build.
124 __isl_keep isl_map *executed, __isl_keep isl_ast_build *build)
126 if (!graft || !build)
128 if (!build->at_each_domain)
131 build = isl_ast_build_copy(build);
132 build = isl_ast_build_set_executed(build,
134 if (!build)
137 graft->node = build->at_each_domain(graft->node,
138 build, build->at_each_domain_user);
139 isl_ast_build_free(build);
156 * the constraints from data->build->domain.
187 isl_set_copy(data->build->domain));
191 map = isl_ast_build_compute_gist_map_domain(data->build, map);
197 if (data->build->single_valued)
204 guard = isl_ast_build_compute_gist(data->build, guard);
205 graft = isl_ast_graft_alloc_domain(map, data->build);
206 graft = at_each_domain(graft, executed, data->build);
209 graft = isl_ast_graft_add_guard(graft, guard, data->build);
221 /* Call build->create_leaf to a create "leaf" node in the AST,
228 * from the build that is (presumbably) only meaningful
231 * of the build first.
234 __isl_take isl_union_map *executed, __isl_take isl_ast_build *build)
240 user_build = isl_ast_build_copy(build);
246 node = build->create_leaf(user_build, build->create_leaf_user);
247 graft = isl_ast_graft_alloc(node, build);
248 isl_ast_build_free(build);
262 __isl_take isl_union_map *executed, __isl_take isl_ast_build *build)
265 struct isl_generate_domain_data data = { build };
267 if (!build || !executed)
270 if (build->create_leaf)
271 return call_create_leaf(executed, build);
280 isl_ast_build_free(build);
288 __isl_keep isl_ast_build *build)
292 if (!node || !build)
294 if (!build->before_each_for)
296 id = build->before_each_for(build, build->before_each_for_user);
304 __isl_keep isl_ast_build *build)
306 if (!graft || !build)
308 if (!build->after_each_for)
310 graft->node = build->after_each_for(graft->node, build,
311 build->after_each_for_user);
324 __isl_take isl_union_map *executed, __isl_keep isl_ast_build *build)
326 return isl_ast_build_substitute_values_union_map_domain(build,
378 int pos, __isl_keep isl_ast_build *build)
385 if (isl_ast_build_has_stride(build, pos)) {
389 offset = isl_ast_build_get_offset(build, pos);
390 stride = isl_ast_build_get_stride(build, pos);
399 aff = isl_ast_build_compute_gist_aff(build, aff);
417 __isl_keep isl_ast_build *build, int upper)
426 stride = isl_ast_build_get_stride_constraint(build);
429 it_map = isl_ast_build_map_to_iterator(build, domain);
436 pa = isl_ast_build_compute_gist_pw_aff(build, pa);
449 __isl_keep isl_set *domain, __isl_keep isl_ast_build *build)
455 if (!build)
461 pa = exact_bound(domain, build, 0);
465 ctx = isl_ast_build_get_ctx(build);
473 aff = lower_bound(c, pos, build);
488 __isl_keep isl_set *domain, __isl_keep isl_ast_build *build)
497 pa = exact_bound(domain, build, 1);
501 ctx = isl_ast_build_get_ctx(build);
526 __isl_keep isl_pw_aff_list *list, __isl_keep isl_ast_build *build)
538 return isl_ast_build_expr_from_pw_aff_internal(build,
549 expr_i = isl_ast_build_expr_from_pw_aff_internal(build,
563 * build and add the result as guards to the graft.
568 * expression may only be defined on a subset of the build domain,
573 __isl_keep isl_ast_build *build)
578 depth = isl_ast_build_get_depth(build);
581 if (isl_ast_build_has_stride(build, depth)) {
584 stride = isl_ast_build_get_stride_constraint(build);
588 dom = isl_ast_build_compute_gist(build, dom);
590 graft = isl_ast_graft_add_guard(graft, dom, build);
602 __isl_keep isl_ast_build *build)
604 return add_degenerate_guard(graft, bounds, build);
609 * "build" is the build in which graft->node was created
622 __isl_keep isl_ast_build *build,
632 graft->node->u.f.init = isl_ast_build_expr_from_pw_aff_internal(build,
637 graft = add_degenerate_guard(graft, bounds, build);
809 * is defined over the internal schedule space of "build".
812 __isl_take isl_pw_aff_list *list, __isl_keep isl_ast_build *build)
819 space = isl_ast_build_get_space(build, 1);
852 __isl_keep isl_ast_build *build)
866 list = list_add_one(list, build);
870 bound = reduce_list(isl_ast_op_min, list, build);
886 __isl_keep isl_ast_build *build)
893 cond = isl_ast_build_expr_from_set(build, isl_set_copy(set));
903 static __isl_give isl_ast_expr *for_inc(__isl_keep isl_ast_build *build)
909 if (!build)
911 ctx = isl_ast_build_get_ctx(build);
912 depth = isl_ast_build_get_depth(build);
914 if (!isl_ast_build_has_stride(build, depth))
917 v = isl_ast_build_get_stride(build, depth);
961 __isl_keep isl_set *upper_set, __isl_keep isl_ast_build *build)
968 build = isl_ast_build_copy(build);
969 build = isl_ast_build_set_enforced(build,
973 node->u.f.init = reduce_list(isl_ast_op_max, lower, build);
974 node->u.f.inc = for_inc(build);
977 graft = set_for_cond_from_list(graft, upper_list, build);
979 graft = set_for_cond_from_set(graft, upper_set, build);
981 isl_ast_build_free(build);
1025 __isl_keep isl_set *domain, __isl_keep isl_ast_build *build)
1035 if (!graft || !c_lower || !c_upper || !build)
1038 depth = isl_ast_build_get_depth(build);
1046 lower = lower_bounds(c_lower, depth, domain, build);
1049 upper_list = upper_bounds(c_upper, depth, domain, build);
1063 upper_set, build);
1117 * "build" is the build in which graft->node was created.
1125 * to higher levels) and we call refine_generic_bounds in a build
1130 __isl_keep isl_set *domain, __isl_keep isl_ast_build *build)
1141 data.pos = isl_ast_build_get_depth(build);
1162 domain, build);
1170 for_build = isl_ast_build_copy(build);
1176 graft = isl_ast_graft_add_guard(graft, guard, build);
1185 __isl_take isl_ast_graft *graft, __isl_keep isl_ast_build *build)
1190 depth = isl_ast_build_get_depth(build);
1191 if (!isl_ast_build_has_stride(build, depth))
1194 dom = isl_ast_build_get_stride_constraint(build);
1196 dom = isl_ast_build_compute_gist(build, dom);
1198 graft = isl_ast_graft_add_guard(graft, dom, build);
1209 * "build" is the build in which graft->node was created.
1217 __isl_keep isl_ast_build *build)
1221 if (!build || !graft)
1225 bounds = isl_ast_build_compute_gist_basic_set(build, bounds);
1228 graft = refine_generic_split(graft, list, domain, build);
1229 graft = add_stride_guard(graft, build);
1238 static __isl_give isl_ast_node *create_for(__isl_keep isl_ast_build *build,
1245 if (!build)
1248 depth = isl_ast_build_get_depth(build);
1249 id = isl_ast_build_get_iterator_id(build, depth);
1274 * callbacks, we record the current inverse schedule in the build.
1277 * "build" is the one in which the current level is created,
1278 * "body_build" is the build in which the next level is created,
1282 * "build" already contains information (in strides and offsets)
1284 * reflected in the build->domain.
1301 * and the build domain, that then this information is also reflected
1319 __isl_take isl_ast_build *build)
1330 domain = isl_ast_build_eliminate_divs(build, domain);
1334 build = isl_ast_build_set_executed(build, isl_union_map_copy(executed));
1336 depth = isl_ast_build_get_depth(build);
1337 sub_build = isl_ast_build_copy(build);
1348 node = create_for(build, degenerate);
1357 graft = isl_ast_graft_alloc_level(children, build, sub_build);
1361 graft = refine_eliminated(graft, bounds, build);
1363 graft = refine_degenerate(graft, bounds, build, sub_build);
1365 graft = refine_generic(graft, bounds, domain, build);
1371 isl_ast_build_free(build);
1502 __isl_take isl_ast_build *build)
1509 ctx = isl_ast_build_get_ctx(build);
1511 return create_node_scaled(executed, bounds, domain, build);
1513 data.depth = isl_ast_build_get_depth(build);
1514 if (!isl_ast_build_has_stride(build, data.depth))
1515 return create_node_scaled(executed, bounds, domain, build);
1517 offset = isl_ast_build_get_offset(build, data.depth);
1518 data.m = isl_ast_build_get_stride(build, data.depth);
1547 space = isl_ast_build_get_space(build, 1);
1562 build = isl_ast_build_scale_down(build, isl_val_copy(data.m),
1568 return create_node_scaled(executed, bounds, domain, build);
1620 __isl_take isl_basic_set *bounds, __isl_take isl_ast_build *build)
1637 domain = isl_ast_build_compute_gist(build, domain);
1644 domain = isl_ast_build_eliminate_inner(build, domain);
1645 build = isl_ast_build_detect_strides(build, isl_set_copy(domain));
1648 isl_ast_build_copy(build));
1650 isl_ast_build_free(build);
1658 isl_ast_build_free(build);
1739 __isl_keep isl_ast_build *build);
1743 * "executed" and "build" are extra arguments to be passed to add_node.
1748 isl_ast_build *build;
1795 isl_ast_build_copy(data->build));
1799 depth = isl_ast_build_get_depth(data->build);
1816 generate_sorted_domains(scc, data->executed, data->build));
1837 __isl_keep isl_union_map *executed, __isl_keep isl_ast_build *build)
1855 isl_ast_build_copy(build));
1857 depth = isl_ast_build_get_depth(build);
1859 data.build = build;
1892 * "executed" and "build" are extra arguments to be passed
1902 isl_ast_build *build;
1923 list = generate_sorted_domains(scc, data->executed, data->build);
1926 list = isl_ast_graft_list_fuse(list, data->build);
1957 __isl_keep isl_union_map *executed, __isl_keep isl_ast_build *build)
1967 return generate_sorted_domains(domain_list, executed, build);
1969 depth = isl_ast_build_get_depth(build);
1972 data.build = build;
1992 isl_ast_build *build;
2003 __isl_keep isl_ast_build *build)
2008 domain = isl_ast_build_eliminate(build, domain);
2022 __isl_keep isl_ast_build *build)
2031 depth = isl_ast_build_get_depth(build);
2055 domain = explicit_bounds(map, data->build);
2057 domain = implicit_bounds(map, data->build);
2080 __isl_keep isl_ast_build *build)
2082 struct isl_separate_domain_data data = { build };
2085 ctx = isl_ast_build_get_ctx(build);
2260 * "executed" and "build" are inputs to compute_domains.
2277 isl_ast_build *build;
2333 isl_ast_build *build;
2339 depth = isl_ast_build_get_depth(domains->build);
2340 build = isl_ast_build_copy(domains->build);
2341 domain = isl_ast_build_eliminate_inner(build, domain);
2342 build = isl_ast_build_detect_strides(build, isl_set_copy(domain));
2343 expansion = isl_ast_build_get_stride_expansion(build);
2347 domain = isl_ast_build_eliminate_divs(build, domain);
2349 isl_ast_build_free(build);
2483 domain = isl_ast_build_eliminate(domains->build, domain);
2530 domain = separate_schedule_domains(space, executed, domains->build);
2599 domain = isl_ast_build_eliminate(domains->build, domain);
2634 domain = isl_ast_build_compute_gist(domains->build, domain);
2635 domain = isl_ast_build_eliminate(domains->build, domain);
2655 __isl_keep isl_ast_build *build)
2660 option[type] = isl_ast_build_get_option_domain(build, type);
2692 __isl_keep isl_union_map *executed, __isl_keep isl_ast_build *build)
2713 compute_domains_init_options(domains.option, build);
2715 domains.sep_class = isl_ast_build_get_separation_class(build);
2721 domains.build = build;
2738 domain = isl_ast_build_eliminate(build, domain);
2760 __isl_take isl_union_map *executed, __isl_take isl_ast_build *build)
2765 domain_list = compute_domains(executed, build);
2766 list = generate_parallel_domains(domain_list, executed, build);
2770 isl_ast_build_free(build);
2810 __isl_take isl_ast_build *build)
2815 return generate_shifted_component(executed, build);
2872 int *order, int n, int depth, __isl_keep isl_ast_build *build)
2884 domain[order[i]].set = isl_ast_build_eliminate_inner(build,
2911 __isl_keep isl_ast_build *build)
2917 min_first = isl_ast_build_map_to_iterator(build,
2925 min = isl_ast_build_map_to_iterator(build,
3031 __isl_take isl_ast_build *build)
3040 depth = isl_ast_build_get_depth(build);
3041 space = isl_ast_build_get_space(build, 1);
3101 * the build needs to be changed accodingly.
3110 __isl_take isl_ast_build *build)
3122 ctx = isl_ast_build_get_ctx(build);
3123 depth = isl_ast_build_get_depth(build);
3125 first = first_offset(domain, order, n, build);
3127 return isl_ast_build_free(build);
3136 build);
3137 space = isl_ast_build_get_space(build, 1);
3144 build = isl_ast_build_insert_dim(build, depth + 1);
3145 list = generate_shifted_component(executed, build);
3222 __isl_take isl_ast_build *build)
3236 depth = isl_ast_build_get_depth(build);
3242 skip = isl_ast_build_options_involve_depth(build);
3244 return isl_ast_build_free(build);
3247 order, n, build);
3249 base = eliminate_non_fixed(domain, order, n, depth, build);
3251 return isl_ast_build_free(build);
3253 ctx = isl_ast_build_get_ctx(build);
3301 isl_ast_build_free(build);
3305 order, n, build);
3308 build);
3398 __isl_take isl_union_map *executed, __isl_take isl_ast_build *build)
3401 isl_ctx *ctx = isl_ast_build_get_ctx(build);
3418 if (!build)
3420 data.depth = isl_ast_build_get_depth(build);
3441 isl_ast_build_copy(build));
3442 list = isl_ast_graft_list_merge(list, list_c, build);
3456 isl_ast_build_free(build);
3476 __isl_take isl_union_map *executed, __isl_take isl_ast_build *build)
3480 if (!build || !executed)
3484 isl_ctx *ctx = isl_ast_build_get_ctx(build);
3486 isl_ast_build_free(build);
3490 depth = isl_ast_build_get_depth(build);
3491 if (depth >= isl_set_dim(build->domain, isl_dim_set))
3492 return generate_inner_level(executed, build);
3495 return generate_shifted_component(executed, build);
3497 return generate_components(executed, build);
3500 isl_ast_build_free(build);
3505 * internal, executed and build are the inputs to generate_code.
3511 isl_ast_build *build;
3516 /* Given an inverse schedule in terms of the external build schedule, i.e.,
3520 * with E the external build schedule and S the additional schedule "space",
3538 __isl_keep isl_ast_build *build)
3542 proj = isl_ast_build_get_schedule_map(build);
3559 * It is equal to the space of "set" if build->domain is parametric.
3562 * If the build space is not parametric and if isl_ast_build_ast_from_schedule
3564 * the (inverse) schedule refers to the external build domain and needs to
3565 * be transformed to refer to the internal build domain.
3567 * The build is extended to include the additional part of the schedule.
3568 * If the original build space was not parametric, then the options
3569 * in data->build refer only to the additional part of the schedule
3570 * and they need to be adjusted to refer to the complete AST build
3573 * After having adjusted inverse schedule and build, we start generating
3577 * If the original build space was not parametric, we undo the embedding
3579 * the outer AST build.
3585 isl_ast_build *build;
3593 embed = !isl_set_is_params(data->build->domain);
3595 executed = internal_executed(executed, space, data->build);
3597 build = isl_ast_build_copy(data->build);
3598 build = isl_ast_build_product(build, space);
3600 list = generate_next_level(executed, build);
3616 * If the build space S is not parametric, then the space of "set"
3624 * If the build space is not parametric, then T is the space of "set".
3634 if (isl_set_is_params(data->build->domain))
3637 build_space = isl_ast_build_get_space(data->build, data->internal);
3659 * "build" is an isl_ast_build that has either been constructed by
3680 __isl_take isl_union_map *executed, __isl_take isl_ast_build *build,
3689 if (!build)
3691 space = isl_ast_build_get_space(build, 1);
3695 isl_union_map_get_space(build->options));
3696 build = isl_ast_build_align_params(build, isl_space_copy(space));
3698 if (!executed || !build)
3701 ctx = isl_ast_build_get_ctx(build);
3705 data.build = build;
3717 isl_ast_build_free(build);
3721 isl_ast_build_free(build);
3728 * "build" is an isl_ast_build that has either been constructed by
3751 __isl_keep isl_ast_build *build, __isl_take isl_union_map *schedule)
3757 build = isl_ast_build_copy(build);
3758 build = isl_ast_build_set_single_valued(build, 0);
3760 list = generate_code(executed, isl_ast_build_copy(build), 0);
3761 node = isl_ast_node_from_graft_list(list, build);
3762 isl_ast_build_free(build);