Also report failures in special tests
[cloog/uuh.git] / include / cloog / block.h
blob95f2a443454380b878e8a3288f8c3c7174593246
2 /**-------------------------------------------------------------------**
3 ** CLooG **
4 **-------------------------------------------------------------------**
5 ** block.h **
6 **-------------------------------------------------------------------**
7 ** First version: June 11th 2005 **
8 **-------------------------------------------------------------------**/
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 ******************************************************************************/
38 #ifndef CLOOG_BLOCK_H
39 #define CLOOG_BLOCK_H
40 #if defined(__cplusplus)
41 extern "C"
43 #endif
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.
60 struct cloogblock
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.
72 } ;
73 typedef struct cloogblock CloogBlock ;
76 /**
77 * CloogBlockList structure:
78 * this structure reprensents a node of a linked list of CloogBlock structures.
80 struct cloogblocklist
81 { CloogBlock * block ; /**< An element of the list. */
82 struct cloogblocklist * next ;/**< Pointer to the next element of the list.*/
83 } ;
84 typedef struct cloogblocklist CloogBlockList ;
87 /******************************************************************************
88 * Structure display function *
89 ******************************************************************************/
90 void cloog_block_print_structure(FILE *, CloogBlock *, int) ;
91 void cloog_block_print(FILE *, CloogBlock *) ;
92 void cloog_block_list_print(FILE *, CloogBlockList *) ;
95 /******************************************************************************
96 * Memory deallocation function *
97 ******************************************************************************/
98 void cloog_block_free(CloogBlock *) ;
99 void cloog_block_list_free(CloogBlockList *) ;
102 /******************************************************************************
103 * Processing functions *
104 ******************************************************************************/
105 CloogBlock * cloog_block_malloc(CloogState *state);
106 CloogBlock * cloog_block_alloc(CloogStatement *statement, int nb_scaldims,
107 cloog_int_t *scaldims, int depth);
108 CloogBlockList * cloog_block_list_malloc(void);
109 CloogBlockList * cloog_block_list_alloc(CloogBlock *) ;
110 CloogBlock * cloog_block_copy(CloogBlock * block) ;
111 void cloog_block_merge(CloogBlock *, CloogBlock *) ;
113 #if defined(__cplusplus)
115 #endif
116 #endif /* define _H */