Home | History | Annotate | Download | only in cloog
      1 
      2    /**-------------------------------------------------------------------**
      3     **                               CLooG                               **
      4     **-------------------------------------------------------------------**
      5     **                             options.h                             **
      6     **-------------------------------------------------------------------**
      7     **                  First version: april 19th 2003                   **
      8     **-------------------------------------------------------------------**/
      9 
     10 
     11 /******************************************************************************
     12  *               CLooG : the Chunky Loop Generator (experimental)             *
     13  ******************************************************************************
     14  *                                                                            *
     15  * Copyright (C) 2001-2005 Cedric Bastoul                                     *
     16  *                                                                            *
     17  * This library is free software; you can redistribute it and/or              *
     18  * modify it under the terms of the GNU Lesser General Public                 *
     19  * License as published by the Free Software Foundation; either               *
     20  * version 2.1 of the License, or (at your option) any later version.         *
     21  *                                                                            *
     22  * This library is distributed in the hope that it will be useful,            *
     23  * but WITHOUT ANY WARRANTY; without even the implied warranty of             *
     24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU          *
     25  * Lesser General Public License for more details.                            *
     26  *                                                                            *
     27  * You should have received a copy of the GNU Lesser General Public           *
     28  * License along with this library; if not, write to the Free Software        *
     29  * Foundation, Inc., 51 Franklin Street, Fifth Floor,                         *
     30  * Boston, MA  02110-1301  USA                                                *
     31  *                                                                            *
     32  * CLooG, the Chunky Loop Generator                                           *
     33  * Written by Cedric Bastoul, Cedric.Bastoul (at) inria.fr                         *
     34  *                                                                            *
     35  ******************************************************************************/
     36 
     37 #include <stdio.h>
     38 
     39 #ifndef CLOOG_OPTIONS_H
     40 #define CLOOG_OPTIONS_H
     41 #if defined(__cplusplus)
     42 extern "C"
     43   {
     44 #endif
     45 
     46 
     47 /* Uncomment the following line if you want some information about
     48  * maximum total allocated memory for code generation.
     49 #define CLOOG_MEMORY
     50  */
     51 #define CLOOG_SCALARS
     52 
     53 struct osl_scop;
     54 
     55 struct cloogoptions;
     56 typedef struct cloogoptions CloogOptions;
     57 struct osl_scop;
     58 
     59 struct cloogoptions
     60 {
     61   CloogState *state; /* State. */
     62   /* OPTIONS FOR LOOP GENERATION */
     63   int l ;           /* Last level to optimize. */
     64   int f ;           /* First level to optimize. */
     65 
     66   int *ls;         /* Last level to optimize (statement-wise). */
     67   int *fs;         /* First level to optimize (statement-wise). */
     68   int fs_ls_size;  /* Size of the fs and ls arrays (same size) */
     69   int stop ;        /* Level to stop code generation. */
     70   int strides ;     /* 1 if user wants to handle non-unit strides (then loop
     71                      * increment can be something else than one), 0 otherwise.
     72                      */
     73   int sh;	    /* 1 for computing simple hulls */
     74   int first_unroll; /* The first dimension to unroll */
     75 
     76   /* OPTIONS FOR PRETTY PRINTING */
     77   int esp ;       /* 1 if user wants to spread all equalities, i.e. when there
     78                    * is something like "i = 3*j + 1 ; A[i] = 0 ;" the generator
     79                    * will write "A[3*j + 1] = 0 ;", 0 otherwise.
     80                    */
     81   int fsp ;       /* The iteration level where equalities spreading can begin
     82                    * (it might happen that the user wants not to spread values
     83                    * of scattering iterators).
     84                    */
     85   int otl ;       /* 1 for eliminate loops running just one time and write them
     86                    * as an affectation of the iterator, 0 otherwise.
     87                    */
     88   int block ;     /* 1 to make one new block {...} per new dimension,
     89                    * 0 otherwise.
     90                    */
     91   int compilable; /* 1 to generate a compilable code by using
     92                    * preprocessing, 0 otherwise.
     93                    */
     94   int callable;   /* 1 to generate callable code by using
     95                    * preprocessing, 0 otherwise.
     96                    */
     97   int language;   /* 1 to generate FORTRAN, 0 for C otherwise. */
     98 
     99   int save_domains;/* Save unsimplified copy of domain. */
    100 
    101   /* MISC OPTIONS */
    102   char * name ;   /* Name of the input file. */
    103   float time ;    /* Time spent for code generation in seconds. */
    104   int openscop;   /* 1 if the input file has OpenScop format, 0 otherwise. */
    105   struct osl_scop *scop; /* Input OpenScop scop if any, NULL otherwise. */
    106 #ifdef CLOOG_MEMORY
    107   int memory ;    /* Memory spent for code generation in kilobytes. */
    108 #endif
    109   int quiet;      /* Don't print any informational messages. */
    110   /* UNDOCUMENTED OPTIONS FOR THE AUTHOR ONLY */
    111   int leaks ;     /* 1 if I want to print the allocation statistics,
    112                    * 0 otherwise.
    113 		   */
    114   int backtrack;  /* 1 to perform backtracking in
    115                    * Quillere's algorithm, 0 otherwise.
    116 		   */
    117   int override ;  /* 1 if I want to bypass CLooG decisions on option correctness
    118                    * (generated code may be incorrect), 0 otherwise.
    119 		   */
    120   int structure ; /* 1 if I want to print the CloogProgram structure before the
    121                    * pretty printed code, 0 otherwise.
    122 		   */
    123   int noblocks ;  /* 1 if I don't want to make statement blocks, 0 otherwise. */
    124   int noscalars ; /* 1 if I don't want to use scalar dimensions, 0 otherwise. */
    125   int nosimplify; /* 1 if I don't want to simplify polyhedra, 0 otherwise. */
    126 } ;
    127 
    128 
    129 /******************************************************************************
    130  *                          Error reporting functions                         *
    131  ******************************************************************************/
    132 
    133 enum cloog_msg_type { CLOOG_ERROR, CLOOG_WARNING, CLOOG_INFO };
    134 
    135 void cloog_msg(CloogOptions *options, enum cloog_msg_type type,
    136 		const char *msg, ...);
    137 void cloog_die(const char *msg, ...);
    138 
    139 
    140 /******************************************************************************
    141  *                          Structure display function                        *
    142  ******************************************************************************/
    143 void cloog_options_print(FILE *, CloogOptions *) ;
    144 
    145 
    146 /******************************************************************************
    147  *                         Memory deallocation function                       *
    148  ******************************************************************************/
    149 void cloog_options_free(CloogOptions *) ;
    150 
    151 
    152 /******************************************************************************
    153  *                               Reading function                             *
    154  ******************************************************************************/
    155 void cloog_options_read(CloogState *state, int argc, char **argv,
    156 			FILE **input, FILE **output, CloogOptions **options);
    157 
    158 
    159 /******************************************************************************
    160  *                            Processing functions                            *
    161  ******************************************************************************/
    162 CloogOptions *cloog_options_malloc(CloogState *state);
    163 void cloog_options_copy_from_osl_scop(struct osl_scop *, CloogOptions *);
    164 
    165 
    166 #if defined(__cplusplus)
    167   }
    168 #endif
    169 #endif /* define _H */
    170