/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/tools/polly/lib/External/isl/include/isl/hmap_templ.c
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Copyright 2011 INRIA Saclay |
3 | | * Copyright 2013 Ecole Normale Superieure |
4 | | * |
5 | | * Use of this software is governed by the MIT license |
6 | | * |
7 | | * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France, |
8 | | * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod, |
9 | | * 91893 Orsay, France |
10 | | * and Ecole Normale Superieure, 45 rue d’Ulm, 75230 Paris, France |
11 | | */ |
12 | | |
13 | | #include <isl/ctx.h> |
14 | | #include <isl/hash.h> |
15 | | |
16 | | #define ISL_xCAT(A,B) A ## B |
17 | | #define ISL_CAT(A,B) ISL_xCAT(A,B) |
18 | 7.75k | #define ISL_xFN(TYPE,NAME) TYPE ## _ ## NAME |
19 | 7.75k | #define ISL_FN(TYPE,NAME) ISL_xFN(TYPE,NAME) |
20 | 3.46k | #define ISL_xS(TYPE1,TYPE2,NAME) struct isl_ ## TYPE1 ## _ ## TYPE2 ## _ ## NAME |
21 | 3.46k | #define ISL_yS(TYPE1,TYPE2,NAME) ISL_xS(TYPE1,TYPE2,NAME) |
22 | 3.46k | #define ISL_S(NAME) ISL_yS(ISL_KEY,ISL_VAL,NAME) |
23 | | |
24 | | struct ISL_HMAP { |
25 | | int ref; |
26 | | isl_ctx *ctx; |
27 | | struct isl_hash_table table; |
28 | | }; |
29 | | |
30 | | ISL_S(pair) { |
31 | | ISL_KEY *key; |
32 | | ISL_VAL *val; |
33 | | }; |
34 | | |
35 | | __isl_give ISL_HMAP *ISL_FN(ISL_HMAP,alloc)(isl_ctx *ctx, int min_size) |
36 | 1.58k | { |
37 | 1.58k | ISL_HMAP *hmap; |
38 | 1.58k | |
39 | 1.58k | hmap = isl_calloc_type(ctx, ISL_HMAP); |
40 | 1.58k | if (!hmap) |
41 | 0 | return NULL; |
42 | 1.58k | |
43 | 1.58k | hmap->ctx = ctx; |
44 | 1.58k | isl_ctx_ref(ctx); |
45 | 1.58k | hmap->ref = 1; |
46 | 1.58k | |
47 | 1.58k | if (isl_hash_table_init(ctx, &hmap->table, min_size) < 0) |
48 | 0 | return ISL_FN(ISL_HMAP,free)(hmap); |
49 | 1.58k | |
50 | 1.58k | return hmap; |
51 | 1.58k | } Line | Count | Source | 36 | 533 | { | 37 | 533 | ISL_HMAP *hmap; | 38 | 533 | | 39 | 533 | hmap = isl_calloc_type(ctx, ISL_HMAP); | 40 | 533 | if (!hmap) | 41 | 0 | return NULL; | 42 | 533 | | 43 | 533 | hmap->ctx = ctx; | 44 | 533 | isl_ctx_ref(ctx); | 45 | 533 | hmap->ref = 1; | 46 | 533 | | 47 | 533 | if (isl_hash_table_init(ctx, &hmap->table, min_size) < 0) | 48 | 0 | return ISL_FN(ISL_HMAP,free)(hmap); | 49 | 533 | | 50 | 533 | return hmap; | 51 | 533 | } |
Unexecuted instantiation: isl_id_to_id_alloc isl_map_to_basic_set_alloc Line | Count | Source | 36 | 1.04k | { | 37 | 1.04k | ISL_HMAP *hmap; | 38 | 1.04k | | 39 | 1.04k | hmap = isl_calloc_type(ctx, ISL_HMAP); | 40 | 1.04k | if (!hmap) | 41 | 0 | return NULL; | 42 | 1.04k | | 43 | 1.04k | hmap->ctx = ctx; | 44 | 1.04k | isl_ctx_ref(ctx); | 45 | 1.04k | hmap->ref = 1; | 46 | 1.04k | | 47 | 1.04k | if (isl_hash_table_init(ctx, &hmap->table, min_size) < 0) | 48 | 0 | return ISL_FN(ISL_HMAP,free)(hmap); | 49 | 1.04k | | 50 | 1.04k | return hmap; | 51 | 1.04k | } |
|
52 | | |
53 | | static isl_stat free_pair(void **entry, void *user) |
54 | 504 | { |
55 | 504 | ISL_S(pair) *pair = *entry; |
56 | 504 | ISL_FN(ISL_KEY,free)(pair->key); |
57 | 504 | ISL_FN(ISL_VAL,free)(pair->val); |
58 | 504 | free(pair); |
59 | 504 | *entry = NULL; |
60 | 504 | return isl_stat_ok; |
61 | 504 | } isl_id_to_ast_expr.c:free_pair Line | Count | Source | 54 | 225 | { | 55 | 225 | ISL_S(pair) *pair = *entry; | 56 | 225 | ISL_FN(ISL_KEY,free)(pair->key); | 57 | 225 | ISL_FN(ISL_VAL,free)(pair->val); | 58 | 225 | free(pair); | 59 | 225 | *entry = NULL; | 60 | 225 | return isl_stat_ok; | 61 | 225 | } |
Unexecuted instantiation: isl_id_to_id.c:free_pair isl_map_to_basic_set.c:free_pair Line | Count | Source | 54 | 279 | { | 55 | 279 | ISL_S(pair) *pair = *entry; | 56 | 279 | ISL_FN(ISL_KEY,free)(pair->key); | 57 | 279 | ISL_FN(ISL_VAL,free)(pair->val); | 58 | 279 | free(pair); | 59 | 279 | *entry = NULL; | 60 | 279 | return isl_stat_ok; | 61 | 279 | } |
|
62 | | |
63 | | __isl_null ISL_HMAP *ISL_FN(ISL_HMAP,free)(__isl_take ISL_HMAP *hmap) |
64 | 9.92k | { |
65 | 9.92k | if (!hmap) |
66 | 8.34k | return NULL; |
67 | 1.58k | if (--hmap->ref > 0) |
68 | 0 | return NULL; |
69 | 1.58k | isl_hash_table_foreach(hmap->ctx, &hmap->table, &free_pair, NULL); |
70 | 1.58k | isl_hash_table_clear(&hmap->table); |
71 | 1.58k | isl_ctx_deref(hmap->ctx); |
72 | 1.58k | free(hmap); |
73 | 1.58k | return NULL; |
74 | 1.58k | } Line | Count | Source | 64 | 533 | { | 65 | 533 | if (!hmap) | 66 | 0 | return NULL; | 67 | 533 | if (--hmap->ref > 0) | 68 | 0 | return NULL; | 69 | 533 | isl_hash_table_foreach(hmap->ctx, &hmap->table, &free_pair, NULL); | 70 | 533 | isl_hash_table_clear(&hmap->table); | 71 | 533 | isl_ctx_deref(hmap->ctx); | 72 | 533 | free(hmap); | 73 | 533 | return NULL; | 74 | 533 | } |
Line | Count | Source | 64 | 8.28k | { | 65 | 8.28k | if (!hmap) | 66 | 8.28k | return NULL; | 67 | 0 | if (--hmap->ref > 0) | 68 | 0 | return NULL; | 69 | 0 | isl_hash_table_foreach(hmap->ctx, &hmap->table, &free_pair, NULL); | 70 | 0 | isl_hash_table_clear(&hmap->table); | 71 | 0 | isl_ctx_deref(hmap->ctx); | 72 | 0 | free(hmap); | 73 | 0 | return NULL; | 74 | 0 | } |
isl_map_to_basic_set_free Line | Count | Source | 64 | 1.10k | { | 65 | 1.10k | if (!hmap) | 66 | 54 | return NULL; | 67 | 1.04k | if (--hmap->ref > 0) | 68 | 0 | return NULL; | 69 | 1.04k | isl_hash_table_foreach(hmap->ctx, &hmap->table, &free_pair, NULL); | 70 | 1.04k | isl_hash_table_clear(&hmap->table); | 71 | 1.04k | isl_ctx_deref(hmap->ctx); | 72 | 1.04k | free(hmap); | 73 | 1.04k | return NULL; | 74 | 1.04k | } |
|
75 | | |
76 | | isl_ctx *ISL_FN(ISL_HMAP,get_ctx)(__isl_keep ISL_HMAP *hmap) |
77 | 0 | { |
78 | 0 | return hmap ? hmap->ctx : NULL; |
79 | 0 | } Unexecuted instantiation: isl_id_to_ast_expr_get_ctx Unexecuted instantiation: isl_id_to_id_get_ctx Unexecuted instantiation: isl_map_to_basic_set_get_ctx |
80 | | |
81 | | /* Add a mapping from "key" to "val" to the associative array |
82 | | * pointed to by user. |
83 | | */ |
84 | | static isl_stat add_key_val(__isl_take ISL_KEY *key, __isl_take ISL_VAL *val, |
85 | | void *user) |
86 | 0 | { |
87 | 0 | ISL_HMAP **hmap = (ISL_HMAP **) user; |
88 | 0 |
|
89 | 0 | *hmap = ISL_FN(ISL_HMAP,set)(*hmap, key, val); |
90 | 0 |
|
91 | 0 | if (!*hmap) |
92 | 0 | return isl_stat_error; |
93 | 0 | |
94 | 0 | return isl_stat_ok; |
95 | 0 | } Unexecuted instantiation: isl_id_to_ast_expr.c:add_key_val Unexecuted instantiation: isl_id_to_id.c:add_key_val Unexecuted instantiation: isl_map_to_basic_set.c:add_key_val |
96 | | |
97 | | __isl_give ISL_HMAP *ISL_FN(ISL_HMAP,dup)(__isl_keep ISL_HMAP *hmap) |
98 | 0 | { |
99 | 0 | ISL_HMAP *dup; |
100 | 0 |
|
101 | 0 | if (!hmap) |
102 | 0 | return NULL; |
103 | 0 | |
104 | 0 | dup = ISL_FN(ISL_HMAP,alloc)(hmap->ctx, hmap->table.n); |
105 | 0 | if (ISL_FN(ISL_HMAP,foreach)(hmap, &add_key_val, &dup) < 0) |
106 | 0 | return ISL_FN(ISL_HMAP,free)(dup); |
107 | 0 |
|
108 | 0 | return dup; |
109 | 0 | } Unexecuted instantiation: isl_id_to_ast_expr_dup Unexecuted instantiation: isl_id_to_id_dup Unexecuted instantiation: isl_map_to_basic_set_dup |
110 | | |
111 | | __isl_give ISL_HMAP *ISL_FN(ISL_HMAP,cow)(__isl_take ISL_HMAP *hmap) |
112 | 504 | { |
113 | 504 | if (!hmap) |
114 | 0 | return NULL; |
115 | 504 | |
116 | 504 | if (hmap->ref == 1) |
117 | 504 | return hmap; |
118 | 0 | hmap->ref--; |
119 | 0 | return ISL_FN(ISL_HMAP,dup)(hmap); |
120 | 0 | } Line | Count | Source | 112 | 225 | { | 113 | 225 | if (!hmap) | 114 | 0 | return NULL; | 115 | 225 | | 116 | 225 | if (hmap->ref == 1) | 117 | 225 | return hmap; | 118 | 0 | hmap->ref--; | 119 | 0 | return ISL_FN(ISL_HMAP,dup)(hmap); | 120 | 0 | } |
Unexecuted instantiation: isl_id_to_id_cow Line | Count | Source | 112 | 279 | { | 113 | 279 | if (!hmap) | 114 | 0 | return NULL; | 115 | 279 | | 116 | 279 | if (hmap->ref == 1) | 117 | 279 | return hmap; | 118 | 0 | hmap->ref--; | 119 | 0 | return ISL_FN(ISL_HMAP,dup)(hmap); | 120 | 0 | } |
|
121 | | |
122 | | __isl_give ISL_HMAP *ISL_FN(ISL_HMAP,copy)(__isl_keep ISL_HMAP *hmap) |
123 | 0 | { |
124 | 0 | if (!hmap) |
125 | 0 | return NULL; |
126 | 0 | |
127 | 0 | hmap->ref++; |
128 | 0 | return hmap; |
129 | 0 | } Unexecuted instantiation: isl_id_to_ast_expr_copy Unexecuted instantiation: isl_id_to_id_copy Unexecuted instantiation: isl_map_to_basic_set_copy |
130 | | |
131 | | static int has_key(const void *entry, const void *c_key) |
132 | 1.59k | { |
133 | 1.59k | const ISL_S(pair) *pair = entry; |
134 | 1.59k | ISL_KEY *key = (ISL_KEY *) c_key; |
135 | 1.59k | |
136 | 1.59k | return ISL_KEY_IS_EQUAL(pair->key, key); |
137 | 1.59k | } isl_id_to_ast_expr.c:has_key Line | Count | Source | 132 | 251 | { | 133 | 251 | const ISL_S(pair) *pair = entry; | 134 | 251 | ISL_KEY *key = (ISL_KEY *) c_key; | 135 | 251 | | 136 | 251 | return ISL_KEY_IS_EQUAL(pair->key, key); | 137 | 251 | } |
Unexecuted instantiation: isl_id_to_id.c:has_key isl_map_to_basic_set.c:has_key Line | Count | Source | 132 | 1.34k | { | 133 | 1.34k | const ISL_S(pair) *pair = entry; | 134 | 1.34k | ISL_KEY *key = (ISL_KEY *) c_key; | 135 | 1.34k | | 136 | 1.34k | return ISL_KEY_IS_EQUAL(pair->key, key); | 137 | 1.34k | } |
|
138 | | |
139 | | /* If "hmap" contains a value associated to "key", then return |
140 | | * (isl_bool_true, copy of value). |
141 | | * Otherwise, return |
142 | | * (isl_bool_false, NULL). |
143 | | * If an error occurs, then return |
144 | | * (isl_bool_error, NULL). |
145 | | */ |
146 | | __isl_give ISL_MAYBE(ISL_VAL) ISL_FN(ISL_HMAP,try_get)( |
147 | | __isl_keep ISL_HMAP *hmap, __isl_keep ISL_KEY *key) |
148 | 2.45k | { |
149 | 2.45k | struct isl_hash_table_entry *entry; |
150 | 2.45k | ISL_S(pair) *pair; |
151 | 2.45k | uint32_t hash; |
152 | 2.45k | ISL_MAYBE(ISL_VAL) res = { isl_bool_false, NULL }; |
153 | 2.45k | |
154 | 2.45k | if (!hmap || !key) |
155 | 0 | goto error; |
156 | 2.45k | |
157 | 2.45k | hash = ISL_FN(ISL_KEY,get_hash)(key); |
158 | 2.45k | entry = isl_hash_table_find(hmap->ctx, &hmap->table, hash, |
159 | 2.45k | &has_key, key, 0); |
160 | 2.45k | |
161 | 2.45k | if (!entry) |
162 | 884 | return res; |
163 | 1.56k | |
164 | 1.56k | pair = entry->data; |
165 | 1.56k | |
166 | 1.56k | res.valid = isl_bool_true; |
167 | 1.56k | res.value = ISL_FN(ISL_VAL,copy)(pair->val); |
168 | 1.56k | if (!res.value) |
169 | 0 | res.valid = isl_bool_error; |
170 | 1.56k | return res; |
171 | 1.56k | error: |
172 | 0 | res.valid = isl_bool_error; |
173 | 0 | res.value = NULL; |
174 | 0 | return res; |
175 | 1.56k | } isl_id_to_ast_expr_try_get Line | Count | Source | 148 | 856 | { | 149 | 856 | struct isl_hash_table_entry *entry; | 150 | 856 | ISL_S(pair) *pair; | 151 | 856 | uint32_t hash; | 152 | 856 | ISL_MAYBE(ISL_VAL) res = { isl_bool_false, NULL }; | 153 | 856 | | 154 | 856 | if (!hmap || !key) | 155 | 0 | goto error; | 156 | 856 | | 157 | 856 | hash = ISL_FN(ISL_KEY,get_hash)(key); | 158 | 856 | entry = isl_hash_table_find(hmap->ctx, &hmap->table, hash, | 159 | 856 | &has_key, key, 0); | 160 | 856 | | 161 | 856 | if (!entry) | 162 | 605 | return res; | 163 | 251 | | 164 | 251 | pair = entry->data; | 165 | 251 | | 166 | 251 | res.valid = isl_bool_true; | 167 | 251 | res.value = ISL_FN(ISL_VAL,copy)(pair->val); | 168 | 251 | if (!res.value) | 169 | 0 | res.valid = isl_bool_error; | 170 | 251 | return res; | 171 | 251 | error: | 172 | 0 | res.valid = isl_bool_error; | 173 | 0 | res.value = NULL; | 174 | 0 | return res; | 175 | 251 | } |
Unexecuted instantiation: isl_id_to_id_try_get isl_map_to_basic_set_try_get Line | Count | Source | 148 | 1.59k | { | 149 | 1.59k | struct isl_hash_table_entry *entry; | 150 | 1.59k | ISL_S(pair) *pair; | 151 | 1.59k | uint32_t hash; | 152 | 1.59k | ISL_MAYBE(ISL_VAL) res = { isl_bool_false, NULL }; | 153 | 1.59k | | 154 | 1.59k | if (!hmap || !key) | 155 | 0 | goto error; | 156 | 1.59k | | 157 | 1.59k | hash = ISL_FN(ISL_KEY,get_hash)(key); | 158 | 1.59k | entry = isl_hash_table_find(hmap->ctx, &hmap->table, hash, | 159 | 1.59k | &has_key, key, 0); | 160 | 1.59k | | 161 | 1.59k | if (!entry) | 162 | 279 | return res; | 163 | 1.31k | | 164 | 1.31k | pair = entry->data; | 165 | 1.31k | | 166 | 1.31k | res.valid = isl_bool_true; | 167 | 1.31k | res.value = ISL_FN(ISL_VAL,copy)(pair->val); | 168 | 1.31k | if (!res.value) | 169 | 0 | res.valid = isl_bool_error; | 170 | 1.31k | return res; | 171 | 1.31k | error: | 172 | 0 | res.valid = isl_bool_error; | 173 | 0 | res.value = NULL; | 174 | 0 | return res; | 175 | 1.31k | } |
|
176 | | |
177 | | /* If "hmap" contains a value associated to "key", then return |
178 | | * isl_bool_true. Otherwise, return isl_bool_false. |
179 | | * Return isl_bool_error on error. |
180 | | */ |
181 | | isl_bool ISL_FN(ISL_HMAP,has)(__isl_keep ISL_HMAP *hmap, |
182 | | __isl_keep ISL_KEY *key) |
183 | 0 | { |
184 | 0 | ISL_MAYBE(ISL_VAL) res; |
185 | 0 |
|
186 | 0 | res = ISL_FN(ISL_HMAP,try_get)(hmap, key); |
187 | 0 | ISL_FN(ISL_VAL,free)(res.value); |
188 | 0 |
|
189 | 0 | return res.valid; |
190 | 0 | } Unexecuted instantiation: isl_id_to_ast_expr_has Unexecuted instantiation: isl_id_to_id_has Unexecuted instantiation: isl_map_to_basic_set_has |
191 | | |
192 | | /* If "hmap" contains a value associated to "key", then return |
193 | | * a copy of that value. Otherwise, return NULL. |
194 | | * Return NULL on error. |
195 | | */ |
196 | | __isl_give ISL_VAL *ISL_FN(ISL_HMAP,get)(__isl_keep ISL_HMAP *hmap, |
197 | | __isl_take ISL_KEY *key) |
198 | 856 | { |
199 | 856 | ISL_VAL *res; |
200 | 856 | |
201 | 856 | res = ISL_FN(ISL_HMAP,try_get)(hmap, key).value; |
202 | 856 | ISL_FN(ISL_KEY,free)(key); |
203 | 856 | return res; |
204 | 856 | } Line | Count | Source | 198 | 856 | { | 199 | 856 | ISL_VAL *res; | 200 | 856 | | 201 | 856 | res = ISL_FN(ISL_HMAP,try_get)(hmap, key).value; | 202 | 856 | ISL_FN(ISL_KEY,free)(key); | 203 | 856 | return res; | 204 | 856 | } |
Unexecuted instantiation: isl_id_to_id_get Unexecuted instantiation: isl_map_to_basic_set_get |
205 | | |
206 | | /* Remove the mapping between "key" and its associated value (if any) |
207 | | * from "hmap". |
208 | | * |
209 | | * If "key" is not mapped to anything, then we leave "hmap" untouched" |
210 | | */ |
211 | | __isl_give ISL_HMAP *ISL_FN(ISL_HMAP,drop)(__isl_take ISL_HMAP *hmap, |
212 | | __isl_take ISL_KEY *key) |
213 | 0 | { |
214 | 0 | struct isl_hash_table_entry *entry; |
215 | 0 | ISL_S(pair) *pair; |
216 | 0 | uint32_t hash; |
217 | 0 |
|
218 | 0 | if (!hmap || !key) |
219 | 0 | goto error; |
220 | 0 | |
221 | 0 | hash = ISL_FN(ISL_KEY,get_hash)(key); |
222 | 0 | entry = isl_hash_table_find(hmap->ctx, &hmap->table, hash, |
223 | 0 | &has_key, key, 0); |
224 | 0 | if (!entry) { |
225 | 0 | ISL_FN(ISL_KEY,free)(key); |
226 | 0 | return hmap; |
227 | 0 | } |
228 | 0 |
|
229 | 0 | hmap = ISL_FN(ISL_HMAP,cow)(hmap); |
230 | 0 | if (!hmap) |
231 | 0 | goto error; |
232 | 0 | entry = isl_hash_table_find(hmap->ctx, &hmap->table, hash, |
233 | 0 | &has_key, key, 0); |
234 | 0 | ISL_FN(ISL_KEY,free)(key); |
235 | 0 |
|
236 | 0 | if (!entry) |
237 | 0 | isl_die(hmap->ctx, isl_error_internal, |
238 | 0 | "missing entry" , goto error); |
239 | 0 |
|
240 | 0 | pair = entry->data; |
241 | 0 | isl_hash_table_remove(hmap->ctx, &hmap->table, entry); |
242 | 0 | ISL_FN(ISL_KEY,free)(pair->key); |
243 | 0 | ISL_FN(ISL_VAL,free)(pair->val); |
244 | 0 | free(pair); |
245 | 0 |
|
246 | 0 | return hmap; |
247 | 0 | error: |
248 | 0 | ISL_FN(ISL_KEY,free)(key); |
249 | 0 | ISL_FN(ISL_HMAP,free)(hmap); |
250 | 0 | return NULL; |
251 | 0 | } Unexecuted instantiation: isl_id_to_ast_expr_drop Unexecuted instantiation: isl_id_to_id_drop Unexecuted instantiation: isl_map_to_basic_set_drop |
252 | | |
253 | | /* Add a mapping from "key" to "val" to "hmap". |
254 | | * If "key" was already mapped to something else, then that mapping |
255 | | * is replaced. |
256 | | * If key happened to be mapped to "val" already, then we leave |
257 | | * "hmap" untouched. |
258 | | */ |
259 | | __isl_give ISL_HMAP *ISL_FN(ISL_HMAP,set)(__isl_take ISL_HMAP *hmap, |
260 | | __isl_take ISL_KEY *key, __isl_take ISL_VAL *val) |
261 | 504 | { |
262 | 504 | struct isl_hash_table_entry *entry; |
263 | 504 | ISL_S(pair) *pair; |
264 | 504 | uint32_t hash; |
265 | 504 | |
266 | 504 | if (!hmap || !key || !val) |
267 | 0 | goto error; |
268 | 504 | |
269 | 504 | hash = ISL_FN(ISL_KEY,get_hash)(key); |
270 | 504 | entry = isl_hash_table_find(hmap->ctx, &hmap->table, hash, |
271 | 504 | &has_key, key, 0); |
272 | 504 | if (entry) { |
273 | 0 | int equal; |
274 | 0 | pair = entry->data; |
275 | 0 | equal = ISL_VAL_IS_EQUAL(pair->val, val); |
276 | 0 | if (equal < 0) |
277 | 0 | goto error; |
278 | 0 | if (equal) { |
279 | 0 | ISL_FN(ISL_KEY,free)(key); |
280 | 0 | ISL_FN(ISL_VAL,free)(val); |
281 | 0 | return hmap; |
282 | 0 | } |
283 | 504 | } |
284 | 504 | |
285 | 504 | hmap = ISL_FN(ISL_HMAP,cow)(hmap); |
286 | 504 | if (!hmap) |
287 | 0 | goto error; |
288 | 504 | |
289 | 504 | entry = isl_hash_table_find(hmap->ctx, &hmap->table, hash, |
290 | 504 | &has_key, key, 1); |
291 | 504 | |
292 | 504 | if (!entry) |
293 | 0 | goto error; |
294 | 504 | |
295 | 504 | if (entry->data) { |
296 | 0 | pair = entry->data; |
297 | 0 | ISL_FN(ISL_VAL,free)(pair->val); |
298 | 0 | pair->val = val; |
299 | 0 | ISL_FN(ISL_KEY,free)(key); |
300 | 0 | return hmap; |
301 | 0 | } |
302 | 504 | |
303 | 504 | pair = isl_alloc_type(hmap->ctx, ISL_S(pair)); |
304 | 504 | if (!pair) |
305 | 0 | goto error; |
306 | 504 | |
307 | 504 | entry->data = pair; |
308 | 504 | pair->key = key; |
309 | 504 | pair->val = val; |
310 | 504 | return hmap; |
311 | 504 | error: |
312 | 0 | ISL_FN(ISL_KEY,free)(key); |
313 | 0 | ISL_FN(ISL_VAL,free)(val); |
314 | 0 | return ISL_FN(ISL_HMAP,free)(hmap); |
315 | 504 | } Line | Count | Source | 261 | 225 | { | 262 | 225 | struct isl_hash_table_entry *entry; | 263 | 225 | ISL_S(pair) *pair; | 264 | 225 | uint32_t hash; | 265 | 225 | | 266 | 225 | if (!hmap || !key || !val) | 267 | 0 | goto error; | 268 | 225 | | 269 | 225 | hash = ISL_FN(ISL_KEY,get_hash)(key); | 270 | 225 | entry = isl_hash_table_find(hmap->ctx, &hmap->table, hash, | 271 | 225 | &has_key, key, 0); | 272 | 225 | if (entry) { | 273 | 0 | int equal; | 274 | 0 | pair = entry->data; | 275 | 0 | equal = ISL_VAL_IS_EQUAL(pair->val, val); | 276 | 0 | if (equal < 0) | 277 | 0 | goto error; | 278 | 0 | if (equal) { | 279 | 0 | ISL_FN(ISL_KEY,free)(key); | 280 | 0 | ISL_FN(ISL_VAL,free)(val); | 281 | 0 | return hmap; | 282 | 0 | } | 283 | 225 | } | 284 | 225 | | 285 | 225 | hmap = ISL_FN(ISL_HMAP,cow)(hmap); | 286 | 225 | if (!hmap) | 287 | 0 | goto error; | 288 | 225 | | 289 | 225 | entry = isl_hash_table_find(hmap->ctx, &hmap->table, hash, | 290 | 225 | &has_key, key, 1); | 291 | 225 | | 292 | 225 | if (!entry) | 293 | 0 | goto error; | 294 | 225 | | 295 | 225 | if (entry->data) { | 296 | 0 | pair = entry->data; | 297 | 0 | ISL_FN(ISL_VAL,free)(pair->val); | 298 | 0 | pair->val = val; | 299 | 0 | ISL_FN(ISL_KEY,free)(key); | 300 | 0 | return hmap; | 301 | 0 | } | 302 | 225 | | 303 | 225 | pair = isl_alloc_type(hmap->ctx, ISL_S(pair)); | 304 | 225 | if (!pair) | 305 | 0 | goto error; | 306 | 225 | | 307 | 225 | entry->data = pair; | 308 | 225 | pair->key = key; | 309 | 225 | pair->val = val; | 310 | 225 | return hmap; | 311 | 225 | error: | 312 | 0 | ISL_FN(ISL_KEY,free)(key); | 313 | 0 | ISL_FN(ISL_VAL,free)(val); | 314 | 0 | return ISL_FN(ISL_HMAP,free)(hmap); | 315 | 225 | } |
Unexecuted instantiation: isl_id_to_id_set Line | Count | Source | 261 | 279 | { | 262 | 279 | struct isl_hash_table_entry *entry; | 263 | 279 | ISL_S(pair) *pair; | 264 | 279 | uint32_t hash; | 265 | 279 | | 266 | 279 | if (!hmap || !key || !val) | 267 | 0 | goto error; | 268 | 279 | | 269 | 279 | hash = ISL_FN(ISL_KEY,get_hash)(key); | 270 | 279 | entry = isl_hash_table_find(hmap->ctx, &hmap->table, hash, | 271 | 279 | &has_key, key, 0); | 272 | 279 | if (entry) { | 273 | 0 | int equal; | 274 | 0 | pair = entry->data; | 275 | 0 | equal = ISL_VAL_IS_EQUAL(pair->val, val); | 276 | 0 | if (equal < 0) | 277 | 0 | goto error; | 278 | 0 | if (equal) { | 279 | 0 | ISL_FN(ISL_KEY,free)(key); | 280 | 0 | ISL_FN(ISL_VAL,free)(val); | 281 | 0 | return hmap; | 282 | 0 | } | 283 | 279 | } | 284 | 279 | | 285 | 279 | hmap = ISL_FN(ISL_HMAP,cow)(hmap); | 286 | 279 | if (!hmap) | 287 | 0 | goto error; | 288 | 279 | | 289 | 279 | entry = isl_hash_table_find(hmap->ctx, &hmap->table, hash, | 290 | 279 | &has_key, key, 1); | 291 | 279 | | 292 | 279 | if (!entry) | 293 | 0 | goto error; | 294 | 279 | | 295 | 279 | if (entry->data) { | 296 | 0 | pair = entry->data; | 297 | 0 | ISL_FN(ISL_VAL,free)(pair->val); | 298 | 0 | pair->val = val; | 299 | 0 | ISL_FN(ISL_KEY,free)(key); | 300 | 0 | return hmap; | 301 | 0 | } | 302 | 279 | | 303 | 279 | pair = isl_alloc_type(hmap->ctx, ISL_S(pair)); | 304 | 279 | if (!pair) | 305 | 0 | goto error; | 306 | 279 | | 307 | 279 | entry->data = pair; | 308 | 279 | pair->key = key; | 309 | 279 | pair->val = val; | 310 | 279 | return hmap; | 311 | 279 | error: | 312 | 0 | ISL_FN(ISL_KEY,free)(key); | 313 | 0 | ISL_FN(ISL_VAL,free)(val); | 314 | 0 | return ISL_FN(ISL_HMAP,free)(hmap); | 315 | 279 | } |
|
316 | | |
317 | | /* Internal data structure for isl_map_to_basic_set_foreach. |
318 | | * |
319 | | * fn is the function that should be called on each entry. |
320 | | * user is the user-specified final argument to fn. |
321 | | */ |
322 | | ISL_S(foreach_data) { |
323 | | isl_stat (*fn)(__isl_take ISL_KEY *key, __isl_take ISL_VAL *val, |
324 | | void *user); |
325 | | void *user; |
326 | | }; |
327 | | |
328 | | /* Call data->fn on a copy of the key and value in *entry. |
329 | | */ |
330 | | static isl_stat call_on_copy(void **entry, void *user) |
331 | 0 | { |
332 | 0 | ISL_S(pair) *pair = *entry; |
333 | 0 | ISL_S(foreach_data) *data = (ISL_S(foreach_data) *) user; |
334 | 0 |
|
335 | 0 | return data->fn(ISL_FN(ISL_KEY,copy)(pair->key), |
336 | 0 | ISL_FN(ISL_VAL,copy)(pair->val), data->user); |
337 | 0 | } Unexecuted instantiation: isl_id_to_ast_expr.c:call_on_copy Unexecuted instantiation: isl_id_to_id.c:call_on_copy Unexecuted instantiation: isl_map_to_basic_set.c:call_on_copy |
338 | | |
339 | | /* Call "fn" on each pair of key and value in "hmap". |
340 | | */ |
341 | | isl_stat ISL_FN(ISL_HMAP,foreach)(__isl_keep ISL_HMAP *hmap, |
342 | | isl_stat (*fn)(__isl_take ISL_KEY *key, __isl_take ISL_VAL *val, |
343 | | void *user), |
344 | | void *user) |
345 | 0 | { |
346 | 0 | ISL_S(foreach_data) data = { fn, user }; |
347 | 0 |
|
348 | 0 | if (!hmap) |
349 | 0 | return isl_stat_error; |
350 | 0 | |
351 | 0 | return isl_hash_table_foreach(hmap->ctx, &hmap->table, |
352 | 0 | &call_on_copy, &data); |
353 | 0 | } Unexecuted instantiation: isl_id_to_ast_expr_foreach Unexecuted instantiation: isl_id_to_id_foreach Unexecuted instantiation: isl_map_to_basic_set_foreach |
354 | | |
355 | | /* Internal data structure for print_pair. |
356 | | * |
357 | | * p is the printer on which the associative array is being printed. |
358 | | * first is set if the current key-value pair is the first to be printed. |
359 | | */ |
360 | | ISL_S(print_data) { |
361 | | isl_printer *p; |
362 | | int first; |
363 | | }; |
364 | | |
365 | | /* Print the given key-value pair to data->p. |
366 | | */ |
367 | | static isl_stat print_pair(__isl_take ISL_KEY *key, __isl_take ISL_VAL *val, |
368 | | void *user) |
369 | 0 | { |
370 | 0 | ISL_S(print_data) *data = user; |
371 | 0 |
|
372 | 0 | if (!data->first) |
373 | 0 | data->p = isl_printer_print_str(data->p, ", "); |
374 | 0 | data->p = ISL_KEY_PRINT(data->p, key); |
375 | 0 | data->p = isl_printer_print_str(data->p, ": "); |
376 | 0 | data->p = ISL_VAL_PRINT(data->p, val); |
377 | 0 | data->first = 0; |
378 | 0 |
|
379 | 0 | ISL_FN(ISL_KEY,free)(key); |
380 | 0 | ISL_FN(ISL_VAL,free)(val); |
381 | 0 | return isl_stat_ok; |
382 | 0 | } Unexecuted instantiation: isl_id_to_ast_expr.c:print_pair Unexecuted instantiation: isl_id_to_id.c:print_pair Unexecuted instantiation: isl_map_to_basic_set.c:print_pair |
383 | | |
384 | | /* Print the associative array to "p". |
385 | | */ |
386 | | __isl_give isl_printer *ISL_FN(isl_printer_print,ISL_HMAP_SUFFIX)( |
387 | | __isl_take isl_printer *p, __isl_keep ISL_HMAP *hmap) |
388 | 0 | { |
389 | 0 | ISL_S(print_data) data; |
390 | 0 |
|
391 | 0 | if (!p || !hmap) |
392 | 0 | return isl_printer_free(p); |
393 | 0 | |
394 | 0 | p = isl_printer_print_str(p, "{"); |
395 | 0 | data.p = p; |
396 | 0 | data.first = 1; |
397 | 0 | if (ISL_FN(ISL_HMAP,foreach)(hmap, &print_pair, &data) < 0) |
398 | 0 | data.p = isl_printer_free(data.p); |
399 | 0 | p = data.p; |
400 | 0 | p = isl_printer_print_str(p, "}"); |
401 | 0 |
|
402 | 0 | return p; |
403 | 0 | } Unexecuted instantiation: isl_printer_print_id_to_ast_expr Unexecuted instantiation: isl_printer_print_id_to_id Unexecuted instantiation: isl_printer_print_map_to_basic_set |
404 | | |
405 | | void ISL_FN(ISL_HMAP,dump)(__isl_keep ISL_HMAP *hmap) |
406 | 0 | { |
407 | 0 | isl_printer *printer; |
408 | 0 |
|
409 | 0 | if (!hmap) |
410 | 0 | return; |
411 | 0 | |
412 | 0 | printer = isl_printer_to_file(ISL_FN(ISL_HMAP,get_ctx)(hmap), stderr); |
413 | 0 | printer = ISL_FN(isl_printer_print,ISL_HMAP_SUFFIX)(printer, hmap); |
414 | 0 | printer = isl_printer_end_line(printer); |
415 | 0 |
|
416 | 0 | isl_printer_free(printer); |
417 | 0 | } Unexecuted instantiation: isl_id_to_ast_expr_dump Unexecuted instantiation: isl_id_to_id_dump Unexecuted instantiation: isl_map_to_basic_set_dump |