X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=isl_ast_build.c;h=ed6754518d0078f22cf338d06e2168de623632d2;hb=9728d5ebfbb4fb1f73253f5511913881cffc42d1;hp=0673726b51c92461b11a693b1ce2b4f408ccd537;hpb=ddd19fb4e1f67fc1d02bfa5f3d413c746148af22;p=platform%2Fupstream%2Fisl.git diff --git a/isl_ast_build.c b/isl_ast_build.c index 0673726..ed67545 100644 --- a/isl_ast_build.c +++ b/isl_ast_build.c @@ -49,7 +49,7 @@ static __isl_give isl_ast_build *isl_ast_build_init_derived( isl_vec *strides; build = isl_ast_build_cow(build); - if (!build) + if (!build || !build->domain) goto error; ctx = isl_ast_build_get_ctx(build); @@ -177,9 +177,14 @@ __isl_give isl_ast_build *isl_ast_build_dup(__isl_keep isl_ast_build *build) dup->strides = isl_vec_copy(build->strides); dup->offsets = isl_multi_aff_copy(build->offsets); dup->executed = isl_union_map_copy(build->executed); + dup->single_valued = build->single_valued; dup->options = isl_union_map_copy(build->options); dup->at_each_domain = build->at_each_domain; dup->at_each_domain_user = build->at_each_domain_user; + dup->before_each_for = build->before_each_for; + dup->before_each_for_user = build->before_each_for_user; + dup->after_each_for = build->after_each_for; + dup->after_each_for_user = build->after_each_for_user; dup->create_leaf = build->create_leaf; dup->create_leaf_user = build->create_leaf_user; @@ -338,6 +343,42 @@ __isl_give isl_ast_build *isl_ast_build_set_at_each_domain( return build; } +/* Set the "before_each_for" callback of "build" to "fn". + */ +__isl_give isl_ast_build *isl_ast_build_set_before_each_for( + __isl_take isl_ast_build *build, + __isl_give isl_id *(*fn)(__isl_keep isl_ast_build *build, + void *user), void *user) +{ + build = isl_ast_build_cow(build); + + if (!build) + return NULL; + + build->before_each_for = fn; + build->before_each_for_user = user; + + return build; +} + +/* Set the "after_each_for" callback of "build" to "fn". + */ +__isl_give isl_ast_build *isl_ast_build_set_after_each_for( + __isl_take isl_ast_build *build, + __isl_give isl_ast_node *(*fn)(__isl_take isl_ast_node *node, + __isl_keep isl_ast_build *build, void *user), void *user) +{ + build = isl_ast_build_cow(build); + + if (!build) + return NULL; + + build->after_each_for = fn; + build->after_each_for_user = user; + + return build; +} + /* Set the "create_leaf" callback of "build" to "fn". */ __isl_give isl_ast_build *isl_ast_build_set_create_leaf( @@ -374,6 +415,10 @@ __isl_give isl_ast_build *isl_ast_build_clear_local_info( build->at_each_domain = NULL; build->at_each_domain_user = NULL; + build->before_each_for = NULL; + build->before_each_for_user = NULL; + build->after_each_for = NULL; + build->after_each_for_user = NULL; build->create_leaf = NULL; build->create_leaf_user = NULL; @@ -2032,3 +2077,20 @@ __isl_give isl_set *isl_ast_build_eliminate( domain = isl_ast_build_eliminate_divs(build, domain); return domain; } + +/* Replace build->single_valued by "sv". + */ +__isl_give isl_ast_build *isl_ast_build_set_single_valued( + __isl_take isl_ast_build *build, int sv) +{ + if (!build) + return build; + if (build->single_valued == sv) + return build; + build = isl_ast_build_cow(build); + if (!build) + return build; + build->single_valued = sv; + + return build; +}