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

References

tools/polly/lib/External/isl/isl_multi_dims.c
   19 isl_bool FN(MULTI(BASE),involves_dims)(__isl_keep MULTI(BASE) *multi,
   19 isl_bool FN(MULTI(BASE),involves_dims)(__isl_keep MULTI(BASE) *multi,
   37 	if (FN(MULTI(BASE),has_explicit_domain)(multi))
   38 		return FN(MULTI(BASE),involves_explicit_domain_dims)(multi,
   44 __isl_give MULTI(BASE) *FN(MULTI(BASE),insert_dims)(
   44 __isl_give MULTI(BASE) *FN(MULTI(BASE),insert_dims)(
   45 	__isl_take MULTI(BASE) *multi,
   53 		isl_die(FN(MULTI(BASE),get_ctx)(multi), isl_error_invalid,
   55 			return FN(MULTI(BASE),free)(multi));
   59 	multi = FN(MULTI(BASE),cow)(multi);
   65 		return FN(MULTI(BASE),free)(multi);
   66 	if (FN(MULTI(BASE),has_explicit_domain)(multi))
   67 		multi = FN(MULTI(BASE),insert_explicit_domain_dims)(multi,
   76 			return FN(MULTI(BASE),free)(multi);
   82 __isl_give MULTI(BASE) *FN(MULTI(BASE),add_dims)(__isl_take MULTI(BASE) *multi,
   82 __isl_give MULTI(BASE) *FN(MULTI(BASE),add_dims)(__isl_take MULTI(BASE) *multi,
   82 __isl_give MULTI(BASE) *FN(MULTI(BASE),add_dims)(__isl_take MULTI(BASE) *multi,
   87 	pos = FN(MULTI(BASE),dim)(multi, type);
   89 	return FN(MULTI(BASE),insert_dims)(multi, type, pos, n);
   95 __isl_give MULTI(BASE) *FN(MULTI(BASE),project_domain_on_params)(
   95 __isl_give MULTI(BASE) *FN(MULTI(BASE),project_domain_on_params)(
   96 	__isl_take MULTI(BASE) *multi)
  102 	n = FN(MULTI(BASE),dim)(multi, isl_dim_in);
  103 	involves = FN(MULTI(BASE),involves_dims)(multi, isl_dim_in, 0, n);
  105 		return FN(MULTI(BASE),free)(multi);
  107 		isl_die(FN(MULTI(BASE),get_ctx)(multi), isl_error_invalid,
  109 		    return FN(MULTI(BASE),free)(multi));
  110 	multi = FN(MULTI(BASE),drop_dims)(multi, isl_dim_in, 0, n);
  111 	space = FN(MULTI(BASE),get_domain_space)(multi);
  113 	multi = FN(MULTI(BASE),reset_domain_space)(multi, space);
tools/polly/lib/External/isl/isl_multi_no_explicit_domain.c
   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)
   29 static __isl_give MULTI(BASE) *FN(MULTI(BASE),init_explicit_domain)(
   29 static __isl_give MULTI(BASE) *FN(MULTI(BASE),init_explicit_domain)(
   30 	__isl_take MULTI(BASE) *multi)
   38 static __isl_give MULTI(BASE) *FN(MULTI(BASE),intersect_explicit_domain)(
   38 static __isl_give MULTI(BASE) *FN(MULTI(BASE),intersect_explicit_domain)(
   39 	__isl_take MULTI(BASE) *dst, __isl_keep MULTI(BASE) *src)
   39 	__isl_take MULTI(BASE) *dst, __isl_keep MULTI(BASE) *src)
   48 static __isl_give MULTI(BASE) *FN(MULTI(BASE),copy_explicit_domain)(
   48 static __isl_give MULTI(BASE) *FN(MULTI(BASE),copy_explicit_domain)(
   49 	__isl_take MULTI(BASE) *dst, __isl_keep MULTI(BASE) *src)
   49 	__isl_take MULTI(BASE) *dst, __isl_keep MULTI(BASE) *src)
   61 static __isl_give MULTI(BASE) *
   62 FN(MULTI(BASE),intersect_explicit_domain_product)(
   63 	__isl_take MULTI(BASE) *dst, __isl_keep MULTI(BASE) *src1,
   63 	__isl_take MULTI(BASE) *dst, __isl_keep MULTI(BASE) *src1,
   64 	__isl_keep MULTI(BASE) *src2)
   72 static __isl_give MULTI(BASE) *FN(MULTI(BASE),align_explicit_domain_params)(
   72 static __isl_give MULTI(BASE) *FN(MULTI(BASE),align_explicit_domain_params)(
   73 	__isl_take MULTI(BASE) *multi, __isl_take isl_space *space)
   83 static __isl_give MULTI(BASE) *FN(MULTI(BASE),reset_explicit_domain_space)(
   83 static __isl_give MULTI(BASE) *FN(MULTI(BASE),reset_explicit_domain_space)(
   84 	__isl_take MULTI(BASE) *multi, __isl_take isl_space *space)
   95 isl_bool FN(MULTI(BASE),involves_explicit_domain_dims)(
   96 	__isl_keep MULTI(BASE) *multi,
  106 __isl_give MULTI(BASE) *FN(MULTI(BASE),insert_explicit_domain_dims)(
  106 __isl_give MULTI(BASE) *FN(MULTI(BASE),insert_explicit_domain_dims)(
  107 	__isl_take MULTI(BASE) *multi,
  117 __isl_give MULTI(BASE) *FN(MULTI(BASE),drop_explicit_domain_dims)(
  117 __isl_give MULTI(BASE) *FN(MULTI(BASE),drop_explicit_domain_dims)(
  118 	__isl_take MULTI(BASE) *multi,
  128 __isl_give MULTI(BASE) *FN(MULTI(BASE),move_explicit_domain_dims)(
  128 __isl_give MULTI(BASE) *FN(MULTI(BASE),move_explicit_domain_dims)(
  129 	__isl_take MULTI(BASE) *multi,
  139 static void FN(MULTI(BASE),free_explicit_domain)(__isl_keep MULTI(BASE) *multi)
  139 static void FN(MULTI(BASE),free_explicit_domain)(__isl_keep MULTI(BASE) *multi)
  147 static isl_bool FN(MULTI(BASE),equal_explicit_domain)(
  148 	__isl_keep MULTI(BASE) *multi1, __isl_keep MULTI(BASE) *multi2)
  148 	__isl_keep MULTI(BASE) *multi1, __isl_keep MULTI(BASE) *multi2)
  153 static isl_stat FN(MULTI(BASE),check_explicit_domain)(
  154 	__isl_keep MULTI(BASE) *multi) __attribute__ ((unused));
  161 static isl_stat FN(MULTI(BASE),check_explicit_domain)(
  162 	__isl_keep MULTI(BASE) *multi)
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);
  649 __isl_give MULTI(BASE) *FN(MULTI(BASE),zero)(__isl_take isl_space *space)
  649 __isl_give MULTI(BASE) *FN(MULTI(BASE),zero)(__isl_take isl_space *space)
  652 	MULTI(BASE) *multi;
  658 	multi = FN(MULTI(BASE),alloc)(isl_space_copy(space));
  672 			multi = FN(FN(MULTI(BASE),set),BASE)(multi, i,
  672 			multi = FN(FN(MULTI(BASE),set),BASE)(multi, i,
  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);
  943 __isl_give MULTI(BASE) *FN(MULTI(BASE),product_aligned)(
  943 __isl_give MULTI(BASE) *FN(MULTI(BASE),product_aligned)(
  944 	__isl_take MULTI(BASE) *multi1, __isl_take MULTI(BASE) *multi2)
  944 	__isl_take MULTI(BASE) *multi1, __isl_take MULTI(BASE) *multi2)
  949 	MULTI(BASE) *res;
  952 	in1 = FN(MULTI(BASE),dim)(multi1, isl_dim_in);
  953 	in2 = FN(MULTI(BASE),dim)(multi2, isl_dim_in);
  954 	out1 = FN(MULTI(BASE),dim)(multi1, isl_dim_out);
  955 	out2 = FN(MULTI(BASE),dim)(multi2, isl_dim_out);
  956 	space = isl_space_product(FN(MULTI(BASE),get_space)(multi1),
  957 				  FN(MULTI(BASE),get_space)(multi2));
  958 	res = FN(MULTI(BASE),alloc)(isl_space_copy(space));
  962 		el = FN(FN(MULTI(BASE),get),BASE)(multi1, i);
  962 		el = FN(FN(MULTI(BASE),get),BASE)(multi1, i);
  965 		res = FN(FN(MULTI(BASE),set),BASE)(res, i, el);
  965 		res = FN(FN(MULTI(BASE),set),BASE)(res, i, el);
  969 		el = FN(FN(MULTI(BASE),get),BASE)(multi2, i);
  969 		el = FN(FN(MULTI(BASE),get),BASE)(multi2, i);
  972 		res = FN(FN(MULTI(BASE),set),BASE)(res, out1 + i, el);
  972 		res = FN(FN(MULTI(BASE),set),BASE)(res, out1 + i, el);
  975 	if (FN(MULTI(BASE),has_explicit_domain)(multi1) ||
  976 	    FN(MULTI(BASE),has_explicit_domain)(multi2))
  977 		res = FN(MULTI(BASE),intersect_explicit_domain_product)(res,
  981 	FN(MULTI(BASE),free)(multi1);
  982 	FN(MULTI(BASE),free)(multi2);
  989 __isl_give MULTI(BASE) *FN(MULTI(BASE),product)(
  989 __isl_give MULTI(BASE) *FN(MULTI(BASE),product)(
  990 	__isl_take MULTI(BASE) *multi1, __isl_take MULTI(BASE) *multi2)
  990 	__isl_take MULTI(BASE) *multi1, __isl_take MULTI(BASE) *multi2)
  992 	return FN(MULTI(BASE),align_params_multi_multi_and)(multi1, multi2,
  993 					&FN(MULTI(BASE),product_aligned));
  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);
 1095 __isl_give MULTI(BASE) *FN(MULTI(BASE),splice)(
 1095 __isl_give MULTI(BASE) *FN(MULTI(BASE),splice)(
 1096 	__isl_take MULTI(BASE) *multi1, unsigned in_pos, unsigned out_pos,
 1097 	__isl_take MULTI(BASE) *multi2)
 1105 	n_in1 = FN(MULTI(BASE),dim)(multi1, isl_dim_in);
 1107 		isl_die(FN(MULTI(BASE),get_ctx)(multi1), isl_error_invalid,
 1110 	n_in2 = FN(MULTI(BASE),dim)(multi2, isl_dim_in);
 1112 	multi1 = FN(MULTI(BASE),insert_dims)(multi1, isl_dim_in, in_pos, n_in2);
 1113 	multi2 = FN(MULTI(BASE),insert_dims)(multi2, isl_dim_in, n_in2,
 1115 	multi2 = FN(MULTI(BASE),insert_dims)(multi2, isl_dim_in, 0, in_pos);
 1117 	return FN(MULTI(BASE),range_splice)(multi1, out_pos, multi2);
 1119 	FN(MULTI(BASE),free)(multi1);
 1120 	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);