xref: /netbsd-src/external/mit/isl/dist/isl_project_out_param_templ.c (revision 5971e316fdea024efff6be8f03536623db06833e)
1 /*
2  * Copyright 2019      Cerebras Systems
3  *
4  * Use of this software is governed by the MIT license
5  *
6  * Written by Sven Verdoolaege,
7  * Cerebras Systems, 175 S San Antonio Rd, Los Altos, CA, USA
8  */
9 
10 #define xFN(TYPE,NAME) TYPE ## _ ## NAME
11 #define FN(TYPE,NAME) xFN(TYPE,NAME)
12 
13 /* If "obj" involves a parameter with identifier "id",
14  * then turn it into an existentially quantified variable.
15  */
FN(TYPE,project_out_param_id)16 __isl_give TYPE *FN(TYPE,project_out_param_id)(__isl_take TYPE *obj,
17 	__isl_take isl_id *id)
18 {
19 	int pos;
20 
21 	if (!obj || !id)
22 		goto error;
23 	pos = FN(TYPE,find_dim_by_id)(obj, isl_dim_param, id);
24 	isl_id_free(id);
25 	if (pos < 0)
26 		return obj;
27 	return FN(TYPE,project_out)(obj, isl_dim_param, pos, 1);
28 error:
29 	FN(TYPE,free)(obj);
30 	isl_id_free(id);
31 	return NULL;
32 }
33 
34 /* If "obj" involves any of the parameters with identifiers in "list",
35  * then turn them into existentially quantified variables.
36  */
FN(TYPE,project_out_param_id_list)37 __isl_give TYPE *FN(TYPE,project_out_param_id_list)(__isl_take TYPE *obj,
38 	__isl_take isl_id_list *list)
39 {
40 	int i;
41 	isl_size n;
42 
43 	n = isl_id_list_size(list);
44 	if (n < 0)
45 		goto error;
46 	for (i = 0; i < n; ++i) {
47 		isl_id *id;
48 
49 		id = isl_id_list_get_at(list, i);
50 		obj = FN(TYPE,project_out_param_id)(obj, id);
51 	}
52 
53 	isl_id_list_free(list);
54 	return obj;
55 error:
56 	isl_id_list_free(list);
57 	FN(TYPE,free)(obj);
58 	return NULL;
59 }
60