Home | History | Annotate | Line # | Download | only in dist
      1 /*
      2  * Copyright 2017      Sven Verdoolaege
      3  *
      4  * Use of this software is governed by the MIT license
      5  *
      6  * Written by Sven Verdoolaege.
      7  */
      8 
      9 /* Initialize the explicit domain of "mupa".
     10  *
     11  * The explicit domain is initialized to a universe parameter set.
     12  * It may later be specialized with constraints on the parameter or
     13  * specific domain instances.
     14  */
     15 static __isl_give isl_multi_union_pw_aff *
     16 isl_multi_union_pw_aff_init_explicit_domain(
     17 	__isl_take isl_multi_union_pw_aff *mupa)
     18 {
     19 	isl_space *space;
     20 
     21 	if (isl_multi_union_pw_aff_check_has_explicit_domain(mupa) < 0)
     22 		return isl_multi_union_pw_aff_free(mupa);
     23 	space = isl_space_params(isl_multi_union_pw_aff_get_space(mupa));
     24 	mupa->u.dom = isl_union_set_from_set(isl_set_universe(space));
     25 	if (!mupa->u.dom)
     26 		return isl_multi_union_pw_aff_free(mupa);
     27 	return mupa;
     28 }
     29 
     30 /* Drop the "n" dimensions of type "type" starting at position "pos"
     31  * of the explicit domain of "mupa".
     32  */
     33 static __isl_give isl_multi_union_pw_aff *
     34 isl_multi_union_pw_aff_drop_explicit_domain_dims(
     35 	__isl_take isl_multi_union_pw_aff *mupa,
     36 	enum isl_dim_type type, unsigned pos, unsigned n)
     37 {
     38 	if (isl_multi_union_pw_aff_check_has_explicit_domain(mupa) < 0)
     39 		return isl_multi_union_pw_aff_free(mupa);
     40 	if (type != isl_dim_param)
     41 		isl_die(isl_multi_union_pw_aff_get_ctx(mupa), isl_error_invalid,
     42 			"can only drop parameters",
     43 			return isl_multi_union_pw_aff_free(mupa));
     44 	mupa = isl_multi_union_pw_aff_cow(mupa);
     45 	if (!mupa)
     46 		return NULL;
     47 	mupa->u.dom = isl_union_set_project_out(mupa->u.dom, type, pos, n);
     48 	if (!mupa->u.dom)
     49 		return isl_multi_union_pw_aff_free(mupa);
     50 	return mupa;
     51 }
     52