/**-------------------------------------------------------------------** ** CLooG ** **-------------------------------------------------------------------** ** options.h ** **-------------------------------------------------------------------** ** First version: april 19th 2003 ** **-------------------------------------------------------------------**/ /****************************************************************************** * CLooG : the Chunky Loop Generator (experimental) * ****************************************************************************** * * * Copyright (C) 2001-2005 Cedric Bastoul * * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 51 Franklin Street, Fifth Floor, * * Boston, MA 02110-1301 USA * * * * CLooG, the Chunky Loop Generator * * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr * * * ******************************************************************************/ #include <stdio.h> #ifndef CLOOG_OPTIONS_H #define CLOOG_OPTIONS_H #if defined(__cplusplus) extern "C" { #endif /* Uncomment the following line if you want some information about * maximum total allocated memory for code generation. #define CLOOG_MEMORY */ #define CLOOG_SCALARS struct osl_scop; struct cloogoptions; typedef struct cloogoptions CloogOptions; struct osl_scop; struct cloogoptions { CloogState *state; /* State. */ /* OPTIONS FOR LOOP GENERATION */ int l ; /* Last level to optimize. */ int f ; /* First level to optimize. */ int *ls; /* Last level to optimize (statement-wise). */ int *fs; /* First level to optimize (statement-wise). */ int fs_ls_size; /* Size of the fs and ls arrays (same size) */ int stop ; /* Level to stop code generation. */ int strides ; /* 1 if user wants to handle non-unit strides (then loop * increment can be something else than one), 0 otherwise. */ int sh; /* 1 for computing simple hulls */ int first_unroll; /* The first dimension to unroll */ /* OPTIONS FOR PRETTY PRINTING */ int esp ; /* 1 if user wants to spread all equalities, i.e. when there * is something like "i = 3*j + 1 ; A[i] = 0 ;" the generator * will write "A[3*j + 1] = 0 ;", 0 otherwise. */ int fsp ; /* The iteration level where equalities spreading can begin * (it might happen that the user wants not to spread values * of scattering iterators). */ int otl ; /* 1 for eliminate loops running just one time and write them * as an affectation of the iterator, 0 otherwise. */ int block ; /* 1 to make one new block {...} per new dimension, * 0 otherwise. */ int compilable; /* 1 to generate a compilable code by using * preprocessing, 0 otherwise. */ int callable; /* 1 to generate callable code by using * preprocessing, 0 otherwise. */ int language; /* 1 to generate FORTRAN, 0 for C otherwise. */ int save_domains;/* Save unsimplified copy of domain. */ /* MISC OPTIONS */ char * name ; /* Name of the input file. */ float time ; /* Time spent for code generation in seconds. */ int openscop; /* 1 if the input file has OpenScop format, 0 otherwise. */ struct osl_scop *scop; /* Input OpenScop scop if any, NULL otherwise. */ #ifdef CLOOG_MEMORY int memory ; /* Memory spent for code generation in kilobytes. */ #endif int quiet; /* Don't print any informational messages. */ /* UNDOCUMENTED OPTIONS FOR THE AUTHOR ONLY */ int leaks ; /* 1 if I want to print the allocation statistics, * 0 otherwise. */ int backtrack; /* 1 to perform backtracking in * Quillere's algorithm, 0 otherwise. */ int override ; /* 1 if I want to bypass CLooG decisions on option correctness * (generated code may be incorrect), 0 otherwise. */ int structure ; /* 1 if I want to print the CloogProgram structure before the * pretty printed code, 0 otherwise. */ int noblocks ; /* 1 if I don't want to make statement blocks, 0 otherwise. */ int noscalars ; /* 1 if I don't want to use scalar dimensions, 0 otherwise. */ int nosimplify; /* 1 if I don't want to simplify polyhedra, 0 otherwise. */ } ; /****************************************************************************** * Error reporting functions * ******************************************************************************/ enum cloog_msg_type { CLOOG_ERROR, CLOOG_WARNING, CLOOG_INFO }; void cloog_msg(CloogOptions *options, enum cloog_msg_type type, const char *msg, ...); void cloog_die(const char *msg, ...); /****************************************************************************** * Structure display function * ******************************************************************************/ void cloog_options_print(FILE *, CloogOptions *) ; /****************************************************************************** * Memory deallocation function * ******************************************************************************/ void cloog_options_free(CloogOptions *) ; /****************************************************************************** * Reading function * ******************************************************************************/ void cloog_options_read(CloogState *state, int argc, char **argv, FILE **input, FILE **output, CloogOptions **options); /****************************************************************************** * Processing functions * ******************************************************************************/ CloogOptions *cloog_options_malloc(CloogState *state); void cloog_options_copy_from_osl_scop(struct osl_scop *, CloogOptions *); #if defined(__cplusplus) } #endif #endif /* define _H */