/**-------------------------------------------------------------------** ** CLooG ** **-------------------------------------------------------------------** ** loop.h ** **-------------------------------------------------------------------** ** First version: october 26th 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_LOOP_H #define CLOOG_LOOP_H #if defined(__cplusplus) extern "C" { #endif /** * CloogLoop structure: * this structure contains all the informations of a loop generated or to be * generated. * - if the loop has not been processed yet (it is not a result of a call to * cloog_loop_generate), the domain is the whole iteration domain of a given * block, the stride is 1 (i.e. there is no stride), block is necessarily not * NULL and inner is NULL. * - if the loop comes as a result of a cloog_loop_generate call, the domain * describes the constraints (guards and loop bounds) for only one dimension * (the last one: outer dimensions being considered as parameters), the stride * may differ from one (this means that on the considered dimension, a step of * 'stride' must be considered between integral point, the first integral * point to be considered being the lower bound of the loop), inner may differ * from NULL, meaning that there are further dimensions and nesting levels in * the loop. */ struct cloogloop { CloogState *state; /**< State. */ CloogDomain * domain ; /**< The iteration domain. */ CloogDomain *unsimplified; /**< Unsimplified version of domain. */ int otl; /**< Loop is executed at most once. */ CloogStride *stride; /**< If not NULL, stride information on iterator * (filled only after loop generation). */ CloogBlock * block ; /**< The included statement block, NULL if none.*/ void * usr; /**< User field, for library user convenience. * This pointer is not freed when the * CloogLoop structure is freed. */ struct cloogloop * inner ; /**< Loops at the next level. */ struct cloogloop * next ; /**< Next loop at the same level. */ } ; typedef struct cloogloop CloogLoop ; /****************************************************************************** * Structure display function * ******************************************************************************/ void cloog_loop_print_structure(FILE *, CloogLoop *, int) ; void cloog_loop_print(FILE *, CloogLoop *) ; /****************************************************************************** * Memory deallocation function * ******************************************************************************/ void cloog_loop_free(CloogLoop *) ; /****************************************************************************** * Reading functions * ******************************************************************************/ CloogLoop *cloog_loop_from_domain(CloogState *state, CloogDomain *domain, int number); CloogLoop * cloog_loop_read(CloogState *state, FILE * foo, int number, int nb_parameters); /****************************************************************************** * Processing functions * ******************************************************************************/ CloogLoop * cloog_loop_block(CloogLoop *loop, int *scaldims, int nb_scattdims); CloogLoop * cloog_loop_malloc(CloogState *state); CloogLoop *cloog_loop_generate(CloogLoop *loop, CloogDomain *context, int level, int scalar, int *scaldims, int nb_scattdims, CloogOptions *options); CloogLoop *cloog_loop_simplify(CloogLoop *loop, CloogDomain *context, int level, int nb_scattdims, CloogOptions *options); void cloog_loop_scatter(CloogLoop *, CloogScattering *); #if defined(__cplusplus) } #endif #endif /* define _H */