graphite-poly.cc revision 1.1 1 1.1 mrg /* Graphite polyhedral representation.
2 1.1 mrg Copyright (C) 2009-2022 Free Software Foundation, Inc.
3 1.1 mrg Contributed by Sebastian Pop <sebastian.pop (at) amd.com> and
4 1.1 mrg Tobias Grosser <grosser (at) fim.uni-passau.de>.
5 1.1 mrg
6 1.1 mrg This file is part of GCC.
7 1.1 mrg
8 1.1 mrg GCC is free software; you can redistribute it and/or modify
9 1.1 mrg it under the terms of the GNU General Public License as published by
10 1.1 mrg the Free Software Foundation; either version 3, or (at your option)
11 1.1 mrg any later version.
12 1.1 mrg
13 1.1 mrg GCC is distributed in the hope that it will be useful,
14 1.1 mrg but WITHOUT ANY WARRANTY; without even the implied warranty of
15 1.1 mrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 1.1 mrg GNU General Public License for more details.
17 1.1 mrg
18 1.1 mrg You should have received a copy of the GNU General Public License
19 1.1 mrg along with GCC; see the file COPYING3. If not see
20 1.1 mrg <http://www.gnu.org/licenses/>. */
21 1.1 mrg
22 1.1 mrg #define INCLUDE_ISL
23 1.1 mrg
24 1.1 mrg #include "config.h"
25 1.1 mrg
26 1.1 mrg #ifdef HAVE_isl
27 1.1 mrg
28 1.1 mrg #include "system.h"
29 1.1 mrg #include "coretypes.h"
30 1.1 mrg #include "backend.h"
31 1.1 mrg #include "tree.h"
32 1.1 mrg #include "gimple.h"
33 1.1 mrg #include "cfghooks.h"
34 1.1 mrg #include "diagnostic-core.h"
35 1.1 mrg #include "fold-const.h"
36 1.1 mrg #include "gimple-iterator.h"
37 1.1 mrg #include "tree-ssa-loop.h"
38 1.1 mrg #include "cfgloop.h"
39 1.1 mrg #include "tree-data-ref.h"
40 1.1 mrg #include "pretty-print.h"
41 1.1 mrg #include "gimple-pretty-print.h"
42 1.1 mrg #include "graphite.h"
43 1.1 mrg #include "dumpfile.h"
44 1.1 mrg
45 1.1 mrg /* Print to STDERR the GMP value VAL. */
46 1.1 mrg
47 1.1 mrg DEBUG_FUNCTION void
48 1.1 mrg debug_gmp_value (mpz_t val)
49 1.1 mrg {
50 1.1 mrg gmp_fprintf (stderr, "%Zd", val);
51 1.1 mrg }
52 1.1 mrg
53 1.1 mrg /* Prints to FILE the iteration domain of PBB. */
54 1.1 mrg
55 1.1 mrg void
56 1.1 mrg print_iteration_domain (FILE *file, poly_bb_p pbb)
57 1.1 mrg {
58 1.1 mrg print_pbb_domain (file, pbb);
59 1.1 mrg }
60 1.1 mrg
61 1.1 mrg /* Prints to FILE the iteration domains of every PBB of SCOP. */
62 1.1 mrg
63 1.1 mrg void
64 1.1 mrg print_iteration_domains (FILE *file, scop_p scop)
65 1.1 mrg {
66 1.1 mrg for (poly_bb_p pbb : scop->pbbs)
67 1.1 mrg print_iteration_domain (file, pbb);
68 1.1 mrg }
69 1.1 mrg
70 1.1 mrg /* Prints to STDERR the iteration domain of PBB. */
71 1.1 mrg
72 1.1 mrg DEBUG_FUNCTION void
73 1.1 mrg debug_iteration_domain (poly_bb_p pbb)
74 1.1 mrg {
75 1.1 mrg print_iteration_domain (stderr, pbb);
76 1.1 mrg }
77 1.1 mrg
78 1.1 mrg /* Prints to STDERR the iteration domains of every PBB of SCOP. */
79 1.1 mrg
80 1.1 mrg DEBUG_FUNCTION void
81 1.1 mrg debug_iteration_domains (scop_p scop)
82 1.1 mrg {
83 1.1 mrg print_iteration_domains (stderr, scop);
84 1.1 mrg }
85 1.1 mrg
86 1.1 mrg /* Create a new polyhedral data reference and add it to PBB. It is
87 1.1 mrg defined by its ACCESSES, its TYPE, and the number of subscripts
88 1.1 mrg NB_SUBSCRIPTS. */
89 1.1 mrg
90 1.1 mrg void
91 1.1 mrg new_poly_dr (poly_bb_p pbb, gimple *stmt, enum poly_dr_type type,
92 1.1 mrg isl_map *acc, isl_set *subscript_sizes)
93 1.1 mrg {
94 1.1 mrg static int id = 0;
95 1.1 mrg poly_dr_p pdr = XNEW (struct poly_dr);
96 1.1 mrg
97 1.1 mrg pdr->stmt = stmt;
98 1.1 mrg PDR_ID (pdr) = id++;
99 1.1 mrg PDR_NB_REFS (pdr) = 1;
100 1.1 mrg PDR_PBB (pdr) = pbb;
101 1.1 mrg pdr->accesses = acc;
102 1.1 mrg pdr->subscript_sizes = subscript_sizes;
103 1.1 mrg PDR_TYPE (pdr) = type;
104 1.1 mrg PBB_DRS (pbb).safe_push (pdr);
105 1.1 mrg
106 1.1 mrg if (dump_file)
107 1.1 mrg {
108 1.1 mrg fprintf (dump_file, "Converting dr: ");
109 1.1 mrg print_pdr (dump_file, pdr);
110 1.1 mrg fprintf (dump_file, "To polyhedral representation:\n");
111 1.1 mrg fprintf (dump_file, " - access functions: ");
112 1.1 mrg print_isl_map (dump_file, acc);
113 1.1 mrg fprintf (dump_file, " - subscripts: ");
114 1.1 mrg print_isl_set (dump_file, subscript_sizes);
115 1.1 mrg }
116 1.1 mrg }
117 1.1 mrg
118 1.1 mrg /* Free polyhedral data reference PDR. */
119 1.1 mrg
120 1.1 mrg static void
121 1.1 mrg free_poly_dr (poly_dr_p pdr)
122 1.1 mrg {
123 1.1 mrg isl_map_free (pdr->accesses);
124 1.1 mrg isl_set_free (pdr->subscript_sizes);
125 1.1 mrg XDELETE (pdr);
126 1.1 mrg }
127 1.1 mrg
128 1.1 mrg /* Create a new polyhedral black box. */
129 1.1 mrg
130 1.1 mrg poly_bb_p
131 1.1 mrg new_poly_bb (scop_p scop, gimple_poly_bb_p black_box)
132 1.1 mrg {
133 1.1 mrg poly_bb_p pbb = XNEW (struct poly_bb);
134 1.1 mrg
135 1.1 mrg pbb->domain = NULL;
136 1.1 mrg pbb->iterators = NULL;
137 1.1 mrg PBB_SCOP (pbb) = scop;
138 1.1 mrg pbb_set_black_box (pbb, black_box);
139 1.1 mrg PBB_DRS (pbb).create (3);
140 1.1 mrg GBB_PBB ((gimple_poly_bb_p) black_box) = pbb;
141 1.1 mrg
142 1.1 mrg return pbb;
143 1.1 mrg }
144 1.1 mrg
145 1.1 mrg /* Free polyhedral black box. */
146 1.1 mrg
147 1.1 mrg static void
148 1.1 mrg free_poly_bb (poly_bb_p pbb)
149 1.1 mrg {
150 1.1 mrg isl_set_free (pbb->domain);
151 1.1 mrg pbb->domain = NULL;
152 1.1 mrg isl_set_free (pbb->iterators);
153 1.1 mrg pbb->iterators = NULL;
154 1.1 mrg
155 1.1 mrg if (PBB_DRS (pbb).exists ())
156 1.1 mrg for (poly_dr_p pdr : PBB_DRS (pbb))
157 1.1 mrg free_poly_dr (pdr);
158 1.1 mrg
159 1.1 mrg PBB_DRS (pbb).release ();
160 1.1 mrg XDELETE (pbb);
161 1.1 mrg }
162 1.1 mrg
163 1.1 mrg /* Prints to FILE the polyhedral data reference PDR. */
164 1.1 mrg
165 1.1 mrg void
166 1.1 mrg print_pdr (FILE *file, poly_dr_p pdr)
167 1.1 mrg {
168 1.1 mrg fprintf (file, "pdr_%d (", PDR_ID (pdr));
169 1.1 mrg
170 1.1 mrg switch (PDR_TYPE (pdr))
171 1.1 mrg {
172 1.1 mrg case PDR_READ:
173 1.1 mrg fprintf (file, "read \n");
174 1.1 mrg break;
175 1.1 mrg
176 1.1 mrg case PDR_WRITE:
177 1.1 mrg fprintf (file, "write \n");
178 1.1 mrg break;
179 1.1 mrg
180 1.1 mrg case PDR_MAY_WRITE:
181 1.1 mrg fprintf (file, "may_write \n");
182 1.1 mrg break;
183 1.1 mrg
184 1.1 mrg default:
185 1.1 mrg gcc_unreachable ();
186 1.1 mrg }
187 1.1 mrg
188 1.1 mrg fprintf (file, "in gimple stmt: ");
189 1.1 mrg print_gimple_stmt (file, pdr->stmt, 0);
190 1.1 mrg fprintf (file, "data accesses: ");
191 1.1 mrg print_isl_map (file, pdr->accesses);
192 1.1 mrg fprintf (file, "subscript sizes: ");
193 1.1 mrg print_isl_set (file, pdr->subscript_sizes);
194 1.1 mrg fprintf (file, ")\n");
195 1.1 mrg }
196 1.1 mrg
197 1.1 mrg /* Prints to STDERR the polyhedral data reference PDR. */
198 1.1 mrg
199 1.1 mrg DEBUG_FUNCTION void
200 1.1 mrg debug_pdr (poly_dr_p pdr)
201 1.1 mrg {
202 1.1 mrg print_pdr (stderr, pdr);
203 1.1 mrg }
204 1.1 mrg
205 1.1 mrg /* Store the GRAPHITE representation of BB. */
206 1.1 mrg
207 1.1 mrg gimple_poly_bb_p
208 1.1 mrg new_gimple_poly_bb (basic_block bb, vec<data_reference_p> drs,
209 1.1 mrg vec<scalar_use> reads, vec<tree> writes)
210 1.1 mrg {
211 1.1 mrg gimple_poly_bb_p gbb = XNEW (struct gimple_poly_bb);
212 1.1 mrg GBB_BB (gbb) = bb;
213 1.1 mrg GBB_DATA_REFS (gbb) = drs;
214 1.1 mrg gbb->read_scalar_refs = reads;
215 1.1 mrg gbb->write_scalar_refs = writes;
216 1.1 mrg GBB_CONDITIONS (gbb).create (0);
217 1.1 mrg GBB_CONDITION_CASES (gbb).create (0);
218 1.1 mrg
219 1.1 mrg return gbb;
220 1.1 mrg }
221 1.1 mrg
222 1.1 mrg /* Frees GBB. */
223 1.1 mrg
224 1.1 mrg static void
225 1.1 mrg free_gimple_poly_bb (gimple_poly_bb_p gbb)
226 1.1 mrg {
227 1.1 mrg free_data_refs (GBB_DATA_REFS (gbb));
228 1.1 mrg GBB_CONDITIONS (gbb).release ();
229 1.1 mrg GBB_CONDITION_CASES (gbb).release ();
230 1.1 mrg gbb->read_scalar_refs.release ();
231 1.1 mrg gbb->write_scalar_refs.release ();
232 1.1 mrg XDELETE (gbb);
233 1.1 mrg }
234 1.1 mrg
235 1.1 mrg /* Deletes all gimple bbs in SCOP. */
236 1.1 mrg
237 1.1 mrg static void
238 1.1 mrg remove_gbbs_in_scop (scop_p scop)
239 1.1 mrg {
240 1.1 mrg for (poly_bb_p pbb : scop->pbbs)
241 1.1 mrg free_gimple_poly_bb (PBB_BLACK_BOX (pbb));
242 1.1 mrg }
243 1.1 mrg
244 1.1 mrg /* Creates a new SCOP containing the region (ENTRY, EXIT). */
245 1.1 mrg
246 1.1 mrg scop_p
247 1.1 mrg new_scop (edge entry, edge exit)
248 1.1 mrg {
249 1.1 mrg sese_info_p region = new_sese_info (entry, exit);
250 1.1 mrg scop_p s = XNEW (struct scop);
251 1.1 mrg
252 1.1 mrg s->original_schedule = NULL;
253 1.1 mrg s->transformed_schedule = NULL;
254 1.1 mrg s->param_context = NULL;
255 1.1 mrg scop_set_region (s, region);
256 1.1 mrg s->pbbs.create (3);
257 1.1 mrg s->drs.create (3);
258 1.1 mrg s->dependence = NULL;
259 1.1 mrg return s;
260 1.1 mrg }
261 1.1 mrg
262 1.1 mrg /* Deletes SCOP. */
263 1.1 mrg
264 1.1 mrg void
265 1.1 mrg free_scop (scop_p scop)
266 1.1 mrg {
267 1.1 mrg remove_gbbs_in_scop (scop);
268 1.1 mrg free_sese_info (scop->scop_info);
269 1.1 mrg
270 1.1 mrg for (poly_bb_p pbb : scop->pbbs)
271 1.1 mrg free_poly_bb (pbb);
272 1.1 mrg
273 1.1 mrg scop->pbbs.release ();
274 1.1 mrg scop->drs.release ();
275 1.1 mrg
276 1.1 mrg isl_set_free (scop->param_context);
277 1.1 mrg scop->param_context = NULL;
278 1.1 mrg isl_union_map_free (scop->dependence);
279 1.1 mrg scop->dependence = NULL;
280 1.1 mrg isl_schedule_free (scop->original_schedule);
281 1.1 mrg scop->original_schedule = NULL;
282 1.1 mrg isl_schedule_free (scop->transformed_schedule);
283 1.1 mrg scop->transformed_schedule = NULL;
284 1.1 mrg XDELETE (scop);
285 1.1 mrg }
286 1.1 mrg
287 1.1 mrg /* Print to FILE the domain of PBB. */
288 1.1 mrg
289 1.1 mrg void
290 1.1 mrg print_pbb_domain (FILE *file, poly_bb_p pbb)
291 1.1 mrg {
292 1.1 mrg print_isl_set (file, pbb->domain);
293 1.1 mrg }
294 1.1 mrg
295 1.1 mrg /* Dump the cases of a graphite basic block GBB on FILE. */
296 1.1 mrg
297 1.1 mrg static void
298 1.1 mrg dump_gbb_cases (FILE *file, gimple_poly_bb_p gbb)
299 1.1 mrg {
300 1.1 mrg vec<gimple *> cases;
301 1.1 mrg
302 1.1 mrg if (!gbb)
303 1.1 mrg return;
304 1.1 mrg
305 1.1 mrg cases = GBB_CONDITION_CASES (gbb);
306 1.1 mrg if (cases.is_empty ())
307 1.1 mrg return;
308 1.1 mrg
309 1.1 mrg fprintf (file, "cases bb_%d (\n", GBB_BB (gbb)->index);
310 1.1 mrg
311 1.1 mrg for (gimple *stmt : cases)
312 1.1 mrg print_gimple_stmt (file, stmt, 0);
313 1.1 mrg
314 1.1 mrg fprintf (file, ")\n");
315 1.1 mrg }
316 1.1 mrg
317 1.1 mrg /* Dump conditions of a graphite basic block GBB on FILE. */
318 1.1 mrg
319 1.1 mrg static void
320 1.1 mrg dump_gbb_conditions (FILE *file, gimple_poly_bb_p gbb)
321 1.1 mrg {
322 1.1 mrg vec<gimple *> conditions;
323 1.1 mrg
324 1.1 mrg if (!gbb)
325 1.1 mrg return;
326 1.1 mrg
327 1.1 mrg conditions = GBB_CONDITIONS (gbb);
328 1.1 mrg if (conditions.is_empty ())
329 1.1 mrg return;
330 1.1 mrg
331 1.1 mrg fprintf (file, "conditions bb_%d (\n", GBB_BB (gbb)->index);
332 1.1 mrg
333 1.1 mrg for (gimple *stmt : conditions)
334 1.1 mrg print_gimple_stmt (file, stmt, 0);
335 1.1 mrg
336 1.1 mrg fprintf (file, ")\n");
337 1.1 mrg }
338 1.1 mrg
339 1.1 mrg /* Print to FILE all the data references of PBB. */
340 1.1 mrg
341 1.1 mrg void
342 1.1 mrg print_pdrs (FILE *file, poly_bb_p pbb)
343 1.1 mrg {
344 1.1 mrg int nb_reads = 0;
345 1.1 mrg int nb_writes = 0;
346 1.1 mrg
347 1.1 mrg if (PBB_DRS (pbb).is_empty ())
348 1.1 mrg return;
349 1.1 mrg
350 1.1 mrg fprintf (file, "Data references (\n");
351 1.1 mrg
352 1.1 mrg for (poly_dr_p pdr : PBB_DRS (pbb))
353 1.1 mrg if (PDR_TYPE (pdr) == PDR_READ)
354 1.1 mrg nb_reads++;
355 1.1 mrg else
356 1.1 mrg nb_writes++;
357 1.1 mrg
358 1.1 mrg fprintf (file, "Read data references (\n");
359 1.1 mrg
360 1.1 mrg for (poly_dr_p pdr : PBB_DRS (pbb))
361 1.1 mrg if (PDR_TYPE (pdr) == PDR_READ)
362 1.1 mrg print_pdr (file, pdr);
363 1.1 mrg
364 1.1 mrg fprintf (file, ")\n");
365 1.1 mrg fprintf (file, "Write data references (\n");
366 1.1 mrg for (poly_dr_p pdr : PBB_DRS (pbb))
367 1.1 mrg if (PDR_TYPE (pdr) != PDR_READ)
368 1.1 mrg print_pdr (file, pdr);
369 1.1 mrg fprintf (file, ")\n");
370 1.1 mrg fprintf (file, ")\n");
371 1.1 mrg }
372 1.1 mrg
373 1.1 mrg /* Print to STDERR all the data references of PBB. */
374 1.1 mrg
375 1.1 mrg DEBUG_FUNCTION void
376 1.1 mrg debug_pdrs (poly_bb_p pbb)
377 1.1 mrg {
378 1.1 mrg print_pdrs (stderr, pbb);
379 1.1 mrg }
380 1.1 mrg
381 1.1 mrg /* Print to FILE the body of PBB. */
382 1.1 mrg
383 1.1 mrg static void
384 1.1 mrg print_pbb_body (FILE *file, poly_bb_p pbb)
385 1.1 mrg {
386 1.1 mrg fprintf (file, "Body (\n");
387 1.1 mrg dump_bb (file, pbb_bb (pbb), 0, TDF_NONE);
388 1.1 mrg fprintf (file, ")\n");
389 1.1 mrg }
390 1.1 mrg
391 1.1 mrg /* Print to FILE the domain and scattering function of PBB. */
392 1.1 mrg
393 1.1 mrg void
394 1.1 mrg print_pbb (FILE *file, poly_bb_p pbb)
395 1.1 mrg {
396 1.1 mrg fprintf (file, "pbb_%d (\n", pbb_index (pbb));
397 1.1 mrg dump_gbb_conditions (file, PBB_BLACK_BOX (pbb));
398 1.1 mrg dump_gbb_cases (file, PBB_BLACK_BOX (pbb));
399 1.1 mrg
400 1.1 mrg print_pbb_domain (file, pbb);
401 1.1 mrg print_pdrs (file, pbb);
402 1.1 mrg print_pbb_body (file, pbb);
403 1.1 mrg
404 1.1 mrg fprintf (file, ")\n");
405 1.1 mrg }
406 1.1 mrg
407 1.1 mrg /* Print to FILE the parameters of SCOP. */
408 1.1 mrg
409 1.1 mrg void
410 1.1 mrg print_scop_params (FILE *file, scop_p scop)
411 1.1 mrg {
412 1.1 mrg if (scop->scop_info->params.is_empty ())
413 1.1 mrg return;
414 1.1 mrg
415 1.1 mrg int i;
416 1.1 mrg tree t;
417 1.1 mrg fprintf (file, "parameters (");
418 1.1 mrg FOR_EACH_VEC_ELT (scop->scop_info->params, i, t)
419 1.1 mrg {
420 1.1 mrg print_generic_expr (file, t);
421 1.1 mrg fprintf (file, ", ");
422 1.1 mrg }
423 1.1 mrg fprintf (file, ")\n");
424 1.1 mrg }
425 1.1 mrg
426 1.1 mrg /* Print to FILE the context of SCoP. */
427 1.1 mrg
428 1.1 mrg void
429 1.1 mrg print_scop_context (FILE *file, scop_p scop)
430 1.1 mrg {
431 1.1 mrg if (!scop->param_context)
432 1.1 mrg return;
433 1.1 mrg
434 1.1 mrg fprintf (file, "Context (\n");
435 1.1 mrg print_isl_set (file, scop->param_context);
436 1.1 mrg fprintf (file, ")\n");
437 1.1 mrg }
438 1.1 mrg
439 1.1 mrg /* Print to FILE the SCOP. */
440 1.1 mrg
441 1.1 mrg void
442 1.1 mrg print_scop (FILE *file, scop_p scop)
443 1.1 mrg {
444 1.1 mrg fprintf (file, "SCoP (\n");
445 1.1 mrg print_scop_context (file, scop);
446 1.1 mrg print_scop_params (file, scop);
447 1.1 mrg
448 1.1 mrg fprintf (file, "Number of statements: ");
449 1.1 mrg fprintf (file, "%d\n", scop->pbbs.length ());
450 1.1 mrg
451 1.1 mrg for (poly_bb_p pbb : scop->pbbs)
452 1.1 mrg print_pbb (file, pbb);
453 1.1 mrg
454 1.1 mrg fprintf (file, ")\n");
455 1.1 mrg }
456 1.1 mrg
457 1.1 mrg /* Print to STDERR the domain of PBB. */
458 1.1 mrg
459 1.1 mrg DEBUG_FUNCTION void
460 1.1 mrg debug_pbb_domain (poly_bb_p pbb)
461 1.1 mrg {
462 1.1 mrg print_pbb_domain (stderr, pbb);
463 1.1 mrg }
464 1.1 mrg
465 1.1 mrg /* Print to FILE the domain and scattering function of PBB. */
466 1.1 mrg
467 1.1 mrg DEBUG_FUNCTION void
468 1.1 mrg debug_pbb (poly_bb_p pbb)
469 1.1 mrg {
470 1.1 mrg print_pbb (stderr, pbb);
471 1.1 mrg }
472 1.1 mrg
473 1.1 mrg /* Print to STDERR the context of SCOP. */
474 1.1 mrg
475 1.1 mrg DEBUG_FUNCTION void
476 1.1 mrg debug_scop_context (scop_p scop)
477 1.1 mrg {
478 1.1 mrg print_scop_context (stderr, scop);
479 1.1 mrg }
480 1.1 mrg
481 1.1 mrg /* Print to STDERR the SCOP. */
482 1.1 mrg
483 1.1 mrg DEBUG_FUNCTION void
484 1.1 mrg debug_scop (scop_p scop)
485 1.1 mrg {
486 1.1 mrg print_scop (stderr, scop);
487 1.1 mrg }
488 1.1 mrg
489 1.1 mrg /* Print to STDERR the parameters of SCOP. */
490 1.1 mrg
491 1.1 mrg DEBUG_FUNCTION void
492 1.1 mrg debug_scop_params (scop_p scop)
493 1.1 mrg {
494 1.1 mrg print_scop_params (stderr, scop);
495 1.1 mrg }
496 1.1 mrg
497 1.1 mrg extern isl_ctx *the_isl_ctx;
498 1.1 mrg void
499 1.1 mrg print_isl_set (FILE *f, __isl_keep isl_set *set)
500 1.1 mrg {
501 1.1 mrg isl_printer *p = isl_printer_to_file (the_isl_ctx, f);
502 1.1 mrg p = isl_printer_set_yaml_style (p, ISL_YAML_STYLE_BLOCK);
503 1.1 mrg p = isl_printer_print_set (p, set);
504 1.1 mrg p = isl_printer_print_str (p, "\n");
505 1.1 mrg isl_printer_free (p);
506 1.1 mrg }
507 1.1 mrg
508 1.1 mrg DEBUG_FUNCTION void
509 1.1 mrg debug_isl_set (__isl_keep isl_set *set)
510 1.1 mrg {
511 1.1 mrg print_isl_set (stderr, set);
512 1.1 mrg }
513 1.1 mrg
514 1.1 mrg void
515 1.1 mrg print_isl_map (FILE *f, __isl_keep isl_map *map)
516 1.1 mrg {
517 1.1 mrg isl_printer *p = isl_printer_to_file (the_isl_ctx, f);
518 1.1 mrg p = isl_printer_set_yaml_style (p, ISL_YAML_STYLE_BLOCK);
519 1.1 mrg p = isl_printer_print_map (p, map);
520 1.1 mrg p = isl_printer_print_str (p, "\n");
521 1.1 mrg isl_printer_free (p);
522 1.1 mrg }
523 1.1 mrg
524 1.1 mrg DEBUG_FUNCTION void
525 1.1 mrg debug_isl_map (__isl_keep isl_map *map)
526 1.1 mrg {
527 1.1 mrg print_isl_map (stderr, map);
528 1.1 mrg }
529 1.1 mrg
530 1.1 mrg void
531 1.1 mrg print_isl_union_map (FILE *f, __isl_keep isl_union_map *map)
532 1.1 mrg {
533 1.1 mrg isl_printer *p = isl_printer_to_file (the_isl_ctx, f);
534 1.1 mrg p = isl_printer_set_yaml_style (p, ISL_YAML_STYLE_BLOCK);
535 1.1 mrg p = isl_printer_print_union_map (p, map);
536 1.1 mrg p = isl_printer_print_str (p, "\n");
537 1.1 mrg isl_printer_free (p);
538 1.1 mrg }
539 1.1 mrg
540 1.1 mrg DEBUG_FUNCTION void
541 1.1 mrg debug_isl_union_map (__isl_keep isl_union_map *map)
542 1.1 mrg {
543 1.1 mrg print_isl_union_map (stderr, map);
544 1.1 mrg }
545 1.1 mrg
546 1.1 mrg void
547 1.1 mrg print_isl_aff (FILE *f, __isl_keep isl_aff *aff)
548 1.1 mrg {
549 1.1 mrg isl_printer *p = isl_printer_to_file (the_isl_ctx, f);
550 1.1 mrg p = isl_printer_print_aff (p, aff);
551 1.1 mrg p = isl_printer_print_str (p, "\n");
552 1.1 mrg isl_printer_free (p);
553 1.1 mrg }
554 1.1 mrg
555 1.1 mrg DEBUG_FUNCTION void
556 1.1 mrg debug_isl_aff (__isl_keep isl_aff *aff)
557 1.1 mrg {
558 1.1 mrg print_isl_aff (stderr, aff);
559 1.1 mrg }
560 1.1 mrg
561 1.1 mrg void
562 1.1 mrg print_isl_constraint (FILE *f, __isl_keep isl_constraint *c)
563 1.1 mrg {
564 1.1 mrg isl_printer *p = isl_printer_to_file (the_isl_ctx, f);
565 1.1 mrg p = isl_printer_print_constraint (p, c);
566 1.1 mrg p = isl_printer_print_str (p, "\n");
567 1.1 mrg isl_printer_free (p);
568 1.1 mrg }
569 1.1 mrg
570 1.1 mrg DEBUG_FUNCTION void
571 1.1 mrg debug_isl_constraint (__isl_keep isl_constraint *c)
572 1.1 mrg {
573 1.1 mrg print_isl_constraint (stderr, c);
574 1.1 mrg }
575 1.1 mrg
576 1.1 mrg void
577 1.1 mrg print_isl_schedule (FILE *f, __isl_keep isl_schedule *s)
578 1.1 mrg {
579 1.1 mrg isl_printer *p = isl_printer_to_file (the_isl_ctx, f);
580 1.1 mrg p = isl_printer_set_yaml_style (p, ISL_YAML_STYLE_BLOCK);
581 1.1 mrg p = isl_printer_print_schedule (p, s);
582 1.1 mrg p = isl_printer_print_str (p, "\n");
583 1.1 mrg isl_printer_free (p);
584 1.1 mrg }
585 1.1 mrg
586 1.1 mrg DEBUG_FUNCTION void
587 1.1 mrg debug_isl_schedule (__isl_keep isl_schedule *s)
588 1.1 mrg {
589 1.1 mrg print_isl_schedule (stderr, s);
590 1.1 mrg }
591 1.1 mrg
592 1.1 mrg void
593 1.1 mrg print_isl_ast (FILE *file, __isl_keep isl_ast_node *n)
594 1.1 mrg {
595 1.1 mrg isl_printer *prn = isl_printer_to_file (the_isl_ctx, file);
596 1.1 mrg prn = isl_printer_set_output_format (prn, ISL_FORMAT_C);
597 1.1 mrg prn = isl_printer_print_ast_node (prn, n);
598 1.1 mrg prn = isl_printer_print_str (prn, "\n");
599 1.1 mrg isl_printer_free (prn);
600 1.1 mrg }
601 1.1 mrg
602 1.1 mrg DEBUG_FUNCTION void
603 1.1 mrg debug_isl_ast (isl_ast_node *n)
604 1.1 mrg {
605 1.1 mrg print_isl_ast (stderr, n);
606 1.1 mrg }
607 1.1 mrg
608 1.1 mrg DEBUG_FUNCTION void
609 1.1 mrg debug_scop_pbb (scop_p scop, int i)
610 1.1 mrg {
611 1.1 mrg debug_pbb (scop->pbbs[i]);
612 1.1 mrg }
613 1.1 mrg
614 1.1 mrg #endif /* HAVE_isl */
615 1.1 mrg
616