reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced

References

tools/polly/lib/External/isl/isl_multi_align_templ.c
   12 static __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),align_params),ALIGN_DOMBASE)(
   12 static __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),align_params),ALIGN_DOMBASE)(
   13 	__isl_take MULTI(BASE) *multi, __isl_take ALIGN_DOM *domain,
   14 	__isl_give MULTI(BASE) *fn(__isl_take MULTI(BASE) *multi,
   14 	__isl_give MULTI(BASE) *fn(__isl_take MULTI(BASE) *multi,
   34 		isl_die(FN(MULTI(BASE),get_ctx)(multi), isl_error_invalid,
   36 	multi = FN(MULTI(BASE),align_params)(multi,
   39 					    FN(MULTI(BASE),get_space)(multi));
   42 	FN(MULTI(BASE),free)(multi);
tools/polly/lib/External/isl/isl_multi_apply_templ.c
   18 __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),apply_aligned),APPLY_DOMBASE)(
   18 __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),apply_aligned),APPLY_DOMBASE)(
   19 	__isl_take MULTI(BASE) *multi, __isl_take APPLY_DOM *set,
   32 	multi = FN(MULTI(BASE),cow)(multi);
   46 	FN(MULTI(BASE),free)(multi);
   55 static __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),apply),APPLY_DOMBASE)(
   55 static __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),apply),APPLY_DOMBASE)(
   56 	__isl_take MULTI(BASE) *multi, __isl_take APPLY_DOM *set,
   69 		return FN(FN(MULTI(BASE),apply_aligned),APPLY_DOMBASE)(multi,
   71 	ctx = FN(MULTI(BASE),get_ctx)(multi);
   76 	multi = FN(MULTI(BASE),align_params)(multi,
   78 	set = FN(APPLY_DOM,align_params)(set, FN(MULTI(BASE),get_space)(multi));
   79 	return FN(FN(MULTI(BASE),apply_aligned),APPLY_DOMBASE)(multi, set, fn);
   81 	FN(MULTI(BASE),free)(multi);
tools/polly/lib/External/isl/isl_multi_coalesce.c
   18 __isl_give MULTI(BASE) *FN(MULTI(BASE),coalesce)(__isl_take MULTI(BASE) *multi)
   18 __isl_give MULTI(BASE) *FN(MULTI(BASE),coalesce)(__isl_take MULTI(BASE) *multi)
   18 __isl_give MULTI(BASE) *FN(MULTI(BASE),coalesce)(__isl_take MULTI(BASE) *multi)
   29 			return FN(MULTI(BASE),free)(multi);
tools/polly/lib/External/isl/isl_multi_explicit_domain.c
   15 __isl_give MULTI(BASE) *FN(MULTI(BASE),cow)(__isl_take MULTI(BASE) *multi);
   15 __isl_give MULTI(BASE) *FN(MULTI(BASE),cow)(__isl_take MULTI(BASE) *multi);
   15 __isl_give MULTI(BASE) *FN(MULTI(BASE),cow)(__isl_take MULTI(BASE) *multi);
   21 static int FN(MULTI(BASE),has_explicit_domain)(__isl_keep MULTI(BASE) *multi)
   21 static int FN(MULTI(BASE),has_explicit_domain)(__isl_keep MULTI(BASE) *multi)
   28 static isl_stat FN(MULTI(BASE),check_has_explicit_domain)(
   29 	__isl_keep MULTI(BASE) *multi)
   33 	if (!FN(MULTI(BASE),has_explicit_domain)(multi))
   34 		isl_die(FN(MULTI(BASE),get_ctx)(multi), isl_error_internal,
   42 static __isl_keep DOM *FN(MULTI(BASE),peek_explicit_domain)(
   43 	__isl_keep MULTI(BASE) *multi)
   45 	if (FN(MULTI(BASE),check_has_explicit_domain)(multi) < 0)
   52 static __isl_give DOM *FN(MULTI(BASE),get_explicit_domain)(
   53 	__isl_keep MULTI(BASE) *multi)
   55 	return FN(DOM,copy)(FN(MULTI(BASE),peek_explicit_domain)(multi));
   60 static __isl_give MULTI(BASE) *FN(MULTI(BASE),set_explicit_domain)(
   60 static __isl_give MULTI(BASE) *FN(MULTI(BASE),set_explicit_domain)(
   61 	__isl_take MULTI(BASE) *multi, __isl_take DOM *dom)
   63 	if (FN(MULTI(BASE),check_has_explicit_domain)(multi) < 0)
   65 	multi = FN(MULTI(BASE),cow)(multi);
   71 		return FN(MULTI(BASE),free)(multi);
   74 	FN(MULTI(BASE),free)(multi);
   86 static __isl_give MULTI(BASE) *FN(MULTI(BASE),intersect_explicit_domain)(
   86 static __isl_give MULTI(BASE) *FN(MULTI(BASE),intersect_explicit_domain)(
   87 	__isl_take MULTI(BASE) *dst, __isl_keep MULTI(BASE) *src)
   87 	__isl_take MULTI(BASE) *dst, __isl_keep MULTI(BASE) *src)
   92 	dom = FN(MULTI(BASE),peek_explicit_domain)(src);
   95 		return FN(MULTI(BASE),free)(dst);
   99 		dst = FN(MULTI(BASE),intersect_domain)(dst, dom);
  104 		dst = FN(MULTI(BASE),intersect_params)(dst, params);
  112 static __isl_give MULTI(BASE) *FN(MULTI(BASE),copy_explicit_domain)(
  112 static __isl_give MULTI(BASE) *FN(MULTI(BASE),copy_explicit_domain)(
  113 	__isl_take MULTI(BASE) *dst, __isl_keep MULTI(BASE) *src)
  113 	__isl_take MULTI(BASE) *dst, __isl_keep MULTI(BASE) *src)
  117 	dom = FN(MULTI(BASE),get_explicit_domain)(src);
  118 	dst = FN(MULTI(BASE),set_explicit_domain)(dst, dom);
  125 static __isl_give MULTI(BASE) *FN(MULTI(BASE),align_explicit_domain_params)(
  125 static __isl_give MULTI(BASE) *FN(MULTI(BASE),align_explicit_domain_params)(
  126 	__isl_take MULTI(BASE) *multi, __isl_take isl_space *space)
  130 	dom = FN(MULTI(BASE),get_explicit_domain)(multi);
  132 	multi = FN(MULTI(BASE),set_explicit_domain)(multi, dom);
  140 static __isl_give MULTI(BASE) *FN(MULTI(BASE),reset_explicit_domain_space)(
  140 static __isl_give MULTI(BASE) *FN(MULTI(BASE),reset_explicit_domain_space)(
  141 	__isl_take MULTI(BASE) *multi, __isl_take isl_space *space)
  145 	dom = FN(MULTI(BASE),get_explicit_domain)(multi);
  147 	multi = FN(MULTI(BASE),set_explicit_domain)(multi, dom);
  154 static void FN(MULTI(BASE),free_explicit_domain)(__isl_keep MULTI(BASE) *multi)
  154 static void FN(MULTI(BASE),free_explicit_domain)(__isl_keep MULTI(BASE) *multi)
  156 	if (FN(MULTI(BASE),check_has_explicit_domain)(multi) < 0)
  163 static isl_bool FN(MULTI(BASE),equal_explicit_domain)(
  164 	__isl_keep MULTI(BASE) *multi1, __isl_keep MULTI(BASE) *multi2)
  164 	__isl_keep MULTI(BASE) *multi1, __isl_keep MULTI(BASE) *multi2)
  169 	if (FN(MULTI(BASE),check_has_explicit_domain)(multi1) < 0 ||
  170 	    FN(MULTI(BASE),check_has_explicit_domain)(multi2) < 0)
  172 	dom1 = FN(MULTI(BASE),get_explicit_domain)(multi1);
  173 	dom2 = FN(MULTI(BASE),get_explicit_domain)(multi2);
  181 static isl_stat FN(MULTI(BASE),check_explicit_domain)(
  182 	__isl_keep MULTI(BASE) *multi) __attribute__ ((unused));
  187 isl_stat FN(MULTI(BASE),check_explicit_domain)(__isl_keep MULTI(BASE) *multi)
  187 isl_stat FN(MULTI(BASE),check_explicit_domain)(__isl_keep MULTI(BASE) *multi)
  192 	if (FN(MULTI(BASE),check_has_explicit_domain)(multi) < 0)
  202 		isl_die(FN(MULTI(BASE),get_ctx)(multi), isl_error_internal,
tools/polly/lib/External/isl/isl_multi_floor.c
   14 __isl_give MULTI(BASE) *FN(MULTI(BASE),floor)(__isl_take MULTI(BASE) *multi)
   14 __isl_give MULTI(BASE) *FN(MULTI(BASE),floor)(__isl_take MULTI(BASE) *multi)
   14 __isl_give MULTI(BASE) *FN(MULTI(BASE),floor)(__isl_take MULTI(BASE) *multi)
   18 	multi = FN(MULTI(BASE),cow)(multi);
   25 			return FN(MULTI(BASE),free)(multi);
tools/polly/lib/External/isl/isl_multi_gist.c
   16 __isl_give MULTI(BASE) *FN(MULTI(BASE),gist)(__isl_take MULTI(BASE) *multi,
   16 __isl_give MULTI(BASE) *FN(MULTI(BASE),gist)(__isl_take MULTI(BASE) *multi,
   16 __isl_give MULTI(BASE) *FN(MULTI(BASE),gist)(__isl_take MULTI(BASE) *multi,
   19 	return FN(FN(MULTI(BASE),apply),DOMBASE)(multi, context, &FN(EL,gist));
   25 __isl_give MULTI(BASE) *FN(MULTI(BASE),gist_params)(
   25 __isl_give MULTI(BASE) *FN(MULTI(BASE),gist_params)(
   26 	__isl_take MULTI(BASE) *multi, __isl_take isl_set *context)
   28 	return FN(MULTI(BASE),apply_set)(multi, context, &FN(EL,gist_params));
tools/polly/lib/External/isl/isl_multi_intersect.c
   16 static isl_bool FN(MULTI(BASE),compatible_domain)(
   17 	__isl_keep MULTI(BASE) *multi, __isl_keep DOM *domain)
   23 	space = FN(MULTI(BASE),get_space)(multi);
   34 static isl_stat FN(MULTI(BASE),check_compatible_domain)(
   35 	__isl_keep MULTI(BASE) *multi, __isl_keep DOM *domain)
   39 	ok = FN(MULTI(BASE),compatible_domain)(multi, domain);
   59 static __isl_give MULTI(BASE) *FN(MULTI(BASE),domain_intersect_aligned)(
   59 static __isl_give MULTI(BASE) *FN(MULTI(BASE),domain_intersect_aligned)(
   60 	__isl_take MULTI(BASE) *multi, __isl_take DOM *domain)
   65 	if (FN(MULTI(BASE),check_compatible_domain)(multi, domain) < 0)
   67 	if (FN(MULTI(BASE),check_has_explicit_domain)(multi) < 0)
   72 	multi_dom = FN(MULTI(BASE),get_explicit_domain)(multi);
   81 	multi = FN(MULTI(BASE),set_explicit_domain)(multi, domain);
   84 	FN(MULTI(BASE),free)(multi);
   92 static __isl_give MULTI(BASE) *FN(MULTI(BASE),domain_intersect)(
   92 static __isl_give MULTI(BASE) *FN(MULTI(BASE),domain_intersect)(
   93 	__isl_take MULTI(BASE) *multi, __isl_take DOM *domain)
   95 	return FN(FN(MULTI(BASE),align_params),DOMBASE)(multi, domain,
   96 				    FN(MULTI(BASE),domain_intersect_aligned));
  104 __isl_give MULTI(BASE) *FN(MULTI(BASE),intersect_domain)(
  104 __isl_give MULTI(BASE) *FN(MULTI(BASE),intersect_domain)(
  105 	__isl_take MULTI(BASE) *multi, __isl_take DOM *domain)
  107 	if (FN(MULTI(BASE),has_explicit_domain)(multi))
  108 		return FN(MULTI(BASE),domain_intersect)(multi, domain);
  109 	return FN(FN(MULTI(BASE),apply),DOMBASE)(multi, domain,
  116 static __isl_give MULTI(BASE) *FN(MULTI(BASE),domain_intersect_params_aligned)(
  116 static __isl_give MULTI(BASE) *FN(MULTI(BASE),domain_intersect_params_aligned)(
  117 	__isl_take MULTI(BASE) *multi, __isl_take isl_set *domain)
  121 	multi_dom = FN(MULTI(BASE),get_explicit_domain)(multi);
  123 	multi = FN(MULTI(BASE),set_explicit_domain)(multi, multi_dom);
  132 static __isl_give MULTI(BASE) *FN(MULTI(BASE),domain_intersect_params)(
  132 static __isl_give MULTI(BASE) *FN(MULTI(BASE),domain_intersect_params)(
  133 	__isl_take MULTI(BASE) *multi, __isl_take isl_set *domain)
  135 	return FN(FN(MULTI(BASE),align_params),set)(multi, domain,
  136 			    FN(MULTI(BASE),domain_intersect_params_aligned));
  144 __isl_give MULTI(BASE) *FN(MULTI(BASE),intersect_params)(
  144 __isl_give MULTI(BASE) *FN(MULTI(BASE),intersect_params)(
  145 	__isl_take MULTI(BASE) *multi, __isl_take isl_set *domain)
  147 	if (FN(MULTI(BASE),has_explicit_domain)(multi))
  148 		return FN(MULTI(BASE),domain_intersect_params)(multi, domain);
  149 	return FN(MULTI(BASE),apply_set)(multi, domain,
tools/polly/lib/External/isl/isl_multi_templ.c
   23 isl_ctx *FN(MULTI(BASE),get_ctx)(__isl_keep MULTI(BASE) *multi)
   23 isl_ctx *FN(MULTI(BASE),get_ctx)(__isl_keep MULTI(BASE) *multi)
   30 __isl_keep isl_space *FN(MULTI(BASE),peek_space)(__isl_keep MULTI(BASE) *multi)
   30 __isl_keep isl_space *FN(MULTI(BASE),peek_space)(__isl_keep MULTI(BASE) *multi)
   35 __isl_give isl_space *FN(MULTI(BASE),get_space)(__isl_keep MULTI(BASE) *multi)
   35 __isl_give isl_space *FN(MULTI(BASE),get_space)(__isl_keep MULTI(BASE) *multi)
   37 	return isl_space_copy(FN(MULTI(BASE),peek_space)(multi));
   44 int FN(MULTI(BASE),find_dim_by_name)(__isl_keep MULTI(BASE) *multi,
   44 int FN(MULTI(BASE),find_dim_by_name)(__isl_keep MULTI(BASE) *multi,
   52 __isl_give isl_space *FN(MULTI(BASE),get_domain_space)(
   53 	__isl_keep MULTI(BASE) *multi)
   64 __isl_give MULTI(BASE) *FN(MULTI(BASE),alloc)(__isl_take isl_space *space)
   64 __isl_give MULTI(BASE) *FN(MULTI(BASE),alloc)(__isl_take isl_space *space)
   68 	MULTI(BASE) *multi;
   76 		multi = isl_calloc(ctx, MULTI(BASE),
   77 			 sizeof(MULTI(BASE)) + (n - 1) * sizeof(struct EL *));
   79 		multi = isl_calloc(ctx, MULTI(BASE), sizeof(MULTI(BASE)));
   79 		multi = isl_calloc(ctx, MULTI(BASE), sizeof(MULTI(BASE)));
   86 	if (FN(MULTI(BASE),has_explicit_domain)(multi))
   87 		multi = FN(MULTI(BASE),init_explicit_domain)(multi);
   94 __isl_give MULTI(BASE) *FN(MULTI(BASE),dup)(__isl_keep MULTI(BASE) *multi)
   94 __isl_give MULTI(BASE) *FN(MULTI(BASE),dup)(__isl_keep MULTI(BASE) *multi)
   94 __isl_give MULTI(BASE) *FN(MULTI(BASE),dup)(__isl_keep MULTI(BASE) *multi)
   97 	MULTI(BASE) *dup;
  102 	dup = FN(MULTI(BASE),alloc)(isl_space_copy(multi->space));
  107 		dup = FN(FN(MULTI(BASE),set),BASE)(dup, i,
  107 		dup = FN(FN(MULTI(BASE),set),BASE)(dup, i,
  109 	if (FN(MULTI(BASE),has_explicit_domain)(multi))
  110 		dup = FN(MULTI(BASE),copy_explicit_domain)(dup, multi);
  115 __isl_give MULTI(BASE) *FN(MULTI(BASE),cow)(__isl_take MULTI(BASE) *multi)
  115 __isl_give MULTI(BASE) *FN(MULTI(BASE),cow)(__isl_take MULTI(BASE) *multi)
  115 __isl_give MULTI(BASE) *FN(MULTI(BASE),cow)(__isl_take MULTI(BASE) *multi)
  124 	return FN(MULTI(BASE),dup)(multi);
  127 __isl_give MULTI(BASE) *FN(MULTI(BASE),copy)(__isl_keep MULTI(BASE) *multi)
  127 __isl_give MULTI(BASE) *FN(MULTI(BASE),copy)(__isl_keep MULTI(BASE) *multi)
  127 __isl_give MULTI(BASE) *FN(MULTI(BASE),copy)(__isl_keep MULTI(BASE) *multi)
  136 __isl_null MULTI(BASE) *FN(MULTI(BASE),free)(__isl_take MULTI(BASE) *multi)
  136 __isl_null MULTI(BASE) *FN(MULTI(BASE),free)(__isl_take MULTI(BASE) *multi)
  136 __isl_null MULTI(BASE) *FN(MULTI(BASE),free)(__isl_take MULTI(BASE) *multi)
  149 	if (FN(MULTI(BASE),has_explicit_domain)(multi))
  150 		FN(MULTI(BASE),free_explicit_domain)(multi);
  156 unsigned FN(MULTI(BASE),dim)(__isl_keep MULTI(BASE) *multi,
  156 unsigned FN(MULTI(BASE),dim)(__isl_keep MULTI(BASE) *multi,
  165 int FN(MULTI(BASE),find_dim_by_id)(__isl_keep MULTI(BASE) *multi,
  165 int FN(MULTI(BASE),find_dim_by_id)(__isl_keep MULTI(BASE) *multi,
  175 __isl_give isl_id *FN(MULTI(BASE),get_dim_id)(__isl_keep MULTI(BASE) *multi,
  175 __isl_give isl_id *FN(MULTI(BASE),get_dim_id)(__isl_keep MULTI(BASE) *multi,
  181 __isl_give MULTI(BASE) *FN(MULTI(BASE),set_dim_name)(
  181 __isl_give MULTI(BASE) *FN(MULTI(BASE),set_dim_name)(
  182 	__isl_take MULTI(BASE) *multi,
  187 	multi = FN(MULTI(BASE),cow)(multi);
  193 		return FN(MULTI(BASE),free)(multi);
  201 			return FN(MULTI(BASE),free)(multi);
  207 const char *FN(MULTI(BASE),get_tuple_name)(__isl_keep MULTI(BASE) *multi,
  207 const char *FN(MULTI(BASE),get_tuple_name)(__isl_keep MULTI(BASE) *multi,
  215 isl_bool FN(MULTI(BASE),has_tuple_id)(__isl_keep MULTI(BASE) *multi,
  215 isl_bool FN(MULTI(BASE),has_tuple_id)(__isl_keep MULTI(BASE) *multi,
  225 __isl_give isl_id *FN(MULTI(BASE),get_tuple_id)(__isl_keep MULTI(BASE) *multi,
  225 __isl_give isl_id *FN(MULTI(BASE),get_tuple_id)(__isl_keep MULTI(BASE) *multi,
  231 __isl_give EL *FN(FN(MULTI(BASE),get),BASE)(__isl_keep MULTI(BASE) *multi,
  231 __isl_give EL *FN(FN(MULTI(BASE),get),BASE)(__isl_keep MULTI(BASE) *multi,
  231 __isl_give EL *FN(FN(MULTI(BASE),get),BASE)(__isl_keep MULTI(BASE) *multi,
  238 	ctx = FN(MULTI(BASE),get_ctx)(multi);
  248 static __isl_give MULTI(BASE) *FN(MULTI(BASE),restore)(
  248 static __isl_give MULTI(BASE) *FN(MULTI(BASE),restore)(
  249 	__isl_take MULTI(BASE) *multi, int pos, __isl_take EL *el)
  251 	multi = FN(MULTI(BASE),cow)(multi);
  256 		isl_die(FN(MULTI(BASE),get_ctx)(multi), isl_error_invalid,
  264 	FN(MULTI(BASE),free)(multi);
  274 static __isl_give MULTI(BASE) *FN(MULTI(BASE),restore_check_space)(
  274 static __isl_give MULTI(BASE) *FN(MULTI(BASE),restore_check_space)(
  275 	__isl_take MULTI(BASE) *multi, int pos, __isl_take EL *el)
  279 	space = FN(MULTI(BASE),peek_space)(multi);
  281 		multi = FN(MULTI(BASE),free)(multi);
  282 	return FN(MULTI(BASE),restore)(multi, pos, el);
  285 __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),set),BASE)(
  285 __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),set),BASE)(
  285 __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),set),BASE)(
  286 	__isl_take MULTI(BASE) *multi, int pos, __isl_take EL *el)
  292 	multi_space = FN(MULTI(BASE),get_space)(multi);
  297 		multi = FN(MULTI(BASE),align_params)(multi,
  300 		multi_space = FN(MULTI(BASE),get_space)(multi);
  304 	multi = FN(MULTI(BASE),restore_check_space)(multi, pos, el);
  311 	FN(MULTI(BASE),free)(multi);
  328 __isl_give MULTI(BASE) *FN(MULTI(BASE),reset_space_and_domain)(
  328 __isl_give MULTI(BASE) *FN(MULTI(BASE),reset_space_and_domain)(
  329 	__isl_take MULTI(BASE) *multi, __isl_take isl_space *space,
  334 	multi = FN(MULTI(BASE),cow)(multi);
  344 	if (FN(MULTI(BASE),has_explicit_domain)(multi)) {
  345 		multi = FN(MULTI(BASE),reset_explicit_domain_space)(multi,
  358 	FN(MULTI(BASE),free)(multi);
  362 __isl_give MULTI(BASE) *FN(MULTI(BASE),reset_domain_space)(
  362 __isl_give MULTI(BASE) *FN(MULTI(BASE),reset_domain_space)(
  363 	__isl_take MULTI(BASE) *multi, __isl_take isl_space *domain)
  369 	return FN(MULTI(BASE),reset_space_and_domain)(multi, space, domain);
  372 __isl_give MULTI(BASE) *FN(MULTI(BASE),reset_space)(
  372 __isl_give MULTI(BASE) *FN(MULTI(BASE),reset_space)(
  373 	__isl_take MULTI(BASE) *multi, __isl_take isl_space *space)
  378 	return FN(MULTI(BASE),reset_space_and_domain)(multi, space, domain);
  383 __isl_give MULTI(BASE) *FN(MULTI(BASE),set_dim_id)(
  383 __isl_give MULTI(BASE) *FN(MULTI(BASE),set_dim_id)(
  384 	__isl_take MULTI(BASE) *multi,
  389 	multi = FN(MULTI(BASE),cow)(multi);
  393 	space = FN(MULTI(BASE),get_space)(multi);
  396 	return FN(MULTI(BASE),reset_space)(multi, space);
  399 	FN(MULTI(BASE),free)(multi);
  403 __isl_give MULTI(BASE) *FN(MULTI(BASE),set_tuple_name)(
  403 __isl_give MULTI(BASE) *FN(MULTI(BASE),set_tuple_name)(
  404 	__isl_keep MULTI(BASE) *multi, enum isl_dim_type type,
  409 	multi = FN(MULTI(BASE),cow)(multi);
  413 	space = FN(MULTI(BASE),get_space)(multi);
  416 	return FN(MULTI(BASE),reset_space)(multi, space);
  419 __isl_give MULTI(BASE) *FN(MULTI(BASE),set_tuple_id)(
  419 __isl_give MULTI(BASE) *FN(MULTI(BASE),set_tuple_id)(
  420 	__isl_take MULTI(BASE) *multi, enum isl_dim_type type,
  425 	multi = FN(MULTI(BASE),cow)(multi);
  429 	space = FN(MULTI(BASE),get_space)(multi);
  432 	return FN(MULTI(BASE),reset_space)(multi, space);
  440 __isl_give MULTI(BASE) *FN(MULTI(BASE),reset_tuple_id)(
  440 __isl_give MULTI(BASE) *FN(MULTI(BASE),reset_tuple_id)(
  441 	__isl_take MULTI(BASE) *multi, enum isl_dim_type type)
  447 	if (!FN(MULTI(BASE),has_tuple_id)(multi, type))
  450 	multi = FN(MULTI(BASE),cow)(multi);
  454 	space = FN(MULTI(BASE),get_space)(multi);
  457 	return FN(MULTI(BASE),reset_space)(multi, space);
  463 __isl_give MULTI(BASE) *FN(MULTI(BASE),reset_user)(
  463 __isl_give MULTI(BASE) *FN(MULTI(BASE),reset_user)(
  464 	__isl_take MULTI(BASE) *multi)
  468 	space = FN(MULTI(BASE),get_space)(multi);
  471 	return FN(MULTI(BASE),reset_space)(multi, space);
  474 __isl_give MULTI(BASE) *FN(MULTI(BASE),realign_domain)(
  474 __isl_give MULTI(BASE) *FN(MULTI(BASE),realign_domain)(
  475 	__isl_take MULTI(BASE) *multi, __isl_take isl_reordering *exp)
  480 	multi = FN(MULTI(BASE),cow)(multi);
  492 	multi = FN(MULTI(BASE),reset_domain_space)(multi, space);
  498 	FN(MULTI(BASE),free)(multi);
  507 __isl_give MULTI(BASE) *FN(MULTI(BASE),align_params)(
  507 __isl_give MULTI(BASE) *FN(MULTI(BASE),align_params)(
  508 	__isl_take MULTI(BASE) *multi, __isl_take isl_space *model)
  533 	if (FN(MULTI(BASE),has_explicit_domain)(multi)) {
  534 		multi = FN(MULTI(BASE),align_explicit_domain_params)(multi,
  541 				    FN(MULTI(BASE),get_domain_space)(multi));
  542 	multi = FN(MULTI(BASE),realign_domain)(multi, exp);
  548 	FN(MULTI(BASE),free)(multi);
  559 __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),from),LIST(BASE))(
  559 __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),from),LIST(BASE))(
  559 __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),from),LIST(BASE))(
  565 	MULTI(BASE) *multi;
  571 	n = FN(FN(LIST(EL),n),BASE)(list);
  580 	multi = FN(MULTI(BASE),alloc)(isl_space_copy(space));
  582 		EL *el = FN(FN(LIST(EL),get),BASE)(list, i);
  584 		multi = FN(MULTI(BASE),restore_check_space)(multi, i, el);
  692 __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),from),BASE)(__isl_take EL *el)
  692 __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),from),BASE)(__isl_take EL *el)
  692 __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),from),BASE)(__isl_take EL *el)
  695 	MULTI(BASE) *multi;
  702 	multi = FN(MULTI(BASE),alloc)(space);
  703 	multi = FN(FN(MULTI(BASE),set),BASE)(multi, 0, el);
  703 	multi = FN(FN(MULTI(BASE),set),BASE)(multi, 0, el);
  709 __isl_give MULTI(BASE) *FN(MULTI(BASE),drop_dims)(
  709 __isl_give MULTI(BASE) *FN(MULTI(BASE),drop_dims)(
  710 	__isl_take MULTI(BASE) *multi,
  716 	multi = FN(MULTI(BASE),cow)(multi);
  720 	dim = FN(MULTI(BASE),dim)(multi, type);
  722 		isl_die(FN(MULTI(BASE),get_ctx)(multi), isl_error_invalid,
  724 			return FN(MULTI(BASE),free)(multi));
  728 		return FN(MULTI(BASE),free)(multi);
  736 		if (n > 0 && FN(MULTI(BASE),has_explicit_domain)(multi))
  737 			multi = FN(MULTI(BASE),init_explicit_domain)(multi);
  742 	if (FN(MULTI(BASE),has_explicit_domain)(multi))
  743 		multi = FN(MULTI(BASE),drop_explicit_domain_dims)(multi,
  751 			return FN(MULTI(BASE),free)(multi);
  759 static __isl_give MULTI(BASE) *FN(MULTI(BASE),align_params_multi_multi_and)(
  759 static __isl_give MULTI(BASE) *FN(MULTI(BASE),align_params_multi_multi_and)(
  760 	__isl_take MULTI(BASE) *multi1, __isl_take MULTI(BASE) *multi2,
  760 	__isl_take MULTI(BASE) *multi1, __isl_take MULTI(BASE) *multi2,
  761 	__isl_give MULTI(BASE) *(*fn)(__isl_take MULTI(BASE) *multi1,
  761 	__isl_give MULTI(BASE) *(*fn)(__isl_take MULTI(BASE) *multi1,
  762 		__isl_take MULTI(BASE) *multi2))
  774 	ctx = FN(MULTI(BASE),get_ctx)(multi1);
  779 	multi1 = FN(MULTI(BASE),align_params)(multi1,
  780 					    FN(MULTI(BASE),get_space)(multi2));
  781 	multi2 = FN(MULTI(BASE),align_params)(multi2,
  782 					    FN(MULTI(BASE),get_space)(multi1));
  785 	FN(MULTI(BASE),free)(multi1);
  786 	FN(MULTI(BASE),free)(multi2);
  798 static __isl_give MULTI(BASE) *FN(MULTI(BASE),range_product_aligned)(
  798 static __isl_give MULTI(BASE) *FN(MULTI(BASE),range_product_aligned)(
  799 	__isl_take MULTI(BASE) *multi1, __isl_take MULTI(BASE) *multi2)
  799 	__isl_take MULTI(BASE) *multi1, __isl_take MULTI(BASE) *multi2)
  804 	MULTI(BASE) *res;
  809 	space = isl_space_range_product(FN(MULTI(BASE),get_space)(multi1),
  810 					FN(MULTI(BASE),get_space)(multi2));
  811 	res = FN(MULTI(BASE),alloc)(space);
  813 	n1 = FN(MULTI(BASE),dim)(multi1, isl_dim_out);
  814 	n2 = FN(MULTI(BASE),dim)(multi2, isl_dim_out);
  817 		el = FN(FN(MULTI(BASE),get),BASE)(multi1, i);
  817 		el = FN(FN(MULTI(BASE),get),BASE)(multi1, i);
  818 		res = FN(FN(MULTI(BASE),set),BASE)(res, i, el);
  818 		res = FN(FN(MULTI(BASE),set),BASE)(res, i, el);
  822 		el = FN(FN(MULTI(BASE),get),BASE)(multi2, i);
  822 		el = FN(FN(MULTI(BASE),get),BASE)(multi2, i);
  823 		res = FN(FN(MULTI(BASE),set),BASE)(res, n1 + i, el);
  823 		res = FN(FN(MULTI(BASE),set),BASE)(res, n1 + i, el);
  826 	if (FN(MULTI(BASE),has_explicit_domain)(multi1))
  827 		res = FN(MULTI(BASE),intersect_explicit_domain)(res, multi1);
  828 	if (FN(MULTI(BASE),has_explicit_domain)(multi2))
  829 		res = FN(MULTI(BASE),intersect_explicit_domain)(res, multi2);
  831 	FN(MULTI(BASE),free)(multi1);
  832 	FN(MULTI(BASE),free)(multi2);
  835 	FN(MULTI(BASE),free)(multi1);
  836 	FN(MULTI(BASE),free)(multi2);
  843 __isl_give MULTI(BASE) *FN(MULTI(BASE),range_product)(
  843 __isl_give MULTI(BASE) *FN(MULTI(BASE),range_product)(
  844 	__isl_take MULTI(BASE) *multi1, __isl_take MULTI(BASE) *multi2)
  844 	__isl_take MULTI(BASE) *multi1, __isl_take MULTI(BASE) *multi2)
  846 	return FN(MULTI(BASE),align_params_multi_multi_and)(multi1, multi2,
  847 					&FN(MULTI(BASE),range_product_aligned));
  852 isl_bool FN(MULTI(BASE),range_is_wrapping)(__isl_keep MULTI(BASE) *multi)
  852 isl_bool FN(MULTI(BASE),range_is_wrapping)(__isl_keep MULTI(BASE) *multi)
  861 __isl_give MULTI(BASE) *FN(MULTI(BASE),range_factor_domain)(
  861 __isl_give MULTI(BASE) *FN(MULTI(BASE),range_factor_domain)(
  862 	__isl_take MULTI(BASE) *multi)
  870 		isl_die(FN(MULTI(BASE),get_ctx)(multi), isl_error_invalid,
  872 			return FN(MULTI(BASE),free)(multi));
  874 	space = FN(MULTI(BASE),get_space)(multi);
  878 	multi = FN(MULTI(BASE),drop_dims)(multi,
  880 	multi = FN(MULTI(BASE),reset_space)(multi, space);
  887 __isl_give MULTI(BASE) *FN(MULTI(BASE),range_factor_range)(
  887 __isl_give MULTI(BASE) *FN(MULTI(BASE),range_factor_range)(
  888 	__isl_take MULTI(BASE) *multi)
  896 		isl_die(FN(MULTI(BASE),get_ctx)(multi), isl_error_invalid,
  898 			return FN(MULTI(BASE),free)(multi));
  900 	space = FN(MULTI(BASE),get_space)(multi);
  904 	multi = FN(MULTI(BASE),drop_dims)(multi, isl_dim_out, 0, total - keep);
  905 	multi = FN(MULTI(BASE),reset_space)(multi, space);
  912 __isl_give MULTI(BASE) *FN(MULTI(BASE),factor_range)(
  912 __isl_give MULTI(BASE) *FN(MULTI(BASE),factor_range)(
  913 	__isl_take MULTI(BASE) *multi)
  921 		isl_die(FN(MULTI(BASE),get_ctx)(multi), isl_error_invalid,
  922 			"not a product", return FN(MULTI(BASE),free)(multi));
  924 	space = FN(MULTI(BASE),get_space)(multi);
  928 	multi = FN(MULTI(BASE),drop_dims)(multi, isl_dim_out, 0, total - keep);
  929 	multi = FN(MULTI(BASE),reset_space)(multi, space);
  997 __isl_give MULTI(BASE) *FN(MULTI(BASE),flatten_range)(
  997 __isl_give MULTI(BASE) *FN(MULTI(BASE),flatten_range)(
  998 	__isl_take MULTI(BASE) *multi)
 1006 	multi = FN(MULTI(BASE),cow)(multi);
 1012 		return FN(MULTI(BASE),free)(multi);
 1020 __isl_give MULTI(BASE) *FN(MULTI(BASE),flat_range_product)(
 1020 __isl_give MULTI(BASE) *FN(MULTI(BASE),flat_range_product)(
 1021 	__isl_take MULTI(BASE) *multi1, __isl_take MULTI(BASE) *multi2)
 1021 	__isl_take MULTI(BASE) *multi1, __isl_take MULTI(BASE) *multi2)
 1023 	MULTI(BASE) *multi;
 1025 	multi = FN(MULTI(BASE),range_product)(multi1, multi2);
 1026 	multi = FN(MULTI(BASE),flatten_range)(multi);
 1042 __isl_give MULTI(BASE) *FN(MULTI(BASE),range_splice)(
 1042 __isl_give MULTI(BASE) *FN(MULTI(BASE),range_splice)(
 1043 	__isl_take MULTI(BASE) *multi1, unsigned pos,
 1044 	__isl_take MULTI(BASE) *multi2)
 1046 	MULTI(BASE) *res;
 1052 	dim = FN(MULTI(BASE),dim)(multi1, isl_dim_out);
 1054 		isl_die(FN(MULTI(BASE),get_ctx)(multi1), isl_error_invalid,
 1057 	res = FN(MULTI(BASE),copy)(multi1);
 1058 	res = FN(MULTI(BASE),drop_dims)(res, isl_dim_out, pos, dim - pos);
 1059 	multi1 = FN(MULTI(BASE),drop_dims)(multi1, isl_dim_out, 0, pos);
 1061 	res = FN(MULTI(BASE),flat_range_product)(res, multi2);
 1062 	res = FN(MULTI(BASE),flat_range_product)(res, multi1);
 1066 	FN(MULTI(BASE),free)(multi1);
 1067 	FN(MULTI(BASE),free)(multi2);
 1128 static isl_stat FN(MULTI(BASE),check_equal_space)(
 1129 	__isl_keep MULTI(BASE) *multi1, __isl_keep MULTI(BASE) *multi2)
 1129 	__isl_keep MULTI(BASE) *multi1, __isl_keep MULTI(BASE) *multi2)
 1140 		isl_die(FN(MULTI(BASE),get_ctx)(multi1), isl_error_invalid,
 1148 static __isl_give MULTI(BASE) *FN(MULTI(BASE),bin_op)(
 1148 static __isl_give MULTI(BASE) *FN(MULTI(BASE),bin_op)(
 1149 	__isl_take MULTI(BASE) *multi1, __isl_take MULTI(BASE) *multi2,
 1149 	__isl_take MULTI(BASE) *multi1, __isl_take MULTI(BASE) *multi2,
 1159 static __isl_give MULTI(BASE) *FN(MULTI(BASE),bin_op)(
 1159 static __isl_give MULTI(BASE) *FN(MULTI(BASE),bin_op)(
 1160 	__isl_take MULTI(BASE) *multi1, __isl_take MULTI(BASE) *multi2,
 1160 	__isl_take MULTI(BASE) *multi1, __isl_take MULTI(BASE) *multi2,
 1165 	multi1 = FN(MULTI(BASE),cow)(multi1);
 1166 	if (FN(MULTI(BASE),check_equal_space)(multi1, multi2) < 0)
 1176 	if (FN(MULTI(BASE),has_explicit_domain)(multi2))
 1177 		multi1 = FN(MULTI(BASE),intersect_explicit_domain)(multi1,
 1180 	FN(MULTI(BASE),free)(multi2);
 1183 	FN(MULTI(BASE),free)(multi1);
 1184 	FN(MULTI(BASE),free)(multi2);
 1192 static __isl_give MULTI(BASE) *FN(MULTI(BASE),add_aligned)(
 1192 static __isl_give MULTI(BASE) *FN(MULTI(BASE),add_aligned)(
 1193 	__isl_take MULTI(BASE) *multi1, __isl_take MULTI(BASE) *multi2)
 1193 	__isl_take MULTI(BASE) *multi1, __isl_take MULTI(BASE) *multi2)
 1195 	return FN(MULTI(BASE),bin_op)(multi1, multi2, &FN(EL,add));
 1200 __isl_give MULTI(BASE) *FN(MULTI(BASE),add)(__isl_take MULTI(BASE) *multi1,
 1200 __isl_give MULTI(BASE) *FN(MULTI(BASE),add)(__isl_take MULTI(BASE) *multi1,
 1200 __isl_give MULTI(BASE) *FN(MULTI(BASE),add)(__isl_take MULTI(BASE) *multi1,
 1201 	__isl_take MULTI(BASE) *multi2)
 1203 	return FN(MULTI(BASE),align_params_multi_multi_and)(multi1, multi2,
 1204 						&FN(MULTI(BASE),add_aligned));
 1211 static __isl_give MULTI(BASE) *FN(MULTI(BASE),sub_aligned)(
 1211 static __isl_give MULTI(BASE) *FN(MULTI(BASE),sub_aligned)(
 1212 	__isl_take MULTI(BASE) *multi1, __isl_take MULTI(BASE) *multi2)
 1212 	__isl_take MULTI(BASE) *multi1, __isl_take MULTI(BASE) *multi2)
 1214 	return FN(MULTI(BASE),bin_op)(multi1, multi2, &FN(EL,sub));
 1219 __isl_give MULTI(BASE) *FN(MULTI(BASE),sub)(__isl_take MULTI(BASE) *multi1,
 1219 __isl_give MULTI(BASE) *FN(MULTI(BASE),sub)(__isl_take MULTI(BASE) *multi1,
 1219 __isl_give MULTI(BASE) *FN(MULTI(BASE),sub)(__isl_take MULTI(BASE) *multi1,
 1220 	__isl_take MULTI(BASE) *multi2)
 1222 	return FN(MULTI(BASE),align_params_multi_multi_and)(multi1, multi2,
 1223 						&FN(MULTI(BASE),sub_aligned));
 1228 __isl_give MULTI(BASE) *FN(MULTI(BASE),scale_val)(__isl_take MULTI(BASE) *multi,
 1228 __isl_give MULTI(BASE) *FN(MULTI(BASE),scale_val)(__isl_take MULTI(BASE) *multi,
 1228 __isl_give MULTI(BASE) *FN(MULTI(BASE),scale_val)(__isl_take MULTI(BASE) *multi,
 1245 	multi = FN(MULTI(BASE),cow)(multi);
 1260 	return FN(MULTI(BASE),free)(multi);
 1265 __isl_give MULTI(BASE) *FN(MULTI(BASE),scale_down_val)(
 1265 __isl_give MULTI(BASE) *FN(MULTI(BASE),scale_down_val)(
 1266 	__isl_take MULTI(BASE) *multi, __isl_take isl_val *v)
 1285 	multi = FN(MULTI(BASE),cow)(multi);
 1300 	return FN(MULTI(BASE),free)(multi);
 1306 __isl_give MULTI(BASE) *FN(MULTI(BASE),scale_multi_val)(
 1306 __isl_give MULTI(BASE) *FN(MULTI(BASE),scale_multi_val)(
 1307 	__isl_take MULTI(BASE) *multi, __isl_take isl_multi_val *mv)
 1319 	multi = FN(MULTI(BASE),cow)(multi);
 1336 	return FN(MULTI(BASE),free)(multi);
 1342 __isl_give MULTI(BASE) *FN(MULTI(BASE),scale_down_multi_val)(
 1342 __isl_give MULTI(BASE) *FN(MULTI(BASE),scale_down_multi_val)(
 1343 	__isl_take MULTI(BASE) *multi, __isl_take isl_multi_val *mv)
 1355 	multi = FN(MULTI(BASE),cow)(multi);
 1372 	return FN(MULTI(BASE),free)(multi);
 1378 __isl_give MULTI(BASE) *FN(MULTI(BASE),mod_multi_val)(
 1378 __isl_give MULTI(BASE) *FN(MULTI(BASE),mod_multi_val)(
 1379 	__isl_take MULTI(BASE) *multi, __isl_take isl_multi_val *mv)
 1391 	multi = FN(MULTI(BASE),cow)(multi);
 1408 	return FN(MULTI(BASE),free)(multi);
 1477 __isl_give MULTI(BASE) *FN(MULTI(BASE),from_range)(
 1477 __isl_give MULTI(BASE) *FN(MULTI(BASE),from_range)(
 1478 	__isl_take MULTI(BASE) *multi)
 1485 		isl_die(FN(MULTI(BASE),get_ctx)(multi), isl_error_invalid,
 1487 			return FN(MULTI(BASE),free)(multi));
 1489 	space = FN(MULTI(BASE),get_space)(multi);
 1491 	multi = FN(MULTI(BASE),reset_space)(multi, space);
 1498 isl_bool FN(MULTI(BASE),plain_is_equal)(__isl_keep MULTI(BASE) *multi1,
 1498 isl_bool FN(MULTI(BASE),plain_is_equal)(__isl_keep MULTI(BASE) *multi1,
 1499 	__isl_keep MULTI(BASE) *multi2)
 1518 	if (FN(MULTI(BASE),has_explicit_domain)(multi1) ||
 1519 	    FN(MULTI(BASE),has_explicit_domain)(multi2)) {
 1520 		equal = FN(MULTI(BASE),equal_explicit_domain)(multi1, multi2);
 1530 isl_bool FN(MULTI(BASE),involves_nan)(__isl_keep MULTI(BASE) *multi)
 1530 isl_bool FN(MULTI(BASE),involves_nan)(__isl_keep MULTI(BASE) *multi)
 1583 __isl_give MULTI(BASE) *FN(MULTI(BASE),neg)(__isl_take MULTI(BASE) *multi)
 1583 __isl_give MULTI(BASE) *FN(MULTI(BASE),neg)(__isl_take MULTI(BASE) *multi)
 1583 __isl_give MULTI(BASE) *FN(MULTI(BASE),neg)(__isl_take MULTI(BASE) *multi)
 1587 	multi = FN(MULTI(BASE),cow)(multi);
 1594 			return FN(MULTI(BASE),free)(multi);