Home | History | Annotate | Line # | Download | only in gcc
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