1 
2    /**-------------------------------------------------------------------**
3     **                              CLooG                                **
4     **-------------------------------------------------------------------**
5     **                            program.h                              **
6     **-------------------------------------------------------------------**
7     **                 First version: october 25th 2001                  **
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, [email protected]                         *
34  *                                                                            *
35  ******************************************************************************/
36 
37 
38 #ifndef CLOOG_PROGRAM_H
39 #define CLOOG_PROGRAM_H
40 #if defined(__cplusplus)
41 extern "C"
42   {
43 #endif
44 
45 
46 # define MAX_STRING 1024
47 # define MEGA 1000000  /* One million. */
48 
49 
50 /**
51  * CloogProgram structure:
52  * this structure contains all the informations of a program generated or to be
53  * generated.
54  */
55 struct cloogprogram
56 { /* Basic program description fields. */
57   char language ;              /**< The language of the program. */
58   int  nb_scattdims ;          /**< Scattering dimension number. */
59   CloogDomain    * context ;   /**< The context of the program. */
60   CloogLoop      * loop ;      /**< The loops of the program. */
61   CloogNames     * names ;     /**< Iterators and parameters names. */
62   CloogBlockList * blocklist ; /**< The statement block list. */
63 
64   /* Internal service fields, filled up by cloog_program_scatter function. */
65   int * scaldims ;             /**< Boolean array saying whether a given
66                                 *   scattering dimension is scalar or not.
67 				*/
68   /* Library user reserved field. */
69   void * usr;		       /**< User field, for library user convenience.
70 			        *   This pointer is not freed when the
71 			        *   CloogProgram structure is freed.
72 			        */
73 } ;
74 typedef struct cloogprogram CloogProgram ;
75 
76 
77 /******************************************************************************
78  *                          Structure display function                        *
79  ******************************************************************************/
80 void cloog_program_print_structure(FILE *, CloogProgram *, int) ;
81 void cloog_program_print(FILE *, CloogProgram *) ;
82 void cloog_program_pprint(FILE *, CloogProgram *, CloogOptions *) ;
83 void cloog_program_dump_cloog(FILE *, CloogProgram *, CloogScatteringList *);
84 
85 
86 /******************************************************************************
87  *                         Memory deallocation function                       *
88  ******************************************************************************/
89 void cloog_program_free(CloogProgram *) ;
90 
91 
92 /******************************************************************************
93  *                               Reading function                             *
94  ******************************************************************************/
95 CloogProgram * cloog_program_read(FILE *, CloogOptions *) ;
96 
97 
98 /******************************************************************************
99  *                            Processing functions                            *
100  ******************************************************************************/
101 CloogProgram * cloog_program_malloc(void);
102 CloogProgram * cloog_program_alloc(CloogDomain *context, CloogUnionDomain *ud,
103 	CloogOptions *options);
104 CloogProgram * cloog_program_generate(CloogProgram *, CloogOptions *) ;
105 void cloog_program_block(CloogProgram *program,
106 	CloogScatteringList *scattering, CloogOptions *options);
107 void cloog_program_extract_scalars(CloogProgram *program,
108 	CloogScatteringList *scattering, CloogOptions *options);
109 void cloog_program_scatter(CloogProgram *program,
110 			CloogScatteringList *scattering, CloogOptions *options);
111 
112 #if defined(__cplusplus)
113   }
114 #endif
115 #endif /* define _H */
116 
117