1
2   /**-------------------------------------------------------------------**
3    **                              CLooG                                **
4    **-------------------------------------------------------------------**
5    **                             block.h                               **
6    **-------------------------------------------------------------------**
7    **                    First version: June 11th 2005                  **
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@inria.fr                         *
34 *                                                                            *
35 ******************************************************************************/
36
37
38#ifndef CLOOG_BLOCK_H
39#define CLOOG_BLOCK_H
40#if defined(__cplusplus)
41extern "C"
42  {
43#endif
44
45
46/**
47 * CloogBlock structure:
48 * this structure contains the informations of a statement block. It may happen
49 * that users are lazy enough to ask CLooG to generate the code for statements
50 * with exactly the same domain/scattering pair (possibly differing by only one
51 * constant) instead of giving only one pair. CLooG provides them a last chance
52 * to save time and memory by trying to find these blocks itself. The block
53 * contains the statement list and the common informations of the statements.
54 * This structure contains also the number of existing active references to it:
55 * because CLooG uses many copies of blocks there is no need to actually copy
56 * these blocks but just to return a pointer to them and to increment the number
57 * of active references. Each time a CloogBlock will be freed, we will decrement
58 * the active reference counter and actually free it if its value is zero.
59 */
60struct cloogblock
61{
62  CloogState *state;            /**< State. */
63  CloogStatement * statement ;  /**< The list of statements in the block. */
64  int  nb_scaldims ;            /**< Number of scalar dimensions. */
65  cloog_int_t *scaldims;        /**< Scalar dimension values. */
66  int depth ;                   /**< Original block depth (outer loop number).*/
67  int references ;              /**< Number of references to this structure. */
68  void * usr;		        /**< User field, for library user convenience.
69				 *   This pointer is not freed when the
70				 *   CloogBlock structure is freed.
71			         */
72} ;
73typedef struct cloogblock CloogBlock ;
74
75
76/**
77 * CloogBlockList structure:
78 * this structure reprensents a node of a linked list of CloogBlock structures.
79 */
80struct cloogblocklist
81{ CloogBlock * block ;          /**< An element of the list. */
82  struct cloogblocklist * next ;/**< Pointer to the next element of the list.*/
83} ;
84typedef struct cloogblocklist CloogBlockList ;
85
86
87/******************************************************************************
88 *                          Structure display function                        *
89 ******************************************************************************/
90void cloog_block_print_structure(FILE *, CloogBlock *, int) ;
91void cloog_block_print(FILE *, CloogBlock *) ;
92void cloog_block_list_print(FILE *, CloogBlockList *) ;
93
94
95/******************************************************************************
96 *                         Memory deallocation function                       *
97 ******************************************************************************/
98void cloog_block_free(CloogBlock *) ;
99void cloog_block_list_free(CloogBlockList *) ;
100
101
102/******************************************************************************
103 *                            Processing functions                            *
104 ******************************************************************************/
105CloogBlock     * cloog_block_malloc(CloogState *state);
106CloogBlock     * cloog_block_alloc(CloogStatement *statement, int nb_scaldims,
107				    cloog_int_t *scaldims, int depth);
108CloogBlockList * cloog_block_list_malloc(void);
109CloogBlockList * cloog_block_list_alloc(CloogBlock *) ;
110CloogBlock     * cloog_block_copy(CloogBlock * block) ;
111void             cloog_block_merge(CloogBlock *, CloogBlock *) ;
112
113#if defined(__cplusplus)
114  }
115#endif
116#endif /* define _H */
117
118