PIPS
sac.h
Go to the documentation of this file.
1 /* Warning! Do not modify this file that is automatically generated! */
2 /* Modify src/Libs/sac/sac-local.h instead, to add your own modifications. */
3 
4 /* header file built by cproto */
5 
6 #ifndef sac_header_included
7 #define sac_header_included
8 /* sac-local.h */
9 /*
10 
11  $Id: sac-local.h 23661 2023-07-07 13:19:25Z 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 */
33 #include "sac_private.h"
34 #include "dg.h"
35 
38 
39 #include "graph.h"
40 
41 
42 #define FUNC_TO_ATOMIZE_P(call) (\
43  type_functional_p(entity_type(call_function(call))) && \
44  (gen_length(module_functional_parameters(call_function(call))) != 0) && \
45  (!ENTITY_DEREFERENCING_P(call_function(call))) && \
46  (!ENTITY_POINT_TO_P(call_function(call))) && \
47  (!ENTITY_FIELD_P(call_function(call)))\
48  )
49 
50 /* if conversion */
51 #define IF_TO_CONVERT "PIPS IF_TO_CONVERT"
52 #define IF_CONV_TO_COMPACT "PIPS IF_CONV_TO_COMPACT"
53 
54 
55 #define ENTITY_FUNCTION_P(f) (type_functional_p(entity_type(f)) && \
56  (gen_length(module_functional_parameters(f)) != 0))
57 
58 /* simd_loop_const_elim.c */
59 
60 #define SIMD_MASKED_SUFFIX "_MASKED"
61 #define SIMD_GENERIC_SUFFIX "_GENERIC"
62 #define SIMD_CONSTANT_SUFFIX "_CONSTANT"
63 #define SIMD_BROADCAST_SUFFIX "_BROADCAST"
64 #define SAC_PADDING_ENTITY_NAME "PADDING_VALUE"
65 
66 #define STATEMENT_INFO_NEWGEN_DOMAIN SIMDSTATEMENTINFO_NEWGEN_DOMAIN
67 #define gen_STATEMENT_INFO_cons gen_SIMDSTATEMENTINFO_cons
68 
69 
70 #define CHECK_VECTORELEMENT(ve) do {\
71  pips_assert("vector Index seems legal",vectorElement_vectorIndex(ve) >= 0 && vectorElement_vectorIndex(ve) < simdStatementInfo_nbArgs(vectorElement_statement(ve)));\
72  } while(0)
73 
74 
75 /* symbols exported by the parser */
76 extern FILE *patterns_yyin;
77 extern int patterns_yyparse();
78 extern int patterns_yylex();
79 extern void patterns_yyerror(const char*);
80 
81 extern size_t sac_lineno;
82 /* cproto-generated files */
83 /* if_conversion_compact.c */
84 extern bool if_conversion_compact(char */*mod_name*/);
85 /* if_conversion_init.c */
86 extern bool if_conversion_init(char */*mod_name*/);
87 /* simdizer.c */
91 extern string sac_commenter(entity /*e*/);
92 extern bool simdizer(char */*mod_name*/);
93 extern bool simdizer_init(const char */*module_name*/);
94 /* varwidth.c */
95 extern int effective_variables_width(instruction /*i*/);
96 /* codegen.c */
97 extern void init_vector_to_expressions(void);
98 extern void reset_vector_to_expressions(void);
101 extern bool simd_vector_entity_p(entity /*e*/);
102 extern int get_subwordSize_from_opcode(opcode /*oc*/, int /*argNum*/);
103 extern opcode generate_opcode(string /*name*/, list /*types*/, float /*cost*/);
104 extern expression distance_between_expression(const expression /*exp0*/, const expression /*exp1*/);
105 extern bool sac_aligned_entity_p(entity /*e*/);
106 extern statement make_shuffle_statement(entity */*from*/, list /*expressions*/, int */*perms*/);
107 extern simdstatement make_simd_statements(set /*opkinds*/, list /*statements*/);
108 extern list generate_simd_code(simdstatement /*ssi*/, float */*simdCost*/);
109 /* unroll.c */
110 extern bool loop_auto_unroll(const char */*mod_name*/);
111 extern bool simdizer_auto_unroll(char */*mod_name*/);
112 extern bool simdizer_auto_tile(const char */*module_name*/);
113 /* operatorid.c */
114 extern void set_simd_operator_mappings(void */*m*/);
115 extern void reset_simd_operator_mappings(void);
116 extern int get_operator_id(entity /*e*/);
117 extern bool simd_operator_mappings(const string /*module_name*/);
118 /* treematch.c */
119 extern void set_simd_treematch(matchTree /*t*/);
120 extern void reset_simd_treematch(void);
121 extern void simd_reset_finalArgType(void);
122 extern void simd_fill_finalArgType(statement /*stat*/);
123 extern void simd_fill_curArgType(statement /*stat*/);
124 extern bool simd_check_argType(void);
125 extern list match_statement(statement /*s*/);
126 extern void insert_opcodeClass(char */*s*/, int /*nbArgs*/, list /*opcodes*/);
127 extern void insert_pattern(char */*s*/, list /*tokens*/, list /*args*/);
128 extern bool simd_treematcher(const string /*module_name*/);
129 /* atomizer.c */
130 extern statement simd_atomize_this_expression(entity (* /*create*/)(entity, basic), expression /*e*/);
131 extern bool simd_atomizer(char */*mod_name*/);
132 extern bool reduction_atomization(const char */*module_name*/);
133 /* vectransform.c */
134 extern void insert_transformation(char */*name*/, int /*vectorLengthOut*/, int /*subwordSizeOut*/, int /*vectorLengthIn*/, int /*subwordSizeIn*/, int /*nbArgs*/, list /*mapping*/);
135 /* reductions.c */
136 extern bool sac_expression_reduction_p(expression /*e*/);
137 extern bool simd_remove_reductions(char */*mod_name*/);
138 extern bool redundant_load_store_elimination(char */*module_name*/);
139 /* singleass.c */
140 extern bool scalar_renaming(char */*mod_name*/);
141 /* deatomizer.c */
142 extern bool deatomizer(char */*mod_name*/);
143 /* if_conversion.c */
144 extern bool if_conversion(char */*mod_name*/);
145 extern bool loop_nest_unswitching(const char */*module_name*/);
146 /* simd_memory_packing.c */
147 extern bool simd_memory_packing(char */*mod_name*/);
148 /* patterns.c */
149 extern size_t sac_lineno;
150 extern int patterns_yychar;
151 extern int patterns_yynerrs;
152 extern int patterns_yyparse(void);
153 extern int patterns_yywrap(void);
154 extern void patterns_yyerror(const char */*s*/);
155 /* lexer.c */
156 extern int patterns_yyleng;
157 extern FILE *patterns_yyin;
158 extern FILE *patterns_yyout;
159 extern int patterns_yylineno;
160 extern int patterns_yy_flex_debug;
161 extern char *patterns_yytext;
162 extern int patterns_yylex(void);
163 extern void patterns_yyrestart(FILE */*input_file*/);
164 extern void patterns_yypop_buffer_state(void);
165 extern int patterns_yyget_lineno(void);
166 extern FILE *patterns_yyget_in(void);
167 extern FILE *patterns_yyget_out(void);
168 extern int patterns_yyget_leng(void);
169 extern char *patterns_yyget_text(void);
170 extern void patterns_yyset_lineno(int /*_line_number*/);
171 extern void patterns_yyset_in(FILE */*_in_str*/);
172 extern void patterns_yyset_out(FILE */*_out_str*/);
173 extern int patterns_yyget_debug(void);
174 extern void patterns_yyset_debug(int /*_bdebug*/);
175 extern int patterns_yylex_destroy(void);
176 extern void *patterns_yyalloc(yy_size_t /*size*/);
177 extern void *patterns_yyrealloc(void */*ptr*/, yy_size_t /*size*/);
178 extern void patterns_yyfree(void */*ptr*/);
179 #endif /* sac_header_included */
size_t yy_size_t
Definition: genread_lex.c:413
void reset_simd_treematch(void)
Definition: treematch.c:52
char * patterns_yyget_text(void)
int patterns_yyleng
lexer.c
void set_simd_operator_mappings(void *)
operatorid.c
Definition: operatorid.c:43
int patterns_yylex()
expression distance_between_expression(const expression, const expression)
computes the distance betwwen two expression
Definition: codegen.c:419
bool deatomizer(char *)
deatomizer.c
Definition: deatomizer.c:726
size_t sac_lineno
patterns.c
Definition: sac.h:149
void patterns_yypop_buffer_state(void)
bool sac_aligned_entity_p(entity)
Definition: codegen.c:646
int patterns_yynerrs
void set_simd_treematch(matchTree)
treematch.c
Definition: treematch.c:46
bool if_conversion_compact(char *)
cproto-generated files
bool simdizer_init(const char *)
Definition: simdizer.c:1023
void insert_transformation(char *, int, int, int, int, int, list)
vectransform.c
Definition: vectransform.c:43
void patterns_yyset_lineno(int)
bool if_conversion(char *)
if_conversion.c
void simd_reset_finalArgType(void)
Definition: treematch.c:61
int patterns_yyget_debug(void)
void * patterns_yyrealloc(void *, yy_size_t)
int effective_variables_width(instruction)
varwidth.c
Definition: varwidth.c:85
list match_statement(statement)
return a list of matching statements
Definition: treematch.c:237
void init_vector_to_expressions(void)
codegen.c
Definition: codegen.c:59
bool reduction_atomization(const char *)
Definition: atomizer.c:459
bool simdizer(char *)
Definition: simdizer.c:854
void patterns_yyset_out(FILE *)
int patterns_yychar
void patterns_yyset_in(FILE *)
void patterns_yyset_debug(int)
int patterns_yylineno
bool expression_reference_or_field_p(expression)
Definition: codegen.c:192
hash_table operator_id_sons
Warning! Do not modify this file that is automatically generated!
Definition: sac.h:32
void invalidate_expressions_in_statement(statement)
Definition: codegen.c:162
dg_vertex_label vertex_label
Definition: sac.h:37
void insert_opcodeClass(char *, int, list)
Definition: treematch.c:267
int patterns_yyparse()
bool scalar_renaming(char *)
singleass.c
Definition: singleass.c:300
void patterns_yyrestart(FILE *)
bool redundant_load_store_elimination(char *)
Definition: reductions.c:788
bool simd_atomizer(char *)
Definition: atomizer.c:361
int get_subwordSize_from_opcode(opcode, int)
Definition: codegen.c:246
char * patterns_yytext
int patterns_yy_flex_debug
bool simdizer_auto_unroll(char *)
Definition: unroll.c:310
int patterns_yylex_destroy(void)
int patterns_yyget_leng(void)
bool loop_nest_unswitching(const char *)
bool simdizer_auto_tile(const char *)
Definition: unroll.c:409
bool simd_vector_entity_p(entity)
Definition: codegen.c:197
FILE * patterns_yyout
void * patterns_yyalloc(yy_size_t)
dg_arc_label arc_label
Definition: sac.h:36
int get_operator_id(entity)
Definition: operatorid.c:161
void reset_vector_to_expressions(void)
Definition: codegen.c:64
void reset_simd_operator_mappings(void)
Definition: operatorid.c:48
statement sac_current_block
Definition: simdizer.c:722
opcode generate_opcode(string, list, float)
auto-guess vector size
Definition: codegen.c:276
void insert_pattern(char *, list, list)
Definition: treematch.c:278
statement simd_atomize_this_expression(entity(*)(entity, basic), expression)
atomizer.c
Definition: atomizer.c:87
bool simd_check_argType(void)
Definition: treematch.c:87
void simd_fill_finalArgType(statement)
Definition: treematch.c:77
FILE * patterns_yyget_in(void)
bool loop_auto_unroll(const char *)
unroll.c
Definition: unroll.c:270
bool if_conversion_init(char *)
if_conversion_init.c
bool sac_expression_reduction_p(expression)
reductions.c
Definition: reductions.c:55
int patterns_yywrap(void)
Definition: patterns.c:1858
int patterns_yyget_lineno(void)
list generate_simd_code(simdstatement, float *)
Definition: codegen.c:1325
match get_statement_match_of_kind(statement, opcodeClass)
simdizer.c
Definition: simdizer.c:101
statement make_shuffle_statement(entity *, list, int *)
Definition: codegen.c:1068
FILE * patterns_yyget_out(void)
bool simd_remove_reductions(char *)
remove reductions by expanding reduced scalar to an array
Definition: reductions.c:571
string sac_commenter(entity)
Definition: simdizer.c:821
bool simd_memory_packing(char *)
simd_memory_packing.c
void simd_fill_curArgType(statement)
Definition: treematch.c:82
bool simd_treematcher(const string)
Definition: treematch.c:310
FILE * patterns_yyin
symbols exported by the parser
Definition: sac.h:157
void patterns_yyerror(const char *)
Definition: patterns.c:1863
void patterns_yyfree(void *)
simdstatement make_simd_statements(set, list)
Definition: codegen.c:1193
bool simd_operator_mappings(const string)
Definition: operatorid.c:174
instruction sac_real_current_instruction
Definition: simdizer.c:723
FI: I do not understand why the type is duplicated at the set level.
Definition: set.c:59
The structure used to build lists in NewGen.
Definition: newgen_list.h:41