xref: /llvm-project/polly/lib/External/isl/isl_pw_print_templ.c (revision a749e09e184b2b0b6dde71af01c82dd427b3e3e2)
1 /*
2  * Copyright 2011      Sven Verdoolaege
3  *
4  * Use of this software is governed by the MIT license
5  *
6  * Written by Sven Verdoolaege.
7  */
8 
9 #undef EL
10 #define EL CAT(isl_,BASE)
11 #undef PW
12 #define PW CAT(isl_pw_,BASE)
13 
14 /* Print the body of a piecewise expression, i.e., a semicolon delimited
15  * sequence of expressions, each followed by constraints.
16  */
FN(print_body_pw,BASE)17 static __isl_give isl_printer *FN(print_body_pw,BASE)(
18 	__isl_take isl_printer *p, __isl_keep PW *pw)
19 {
20 	int i;
21 
22 	if (!pw)
23 		return isl_printer_free(p);
24 
25 	for (i = 0; i < pw->n; ++i) {
26 		EL *el;
27 		isl_space *space;
28 
29 		if (i)
30 			p = isl_printer_print_str(p, "; ");
31 		el = FN(PW,peek_base_at)(pw, i);
32 		p = FN(print_body,BASE)(p, el);
33 		space = FN(EL,get_domain_space)(el);
34 		p = print_disjuncts(set_to_map(pw->p[i].set), space, p, 0);
35 		isl_space_free(space);
36 	}
37 	return p;
38 }
39 
40 /* Print a piecewise expression in isl format.
41  */
FN(FN (print_pw,BASE),isl)42 static __isl_give isl_printer *FN(FN(print_pw,BASE),isl)(
43 	__isl_take isl_printer *p, __isl_keep PW *pw)
44 {
45 	struct isl_print_space_data data = { 0 };
46 
47 	if (!pw)
48 		return isl_printer_free(p);
49 
50 	p = print_param_tuple(p, pw->dim, &data);
51 	p = isl_printer_print_str(p, "{ ");
52 	p = FN(print_body_pw,BASE)(p, pw);
53 	p = isl_printer_print_str(p, " }");
54 	return p;
55 }
56