PIPS
comp_sections.h
Go to the documentation of this file.
1 /* Warning! Do not modify this file that is automatically generated! */
2 /* Modify src/Libs/comp_sections/comp_sections-local.h instead, to add your own modifications. */
3 
4 /* header file built by cproto */
5 
6 #ifndef comp_sections_header_included
7 #define comp_sections_header_included
8 /* comp_sections-local.h */
9 /*
10 
11  $Id: comp_sections-local.h 23065 2016-03-02 09:05:50Z coelho $
12 
13  Copyright 1989-2016 MINES ParisTech
14 
15  This file is part of PIPS.
16 
17  PIPS is free software: you can redistribute it and/or modify it
18  under the terms of the GNU General Public License as published by
19  the Free Software Foundation, either version 3 of the License, or
20  any later version.
21 
22  PIPS is distributed in the hope that it will be useful, but WITHOUT ANY
23  WARRANTY; without even the implied warranty of MERCHANTABILITY or
24  FITNESS FOR A PARTICULAR PURPOSE.
25 
26  See the GNU General Public License for more details.
27 
28  You should have received a copy of the GNU General Public License
29  along with PIPS. If not, see <http://www.gnu.org/licenses/>.
30 
31 */
32 /*{{{ defines*/
33 /* classifying subscript types for reference template
34  * done in newgen now
35  */
36 #define LIN_INVARIANT 2
37 #define LIN_VARIANT 1
38 #define NON_LINEAR -1
39 
40 /* accessing DAD components */
41 #define LSEC(x,i) GetBoundary(x,i,1)
42 #define USEC(x,i) GetBoundary(x,i,0)
43 #define PUT_NEST(d,val) context_info_nest(simple_section_context(comp_sec_hull(comp_desc_section(d)))) = val
44 #define GET_NEST(d) context_info_nest(simple_section_context(comp_sec_hull(comp_desc_section(d))))
45 
46 /*}}}*/
47 
49 enum RefType {READ, WRITE};
51 
52 /* used for merging linear expressions */
53 typedef enum { PLUS, MINUS} OpFlag;
54 
55 /* only used for in print routines. The analysis does not
56  * pose any limit on the number of array dimensions
57  */
58 #define MAX_RANK 8
59 
60 /*{{{ Dad definition*/
61  /* data structures for data access descriptor */
62 
63  /* Reference Template part of DAD, an array of integers allocated dynamically */
64  typedef unsigned int tRT;
65 
66  /* A linear expression in Pips ; Pvecteur is a pointer */
67 #define LinExpr Pvecteur
68 
69  /* bounds are retained as high level tree structures to accommodate symbolic
70  information in boundary expressions. When all the symbolic information
71  gets resolved then the tree nodes are collapsed into a single instruction
72  holding the constant value
73  */
74 
75  typedef struct sSimpBound
76  {
77  LinExpr lb; /* lower bound */
78  LinExpr ub; /* upper bound */
79  } tSS;
80 
81  /* Simple Section part of DAD
82  An array of type SimpBound struct allocated
83  dynamically based on rank of array
84  */
85 
86  typedef struct DadComponent
87  {
88  tRT *RefTemp;
89  tSS *SimpSec;
91 
92 
93 /*}}}*/
94 /*{{{ Data structures required for computing Dads*/
95 
96 /*{{{ structures for TranslateToLoop*/
97 /* structure to hold both Old and New variants */
98 typedef struct Variants {
99  list Old;
100  list New;
102 
103 /*}}}*/
104 
105 /*}}}*/
106 
108 
109 
110 #define SEQUENTIAL_COMPSEC_SUFFIX ".csec"
111 #define USER_COMPSEC_SUFFIX ".ucsec"
112 
113 /* cproto-generated files */
114 /* comp_sections.c */
115 extern bool summary_complementary_sections(const char */*module_name*/);
116 extern bool complementary_sections(const char */*module_name*/);
117 extern bool print_code_complementary_sections(const char */*module_name*/);
118 /* propagate.c */
123 extern void free_local_comp_regions_map(void);
124 extern void make_local_comp_regions_map(void);
130 extern void CheckStride(loop /*Loop*/);
131 extern list CompRegionsExactUnion(list /*l1*/, list /*l2*/, bool (* /*union_combinable_p*/)(effect, effect));
132 extern list CompRegionsMayUnion(list /*l1*/, list /*l2*/, bool (* /*union_combinable_p*/)(effect, effect));
133 extern bool comp_regions(const char */*module_name*/);
135 extern list comp_regions_of_instruction(instruction /*i*/, transformer /*t_inst*/, transformer /*context*/, list */*plpropreg*/);
136 extern list comp_regions_of_block(list /*linst*/);
137 extern list comp_regions_of_test(test /*t*/, transformer /*context*/, list */*plpropreg*/);
138 extern list comp_regions_of_loop(loop /*l*/, transformer /*loop_trans*/, transformer /*context*/, list */*plpropreg*/);
139 extern list comp_regions_of_call(call /*c*/, transformer /*context*/, list */*plpropreg*/);
141 extern list comp_regions_of_range(range /*r*/, transformer /*context*/);
142 extern list comp_regions_of_syntax(syntax /*s*/, transformer /*context*/);
143 extern list comp_regions_of_expressions(list /*exprs*/, transformer /*context*/);
144 extern list comp_regions_of_expression(expression /*e*/, transformer /*context*/);
145 extern list comp_regions_of_read(reference /*ref*/, transformer /*context*/);
146 extern list comp_regions_of_write(reference /*ref*/, transformer /*context*/);
147 /* ss.c */
148 extern Pvecteur my_vect_var_subst(Pvecteur /*vect*/, Variable /*var*/, Pvecteur /*new_vect*/);
149 extern Pvecteur my_vect_substract(Pvecteur /*pvec1*/, Pvecteur /*pvec2*/);
150 extern void PrintCompRegions(list /*CompList*/);
151 extern void PrintLinExpr(Pvecteur /*Lin*/);
152 extern void PrintSimp(comp_desc /*Dad*/);
153 extern void DisplayDad(comp_desc /*TheDad*/);
154 extern void DisplayRefTemp(simple_section /*Dad*/);
155 extern void DisplaySimpleSection(simple_section /*Dad*/);
156 extern tag GetRefTemp(simple_section /*Dad*/, _int /*DimNo*/);
157 extern void PutRefTemp(simple_section /*Dad*/, int /*DimNo*/, tag /*Val*/);
158 extern Pvecteur GetBoundary(simple_section /*Dad*/, int /*DimNo*/, unsigned /*Low*/);
159 extern void PutBoundPair(simple_section /*Dad*/, _int /*DimNo*/, Pvecteur /*Low*/, Pvecteur /*Up*/);
160 extern Pvecteur MinBoundary(Pvecteur /*Lin1*/, Pvecteur /*Lin2*/);
161 extern Pvecteur MaxBoundary(Pvecteur /*Lin1*/, Pvecteur /*Lin2*/);
162 extern Pvecteur MergeLinExprs(Pvecteur /*Expr1*/, Pvecteur /*Expr2*/, OpFlag /*Op*/);
163 extern unsigned int ComputeIndex(unsigned int /*I*/, unsigned int /*J*/, unsigned int /*Rank*/);
164 extern Pvecteur CopyAccVec(Pvecteur /*Expr*/);
165 extern bool IsExprConst(Pvecteur /*Expr*/);
166 extern bool DivExists(loop /*Loop*/, Pvecteur /*Lin*/);
167 extern expression GetAccVec(unsigned /*No*/, const reference /*ref*/);
168 extern unsigned int CardinalityOf(list /*gl*/);
169 extern dad_struct AllocateDadStruct(int /*Rank*/);
171 extern void ScanAllDims(loop /*Loop*/, comp_desc /*Desc*/);
172 extern void ComputeRTandSS(expression /*Sub*/, unsigned /*DimNo*/, simple_section /*Dad*/, loop /*Loop*/);
173 extern void TranslateRefsToLoop(loop /*ThisLoop*/, list /*ListOfComps*/);
174 extern void TranslateToLoop(loop /*ThisLoop*/, comp_desc /*Desc*/);
175 extern tVariants TransRefTemp(loop /*ThisLoop*/, comp_desc /*Desc*/);
176 extern void UpdateUnresolved(simple_section /*Dad*/, loop /*Loop*/);
177 extern void ComputeBoundaries(simple_section /*Dad*/, loop /*Loop*/, Pvecteur /*lbExpr*/, Pvecteur /*ubExpr*/, unsigned /*Offset*/);
178 extern void TransSimpSec(comp_desc /*Desc*/, loop /*Loop*/, tVariants */*Vars*/);
179 extern Pvecteur Lbound(loop /*Loop*/, Pvecteur /*Lin*/);
180 extern Pvecteur Ubound(loop /*Loop*/, Pvecteur /*Lin*/);
182 /* operators.c */
183 extern comp_desc InitCompDesc(reference /*ref*/, tag /*ReadWrite*/);
184 extern comp_sec CompUnion(comp_sec /*cs1*/, comp_sec /*cs2*/);
185 extern bool CompIntersection(comp_sec /*cs1*/, comp_sec /*cs2*/);
186 /* myintrinsics.c */
187 extern list comp_regions_of_intrinsic(entity /*e*/, list /*args*/, transformer /*context*/);
188 extern list proper_comp_regions_of_intrinsic(entity /*e*/, list /*args*/, transformer /*context*/);
189 extern list no_write_comp_regions(entity /*e*/, list /*args*/, transformer /*context*/);
190 extern list affect_comp_regions(entity /*e*/, list /*args*/, transformer /*context*/);
191 extern list io_comp_regions(entity /*e*/, list /*args*/, transformer /*context*/);
192 extern list comp_regions_of_ioelem(expression /*exp*/, tag /*act*/, transformer /*context*/);
193 extern list comp_regions_of_iolist(list /*exprs*/, tag /*act*/, transformer /*context*/);
194 extern list comp_regions_of_implied_do(expression /*exp*/, tag /*act*/, transformer /*context*/);
195 /* dbase.c */
196 extern comp_desc_set list_to_comp_secs(list /*l_eff*/);
197 extern list comp_desc_set_to_list(comp_desc_set /*cset*/);
200 extern list comp_regions_dup(list /*l_reg*/);
201 extern comp_desc comp_region_dup(comp_desc /*reg*/);
202 extern list comp_region_add_to_regions(comp_desc /*reg*/, list /*l_reg*/);
203 /* prettyprint.c */
204 extern text get_text_comp_regions(const char */*module_name*/);
205 extern bool print_source_comp_regions(const char */*module_name*/);
206 extern bool print_code_comp_regions(const char */*module_name*/);
207 extern text text_all_comp_regions(list /*l_reg*/);
208 extern text text_comp_regions(list /*l_reg*/);
209 extern text text_comp_region(effect /*reg*/);
210 #endif /* comp_sections_header_included */
unsigned int tRT
{{ Dad definition
BoundType
}}
OpFlag
used for merging linear expressions
Pvecteur MaxBoundary(Pvecteur, Pvecteur)
}}
Definition: ss.c:335
void ComputeBoundaries(simple_section, loop, Pvecteur, Pvecteur, unsigned)
compute both boundary expression and store in the tSS array
Definition: ss.c:765
void update_statement_local_comp_regions(statement, list)
bool summary_complementary_sections(const char *)
cproto-generated files
Definition: comp_sections.c:31
list comp_regions_of_call(call, transformer, list *)
}}}
Definition: propagate.c:510
Pvecteur my_vect_substract(Pvecteur, Pvecteur)
Definition: ss.c:50
void PrintLinExpr(Pvecteur)
}}
Definition: ss.c:87
bool print_source_comp_regions(const char *)
list comp_regions_of_iolist(list, tag, transformer)
}}
Definition: myintrinsics.c:489
void store_statement_local_comp_regions(statement, list)
list load_statement_local_comp_regions(statement)
void PutRefTemp(simple_section, int, tag)
}}
Definition: ss.c:248
comp_desc_set list_to_comp_secs(list)
dbase.c
Definition: dbase.c:33
list comp_regions_of_expressions(list, transformer)
}}}
Definition: propagate.c:678
text text_comp_region(effect)
}}
Definition: prettyprint.c:375
@ SINGLE
Definition: comp_sections.h:50
@ MULTI
Definition: comp_sections.h:50
@ ZERO
Definition: comp_sections.h:50
dad_struct AllocateDadStruct(int)
}}
Definition: ss.c:440
list comp_regions_of_write(reference, transformer)
}}}
Definition: propagate.c:753
Pvecteur MinBoundary(Pvecteur, Pvecteur)
}}
Definition: ss.c:320
list CompRegionsExactUnion(list, list, bool(*)(effect, effect))
list comp_regions_of_range(range, transformer)
}}}
Definition: propagate.c:610
list comp_regions_of_statement(statement)
}}}
Definition: propagate.c:173
Pvecteur MergeLinExprs(Pvecteur, Pvecteur, OpFlag)
}}
Definition: ss.c:349
list comp_region_add_to_regions(comp_desc, list)
void region_add_to_regions(region reg, list l_reg) input : a region and a list of regions.
Definition: dbase.c:111
bool CompIntersection(comp_sec, comp_sec)
void DisplayRefTemp(simple_section)
}}
Definition: ss.c:123
Pvecteur Lbound(loop, Pvecteur)
}}
Definition: ss.c:910
list comp_regions_dup(list)
REGIONS AND LISTS OF REGIONS MANIPULATION
Definition: dbase.c:82
list affect_comp_regions(entity, list, transformer)
statement_mapping get_local_comp_regions_map(void)
void DisplayDad(comp_desc)
Definition: ss.c:107
Pvecteur GetBoundary(simple_section, int, unsigned)
}}
Definition: ss.c:266
unsigned int tRT
{{ Dad definition
Definition: comp_sections.h:64
statement_mapping listmap_to_compsecs_map(statement_mapping)
Definition: dbase.c:47
void UpdateUnresolved(simple_section, loop)
}}
Definition: ss.c:667
bool DivExists(loop, Pvecteur)
check whether loop index variable var is contained in LinExpr
Definition: ss.c:396
void ComputeRTandSS(expression, unsigned, simple_section, loop)
initialise reference template and shapes for inner most references
Definition: ss.c:524
statement_mapping comp_secs_map_to_listmap(statement_mapping)
Definition: dbase.c:60
void ScanAllDims(loop, comp_desc)
}}
Definition: ss.c:490
void delete_statement_local_comp_regions(statement)
list comp_regions_of_block(list)
}}}
Definition: propagate.c:301
void make_local_comp_regions_map(void)
list comp_regions_of_instruction(instruction, transformer, transformer, list *)
}}}
Definition: propagate.c:224
void reset_local_comp_regions_map(void)
void free_local_comp_regions_map(void)
text text_comp_regions(list)
}}
Definition: prettyprint.c:347
unsigned int ComputeIndex(unsigned int, unsigned int, unsigned int)
}}
Definition: ss.c:362
simple_section SimpUnion(simple_section, simple_section)
}}
Definition: ss.c:1013
list comp_regions_of_read(reference, transformer)
}}}
Definition: propagate.c:715
tVariants TransRefTemp(loop, comp_desc)
}}
Definition: ss.c:612
comp_sec CompUnion(comp_sec, comp_sec)
void TranslateRefsToLoop(loop, list)
}}
Definition: ss.c:577
bool local_comp_regions_map_undefined_p(void)
propagate.c
comp_desc InitCompDesc(reference, tag)
operators.c
Definition: operators.c:30
struct Variants tVariants
}}
@ WRITE
Definition: comp_sections.h:49
@ READ
Definition: comp_sections.h:49
bool print_code_comp_regions(const char *)
list comp_regions_of_test(test, transformer, list *)
list comp_regions_of_unstructured(unstructured, transformer)
}}}
Definition: propagate.c:571
tag GetRefTemp(simple_section, _int)
}}
Definition: ss.c:229
list no_write_comp_regions(entity, list, transformer)
list comp_regions_of_loop(loop, transformer, transformer, list *)
comp_desc comp_region_dup(comp_desc)
Definition: dbase.c:95
bool IsExprConst(Pvecteur)
}}
Definition: ss.c:388
void set_local_comp_regions_map(statement_mapping)
bool comp_regions(const char *)
}}}
Definition: propagate.c:87
void CheckStride(loop)
Pvecteur my_vect_var_subst(Pvecteur, Variable, Pvecteur)
ss.c
Definition: ss.c:35
list comp_regions_of_expression(expression, transformer)
{{{ comp_regions_of_expression
Definition: propagate.c:701
void PutBoundPair(simple_section, _int, Pvecteur, Pvecteur)
}}
Definition: ss.c:290
@ LOWER
Definition: comp_sections.h:48
@ UPPER
Definition: comp_sections.h:48
void TransSimpSec(comp_desc, loop, tVariants *)
Definition: ss.c:782
simple_section tDad
}}
struct DadComponent DadComp
Simple Section part of DAD An array of type SimpBound struct allocated dynamically based on rank of a...
Pvecteur Ubound(loop, Pvecteur)
Definition: ss.c:961
list proper_comp_regions_of_intrinsic(entity, list, transformer)
}}
Definition: myintrinsics.c:286
simple_section AllocateSimpleSection(reference)
Definition: ss.c:467
void PrintCompRegions(list)
}}
Definition: ss.c:74
bool complementary_sections(const char *)
Definition: comp_sections.c:40
struct sSimpBound tSS
bounds are retained as high level tree structures to accommodate symbolic information in boundary exp...
void TranslateToLoop(loop, comp_desc)
}}
Definition: ss.c:589
list comp_regions_of_ioelem(expression, tag, transformer)
}}
Definition: myintrinsics.c:461
list comp_regions_of_intrinsic(entity, list, transformer)
myintrinsics.c
Definition: myintrinsics.c:270
list comp_desc_set_to_list(comp_desc_set)
Definition: dbase.c:40
list comp_regions_of_implied_do(expression, tag, transformer)
}}
Definition: myintrinsics.c:544
Pvecteur CopyAccVec(Pvecteur)
}}
Definition: ss.c:378
list comp_regions_of_syntax(syntax, transformer)
}}}
Definition: propagate.c:636
list io_comp_regions(entity, list, transformer)
}}
Definition: myintrinsics.c:378
bool print_code_complementary_sections(const char *)
Definition: comp_sections.c:46
text get_text_comp_regions(const char *)
prettyprint.c
Definition: prettyprint.c:72
void PrintSimp(comp_desc)
}}
Definition: ss.c:99
bool statement_local_comp_regions_undefined_p(statement)
unsigned int CardinalityOf(list)
Definition: ss.c:428
list CompRegionsMayUnion(list, list, bool(*)(effect, effect))
void DisplaySimpleSection(simple_section)
}}
Definition: ss.c:161
OpFlag
used for merging linear expressions
Definition: comp_sections.h:53
@ PLUS
Definition: comp_sections.h:53
@ MINUS
Definition: comp_sections.h:53
expression GetAccVec(unsigned, const reference)
return the n'th subscript expression
Definition: ss.c:411
text text_all_comp_regions(list)
}}
Definition: prettyprint.c:329
int tag
TAG.
Definition: newgen_types.h:92
intptr_t _int
_INT
Definition: newgen_types.h:53
Simple Section part of DAD An array of type SimpBound struct allocated dynamically based on rank of a...
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89
The structure used to build lists in NewGen.
Definition: newgen_list.h:41
bounds are retained as high level tree structures to accommodate symbolic information in boundary exp...
LinExpr ub
lower bound
void * Variable
arithmetique is a requirement for vecteur, but I do not want to inforce it in all pips files....
Definition: vecteur-local.h:60