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 */ 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); 28error: 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 */ 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; 55error: 56 isl_id_list_free(list); 57 FN(TYPE,free)(obj); 58 return NULL; 59} 60