11debfc3dSmrg /* Graphite polyhedral representation.
2*8feb0f0bSmrg Copyright (C) 2009-2020 Free Software Foundation, Inc.
31debfc3dSmrg Contributed by Sebastian Pop <sebastian.pop@amd.com> and
41debfc3dSmrg Tobias Grosser <grosser@fim.uni-passau.de>.
51debfc3dSmrg
61debfc3dSmrg This file is part of GCC.
71debfc3dSmrg
81debfc3dSmrg GCC is free software; you can redistribute it and/or modify
91debfc3dSmrg it under the terms of the GNU General Public License as published by
101debfc3dSmrg the Free Software Foundation; either version 3, or (at your option)
111debfc3dSmrg any later version.
121debfc3dSmrg
131debfc3dSmrg GCC is distributed in the hope that it will be useful,
141debfc3dSmrg but WITHOUT ANY WARRANTY; without even the implied warranty of
151debfc3dSmrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
161debfc3dSmrg GNU General Public License for more details.
171debfc3dSmrg
181debfc3dSmrg You should have received a copy of the GNU General Public License
191debfc3dSmrg along with GCC; see the file COPYING3. If not see
201debfc3dSmrg <http://www.gnu.org/licenses/>. */
211debfc3dSmrg
221debfc3dSmrg #define USES_ISL
231debfc3dSmrg
241debfc3dSmrg #include "config.h"
251debfc3dSmrg
261debfc3dSmrg #ifdef HAVE_isl
271debfc3dSmrg
281debfc3dSmrg #include "system.h"
291debfc3dSmrg #include "coretypes.h"
301debfc3dSmrg #include "backend.h"
311debfc3dSmrg #include "tree.h"
321debfc3dSmrg #include "gimple.h"
331debfc3dSmrg #include "cfghooks.h"
341debfc3dSmrg #include "diagnostic-core.h"
351debfc3dSmrg #include "fold-const.h"
361debfc3dSmrg #include "gimple-iterator.h"
371debfc3dSmrg #include "tree-ssa-loop.h"
381debfc3dSmrg #include "cfgloop.h"
391debfc3dSmrg #include "tree-data-ref.h"
401debfc3dSmrg #include "pretty-print.h"
411debfc3dSmrg #include "gimple-pretty-print.h"
421debfc3dSmrg #include "graphite.h"
43a2dc1f3fSmrg #include "dumpfile.h"
441debfc3dSmrg
451debfc3dSmrg /* Print to STDERR the GMP value VAL. */
461debfc3dSmrg
471debfc3dSmrg DEBUG_FUNCTION void
debug_gmp_value(mpz_t val)481debfc3dSmrg debug_gmp_value (mpz_t val)
491debfc3dSmrg {
501debfc3dSmrg gmp_fprintf (stderr, "%Zd", val);
511debfc3dSmrg }
521debfc3dSmrg
531debfc3dSmrg /* Prints to FILE the iteration domain of PBB. */
541debfc3dSmrg
551debfc3dSmrg void
print_iteration_domain(FILE * file,poly_bb_p pbb)561debfc3dSmrg print_iteration_domain (FILE *file, poly_bb_p pbb)
571debfc3dSmrg {
581debfc3dSmrg print_pbb_domain (file, pbb);
591debfc3dSmrg }
601debfc3dSmrg
611debfc3dSmrg /* Prints to FILE the iteration domains of every PBB of SCOP. */
621debfc3dSmrg
631debfc3dSmrg void
print_iteration_domains(FILE * file,scop_p scop)641debfc3dSmrg print_iteration_domains (FILE *file, scop_p scop)
651debfc3dSmrg {
661debfc3dSmrg int i;
671debfc3dSmrg poly_bb_p pbb;
681debfc3dSmrg
691debfc3dSmrg FOR_EACH_VEC_ELT (scop->pbbs, i, pbb)
701debfc3dSmrg print_iteration_domain (file, pbb);
711debfc3dSmrg }
721debfc3dSmrg
731debfc3dSmrg /* Prints to STDERR the iteration domain of PBB. */
741debfc3dSmrg
751debfc3dSmrg DEBUG_FUNCTION void
debug_iteration_domain(poly_bb_p pbb)761debfc3dSmrg debug_iteration_domain (poly_bb_p pbb)
771debfc3dSmrg {
781debfc3dSmrg print_iteration_domain (stderr, pbb);
791debfc3dSmrg }
801debfc3dSmrg
811debfc3dSmrg /* Prints to STDERR the iteration domains of every PBB of SCOP. */
821debfc3dSmrg
831debfc3dSmrg DEBUG_FUNCTION void
debug_iteration_domains(scop_p scop)841debfc3dSmrg debug_iteration_domains (scop_p scop)
851debfc3dSmrg {
861debfc3dSmrg print_iteration_domains (stderr, scop);
871debfc3dSmrg }
881debfc3dSmrg
891debfc3dSmrg /* Create a new polyhedral data reference and add it to PBB. It is
901debfc3dSmrg defined by its ACCESSES, its TYPE, and the number of subscripts
911debfc3dSmrg NB_SUBSCRIPTS. */
921debfc3dSmrg
931debfc3dSmrg void
new_poly_dr(poly_bb_p pbb,gimple * stmt,enum poly_dr_type type,isl_map * acc,isl_set * subscript_sizes)941debfc3dSmrg new_poly_dr (poly_bb_p pbb, gimple *stmt, enum poly_dr_type type,
951debfc3dSmrg isl_map *acc, isl_set *subscript_sizes)
961debfc3dSmrg {
971debfc3dSmrg static int id = 0;
981debfc3dSmrg poly_dr_p pdr = XNEW (struct poly_dr);
991debfc3dSmrg
1001debfc3dSmrg pdr->stmt = stmt;
1011debfc3dSmrg PDR_ID (pdr) = id++;
1021debfc3dSmrg PDR_NB_REFS (pdr) = 1;
1031debfc3dSmrg PDR_PBB (pdr) = pbb;
1041debfc3dSmrg pdr->accesses = acc;
1051debfc3dSmrg pdr->subscript_sizes = subscript_sizes;
1061debfc3dSmrg PDR_TYPE (pdr) = type;
1071debfc3dSmrg PBB_DRS (pbb).safe_push (pdr);
1081debfc3dSmrg
1091debfc3dSmrg if (dump_file)
1101debfc3dSmrg {
1111debfc3dSmrg fprintf (dump_file, "Converting dr: ");
1121debfc3dSmrg print_pdr (dump_file, pdr);
1131debfc3dSmrg fprintf (dump_file, "To polyhedral representation:\n");
1141debfc3dSmrg fprintf (dump_file, " - access functions: ");
1151debfc3dSmrg print_isl_map (dump_file, acc);
1161debfc3dSmrg fprintf (dump_file, " - subscripts: ");
1171debfc3dSmrg print_isl_set (dump_file, subscript_sizes);
1181debfc3dSmrg }
1191debfc3dSmrg }
1201debfc3dSmrg
1211debfc3dSmrg /* Free polyhedral data reference PDR. */
1221debfc3dSmrg
1231debfc3dSmrg static void
free_poly_dr(poly_dr_p pdr)1241debfc3dSmrg free_poly_dr (poly_dr_p pdr)
1251debfc3dSmrg {
1261debfc3dSmrg isl_map_free (pdr->accesses);
1271debfc3dSmrg isl_set_free (pdr->subscript_sizes);
1281debfc3dSmrg XDELETE (pdr);
1291debfc3dSmrg }
1301debfc3dSmrg
1311debfc3dSmrg /* Create a new polyhedral black box. */
1321debfc3dSmrg
1331debfc3dSmrg poly_bb_p
new_poly_bb(scop_p scop,gimple_poly_bb_p black_box)1341debfc3dSmrg new_poly_bb (scop_p scop, gimple_poly_bb_p black_box)
1351debfc3dSmrg {
1361debfc3dSmrg poly_bb_p pbb = XNEW (struct poly_bb);
1371debfc3dSmrg
1381debfc3dSmrg pbb->domain = NULL;
1391debfc3dSmrg pbb->iterators = NULL;
1401debfc3dSmrg PBB_SCOP (pbb) = scop;
1411debfc3dSmrg pbb_set_black_box (pbb, black_box);
1421debfc3dSmrg PBB_DRS (pbb).create (3);
1431debfc3dSmrg GBB_PBB ((gimple_poly_bb_p) black_box) = pbb;
1441debfc3dSmrg
1451debfc3dSmrg return pbb;
1461debfc3dSmrg }
1471debfc3dSmrg
1481debfc3dSmrg /* Free polyhedral black box. */
1491debfc3dSmrg
1501debfc3dSmrg static void
free_poly_bb(poly_bb_p pbb)1511debfc3dSmrg free_poly_bb (poly_bb_p pbb)
1521debfc3dSmrg {
1531debfc3dSmrg int i;
1541debfc3dSmrg poly_dr_p pdr;
1551debfc3dSmrg
1561debfc3dSmrg isl_set_free (pbb->domain);
1571debfc3dSmrg pbb->domain = NULL;
1581debfc3dSmrg isl_set_free (pbb->iterators);
1591debfc3dSmrg pbb->iterators = NULL;
1601debfc3dSmrg
1611debfc3dSmrg if (PBB_DRS (pbb).exists ())
1621debfc3dSmrg FOR_EACH_VEC_ELT (PBB_DRS (pbb), i, pdr)
1631debfc3dSmrg free_poly_dr (pdr);
1641debfc3dSmrg
1651debfc3dSmrg PBB_DRS (pbb).release ();
1661debfc3dSmrg XDELETE (pbb);
1671debfc3dSmrg }
1681debfc3dSmrg
1691debfc3dSmrg /* Prints to FILE the polyhedral data reference PDR. */
1701debfc3dSmrg
1711debfc3dSmrg void
print_pdr(FILE * file,poly_dr_p pdr)1721debfc3dSmrg print_pdr (FILE *file, poly_dr_p pdr)
1731debfc3dSmrg {
1741debfc3dSmrg fprintf (file, "pdr_%d (", PDR_ID (pdr));
1751debfc3dSmrg
1761debfc3dSmrg switch (PDR_TYPE (pdr))
1771debfc3dSmrg {
1781debfc3dSmrg case PDR_READ:
1791debfc3dSmrg fprintf (file, "read \n");
1801debfc3dSmrg break;
1811debfc3dSmrg
1821debfc3dSmrg case PDR_WRITE:
1831debfc3dSmrg fprintf (file, "write \n");
1841debfc3dSmrg break;
1851debfc3dSmrg
1861debfc3dSmrg case PDR_MAY_WRITE:
1871debfc3dSmrg fprintf (file, "may_write \n");
1881debfc3dSmrg break;
1891debfc3dSmrg
1901debfc3dSmrg default:
1911debfc3dSmrg gcc_unreachable ();
1921debfc3dSmrg }
1931debfc3dSmrg
1941debfc3dSmrg fprintf (file, "in gimple stmt: ");
195a2dc1f3fSmrg print_gimple_stmt (file, pdr->stmt, 0);
1961debfc3dSmrg fprintf (file, "data accesses: ");
1971debfc3dSmrg print_isl_map (file, pdr->accesses);
1981debfc3dSmrg fprintf (file, "subscript sizes: ");
1991debfc3dSmrg print_isl_set (file, pdr->subscript_sizes);
2001debfc3dSmrg fprintf (file, ")\n");
2011debfc3dSmrg }
2021debfc3dSmrg
2031debfc3dSmrg /* Prints to STDERR the polyhedral data reference PDR. */
2041debfc3dSmrg
2051debfc3dSmrg DEBUG_FUNCTION void
debug_pdr(poly_dr_p pdr)2061debfc3dSmrg debug_pdr (poly_dr_p pdr)
2071debfc3dSmrg {
2081debfc3dSmrg print_pdr (stderr, pdr);
2091debfc3dSmrg }
2101debfc3dSmrg
2111debfc3dSmrg /* Store the GRAPHITE representation of BB. */
2121debfc3dSmrg
2131debfc3dSmrg gimple_poly_bb_p
new_gimple_poly_bb(basic_block bb,vec<data_reference_p> drs,vec<scalar_use> reads,vec<tree> writes)2141debfc3dSmrg new_gimple_poly_bb (basic_block bb, vec<data_reference_p> drs,
2151debfc3dSmrg vec<scalar_use> reads, vec<tree> writes)
2161debfc3dSmrg {
2171debfc3dSmrg gimple_poly_bb_p gbb = XNEW (struct gimple_poly_bb);
2181debfc3dSmrg GBB_BB (gbb) = bb;
2191debfc3dSmrg GBB_DATA_REFS (gbb) = drs;
2201debfc3dSmrg gbb->read_scalar_refs = reads;
2211debfc3dSmrg gbb->write_scalar_refs = writes;
2221debfc3dSmrg GBB_CONDITIONS (gbb).create (0);
2231debfc3dSmrg GBB_CONDITION_CASES (gbb).create (0);
2241debfc3dSmrg
2251debfc3dSmrg return gbb;
2261debfc3dSmrg }
2271debfc3dSmrg
2281debfc3dSmrg /* Frees GBB. */
2291debfc3dSmrg
2301debfc3dSmrg static void
free_gimple_poly_bb(gimple_poly_bb_p gbb)2311debfc3dSmrg free_gimple_poly_bb (gimple_poly_bb_p gbb)
2321debfc3dSmrg {
2331debfc3dSmrg free_data_refs (GBB_DATA_REFS (gbb));
2341debfc3dSmrg GBB_CONDITIONS (gbb).release ();
2351debfc3dSmrg GBB_CONDITION_CASES (gbb).release ();
2361debfc3dSmrg gbb->read_scalar_refs.release ();
2371debfc3dSmrg gbb->write_scalar_refs.release ();
2381debfc3dSmrg XDELETE (gbb);
2391debfc3dSmrg }
2401debfc3dSmrg
2411debfc3dSmrg /* Deletes all gimple bbs in SCOP. */
2421debfc3dSmrg
2431debfc3dSmrg static void
remove_gbbs_in_scop(scop_p scop)2441debfc3dSmrg remove_gbbs_in_scop (scop_p scop)
2451debfc3dSmrg {
2461debfc3dSmrg int i;
2471debfc3dSmrg poly_bb_p pbb;
2481debfc3dSmrg
2491debfc3dSmrg FOR_EACH_VEC_ELT (scop->pbbs, i, pbb)
2501debfc3dSmrg free_gimple_poly_bb (PBB_BLACK_BOX (pbb));
2511debfc3dSmrg }
2521debfc3dSmrg
2531debfc3dSmrg /* Creates a new SCOP containing the region (ENTRY, EXIT). */
2541debfc3dSmrg
2551debfc3dSmrg scop_p
new_scop(edge entry,edge exit)2561debfc3dSmrg new_scop (edge entry, edge exit)
2571debfc3dSmrg {
2581debfc3dSmrg sese_info_p region = new_sese_info (entry, exit);
2591debfc3dSmrg scop_p s = XNEW (struct scop);
2601debfc3dSmrg
2611debfc3dSmrg s->original_schedule = NULL;
2621debfc3dSmrg s->transformed_schedule = NULL;
2631debfc3dSmrg s->param_context = NULL;
2641debfc3dSmrg scop_set_region (s, region);
2651debfc3dSmrg s->pbbs.create (3);
2661debfc3dSmrg s->drs.create (3);
2671debfc3dSmrg s->dependence = NULL;
2681debfc3dSmrg return s;
2691debfc3dSmrg }
2701debfc3dSmrg
2711debfc3dSmrg /* Deletes SCOP. */
2721debfc3dSmrg
2731debfc3dSmrg void
free_scop(scop_p scop)2741debfc3dSmrg free_scop (scop_p scop)
2751debfc3dSmrg {
2761debfc3dSmrg int i;
2771debfc3dSmrg poly_bb_p pbb;
2781debfc3dSmrg
2791debfc3dSmrg remove_gbbs_in_scop (scop);
2801debfc3dSmrg free_sese_info (scop->scop_info);
2811debfc3dSmrg
2821debfc3dSmrg FOR_EACH_VEC_ELT (scop->pbbs, i, pbb)
2831debfc3dSmrg free_poly_bb (pbb);
2841debfc3dSmrg
2851debfc3dSmrg scop->pbbs.release ();
2861debfc3dSmrg scop->drs.release ();
2871debfc3dSmrg
2881debfc3dSmrg isl_set_free (scop->param_context);
2891debfc3dSmrg scop->param_context = NULL;
2901debfc3dSmrg isl_union_map_free (scop->dependence);
2911debfc3dSmrg scop->dependence = NULL;
2921debfc3dSmrg isl_schedule_free (scop->original_schedule);
2931debfc3dSmrg scop->original_schedule = NULL;
2941debfc3dSmrg isl_schedule_free (scop->transformed_schedule);
2951debfc3dSmrg scop->transformed_schedule = NULL;
2961debfc3dSmrg XDELETE (scop);
2971debfc3dSmrg }
2981debfc3dSmrg
2991debfc3dSmrg /* Print to FILE the domain of PBB. */
3001debfc3dSmrg
3011debfc3dSmrg void
print_pbb_domain(FILE * file,poly_bb_p pbb)3021debfc3dSmrg print_pbb_domain (FILE *file, poly_bb_p pbb)
3031debfc3dSmrg {
3041debfc3dSmrg print_isl_set (file, pbb->domain);
3051debfc3dSmrg }
3061debfc3dSmrg
3071debfc3dSmrg /* Dump the cases of a graphite basic block GBB on FILE. */
3081debfc3dSmrg
3091debfc3dSmrg static void
dump_gbb_cases(FILE * file,gimple_poly_bb_p gbb)3101debfc3dSmrg dump_gbb_cases (FILE *file, gimple_poly_bb_p gbb)
3111debfc3dSmrg {
3121debfc3dSmrg int i;
3131debfc3dSmrg gimple *stmt;
3141debfc3dSmrg vec<gimple *> cases;
3151debfc3dSmrg
3161debfc3dSmrg if (!gbb)
3171debfc3dSmrg return;
3181debfc3dSmrg
3191debfc3dSmrg cases = GBB_CONDITION_CASES (gbb);
3201debfc3dSmrg if (cases.is_empty ())
3211debfc3dSmrg return;
3221debfc3dSmrg
3231debfc3dSmrg fprintf (file, "cases bb_%d (\n", GBB_BB (gbb)->index);
3241debfc3dSmrg
3251debfc3dSmrg FOR_EACH_VEC_ELT (cases, i, stmt)
326a2dc1f3fSmrg print_gimple_stmt (file, stmt, 0);
3271debfc3dSmrg
3281debfc3dSmrg fprintf (file, ")\n");
3291debfc3dSmrg }
3301debfc3dSmrg
3311debfc3dSmrg /* Dump conditions of a graphite basic block GBB on FILE. */
3321debfc3dSmrg
3331debfc3dSmrg static void
dump_gbb_conditions(FILE * file,gimple_poly_bb_p gbb)3341debfc3dSmrg dump_gbb_conditions (FILE *file, gimple_poly_bb_p gbb)
3351debfc3dSmrg {
3361debfc3dSmrg int i;
3371debfc3dSmrg gimple *stmt;
3381debfc3dSmrg vec<gimple *> conditions;
3391debfc3dSmrg
3401debfc3dSmrg if (!gbb)
3411debfc3dSmrg return;
3421debfc3dSmrg
3431debfc3dSmrg conditions = GBB_CONDITIONS (gbb);
3441debfc3dSmrg if (conditions.is_empty ())
3451debfc3dSmrg return;
3461debfc3dSmrg
3471debfc3dSmrg fprintf (file, "conditions bb_%d (\n", GBB_BB (gbb)->index);
3481debfc3dSmrg
3491debfc3dSmrg FOR_EACH_VEC_ELT (conditions, i, stmt)
350a2dc1f3fSmrg print_gimple_stmt (file, stmt, 0);
3511debfc3dSmrg
3521debfc3dSmrg fprintf (file, ")\n");
3531debfc3dSmrg }
3541debfc3dSmrg
3551debfc3dSmrg /* Print to FILE all the data references of PBB. */
3561debfc3dSmrg
3571debfc3dSmrg void
print_pdrs(FILE * file,poly_bb_p pbb)3581debfc3dSmrg print_pdrs (FILE *file, poly_bb_p pbb)
3591debfc3dSmrg {
3601debfc3dSmrg int i;
3611debfc3dSmrg poly_dr_p pdr;
3621debfc3dSmrg int nb_reads = 0;
3631debfc3dSmrg int nb_writes = 0;
3641debfc3dSmrg
3651debfc3dSmrg if (PBB_DRS (pbb).is_empty ())
3661debfc3dSmrg return;
3671debfc3dSmrg
3681debfc3dSmrg fprintf (file, "Data references (\n");
3691debfc3dSmrg
3701debfc3dSmrg FOR_EACH_VEC_ELT (PBB_DRS (pbb), i, pdr)
3711debfc3dSmrg if (PDR_TYPE (pdr) == PDR_READ)
3721debfc3dSmrg nb_reads++;
3731debfc3dSmrg else
3741debfc3dSmrg nb_writes++;
3751debfc3dSmrg
3761debfc3dSmrg fprintf (file, "Read data references (\n");
3771debfc3dSmrg
3781debfc3dSmrg FOR_EACH_VEC_ELT (PBB_DRS (pbb), i, pdr)
3791debfc3dSmrg if (PDR_TYPE (pdr) == PDR_READ)
3801debfc3dSmrg print_pdr (file, pdr);
3811debfc3dSmrg
3821debfc3dSmrg fprintf (file, ")\n");
3831debfc3dSmrg fprintf (file, "Write data references (\n");
3841debfc3dSmrg FOR_EACH_VEC_ELT (PBB_DRS (pbb), i, pdr)
3851debfc3dSmrg if (PDR_TYPE (pdr) != PDR_READ)
3861debfc3dSmrg print_pdr (file, pdr);
3871debfc3dSmrg fprintf (file, ")\n");
3881debfc3dSmrg fprintf (file, ")\n");
3891debfc3dSmrg }
3901debfc3dSmrg
3911debfc3dSmrg /* Print to STDERR all the data references of PBB. */
3921debfc3dSmrg
3931debfc3dSmrg DEBUG_FUNCTION void
debug_pdrs(poly_bb_p pbb)3941debfc3dSmrg debug_pdrs (poly_bb_p pbb)
3951debfc3dSmrg {
3961debfc3dSmrg print_pdrs (stderr, pbb);
3971debfc3dSmrg }
3981debfc3dSmrg
3991debfc3dSmrg /* Print to FILE the body of PBB. */
4001debfc3dSmrg
4011debfc3dSmrg static void
print_pbb_body(FILE * file,poly_bb_p pbb)4021debfc3dSmrg print_pbb_body (FILE *file, poly_bb_p pbb)
4031debfc3dSmrg {
4041debfc3dSmrg fprintf (file, "Body (\n");
405c0a68be4Smrg dump_bb (file, pbb_bb (pbb), 0, TDF_NONE);
4061debfc3dSmrg fprintf (file, ")\n");
4071debfc3dSmrg }
4081debfc3dSmrg
4091debfc3dSmrg /* Print to FILE the domain and scattering function of PBB. */
4101debfc3dSmrg
4111debfc3dSmrg void
print_pbb(FILE * file,poly_bb_p pbb)4121debfc3dSmrg print_pbb (FILE *file, poly_bb_p pbb)
4131debfc3dSmrg {
4141debfc3dSmrg fprintf (file, "pbb_%d (\n", pbb_index (pbb));
4151debfc3dSmrg dump_gbb_conditions (file, PBB_BLACK_BOX (pbb));
4161debfc3dSmrg dump_gbb_cases (file, PBB_BLACK_BOX (pbb));
4171debfc3dSmrg
4181debfc3dSmrg print_pbb_domain (file, pbb);
4191debfc3dSmrg print_pdrs (file, pbb);
4201debfc3dSmrg print_pbb_body (file, pbb);
4211debfc3dSmrg
4221debfc3dSmrg fprintf (file, ")\n");
4231debfc3dSmrg }
4241debfc3dSmrg
4251debfc3dSmrg /* Print to FILE the parameters of SCOP. */
4261debfc3dSmrg
4271debfc3dSmrg void
print_scop_params(FILE * file,scop_p scop)4281debfc3dSmrg print_scop_params (FILE *file, scop_p scop)
4291debfc3dSmrg {
4301debfc3dSmrg if (scop->scop_info->params.is_empty ())
4311debfc3dSmrg return;
4321debfc3dSmrg
4331debfc3dSmrg int i;
4341debfc3dSmrg tree t;
4351debfc3dSmrg fprintf (file, "parameters (");
4361debfc3dSmrg FOR_EACH_VEC_ELT (scop->scop_info->params, i, t)
4371debfc3dSmrg {
438a2dc1f3fSmrg print_generic_expr (file, t);
4391debfc3dSmrg fprintf (file, ", ");
4401debfc3dSmrg }
4411debfc3dSmrg fprintf (file, ")\n");
4421debfc3dSmrg }
4431debfc3dSmrg
4441debfc3dSmrg /* Print to FILE the context of SCoP. */
4451debfc3dSmrg
4461debfc3dSmrg void
print_scop_context(FILE * file,scop_p scop)4471debfc3dSmrg print_scop_context (FILE *file, scop_p scop)
4481debfc3dSmrg {
4491debfc3dSmrg if (!scop->param_context)
4501debfc3dSmrg return;
4511debfc3dSmrg
4521debfc3dSmrg fprintf (file, "Context (\n");
4531debfc3dSmrg print_isl_set (file, scop->param_context);
4541debfc3dSmrg fprintf (file, ")\n");
4551debfc3dSmrg }
4561debfc3dSmrg
4571debfc3dSmrg /* Print to FILE the SCOP. */
4581debfc3dSmrg
4591debfc3dSmrg void
print_scop(FILE * file,scop_p scop)4601debfc3dSmrg print_scop (FILE *file, scop_p scop)
4611debfc3dSmrg {
4621debfc3dSmrg int i;
4631debfc3dSmrg poly_bb_p pbb;
4641debfc3dSmrg
4651debfc3dSmrg fprintf (file, "SCoP (\n");
4661debfc3dSmrg print_scop_context (file, scop);
4671debfc3dSmrg print_scop_params (file, scop);
4681debfc3dSmrg
4691debfc3dSmrg fprintf (file, "Number of statements: ");
4701debfc3dSmrg fprintf (file, "%d\n", scop->pbbs.length ());
4711debfc3dSmrg
4721debfc3dSmrg FOR_EACH_VEC_ELT (scop->pbbs, i, pbb)
4731debfc3dSmrg print_pbb (file, pbb);
4741debfc3dSmrg
4751debfc3dSmrg fprintf (file, ")\n");
4761debfc3dSmrg }
4771debfc3dSmrg
4781debfc3dSmrg /* Print to STDERR the domain of PBB. */
4791debfc3dSmrg
4801debfc3dSmrg DEBUG_FUNCTION void
debug_pbb_domain(poly_bb_p pbb)4811debfc3dSmrg debug_pbb_domain (poly_bb_p pbb)
4821debfc3dSmrg {
4831debfc3dSmrg print_pbb_domain (stderr, pbb);
4841debfc3dSmrg }
4851debfc3dSmrg
4861debfc3dSmrg /* Print to FILE the domain and scattering function of PBB. */
4871debfc3dSmrg
4881debfc3dSmrg DEBUG_FUNCTION void
debug_pbb(poly_bb_p pbb)4891debfc3dSmrg debug_pbb (poly_bb_p pbb)
4901debfc3dSmrg {
4911debfc3dSmrg print_pbb (stderr, pbb);
4921debfc3dSmrg }
4931debfc3dSmrg
4941debfc3dSmrg /* Print to STDERR the context of SCOP. */
4951debfc3dSmrg
4961debfc3dSmrg DEBUG_FUNCTION void
debug_scop_context(scop_p scop)4971debfc3dSmrg debug_scop_context (scop_p scop)
4981debfc3dSmrg {
4991debfc3dSmrg print_scop_context (stderr, scop);
5001debfc3dSmrg }
5011debfc3dSmrg
5021debfc3dSmrg /* Print to STDERR the SCOP. */
5031debfc3dSmrg
5041debfc3dSmrg DEBUG_FUNCTION void
debug_scop(scop_p scop)5051debfc3dSmrg debug_scop (scop_p scop)
5061debfc3dSmrg {
5071debfc3dSmrg print_scop (stderr, scop);
5081debfc3dSmrg }
5091debfc3dSmrg
5101debfc3dSmrg /* Print to STDERR the parameters of SCOP. */
5111debfc3dSmrg
5121debfc3dSmrg DEBUG_FUNCTION void
debug_scop_params(scop_p scop)5131debfc3dSmrg debug_scop_params (scop_p scop)
5141debfc3dSmrg {
5151debfc3dSmrg print_scop_params (stderr, scop);
5161debfc3dSmrg }
5171debfc3dSmrg
5181debfc3dSmrg extern isl_ctx *the_isl_ctx;
5191debfc3dSmrg void
print_isl_set(FILE * f,__isl_keep isl_set * set)5201debfc3dSmrg print_isl_set (FILE *f, __isl_keep isl_set *set)
5211debfc3dSmrg {
5221debfc3dSmrg isl_printer *p = isl_printer_to_file (the_isl_ctx, f);
5231debfc3dSmrg p = isl_printer_set_yaml_style (p, ISL_YAML_STYLE_BLOCK);
5241debfc3dSmrg p = isl_printer_print_set (p, set);
5251debfc3dSmrg p = isl_printer_print_str (p, "\n");
5261debfc3dSmrg isl_printer_free (p);
5271debfc3dSmrg }
5281debfc3dSmrg
5291debfc3dSmrg DEBUG_FUNCTION void
debug_isl_set(__isl_keep isl_set * set)5301debfc3dSmrg debug_isl_set (__isl_keep isl_set *set)
5311debfc3dSmrg {
5321debfc3dSmrg print_isl_set (stderr, set);
5331debfc3dSmrg }
5341debfc3dSmrg
5351debfc3dSmrg void
print_isl_map(FILE * f,__isl_keep isl_map * map)5361debfc3dSmrg print_isl_map (FILE *f, __isl_keep isl_map *map)
5371debfc3dSmrg {
5381debfc3dSmrg isl_printer *p = isl_printer_to_file (the_isl_ctx, f);
5391debfc3dSmrg p = isl_printer_set_yaml_style (p, ISL_YAML_STYLE_BLOCK);
5401debfc3dSmrg p = isl_printer_print_map (p, map);
5411debfc3dSmrg p = isl_printer_print_str (p, "\n");
5421debfc3dSmrg isl_printer_free (p);
5431debfc3dSmrg }
5441debfc3dSmrg
5451debfc3dSmrg DEBUG_FUNCTION void
debug_isl_map(__isl_keep isl_map * map)5461debfc3dSmrg debug_isl_map (__isl_keep isl_map *map)
5471debfc3dSmrg {
5481debfc3dSmrg print_isl_map (stderr, map);
5491debfc3dSmrg }
5501debfc3dSmrg
5511debfc3dSmrg void
print_isl_union_map(FILE * f,__isl_keep isl_union_map * map)5521debfc3dSmrg print_isl_union_map (FILE *f, __isl_keep isl_union_map *map)
5531debfc3dSmrg {
5541debfc3dSmrg isl_printer *p = isl_printer_to_file (the_isl_ctx, f);
5551debfc3dSmrg p = isl_printer_set_yaml_style (p, ISL_YAML_STYLE_BLOCK);
5561debfc3dSmrg p = isl_printer_print_union_map (p, map);
5571debfc3dSmrg p = isl_printer_print_str (p, "\n");
5581debfc3dSmrg isl_printer_free (p);
5591debfc3dSmrg }
5601debfc3dSmrg
5611debfc3dSmrg DEBUG_FUNCTION void
debug_isl_union_map(__isl_keep isl_union_map * map)5621debfc3dSmrg debug_isl_union_map (__isl_keep isl_union_map *map)
5631debfc3dSmrg {
5641debfc3dSmrg print_isl_union_map (stderr, map);
5651debfc3dSmrg }
5661debfc3dSmrg
5671debfc3dSmrg void
print_isl_aff(FILE * f,__isl_keep isl_aff * aff)5681debfc3dSmrg print_isl_aff (FILE *f, __isl_keep isl_aff *aff)
5691debfc3dSmrg {
5701debfc3dSmrg isl_printer *p = isl_printer_to_file (the_isl_ctx, f);
5711debfc3dSmrg p = isl_printer_print_aff (p, aff);
5721debfc3dSmrg p = isl_printer_print_str (p, "\n");
5731debfc3dSmrg isl_printer_free (p);
5741debfc3dSmrg }
5751debfc3dSmrg
5761debfc3dSmrg DEBUG_FUNCTION void
debug_isl_aff(__isl_keep isl_aff * aff)5771debfc3dSmrg debug_isl_aff (__isl_keep isl_aff *aff)
5781debfc3dSmrg {
5791debfc3dSmrg print_isl_aff (stderr, aff);
5801debfc3dSmrg }
5811debfc3dSmrg
5821debfc3dSmrg void
print_isl_constraint(FILE * f,__isl_keep isl_constraint * c)5831debfc3dSmrg print_isl_constraint (FILE *f, __isl_keep isl_constraint *c)
5841debfc3dSmrg {
5851debfc3dSmrg isl_printer *p = isl_printer_to_file (the_isl_ctx, f);
5861debfc3dSmrg p = isl_printer_print_constraint (p, c);
5871debfc3dSmrg p = isl_printer_print_str (p, "\n");
5881debfc3dSmrg isl_printer_free (p);
5891debfc3dSmrg }
5901debfc3dSmrg
5911debfc3dSmrg DEBUG_FUNCTION void
debug_isl_constraint(__isl_keep isl_constraint * c)5921debfc3dSmrg debug_isl_constraint (__isl_keep isl_constraint *c)
5931debfc3dSmrg {
5941debfc3dSmrg print_isl_constraint (stderr, c);
5951debfc3dSmrg }
5961debfc3dSmrg
5971debfc3dSmrg void
print_isl_schedule(FILE * f,__isl_keep isl_schedule * s)5981debfc3dSmrg print_isl_schedule (FILE *f, __isl_keep isl_schedule *s)
5991debfc3dSmrg {
6001debfc3dSmrg isl_printer *p = isl_printer_to_file (the_isl_ctx, f);
6011debfc3dSmrg p = isl_printer_set_yaml_style (p, ISL_YAML_STYLE_BLOCK);
6021debfc3dSmrg p = isl_printer_print_schedule (p, s);
6031debfc3dSmrg p = isl_printer_print_str (p, "\n");
6041debfc3dSmrg isl_printer_free (p);
6051debfc3dSmrg }
6061debfc3dSmrg
6071debfc3dSmrg DEBUG_FUNCTION void
debug_isl_schedule(__isl_keep isl_schedule * s)6081debfc3dSmrg debug_isl_schedule (__isl_keep isl_schedule *s)
6091debfc3dSmrg {
6101debfc3dSmrg print_isl_schedule (stderr, s);
6111debfc3dSmrg }
6121debfc3dSmrg
6131debfc3dSmrg void
print_isl_ast(FILE * file,__isl_keep isl_ast_node * n)6141debfc3dSmrg print_isl_ast (FILE *file, __isl_keep isl_ast_node *n)
6151debfc3dSmrg {
6161debfc3dSmrg isl_printer *prn = isl_printer_to_file (the_isl_ctx, file);
6171debfc3dSmrg prn = isl_printer_set_output_format (prn, ISL_FORMAT_C);
6181debfc3dSmrg prn = isl_printer_print_ast_node (prn, n);
6191debfc3dSmrg prn = isl_printer_print_str (prn, "\n");
6201debfc3dSmrg isl_printer_free (prn);
6211debfc3dSmrg }
6221debfc3dSmrg
6231debfc3dSmrg DEBUG_FUNCTION void
debug_isl_ast(isl_ast_node * n)6241debfc3dSmrg debug_isl_ast (isl_ast_node *n)
6251debfc3dSmrg {
6261debfc3dSmrg print_isl_ast (stderr, n);
6271debfc3dSmrg }
6281debfc3dSmrg
6291debfc3dSmrg DEBUG_FUNCTION void
debug_scop_pbb(scop_p scop,int i)6301debfc3dSmrg debug_scop_pbb (scop_p scop, int i)
6311debfc3dSmrg {
6321debfc3dSmrg debug_pbb (scop->pbbs[i]);
6331debfc3dSmrg }
6341debfc3dSmrg
6351debfc3dSmrg #endif /* HAVE_isl */
6361debfc3dSmrg
637