/**-------------------------------------------------------------------**
** CLooG **
**-------------------------------------------------------------------**
** program.h **
**-------------------------------------------------------------------**
** First version: october 25th 2001 **
**-------------------------------------------------------------------**/
/******************************************************************************
* 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 *
* *
******************************************************************************/
#ifndef CLOOG_PROGRAM_H
#define CLOOG_PROGRAM_H
#if defined(__cplusplus)
extern "C"
{
#endif
# define MAX_STRING 1024
# define MEGA 1000000 /* One million. */
/**
* CloogProgram structure:
* this structure contains all the informations of a program generated or to be
* generated.
*/
struct cloogprogram
{ /* Basic program description fields. */
char language ; /**< The language of the program. */
int nb_scattdims ; /**< Scattering dimension number. */
CloogDomain * context ; /**< The context of the program. */
CloogLoop * loop ; /**< The loops of the program. */
CloogNames * names ; /**< Iterators and parameters names. */
CloogBlockList * blocklist ; /**< The statement block list. */
/* Internal service fields, filled up by cloog_program_scatter function. */
int * scaldims ; /**< Boolean array saying whether a given
* scattering dimension is scalar or not.
*/
/* Library user reserved field. */
void * usr; /**< User field, for library user convenience.
* This pointer is not freed when the
* CloogProgram structure is freed.
*/
} ;
typedef struct cloogprogram CloogProgram ;
/******************************************************************************
* Structure display function *
******************************************************************************/
void cloog_program_print_structure(FILE *, CloogProgram *, int) ;
void cloog_program_print(FILE *, CloogProgram *) ;
void cloog_program_pprint(FILE *, CloogProgram *, CloogOptions *) ;
void cloog_program_dump_cloog(FILE *, CloogProgram *, CloogScatteringList *);
/******************************************************************************
* Memory deallocation function *
******************************************************************************/
void cloog_program_free(CloogProgram *) ;
/******************************************************************************
* Reading function *
******************************************************************************/
CloogProgram * cloog_program_read(FILE *, CloogOptions *) ;
/******************************************************************************
* Processing functions *
******************************************************************************/
CloogProgram * cloog_program_malloc(void);
CloogProgram * cloog_program_alloc(CloogDomain *context, CloogUnionDomain *ud,
CloogOptions *options);
CloogProgram * cloog_program_generate(CloogProgram *, CloogOptions *) ;
void cloog_program_block(CloogProgram *program,
CloogScatteringList *scattering, CloogOptions *options);
void cloog_program_extract_scalars(CloogProgram *program,
CloogScatteringList *scattering, CloogOptions *options);
void cloog_program_scatter(CloogProgram *program,
CloogScatteringList *scattering, CloogOptions *options);
#if defined(__cplusplus)
}
#endif
#endif /* define _H */