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