PIPS
ri-util-local.h
Go to the documentation of this file.
1 /*
2 
3  $Id: ri-util-local.h 23466 2018-03-12 03:08:18Z ancourt $
4 
5  Copyright 1989-2016 MINES ParisTech
6 
7  This file is part of PIPS.
8 
9  PIPS is free software: you can redistribute it and/or modify it
10  under the terms of the GNU General Public License as published by
11  the Free Software Foundation, either version 3 of the License, or
12  any later version.
13 
14  PIPS is distributed in the hope that it will be useful, but WITHOUT ANY
15  WARRANTY; without even the implied warranty of MERCHANTABILITY or
16  FITNESS FOR A PARTICULAR PURPOSE.
17 
18  See the GNU General Public License for more details.
19 
20  You should have received a copy of the GNU General Public License
21  along with PIPS. If not, see <http://www.gnu.org/licenses/>.
22 
23 */
24 /* RI-UTIL Library: Functions dealing with and constants related to
25  * PIPS intermediate representation ri.newgen,
26  * that are NOT generated by NewGen
27  */
28 
29  /* Pvecteur is an external type for NewGen and the ri data structure
30  * and is not included in ri.h
31  *
32  * It is included here to avoid changes in many PIPS modules which
33  * use ri-util
34  *
35  * Idem for type Ppolynome (PB 25/07/90); FI: polynomials are not
36  * used in ri.newgen; they should not be mentionned here
37  *
38  * Idem for type Psysteme (FI 3 November 1990)
39  *
40  * New function call need to be defined to handle omp pragma as a
41  * standard PIPS expression. To be easily recognized, all the defined
42  * values are prefixed by "OMP_".
43  */
44 
45 /*
46  * Modifications:
47  * --------------
48  * Molka Becher (MB), June 2010
49  * - Add and Check of definition of C Intrinsics (#define)
50  * - Add of definition of QuadPrecision type and LongDoubleComplex type
51  * - Add of package & variable names for memmove intrinsic (string.h)
52  */
53 
54 
55 #include "linear.h"
56 #include "genC.h"
57 
58 #include "ri.h"
59 #include "text.h"
60 #include "cloning.h"
61 
62 #include "newgen.h"
63 #include "naming.h"
64 
65 /* FC 2015-07-20
66  * yuk, temporary fix to avoid an include cycle ri-util <-> prettyprint
67  # #include "prettyprint.h"
68  */
69 extern string basic_to_string(basic);
70 extern string string_of_type(type);
71 extern void print_type(type);
72 extern bool same_type_name_p(type, type);
73 
74 #define UNBOUNDED_DIMENSION_NAME "UNBOUNDED-DIMENSION"
75 #define IMPLIED_DO_NAME "IMPLIED-DO"
76 #define IMPLIED_DO_FUNCTION_NAME "IMPLIED-DO"
77 #define REPEAT_VALUE_NAME "REPEAT-VALUE"
78 #define REPEAT_VALUE_FUNCTION_NAME "REPEAT-VALUE"
79 #define STATIC_INITIALIZATION_NAME "STATIC-INITIALIZATION"
80 #define STATIC_INITIALIZATION_FUNCTION_NAME "STATIC-INITIALIZATION"
81 #define DATA_LIST_FUNCTION_NAME "DATA-LIST="
82 #define IO_LIST_STRING_NAME "IOLIST="
83 
84 
85 #define BRACE_INTRINSIC "BRACE_INTRINSIC"
86 #define NULL_STATEMENT_INTRINSIC "NULL_STATEMENT_INTRINSIC"
87 
88 #define IMPLIED_COMPLEX_NAME "CMPLX_"
89 #define IMPLIED_DCOMPLEX_NAME "DCMPLX_"
90 
91 #define FIELD_OPERATOR_NAME "."
92 #define POINT_TO_OPERATOR_NAME "->"
93 #define DEREFERENCING_OPERATOR_NAME "*indirection"
94 
95 #define ASSIGN_OPERATOR_NAME "="
96 #define ASSIGN_OPERATOR_PRECEDENCE (2)
97 #define POST_INCREMENT_OPERATOR_NAME "post++"
98 #define POST_DECREMENT_OPERATOR_NAME "post--"
99 #define PRE_INCREMENT_OPERATOR_NAME "++pre"
100 #define PRE_DECREMENT_OPERATOR_NAME "--pre"
101 #define MULTIPLY_UPDATE_OPERATOR_NAME "*="
102 #define DIVIDE_UPDATE_OPERATOR_NAME "/="
103 #define PLUS_UPDATE_OPERATOR_NAME "+="
104 #define MINUS_UPDATE_OPERATOR_NAME "-="
105 #define LEFT_SHIFT_UPDATE_OPERATOR_NAME "<<="
106 #define RIGHT_SHIFT_UPDATE_OPERATOR_NAME ">>="
107 #define BITWISE_OR_UPDATE_OPERATOR_NAME "|="
108 
109 #define COMMA_OPERATOR_NAME ","
110 
111 #define PLUS_OPERATOR_NAME "+"
112 #define PLUS_C_OPERATOR_NAME "+C" /* includes pointer arithmetic */
113 #define MINUS_OPERATOR_NAME "-"
114 #define MINUS_C_OPERATOR_NAME "-C" /* includes pointer arithmetic */
115 #define UNARY_MINUS_OPERATOR_NAME "--"
116 #define UNARY_PLUS_OPERATOR_NAME "+unary"
117 #define MULTIPLY_OPERATOR_NAME "*"
118 #define DIVIDE_OPERATOR_NAME "/"
119 #define INVERSE_OPERATOR_NAME "_INV_" /* internal stuff */
120 #define POWER_OPERATOR_NAME "**"
121 #define MODULO_OPERATOR_NAME "MOD"
122 #define REAL_MODULO_OPERATOR_NAME "AMOD"
123 #define DOUBLE_MODULO_OPERATOR_NAME "DMOD"
124 #define SIGN_OPERATOR_NAME "SIGN"
125 #define ISIGN_OPERATOR_NAME "ISIGN"
126 #define DSIGN_OPERATOR_NAME "DSIGN"
127 #define DIM_OPERATOR_NAME "DIM"
128 #define IDIM_OPERATOR_NAME "IDIM"
129 #define DDIM_OPERATOR_NAME "DDIM"
130 #define DPROD_OPERATOR_NAME "DPROD"
131 #define CONJG_OPERATOR_NAME "CONJG"
132 #define DCONJG_OPERATOR_NAME "DCONJG"
133 #define SQRT_OPERATOR_NAME "SQRT"
134 #define DSQRT_OPERATOR_NAME "DSQRT"
135 #define CSQRT_OPERATOR_NAME "CSQRT"
136 #define CDSQRT_OPERATOR_NAME "CDSQRT"
137 #define EXP_OPERATOR_NAME "EXP"
138 #define DEXP_OPERATOR_NAME "DEXP"
139 #define CEXP_OPERATOR_NAME "CEXP"
140 #define CDEXP_OPERATOR_NAME "CDEXP"
141 #define LOG_OPERATOR_NAME "LOG"
142 #define ALOG_OPERATOR_NAME "ALOG"
143 #define DLOG_OPERATOR_NAME "DLOG"
144 #define CLOG_OPERATOR_NAME "CLOG"
145 #define CDLOG_OPERATOR_NAME "CDLOG"
146 #define LOG10_OPERATOR_NAME "LOG10"
147 #define ALOG10_OPERATOR_NAME "ALOG10"
148 #define DLOG10_OPERATOR_NAME "DLOG10"
149 #define SIN_OPERATOR_NAME "SIN"
150 #define DSIN_OPERATOR_NAME "DSIN"
151 #define CSIN_OPERATOR_NAME "CSIN"
152 #define CDSIN_OPERATOR_NAME "CDSIN"
153 #define COS_OPERATOR_NAME "COS"
154 #define DCOS_OPERATOR_NAME "DCOS"
155 #define CCOS_OPERATOR_NAME "CCOS"
156 #define CDCOS_OPERATOR_NAME "CDCOS"
157 #define TAN_OPERATOR_NAME "TAN"
158 #define DTAN_OPERATOR_NAME "DTAN"
159 #define ASIN_OPERATOR_NAME "ASIN"
160 #define DASIN_OPERATOR_NAME "DASIN"
161 #define ACOS_OPERATOR_NAME "ACOS"
162 #define DACOS_OPERATOR_NAME "DACOS"
163 #define ATAN_OPERATOR_NAME "ATAN"
164 #define DATAN_OPERATOR_NAME "DATAN"
165 #define ATAN2_OPERATOR_NAME "ATAN2"
166 #define DATAN2_OPERATOR_NAME "DATAN2"
167 #define SINH_OPERATOR_NAME "SINH"
168 #define DSINH_OPERATOR_NAME "DSINH"
169 #define COSH_OPERATOR_NAME "COSH"
170 #define DCOSH_OPERATOR_NAME "DCOSH"
171 #define TANH_OPERATOR_NAME "TANH"
172 #define DTANH_OPERATOR_NAME "DTANH"
173 #define LEFT_SHIFT_OPERATOR_NAME "<<"
174 #define RIGHT_SHIFT_OPERATOR_NAME ">>"
175 
176 // Conflicts with reserved prefixes for BLOCKDATA (&), COMMON (~),
177 // MAIN (%), FILESEP (!), MEMBER_SEP_STRING (^), ENUM (?) & al.
178 // Use "-" to avoid conflict with user defined symbols
179 #define ADDRESS_OF_OPERATOR_NAME "__address-of__" // &
180 #define BITWISE_AND_OPERATOR_NAME "__bit-and__" // &
181 #define BITWISE_NOT_OPERATOR_NAME "__bit-not__" // ~
182 #define BITWISE_XOR_OPERATOR_NAME "__C-xor__" // ^
183 #define C_AND_OPERATOR_NAME "__C-and__" // &&
184 #define MODULO_UPDATE_OPERATOR_NAME "__C-modulo-update__" // %=
185 #define BITWISE_AND_UPDATE_OPERATOR_NAME "__C-bit-and-update__" // &=
186 #define BITWISE_XOR_UPDATE_OPERATOR_NAME "__C-bit-xor-update__" // ^=
187 #define CONDITIONAL_OPERATOR_NAME "__C-conditional__" // ?
188 #define C_NOT_OPERATOR_NAME "__C-logical-not__" // !
189 #define C_NON_EQUAL_OPERATOR_NAME "__C-non-equal__" // !=
190 #define C_MODULO_OPERATOR_NAME "__C-modulo__" // %
191 
192 #define BITWISE_OR_OPERATOR_NAME "|"
193 #define MIN_OPERATOR_NAME "MIN"
194 #define MIN0_OPERATOR_NAME "MIN0"
195 #define MIN1_OPERATOR_NAME "MIN1"
196 #define AMIN0_OPERATOR_NAME "AMIN0"
197 #define AMIN1_OPERATOR_NAME "AMIN1"
198 #define DMIN1_OPERATOR_NAME "DMIN1"
199 #define MAX_OPERATOR_NAME "MAX"
200 #define MAX0_OPERATOR_NAME "MAX0"
201 #define AMAX0_OPERATOR_NAME "AMAX0"
202 #define MAX1_OPERATOR_NAME "MAX1"
203 #define AMAX1_OPERATOR_NAME "AMAX1"
204 #define DMAX1_OPERATOR_NAME "DMAX1"
205 #define ABS_OPERATOR_NAME "ABS"
206 #define IABS_OPERATOR_NAME "IABS"
207 #define DABS_OPERATOR_NAME "DABS"
208 #define CABS_OPERATOR_NAME "CABS"
209 #define CDABS_OPERATOR_NAME "CDABS"
210 
211 #define LENGTH_OPERATOR_NAME "LEN"
212 #define INDEX_OPERATOR_NAME "INDEX"
213 #define LGE_OPERATOR_NAME "LGE"
214 #define LGT_OPERATOR_NAME "LGT"
215 #define LLE_OPERATOR_NAME "LLE"
216 #define LLT_OPERATOR_NAME "LLT"
217 
218 /* generic conversion names.
219  */
220 #define INT_GENERIC_CONVERSION_NAME "INT"
221 #define IFIX_GENERIC_CONVERSION_NAME "IFIX"
222 #define IDINT_GENERIC_CONVERSION_NAME "IDINT"
223 #define REAL_GENERIC_CONVERSION_NAME "REAL"
224 #define FLOAT_GENERIC_CONVERSION_NAME "FLOAT"
225 #define DFLOAT_GENERIC_CONVERSION_NAME "DFLOAT"
226 #define SNGL_GENERIC_CONVERSION_NAME "SNGL"
227 #define DBLE_GENERIC_CONVERSION_NAME "DBLE"
228 #define DREAL_GENERIC_CONVERSION_NAME "DREAL"
229 #define CMPLX_GENERIC_CONVERSION_NAME "CMPLX"
230 #define DCMPLX_GENERIC_CONVERSION_NAME "DCMPLX"
231 
232 #define INT_TO_CHAR_CONVERSION_NAME "CHAR"
233 #define CHAR_TO_INT_CONVERSION_NAME "ICHAR"
234 
235 #define AINT_CONVERSION_NAME "AINT"
236 #define DINT_CONVERSION_NAME "DINT"
237 #define ANINT_CONVERSION_NAME "ANINT"
238 #define DNINT_CONVERSION_NAME "DNINT"
239 #define NINT_CONVERSION_NAME "NINT"
240 #define IDNINT_CONVERSION_NAME "IDNINT"
241 #define AIMAG_CONVERSION_NAME "AIMAG"
242 #define DIMAG_CONVERSION_NAME "DIMAG"
243 
244 /* FI: intrinsics are defined at a third place after bootstrap and effects!
245  * I guess the name should be defined here and used in table(s) there
246  */
247 
248 #define AND_OPERATOR_NAME ".AND."
249 #define OR_OPERATOR_NAME ".OR."
250 #define C_OR_OPERATOR_NAME "||"
251 #define NOT_OPERATOR_NAME ".NOT."
252 #define NON_EQUAL_OPERATOR_NAME ".NE."
253 #define EQUIV_OPERATOR_NAME ".EQV."
254 #define NON_EQUIV_OPERATOR_NAME ".NEQV."
255 
256 #define TRUE_OPERATOR_NAME ".TRUE."
257 #define FALSE_OPERATOR_NAME ".FALSE."
258 #define ONE_OPERATOR_NAME "1"
259 #define ZERO_OPERATOR_NAME "0"
260 
261 #define GREATER_OR_EQUAL_OPERATOR_NAME ".GE."
262 #define C_GREATER_OR_EQUAL_OPERATOR_NAME ">="
263 #define GREATER_THAN_OPERATOR_NAME ".GT."
264 #define C_GREATER_THAN_OPERATOR_NAME ">"
265 #define LESS_OR_EQUAL_OPERATOR_NAME ".LE."
266 #define C_LESS_OR_EQUAL_OPERATOR_NAME "<="
267 #define LESS_THAN_OPERATOR_NAME ".LT."
268 #define C_LESS_THAN_OPERATOR_NAME "<"
269 #define EQUAL_OPERATOR_NAME ".EQ."
270 #define C_EQUAL_OPERATOR_NAME "=="
271 
272 #define CONTINUE_FUNCTION_NAME "CONTINUE"
273 #define C_CONTINUE_FUNCTION_NAME ";"
274 #define C_STATEMENT_END_STRING ";"
275 #define RETURN_FUNCTION_NAME "RETURN"
276 #define STOP_FUNCTION_NAME "STOP"
277 #define PAUSE_FUNCTION_NAME "PAUSE"
278 #define END_FUNCTION_NAME "END"
279 #define ENDDO_FUNCTION_NAME "ENDDO"
280 
281 #define BREAK_FUNCTION_NAME "break"
282 #define CASE_FUNCTION_NAME "case"
283 #define DEFAULT_FUNCTION_NAME "default"
284 #define C_RETURN_FUNCTION_NAME "return"
285 
286 #define SUBSTRING_FUNCTION_NAME "_SUBSTR"
287 #define CONCATENATION_FUNCTION_NAME "//"
288 #define ASSIGN_SUBSTRING_FUNCTION_NAME "_ASSIGN_SUBSTR"
289 
290 #define WRITE_FUNCTION_NAME "WRITE"
291 #define PRINT_FUNCTION_NAME "PRINT"
292 #define REWIND_FUNCTION_NAME "REWIND"
293 #define OPEN_FUNCTION_NAME "OPEN"
294 #define CLOSE_FUNCTION_NAME "CLOSE"
295 #define INQUIRE_FUNCTION_NAME "INQUIRE"
296 #define BACKSPACE_FUNCTION_NAME "BACKSPACE"
297 #define READ_FUNCTION_NAME "READ"
298 #define BUFFERIN_FUNCTION_NAME "BUFFERIN"
299 #define BUFFEROUT_FUNCTION_NAME "BUFFEROUT"
300 #define ENDFILE_FUNCTION_NAME "ENDFILE"
301 #define FORMAT_FUNCTION_NAME "FORMAT"
302 
303 
304 /* Bit manipulation functions */
305 #define ISHFT_OPERATOR_NAME "ISHFT"
306 #define ISHFTC_OPERATOR_NAME "ISHFTC"
307 #define IBITS_OPERATOR_NAME "IBITS"
308 #define MVBITS_OPERATOR_NAME "MVBITS"
309 #define BTEST_OPERATOR_NAME "BTEST"
310 #define IBSET_OPERATOR_NAME "IBSET"
311 #define IBCLR_OPERATOR_NAME "IBCLR"
312 #define BIT_SIZE_OPERATOR_NAME "BIT_SIZE"
313 #define IAND_OPERATOR_NAME "IAND"
314 #define IEOR_OPERATOR_NAME "IEOR"
315 #define IOR_OPERATOR_NAME "IOR"
316 
317 /* OMP related function and opertor names */
318 
319 #define OMP_IF_FUNCTION_NAME "if"
320 #define OMP_OMP_FUNCTION_NAME "omp"
321 #define OMP_FOR_FUNCTION_NAME "for"
322 #define OMP_PRIVATE_FUNCTION_NAME "private"
323 #define OMP_PARALLEL_FUNCTION_NAME "parallel"
324 #define OMP_REDUCTION_FUNCTION_NAME "reduction"
325 
326 /* F95 */
327 #define ALLOCATE_FUNCTION_NAME "ALLOCATE"
328 #define DEALLOCATE_FUNCTION_NAME "DEALLOCATE"
329 #define ETIME_FUNCTION_NAME "ETIME"
330 #define DTIME_FUNCTION_NAME "DTIME"
331 #define CPU_TIME_FUNCTION_NAME "CPU_TIME"
332 
333 /* F2003 */
334 #define C_LOC_FUNCTION_NAME "C_LOC"
335 
336 /* F2008 */
337 
338 /* BSD <err.h> */
339 #define ERR_FUNCTION_NAME "err"
340 #define ERRX_FUNCTION_NAME "errx"
341 #define WARN_FUNCTION_NAME "warn"
342 #define WARNX_FUNCTION_NAME "warnx"
343 #define VERR_FUNCTION_NAME "verr"
344 #define VERRX_FUNCTION_NAME "verrx"
345 #define VWARN_FUNCTION_NAME "vwarn"
346 #define VWARNX_FUNCTION_NAME "vwarnx"
347 
348 /* time.h */
349 #define CLOCK_FUNCTION_NAME "clock"
350 #define TIME_FUNCTION_NAME "time"
351 #define DIFFTIME_FUNCTION_NAME "difftime"
352 #define MKTIME_FUNCTION_NAME "mktime"
353 #define STRFTIME_FUNCTION_NAME "strftime"
354 #define STRPTIME_FUNCTION_NAME "strptime"
355 #define STRFTIME_L_FUNCTION_NAME "strftime_l"
356 #define STRPTIME_L_FUNCTION_NAME "strptime_l"
357 #define GMTIME_FUNCTION_NAME "gmtime"
358 #define LOCALTIME_FUNCTION_NAME "localtime"
359 #define GMTIME_R_FUNCTION_NAME "gmtime_r"
360 #define LOCALTIME_R_FUNCTION_NAME "localtime_r"
361 #define ASCTIME_FUNCTION_NAME "asctime"
362 #define CTIME_FUNCTION_NAME "ctime"
363 #define ASCTIME_R_FUNCTION_NAME "asctime_r"
364 #define CTIME_R_FUNCTION_NAME "ctime_r"
365 #define TZSET_FUNCTION_NAME "tzset"
366 #define STIME_FUNCTION_NAME "stime"
367 #define TIMEGM_FUNCTION_NAME "timegm"
368 #define TIMELOCAL_FUNCTION_NAME "timelocal"
369 #define DYSIZE_FUNCTION_NAME "dysize"
370 #define NANOSLEEP_FUNCTION_NAME "nanosleep"
371 #define CLOCK_GETRES_FUNCTION_NAME "clock_getres"
372 #define CLOCK_GETTIME_FUNCTION_NAME "clock_gettime"
373 #define CLOCK_SETTIME_FUNCTION_NAME "clock_settime"
374 #define CLOCK_NANOSLEEP_FUNCTION_NAME "clock_nanosleep"
375 #define CLOCK_GETCPULOCKID_FUNCTION_NAME "clock_getcpulockid"
376 #define TIMER_CREATE_FUNCTION_NAME "timer_create"
377 #define TIMER_DELETE_FUNCTION_NAME "timer_delete"
378 #define TIMER_SETTIME_FUNCTION_NAME "timer_settime"
379 #define TIMER_GETTIME_FUNCTION_NAME "timer_gettime"
380 #define TIMER_GETOVERRUN_FUNCTION_NAME "timer_getoverrun"
381 #define GETDATE_FUNCTION_NAME "getdate"
382 #define GETDATE_R_FUNCTION_NAME "getdate_r"
383 
384 //to check
385 #define DRAND48_FUNCTION_NAME "drand48"
386 #define ERAND48_FUNCTION_NAME "erand48"
387 #define JRAND48_FUNCTION_NAME "jrand48"
388 #define LCONG48_FUNCTION_NAME "lcong48"
389 #define LRAND48_FUNCTION_NAME "lrand48"
390 #define MRAND48_FUNCTION_NAME "mrand48"
391 #define NRAND48_FUNCTION_NAME "nrand48"
392 #define SEED48_FUNCTION_NAME "seed48"
393 #define SRAND48_FUNCTION_NAME "srand48"
394 
395 #define PUTENV_FUNCTION_NAME "putenv"
396 #define SETKEY_FUNCTION_NAME "setkey"
397 #define SWAB_FUNCTION_NAME "swab"
398 #define MKSTEMP_FUNCTION_NAME "mkstemp"
399 #define MKSTEMP64_FUNCTION_NAME "mkstemp64"
400 #define A614_FUNCTION_NAME "a64l"
401 #define ECVT_FUNCTION_NAME "ecvt"
402 #define FCVT_FUNCTION_NAME "fcvt"
403 #define GCVT_FUNCTION_NAME "gcvt"
404 #define GETSUBOPT_FUNCTION_NAME "getsubopt"
405 #define GRANTPT_FUNCTION_NAME "grantpt"
406 #define INITSTATE_FUNCTION_NAME "initstate"
407 #define C_164A_FUNCTION_NAME "l64a"
408 #define MKTEMP_FUNCTION_NAME "mktemp"
409 #define PTSNAME_FUNCTION_NAME "ptsname"
410 #define REALPATH_FUNCTION_NAME "realpath"
411 #define SETSTATE_FUNCTION_NAME "setstate"
412 #define TTYSLOT_FUNCTION_NAME "ttyslot"
413 #define UNLOCKPT_FUNCTION_NAME "unlockpt"
414 #define VALLOC_FUNCTION_NAME "valloc"
415 #define DUP2_FUNCTION_NAME "dup2"
416 #define QECVT_FUNCTION_NAME "qecvt"
417 #define QFCVT_FUNCTION_NAME "qfcvt"
418 #define QGCVT_FUNCTION_NAME "qgcvt"
419 #define GETCWD_FUNCTION_NAME "getcwd"
420 #define GETEXECNAME_FUNCTION_NAME "getexecname"
421 #define GETLOGIN_FUNCTION_NAME "getlogin"
422 #define GETOPT_FUNCTION_NAME "getopt" // unistd.h
423 #define GETOPT_LONG_FUNCTION_NAME "getopt_long"
424 #define GETOPT_LONG_ONLY_FUNCTION_NAME "getopt_long_only"
425 #define GETPASS_FUNCTION_NAME "getpass"
426 #define GETPASSPHRASE_FUNCTION_NAME "getpassphrase"
427 #define GETPW_FUNCTION_NAME "getpw"
428 #define ISATTY_FUNCTION_NAME "isatty"
429 #define MEMALIGN_FUNCTION_NAME "memalign"
430 #define TTYNAME_FUNCTION_NAME "ttyname"
431 #define LLTOSTR_FUNCTION_NAME "lltostr"
432 #define ULLTOSTR_FUNCTION_NAME "ulltostr"
433 
434 #define POSIX_MEMALIGN_FUNCTION_NAME "posix_memalign"
435 #define ATOQ_FUNCTION_NAME "atoq"
436 #define RANDOM_FUNCTION_NAME "random"
437 #define SRANDOM_FUNCTION_NAME "srandom"
438 #define MOD_INTRINSIC_NAME "MOD"
439 
440 /* PIPS run-time support for C code generation
441  *
442  * The first argument is the number of effective arguments, the second
443  * argument is the first effective argument and other arguments are
444  * passed as varargs. For instance:
445  *
446  * pips_min(5, 1, 2, 3, 4, 5);
447  *
448  * Initially, the source code for these two operators is available in
449  * validation/Hyperplane/run_time.src/pips_run_time.c
450  */
451 #define PIPS_C_MIN_OPERATOR_NAME "pips_min"
452 #define PIPS_C_MAX_OPERATOR_NAME "pips_max"
453 #define PIPS_C_DIV_OPERATOR_NAME "pips_div"
454 
455 
456  /* Here are C intrinsics arranged in the order of the standard
457  ISO/IEC 9899:TC2. MB */
458 /* include <assert.h> */
459 
460 #define ASSERT_FUNCTION_NAME "__assert"
461 #define ASSERT_FAIL_FUNCTION_NAME "__assert_fail"
462 
463 /* include <complex.h> */
464 
465 #define CACOS_OPERATOR_NAME "cacos"
466 #define CACOSF_OPERATOR_NAME "cacosf"
467 #define CACOSL_OPERATOR_NAME "cacosl"
468 #define CASIN_OPERATOR_NAME "casin"
469 #define CASINF_OPERATOR_NAME "casinf"
470 #define CASINL_OPERATOR_NAME "casinl"
471 #define CATAN_OPERATOR_NAME "catan"
472 #define CATANF_OPERATOR_NAME "catanf"
473 #define CATANL_OPERATOR_NAME "catanl"
474 #define C_CCOS_OPERATOR_NAME "ccos"
475 #define CCOSF_OPERATOR_NAME "ccosf"
476 #define CCOSL_OPERATOR_NAME "ccosl"
477 #define C_CSIN_OPERATOR_NAME "csin"
478 #define CSINF_OPERATOR_NAME "csinf"
479 #define CSINL_OPERATOR_NAME "csinl"
480 #define CTAN_OPERATOR_NAME "ctan"
481 #define CTANF_OPERATOR_NAME "ctanf"
482 #define CTANL_OPERATOR_NAME "ctanl"
483 #define CACOSH_OPERATOR_NAME "cacosh"
484 #define CACOSHF_OPERATOR_NAME "cacoshf"
485 #define CACOSHL_OPERATOR_NAME "cacoshl"
486 #define CASINH_OPERATOR_NAME "casinh"
487 #define CASINHF_OPERATOR_NAME "casinhf"
488 #define CASINHL_OPERATOR_NAME "casinhl"
489 #define CATANH_OPERATOR_NAME "catanh"
490 #define CATANHF_OPERATOR_NAME "catanhf"
491 #define CATANHL_OPERATOR_NAME "catanhl"
492 #define CCOSH_OPERATOR_NAME "ccosh"
493 #define CCOSHF_OPERATOR_NAME "ccoshf"
494 #define CCOSHL_OPERATOR_NAME "ccoshl"
495 #define CSINH_OPERATOR_NAME "csinh"
496 #define CSINHF_OPERATOR_NAME "csinhf"
497 #define CSINHL_OPERATOR_NAME "csinhl"
498 #define CTANH_OPERATOR_NAME "ctanh"
499 #define CTANHF_OPERATOR_NAME "ctanhf"
500 #define CTANHL_OPERATOR_NAME "ctanhl"
501 #define C_CEXP_OPERATOR_NAME "cexp"
502 #define CEXPF_OPERATOR_NAME "cexpf"
503 #define CEXPL_OPERATOR_NAME "cexpl"
504 #define C_CLOG_OPERATOR_NAME "clog"
505 #define CLOGF_OPERATOR_NAME "clogf"
506 #define CLOGL_OPERATOR_NAME "clogl"
507 #define C_CABS_OPERATOR_NAME "cabs"
508 #define CABSF_OPERATOR_NAME "cabsf"
509 #define CABSL_OPERATOR_NAME "cabsl"
510 #define CPOW_OPERATOR_NAME "cpow"
511 #define CPOWF_OPERATOR_NAME "cpowf"
512 #define CPOWL_OPERATOR_NAME "cpowl"
513 #define C_CSQRT_OPERATOR_NAME "csqrt"
514 #define CSQRTF_OPERATOR_NAME "csqrtf"
515 #define CSQRTL_OPERATOR_NAME "csqrtl"
516 #define CARG_OPERATOR_NAME "carg"
517 #define CARGF_OPERATOR_NAME "cargf"
518 #define CARGL_OPERATOR_NAME "cargl"
519 #define CIMAG_OPERATOR_NAME "cimag"
520 #define GCC_CIMAG_OPERATOR_NAME "__imag__"
521 #define CIMAGF_OPERATOR_NAME "cimagf"
522 #define CIMAGL_OPERATOR_NAME "cimagl"
523 #define CONJ_OPERATOR_NAME "conj"
524 #define CONJF_OPERATOR_NAME "conjf"
525 #define CONJL_OPERATOR_NAME "conjl"
526 #define CPROJ_OPERATOR_NAME "cproj"
527 #define CPROJF_OPERATOR_NAME "cprojf"
528 #define CPROJL_OPERATOR_NAME "cprojl"
529 #define CREAL_OPERATOR_NAME "creal"
530 #define GCC_CREAL_OPERATOR_NAME "__real__"
531 #define CREALF_OPERATOR_NAME "crealf"
532 #define CREALL_OPERATOR_NAME "creall"
533 
534 
535 /* #include <ctype.h> */
536 
537 #define ISALNUM_OPERATOR_NAME "isalnum"
538 #define ISALPHA_OPERATOR_NAME "isalpha"
539 #define ISBLANK_OPERATOR_NAME "isblank"
540 #define ISCNTRL_OPERATOR_NAME "iscntrl"
541 #define ISDIGIT_OPERATOR_NAME "isdigit"
542 #define ISGRAPH_OPERATOR_NAME "isgraph"
543 #define ISLOWER_OPERATOR_NAME "islower"
544 #define ISPRINT_OPERATOR_NAME "isprint"
545 #define ISPUNCT_OPERATOR_NAME "ispunct"
546 #define ISSPACE_OPERATOR_NAME "isspace"
547 #define ISUPPER_OPERATOR_NAME "isupper"
548 #define ISXDIGIT_OPERATOR_NAME "isxdigit"
549 #define TOLOWER_OPERATOR_NAME "tolower"
550 #define TOUPPER_OPERATOR_NAME "toupper"
551 
552 //not found in standard C99 (in GNU C Library)
553 #define ISASCII_OPERATOR_NAME "isascii"
554 #define TOASCII_OPERATOR_NAME "toascii"
555 #define _TOLOWER_OPERATOR_NAME "_tolower"
556 #define _TOUPPER_OPERATOR_NAME "_toupper"
557 
558 /* Part of the binary standard */
559 #define CTYPE_B_LOC_OPERATOR_NAME "__ctype_b_loc"
560 
561 
562 /* bits/errno.h */
563 #define __ERRNO_LOCATION_OPERATOR_NAME "__errno_location"
564 
565 
566 /* #include <fenv.h> */
567 #define FECLEAREXCEPT_FUNCTION_NAME "feclearexcept"
568 #define FERAISEEXCEPT_FUNCTION_NAME "feraiseexcept"
569 #define FESETEXCEPTFLAG_FUNCTION_NAME "fesetexceptflag"
570 #define FETESTEXCEPT_FUNCTION_NAME "fetestexcept"
571 #define FEGETROUND_FUNCTION_NAME "fegetround"
572 #define FESETROUND_FUNCTION_NAME "fesetround"
573 
574 /* #include <inttypes.h> */
575 #define IMAXABS_FUNCTION_NAME "imaxabs"
576 #define IMAXDIV_FUNCTION_NAME "imaxdiv"
577 
578 /* #include <locale.h> */
579 #define SETLOCALE_FUNCTION_NAME "setlocale"
580 
581 /* #include <math.h> */
582 
583 #define FPCLASSIFY_OPERATOR_NAME "fpclassify"
584 #define ISFINITE_OPERATOR_NAME "isfinite"
585 #define ISINF_OPERATOR_NAME "isinf"
586 #define ISNAN_OPERATOR_NAME "isnan"
587 #define ISNANL_OPERATOR_NAME "isnanl"
588 #define ISNANF_OPERATOR_NAME "isnanf"
589 #define ISNORMAL_OPERATOR_NAME "isnormal"
590 #define SIGNBIT_OPERATOR_NAME "signbit"
591 #define C_ACOS_OPERATOR_NAME "acos"
592 #define ACOSF_OPERATOR_NAME "acosf"
593 #define ACOSL_OPERATOR_NAME "acosl"
594 #define C_ASIN_OPERATOR_NAME "asin"
595 #define ASINF_OPERATOR_NAME "asinf"
596 #define ASINL_OPERATOR_NAME "asinl"
597 #define C_ATAN_OPERATOR_NAME "atan"
598 #define ATANF_OPERATOR_NAME "atanf"
599 #define ATANL_OPERATOR_NAME "atanl"
600 #define C_ATAN2_OPERATOR_NAME "atan2"
601 #define ATAN2F_OPERATOR_NAME "atan2f"
602 #define ATAN2L_OPERATOR_NAME "atan2l"
603 #define C_COS_OPERATOR_NAME "cos"
604 #define COSF_OPERATOR_NAME "cosf"
605 #define COSL_OPERATOR_NAME "cosl"
606 #define C_SIN_OPERATOR_NAME "sin"
607 #define SINF_OPERATOR_NAME "sinf"
608 #define SINL_OPERATOR_NAME "sinl"
609 #define C_TAN_OPERATOR_NAME "tan"
610 #define TANF_OPERATOR_NAME "tanf"
611 #define TANL_OPERATOR_NAME "tanl"
612 #define C_ACOSH_OPERATOR_NAME "acosh"
613 #define ACOSHF_OPERATOR_NAME "acoshf"
614 #define ACOSHL_OPERATOR_NAME "acoshl"
615 #define C_ASINH_OPERATOR_NAME "asinh"
616 #define ASINHF_OPERATOR_NAME "asinhf"
617 #define ASINHL_OPERATOR_NAME "asinhl"
618 #define C_ATANH_OPERATOR_NAME "atanh"
619 #define ATANHF_OPERATOR_NAME "atanhf"
620 #define ATANHL_OPERATOR_NAME "atanhl"
621 #define C_COSH_OPERATOR_NAME "cosh"
622 #define COSHF_OPERATOR_NAME "coshf"
623 #define COSHL_OPERATOR_NAME "coshl"
624 #define C_SINH_OPERATOR_NAME "sinh"
625 #define SINHF_OPERATOR_NAME "sinhf"
626 #define SINHL_OPERATOR_NAME "sinhl"
627 #define C_TANH_OPERATOR_NAME "tanh"
628 #define TANHF_OPERATOR_NAME "tanhf"
629 #define TANHL_OPERATOR_NAME "tanhl"
630 #define C_EXP_OPERATOR_NAME "exp"
631 #define EXPF_OPERATOR_NAME "expf"
632 #define EXPL_OPERATOR_NAME "expl"
633 #define EXP2_OPERATOR_NAME "exp2"
634 #define EXP2F_OPERATOR_NAME "exp2f"
635 #define EXP2L_OPERATOR_NAME "exp2l"
636 #define EXPM1_OPERATOR_NAME "expm1"
637 #define EXPM1F_OPERATOR_NAME "expm1f"
638 #define EXPM1L_OPERATOR_NAME "expm1l"
639 #define FREXP_OPERATOR_NAME "frexp"
640 #define ILOGB_OPERATOR_NAME "ilogb"
641 #define ILOGBF_OPERATOR_NAME "ilogbf"
642 #define ILOGBL_OPERATOR_NAME "ilogbl"
643 #define LDEXP_OPERATOR_NAME "ldexp"
644 #define LDEXPF_OPERATOR_NAME "ldexpf"
645 #define LDEXPL_OPERATOR_NAME "ldexpl"
646 #define C_LOG_OPERATOR_NAME "log"
647 #define LOGF_OPERATOR_NAME "logf"
648 #define LOGL_OPERATOR_NAME "logl"
649 #define C_LOG10_OPERATOR_NAME "log10"
650 #define LOG10F_OPERATOR_NAME "log10f"
651 #define LOG10L_OPERATOR_NAME "log10l"
652 #define LOG1P_OPERATOR_NAME "log1p"
653 #define LOG1PF_OPERATOR_NAME "log1pf"
654 #define LOG1PL_OPERATOR_NAME "log1pl"
655 #define LOG2_OPERATOR_NAME "log2"
656 #define LOG2F_OPERATOR_NAME "log2f"
657 #define LOG2L_OPERATOR_NAME "log2l"
658 #define LOGB_OPERATOR_NAME "logb"
659 #define LOGBF_OPERATOR_NAME "logbf"
660 #define LOGBL_OPERATOR_NAME "logbl"
661 #define MODF_OPERATOR_NAME "modf"
662 #define SCALBN_OPERATOR_NAME "scalbn"
663 #define SCALBNF_OPERATOR_NAME "scalbnf"
664 #define SCALBNL_OPERATOR_NAME "scalbnl"
665 #define SCALB_OPERATOR_NAME "scalb"
666 #define SCALBLN_OPERATOR_NAME "scalbln"
667 #define SCALBLNF_OPERATOR_NAME "scalblnf"
668 #define SCALBLNL_OPERATOR_NAME "scalblnl"
669 #define CBRT_OPERATOR_NAME "cbrt"
670 #define CBRTF_OPERATOR_NAME "cbrtf"
671 #define CBRTL_OPERATOR_NAME "cbrtl"
672 #define FABS_OPERATOR_NAME "fabs"
673 #define FABSF_OPERATOR_NAME "fabsf"
674 #define FABSL_OPERATOR_NAME "fabsl"
675 #define HYPOT_OPERATOR_NAME "hypot"
676 #define HYPOTF_OPERATOR_NAME "hypotf"
677 #define HYPOTL_OPERATOR_NAME "hypotl"
678 #define POW_OPERATOR_NAME "pow"
679 #define POWF_OPERATOR_NAME "powf"
680 #define POWL_OPERATOR_NAME "powl"
681 #define C_SQRT_OPERATOR_NAME "sqrt"
682 #define SQRTF_OPERATOR_NAME "sqrtf"
683 #define SQRTL_OPERATOR_NAME "sqrtl"
684 #define ERF_OPERATOR_NAME "erf"
685 #define ERFF_OPERATOR_NAME "erff"
686 #define ERFL_OPERATOR_NAME "erfl"
687 #define ERFC_OPERATOR_NAME "erfc"
688 #define ERFCF_OPERATOR_NAME "erfcf"
689 #define ERFCL_OPERATOR_NAME "erfcl"
690 #define GAMMA_OPERATOR_NAME "gamma"
691 #define LGAMMA_OPERATOR_NAME "lgamma"
692 #define LGAMMAF_OPERATOR_NAME "lgammaf"
693 #define LGAMMAL_OPERATOR_NAME "lgammal"
694 #define TGAMMA_OPERATOR_NAME "tgamma"
695 #define TGAMMAF_OPERATOR_NAME "tgammaf"
696 #define TGAMMAL_OPERATOR_NAME "tgammal"
697 #define CEIL_OPERATOR_NAME "ceil"
698 #define CEILF_OPERATOR_NAME "ceilf"
699 #define CEILL_OPERATOR_NAME "ceill"
700 #define FLOOR_OPERATOR_NAME "floor"
701 #define FLOORF_OPERATOR_NAME "floorf"
702 #define FLOORL_OPERATOR_NAME "floorl"
703 #define NEARBYINT_OPERATOR_NAME "nearbyint"
704 #define NEARBYINTF_OPERATOR_NAME "nearbyintf"
705 #define NEARBYINTL_OPERATOR_NAME "nearbyintl"
706 #define RINT_OPERATOR_NAME "rint"
707 #define RINTF_OPERATOR_NAME "rintf"
708 #define RINTL_OPERATOR_NAME "rintl"
709 #define LRINT_OPERATOR_NAME "lrint"
710 #define LRINTF_OPERATOR_NAME "lrintf"
711 #define LRINTL_OPERATOR_NAME "lrintl"
712 #define LLRINT_OPERATOR_NAME "llrint"
713 #define LLRINTF_OPERATOR_NAME "llrintf"
714 #define LLRINTL_OPERATOR_NAME "llrintl"
715 #define ROUND_OPERATOR_NAME "round"
716 #define ROUNDF_OPERATOR_NAME "roundf"
717 #define ROUNDL_OPERATOR_NAME "roundl"
718 #define LROUND_OPERATOR_NAME "lround"
719 #define LROUNDF_OPERATOR_NAME "lroundf"
720 #define LROUNDL_OPERATOR_NAME "lroundl"
721 #define LLROUND_OPERATOR_NAME "llround"
722 #define LLROUNDF_OPERATOR_NAME "llroundf"
723 #define LLROUNDL_OPERATOR_NAME "llroundl"
724 #define TRUNC_OPERATOR_NAME "trunc"
725 #define TRUNCF_OPERATOR_NAME "truncf"
726 #define TRUNCL_OPERATOR_NAME "truncl"
727 #define FMOD_OPERATOR_NAME "fmod"
728 #define FMODF_OPERATOR_NAME "fmodf"
729 #define FMODL_OPERATOR_NAME "fmodl"
730 #define REMAINDER_OPERATOR_NAME "remainder"
731 #define REMAINDERF_OPERATOR_NAME "remainderf"
732 #define REMAINDERL_OPERATOR_NAME "remainderl"
733 #define COPYSIGN_OPERATOR_NAME "copysign"
734 #define COPYSIGNF_OPERATOR_NAME "copysignf"
735 #define COPYSIGNL_OPERATOR_NAME "copysignl"
736 #define NAN_OPERATOR_NAME "nan"
737 #define NANF_OPERATOR_NAME "nanf"
738 #define NANL_OPERATOR_NAME "nanl"
739 #define NEXTAFTER_OPERATOR_NAME "nextafter"
740 #define NEXTAFTERF_OPERATOR_NAME "nextafterf"
741 #define NEXTAFTERL_OPERATOR_NAME "nextafterl"
742 #define NEXTTOWARD_OPERATOR_NAME "nexttoward"
743 #define NEXTTOWARDF_OPERATOR_NAME "nexttowardf"
744 #define NEXTTOWARDL_OPERATOR_NAME "nexttowardl"
745 #define FDIM_OPERATOR_NAME "fdim"
746 #define FDIMF_OPERATOR_NAME "fdimf"
747 #define FDIML_OPERATOR_NAME "fdiml"
748 #define FMAX_OPERATOR_NAME "fmax"
749 #define FMAXF_OPERATOR_NAME "fmaxf"
750 #define FMAXL_OPERATOR_NAME "fmaxl"
751 #define FMIN_OPERATOR_NAME "fmin"
752 #define FMINF_OPERATOR_NAME "fminf"
753 #define FMINL_OPERATOR_NAME "fminl"
754 #define FMA_OPERATOR_NAME "fma"
755 #define FMAF_OPERATOR_NAME "fmaf"
756 #define FMAL_OPERATOR_NAME "fmal"
757 #define ISGREATER_OPERATOR_NAME "isgreater"
758 #define ISGREATEREQUAL_OPERATOR_NAME "isgreaterequal"
759 #define ISLESS_OPERATOR_NAME "isless"
760 #define ISLESSEQUAL_OPERATOR_NAME "islessequal"
761 #define ISLESSGREATER_OPERATOR_NAME "islessgreater"
762 #define ISUNORDERED_OPERATOR_NAME "isunordered"
763 
764 
765 /* signal.h */
766 #define SIGNAL_OPERATOR_NAME "signal"
767 #define RAISE_FUNCTION_NAME "raise"
768 
769 
770 /* vararg stuff. va_args is a special construct because its second
771  parameter is a type, not an expression. */
772 #define BUILTIN_VA_END "__builtin_va_end"
773 #define BUILTIN_VA_START "__builtin_va_start"
774 #define BUILTIN_VA_COPY "__builtin_va_copy"
775 
776 
777 /*io functions: C library and system IO. Amira Mensi*/
778 
779 /* unistd.h */
780 
781 #define LSEEK_FUNCTION_NAME "lseek"
782 #define LSEEK64_FUNCTION_NAME "lseekg4"
783 #define C_CLOSE_FUNCTION_NAME "close"
784 #define C_READ_FUNCTION_NAME "read"
785 #define C_WRITE_FUNCTION_NAME "write"
786 #define PREAD_FUNCTION_NAME "pread"
787 #define PWRITE_FUNCTION_NAME "pwrite"
788 #define PREAD64_FUNCTION_NAME "pread64"
789 #define PIPE_FUNCTION_NAME "pipe"
790 #define PIPE2_FUNCTION_NAME "pipe2"
791 #define SLEEP_FUNCTION_NAME "sleep"
792 #define UALARM_FUNCTION_NAME "ualarm"
793 #define USLEEP_FUNCTION_NAME "usleep"
794 #define C_PAUSE_FUNCTION_NAME "pause"
795 #define CHOWN_FUNCTION_NAME "chown"
796 #define FCHOWN_FUNCTION_NAME "fchown"
797 #define LCHOWN_FUNCTION_NAME "lchown"
798 #define FCHOWNAT_FUNCTION_NAME "fchownat"
799 #define CHDIR_FUNCTION_NAME "chdir"
800 #define FCHDIR_FUNCTION_NAME "fchdir"
801 #define GETCWD_FUNCTION_NAME "getcwd"
802 #define GET_CURRENT_DIR_NAME_FUNCTION_NAME "get_current_dir_name"
803 #define GETWD_FUNCTION_NAME "getwd"
804 #define DUP_FUNCTION_NAME "dup"
805 #define DUP2_FUNCTION_NAME "dup2"
806 #define DUP3_FUNCTION_NAME "dup3"
807 #define EXECVE_FUNCTION_NAME "execve"
808 #define FEXECVE_FUNCTION_NAME "fexecve"
809 #define EXECV_FUNCTION_NAME "execv"
810 #define EXECLE_FUNCTION_NAME "execle"
811 #define EXECL_FUNCTION_NAME "execl"
812 #define EXECVP_FUNCTION_NAME "execvp"
813 #define EXECLP_FUNCTION_NAME "execlp"
814 #define EXECVPE_FUNCTION_NAME "execvpe"
815 #define NICE_FUNCTION_NAME "nice"
816 #define _EXIT_FUNCTION_NAME "_exit"
817 #define PATHCONF_FUNCTION_NAME "pathconf"
818 #define FPATHCONF_FUNCTION_NAME "fpathconf"
819 #define SYSCONF_FUNCTION_NAME "sysconf"
820 #define CONFSTR_FUNCTION_NAME "constrf"
821 #define GETPID_FUNCTION_NAME "getpid"
822 #define GETPPID_FUNCTION_NAME "getppid"
823 #define GETPGRP_FUNCTION_NAME "getpgrp"
824 #define __GETPGID_FUNCTION_NAME "__getpgid"
825 #define GETPGID_FUNCTION_NAME "getpgid"
826 #define SETPGID_FUNCTION_NAME "setpgid"
827 #define SETPGRP_FUNCTION_NAME "setpgrp"
828 #define SETSID_FUNCTION_NAME "setsid"
829 #define GETSID_FUNCTION_NAME "getsid"
830 #define GETUID_FUNCTION_NAME "getuid"
831 #define GETEUID_FUNCTION_NAME "geteuid"
832 #define GETGID_FUNCTION_NAME "getgid"
833 #define GETEGID_FUNCTION_NAME "getegid"
834 #define GETPGROUPS_FUNCTION_NAME "getgroups"
835 #define GROUP_MEMBER_FUNCTION_NAME "group_member"
836 #define SETUID_FUNCTION_NAME "setuid"
837 #define SETREUID_FUNCTION_NAME "setreuid"
838 #define SETEUID_FUNCTION_NAME "seteuid"
839 #define SETGID_FUNCTION_NAME "setgid"
840 #define SETREGID_FUNCTION_NAME "setregid"
841 #define SETEGID_FUNCTION_NAME "setegid"
842 #define GETRESUID_FUNCTION_NAME "getresuid"
843 #define GETRESGID_FUNCTION_NAME "getresgid"
844 #define SETRESUID_FUNCTION_NAME "setresuid"
845 #define SETRESGID_FUNCTION_NAME "setresgid"
846 #define FORK_FUNCTION_NAME "fork"
847 #define VFORK_FUNCTION_NAME "vfork"
848 #define TTYNAME_FUNCTION_NAME "ttyname"
849 #define TTYNAME_R_FUNCTION_NAME "ttyname_r"
850 #define ISATTY_FUNCTION_NAME "isatty"
851 #define TTYSLOT_FUNCTION_NAME "ttyslot"
852 #define LINK_FUNCTION_NAME "link"
853 #define LINKAT_FUNCTION_NAME "linkat"
854 #define SYMLINK_FUNCTION_NAME "symlink"
855 #define READLINK_FUNCTION_NAME "readlink"
856 #define SYMLINKAT_FUNCTION_NAME "symlinkar"
857 #define READLINKAT_FUNCTION_NAME "readlinkat"
858 #define UNLINK_FUNCTION_NAME "unlink"
859 #define UNLINKAT_FUNCTION_NAME "unlinkat"
860 #define RMDIR_FUNCTION_NAME "rmdir"
861 #define TCGETPGRP_FUNCTION_NAME "tcgetpgrp"
862 #define TCSETPGRP_FUNCTION_NAME "tcsetpgrp"
863 #define GETLOGIN_FUNCTION_NAME "getlogin"
864 #define GETLOGIN_R_FUNCTION_NAME "getlogin_r"
865 #define SETLOGIN_FUNCTION_NAME "setlogin"
866 #define GETHOSTNAME_FUNCTION_NAME "gethostname"
867 #define SETHOSTNAME_FUNCTION_NAME "sethostname"
868 #define SETHOSTID_FUNCTION_NAME "sethostid"
869 #define GETDOMAINNAME_FUNCTION_NAME "getdomainname"
870 #define SETDOMAINNAME_FUNCTION_NAME "setdomainname"
871 #define VHANGUP_FUNCTION_NAME "vhangup"
872 #define REVOKE_FUNCTION_NAME "revoke"
873 #define PROFIL_FUNCTION_NAME "profil"
874 #define ACCT_FUNCTION_NAME "acct"
875 #define GETUSERSHELL_FUNCTION_NAME "getusershell"
876 #define ENDUSERSHELL_FUNCTION_NAME "endusershell"
877 #define SETUSERSHELL_FUNCTION_NAME "setusershell"
878 #define DAEMON_FUNCTION_NAME "daemon"
879 #define CHROOT_FUNCTION_NAME "chroot"
880 #define GETPASS_FUNCTION_NAME "getpass"
881 #define FSYNC_FUNCTION_NAME "fsync"
882 #define SYNCFS_FUNCTION_NAME "syncfs"
883 #define GETHOSTID_FUNCTION_NAME "gethostid"
884 #define GETPAGESIZE_FUNCTION_NAME "getpagesize"
885 #define GETDTABLESIZE_FUNCTION_NAME "getdtablesize"
886 #define TRUNCATE_FUNCTION_NAME "truncate"
887 #define TRUNCATE64_FUNCTION_NAME "truncate64"
888 #define FTRUNCATE_FUNCTION_NAME "ftruncate"
889 #define FTRUNCATE64_FUNCTION_NAME "ftruncate64"
890 #define BRK_FUNCTION_NAME "brk"
891 #define SBRK_FUNCTION_NAME "sbrk"
892 #define SYSCALL_FUNCTION_NAME "syscall"
893 #define LOCKF_FUNCTION_NAME "lockf"
894 #define LOCKF64_FUNCTION_NAME "lockf64"
895 #define FDATASYNC_FUNCTION_NAME "fdatasync"
896 #define CRYPT_FUNCTION_NAME "crypt"
897 #define ENCRYPT_FUNCTION_NAME "encrypt"
898 #define SWAB_FUNCTION_NAME "swab"
899 #define CTERMID_FUNCTION_NAME "ctermid"
900 /* Not found in unistd.h. Requires sys/types.h sys/stat.h and fcntl.h.
901  * The man -S 2 page indicates it is overloaded with two or three
902  * arguments.
903  */
904 #define C_OPEN_FUNCTION_NAME "open"
905 
906 /*#include<stdio.h> */
907 
908 #define PRINTF_FUNCTION_NAME "printf"
909 #define FPRINTF_FUNCTION_NAME "fprintf"
910 #define SCANF_FUNCTION_NAME "scanf"
911 #define ISOC99_SCANF_FUNCTION_NAME "__isoc99_scanf"
912 #define ISOC99_SCANF_USER_FUNCTION_NAME "scanf"
913 #define FSCANF_FUNCTION_NAME "fscanf"
914 #define ISOC99_FSCANF_FUNCTION_NAME "__isoc99_fscanf"
915 #define ISOC99_FSCANF_USER_FUNCTION_NAME "fscanf"
916 #define PUTS_FUNCTION_NAME "puts"
917 #define GETS_FUNCTION_NAME "gets"
918 #define FPUTS_FUNCTION_NAME "fputs"
919 #define FGETS_FUNCTION_NAME "fgets"
920 #define FPUTC_FUNCTION_NAME "fputc"
921 #define FGETC_FUNCTION_NAME "fgetc"
922 #define FOPEN_FUNCTION_NAME "fopen"
923 #define FDOPEN_FUNCTION_NAME "fdopen"
924 #define FREOPEN_FUNCTION_NAME "freopen"
925 #define FCLOSE_FUNCTION_NAME "fclose"
926 #define SNPRINTF_FUNCTION_NAME "snprintf"
927 #define SSCANF_FUNCTION_NAME "sscanf"
928 #define ISOC99_SSCANF_FUNCTION_NAME "__isoc99_sscanf"
929 #define ISOC99_SSCANF_USER_FUNCTION_NAME "sscanf"
930 #define VFPRINTF_FUNCTION_NAME "vfprintf"
931 #define VFSCANF_FUNCTION_NAME "vfscanf"
932 #define ISOC99_VFSCANF_FUNCTION_NAME "__isoc99_vfscanf"
933 #define ISOC99_VFSCANF_USER_FUNCTION_NAME "vfscanf"
934 #define VPRINTF_FUNCTION_NAME "vprintf"
935 #define VSCANF_FUNCTION_NAME "vscanf"
936 #define ISOC99_VSCANF_FUNCTION_NAME "__isoc99_vscanf"
937 #define ISOC99_VSCANF_USER_FUNCTION_NAME "vscanf"
938 #define VSSCANF_FUNCTION_NAME "vsscanf"
939 #define ISOC99_VSSCANF_FUNCTION_NAME "__isoc99_vsscanf"
940 #define ISOC99_VSSCANF_USER_FUNCTION_NAME "vsscanf"
941 #define VSNPRINTF_FUNCTION_NAME "vsnprintf"
942 #define VSPRINTF_FUNCTION_NAME "vsprintf"
943 #define SPRINTF_FUNCTION_NAME "sprintf"
944 #define GETC_FUNCTION_NAME "getc"
945 #define _IO_GETC_FUNCTION_NAME "_IO_getc" /* libio.h */
946 #define GETCHAR_FUNCTION_NAME "getchar"
947 #define PUTC_FUNCTION_NAME "putc"
948 #define _IO_PUTC_FUNCTION_NAME "_IO_putc" /* libio.h */
949 #define PUTCHAR_FUNCTION_NAME "putchar"
950 #define UNGETC_FUNCTION_NAME "ungetc"
951 #define FREAD_FUNCTION_NAME "fread"
952 #define FWRITE_FUNCTION_NAME "fwrite"
953 #define FGETPOS_FUNCTION_NAME "fgetpos"
954 #define FSEEK_FUNCTION_NAME "fseek"
955 #define FSETPOS_FUNCTION_NAME "fsetpos"
956 #define FTELL_FUNCTION_NAME "ftell"
957 #define C_REWIND_FUNCTION_NAME "rewind"
958 #define CLEARERR_FUNCTION_NAME "clearerr"
959 #define FEOF_FUNCTION_NAME "feof"
960 #define FERROR_FUNCTION_NAME "ferror"
961 #define FILENO_FUNCTION_NAME "fileno"
962 #define PERROR_FUNCTION_NAME "perror"
963 // #define WRITE_SYSTEM_FUNCTION_NAME "write"
964 // #define READ_SYSTEM_FUNCTION_NAME "read"
965 #define REMOVE_FUNCTION_NAME "remove"
966 #define RENAME_FUNCTION_NAME "rename"
967 #define TMPFILE_FUNCTION_NAME "tmpfile"
968 #define TMPNAM_FUNCTION_NAME "tmpnam"
969 #define FFLUSH_FUNCTION_NAME "fflush"
970 #define FREOPEN_FUNCTION_NAME "freopen"
971 #define SETBUF_FUNCTION_NAME "setbuf"
972 #define SETVBUF_FUNCTION_NAME "setvbuf"
973 #define __FILBUF_FUNCTION_NAME "__filbuf"
974 #define __FILSBUF_FUNCTION_NAME "__flsbuf"
975 #define SETBUFFER_FUNCTION_NAME "setbuffer"
976 #define SETLINEBUF_FUNCTION_NAME "setlinebuf"
977 #define FDOPEN_FUNCTION_NAME "fdopen"
978 #define CTERMID_FUNCTION_NAME "ctermid"
979 #define FILENO_FUNCTION_NAME "fileno"
980 #define POPEN_FUNCTION_NAME "popen"
981 #define CUSERID_FUNCTION_NAME "cuserid"
982 #define TEMPNAM_FUNCTION_NAME "tempnam"
983 #define GETW_FUNCTION_NAME "getw"
984 #define PUTW_FUNCTION_NAME "putw"
985 #define PCLOSE_FUNCTION_NAME "pclose"
986 #define FSEEKO_FUNCTION_NAME "fseeko"
987 #define FTELLO_FUNCTION_NAME "ftello"
988 #define FOPEN64_FUNCTION_NAME "fopen64"
989 #define FREOPEN64_FUNCTION_NAME "freopen64"
990 #define TMPFILE64_FUNCTION_NAME "tmpfile64"
991 #define FGETPOS64_FUNCTION_NAME "fgetpos64"
992 #define FSETPOS64_FUNCTION_NAME "fsetpos64"
993 #define FSEEKO64_FUNCTION_NAME "fseeko64"
994 #define FTELLO64_FUNCTION_NAME "ftello64"
995 #define EXITHANDLE_FUNCTION_NAME "exithandle"
996 
997 
998 /* random functions of <stdlib.h> */
999 
1000 
1001 #define ATOF_FUNCTION_NAME "atof"
1002 #define ATOI_FUNCTION_NAME "atoi"
1003 #define ATOL_FUNCTION_NAME "atol"
1004 #define ATOLL_FUNCTION_NAME "atoll"
1005 #define STRTOD_FUNCTION_NAME "strtod"
1006 #define STRTOF_FUNCTION_NAME "strtof"
1007 #define STRTOLD_FUNCTION_NAME "strtold"
1008 #define STRTOL_FUNCTION_NAME "strtol"
1009 #define STRTOLL_FUNCTION_NAME "strtoll"
1010 #define STRTOUL_FUNCTION_NAME "strtoul"
1011 #define STRTOULL_FUNCTION_NAME "strtoull"
1012 #define RAND_FUNCTION_NAME "rand"
1013 #define SRAND_FUNCTION_NAME "srand"
1014 #define CALLOC_FUNCTION_NAME "calloc"
1015 #define FREE_FUNCTION_NAME "free"
1016 #define MALLOC_FUNCTION_NAME "malloc"
1017 #define REALLOC_FUNCTION_NAME "realloc"
1018 #define ALLOCA_FUNCTION_NAME "alloca"
1019 #define ABORT_FUNCTION_NAME "abort"
1020 #define ATEXIT_FUNCTION_NAME "atexit"
1021 #define EXIT_FUNCTION_NAME "exit"
1022 #define _EXIT_FUNCTION_NAME "_exit"
1023 #define GETENV_FUNCTION_NAME "getenv"
1024 #define SYSTEM_FUNCTION_NAME "system"
1025 #define BSEARCH_FUNCTION_NAME "bsearch"
1026 #define QSORT_FUNCTION_NAME "qsort"
1027 #define C_ABS_FUNCTION_NAME "abs"
1028 #define LABS_FUNCTION_NAME "labs"
1029 #define LLABS_FUNCTION_NAME "llabs"
1030 #define DIV_FUNCTION_NAME "div"
1031 #define LDIV_FUNCTION_NAME "ldiv"
1032 #define LLDIV_FUNCTION_NAME "lldiv"
1033 #define MBLEN_FUNCTION_NAME "mblen"
1034 #define MBTOWC_FUNCTION_NAME "mbtowc"
1035 #define WCTOMB_FUNCTION_NAME "wctomb"
1036 #define MBSTOWCS_FUNCTION_NAME "mbstowcs"
1037 #define WCSTOMBS_FUNCTION_NAME "wcstombs"
1038 
1039 
1040 
1041 /* include <string.h> */
1042 
1043 #define MEMCPY_FUNCTION_NAME "memcpy"
1044 #define MEMMOVE_FUNCTION_NAME "memmove"
1045 #define STRCPY_FUNCTION_NAME "strcpy"
1046 #define STRDUP_FUNCTION_NAME "strdup"
1047 #define STRNCPY_FUNCTION_NAME "strncpy"
1048 #define STRCAT_FUNCTION_NAME "strcat"
1049 #define STRNCAT_FUNCTION_NAME "strncat"
1050 #define MEMCMP_FUNCTION_NAME "memcmp"
1051 #define STRCMP_FUNCTION_NAME "strcmp"
1052 #define STRCOLL_FUNCTION_NAME "strcoll"
1053 #define STRNCMP_FUNCTION_NAME "strncmp"
1054 #define STRXFRM_FUNCTION_NAME "strxfrm"
1055 #define MEMCHR_FUNCTION_NAME "memchr"
1056 #define STRCHR_FUNCTION_NAME "strchr"
1057 #define STRCSPN_FUNCTION_NAME "strcspn"
1058 #define STRPBRK_FUNCTION_NAME "strbprk"
1059 #define STRRCHR_FUNCTION_NAME "strrchr"
1060 #define STRSPN_FUNCTION_NAME "strspn"
1061 #define STRSTR_FUNCTION_NAME "strstr"
1062 #define STRTOK_FUNCTION_NAME "strtok"
1063 #define MEMSET_FUNCTION_NAME "memset"
1064 //#define FOPEN_FUNCTION_NAME "fopen"
1065 #define STRERROR_FUNCTION_NAME "strerror"
1066 #define STRERROR_R_FUNCTION_NAME "strerror_r"
1067 #define STRLEN_FUNCTION_NAME "strlen"
1068 
1069 
1070 /*#include<time.h> */
1071 #define TIME_FUNCTION_NAME "time"
1072 #define LOCALTIME_FUNCTION_NAME "localtime"
1073 #define DIFFTIME_FUNCTION_NAME "difftime"
1074 #define NANOSLEEP_FUNCTION_NAME "nanosleep"
1075 
1076 
1077 /* #include <wchar.h> */
1078 #define FWPRINTF_FUNCTION_NAME "fwprintf"
1079 #define FWSCANF_FUNCTION_NAME "fwscanf"
1080 #define SWPRINTF_FUNCTION_NAME "swprintf"
1081 #define SWSCANF_FUNCTION_NAME "swscanf"
1082 #define VFWPRINTF_FUNCTION_NAME "vfwprintf"
1083 #define VFWSCANF_FUNCTION_NAME "vfwscanf"
1084 #define VSWPRINTF_FUNCTION_NAME "vswprintf"
1085 #define VSWSCANF_FUNCTION_NAME "vswscanf"
1086 #define VWPRINTF_FUNCTION_NAME "vwprintf"
1087 #define VWSCANF_FUNCTION_NAME "vwscanf"
1088 #define WPRINTF_FUNCTION_NAME "wprintf"
1089 #define WSCANF_FUNCTION_NAME "wscanf"
1090 #define FGETWC_FUNCTION_NAME "fgetwc"
1091 #define FGETWS_FUNCTION_NAME "fgetws"
1092 #define FPUTWC_FUNCTION_NAME "fputwc"
1093 #define FPUTWS_FUNCTION_NAME "fputws"
1094 #define FWIDE_FUNCTION_NAME "fwide"
1095 #define GETWC_FUNCTION_NAME "getwc"
1096 #define GETWCHAR_FUNCTION_NAME "getwchar"
1097 #define PUTWC_FUNCTION_NAME "putwc"
1098 #define PUTWCHAR_FUNCTION_NAME "putwchar"
1099 #define UNGETWC_FUNCTION_NAME "ungetwc"
1100 #define WCSTOD_FUNCTION_NAME "wcstod"
1101 #define WCSTOF_FUNCTION_NAME "wcstof"
1102 #define WCSTOLD_FUNCTION_NAME "wcstold"
1103 #define WCSTOL_FUNCTION_NAME "wcstol"
1104 #define WCSTOLL_FUNCTION_NAME "wcstoll"
1105 #define WCSTOUL_FUNCTION_NAME "wcstoul"
1106 #define WCSTOULL_FUNCTION_NAME "wcstoull"
1107 #define WCSCPY_FUNCTION_NAME "wcscpy"
1108 #define WCSNCPY_FUNCTION_NAME "wcsncpy"
1109 #define WMEMCPY_FUNCTION_NAME "wmemcpy"
1110 #define WMEMMOVE_FUNCTION_NAME "wmemmove"
1111 #define WCSCAT_FUNCTION_NAME "wcscat"
1112 #define WCSNCAT_FUNCTION_NAME "wcsncat"
1113 #define WCSCMP_FUNCTION_NAME "wcscmp"
1114 #define WCSCOLL_FUNCTION_NAME "wcscoll"
1115 #define WCSNCMP_FUNCTION_NAME "wcsncmp"
1116 #define WCSXFRM_FUNCTION_NAME "wcsxfrm"
1117 #define WMEMCMP_FUNCTION_NAME "wmemcmp"
1118 #define WCSCHR_FUNCTION_NAME "wcschr"
1119 #define WCSCSPN_FUNCTION_NAME "wcscspn"
1120 #define WCSPBRK_FUNCTION_NAME "wcspbrk"
1121 #define WCSRCHR_FUNCTION_NAME "wcsrchr"
1122 #define WCSSPN_FUNCTION_NAME "wcsspn"
1123 #define WCSSTR_FUNCTION_NAME "wcsstr"
1124 #define WCSTOK_FUNCTION_NAME "wcstok"
1125 #define WMEMCHR_FUNCTION_NAME "wmemchr"
1126 #define WCSLEN_FUNCTION_NAME "wcslen"
1127 #define WMEMSET_FUNCTION_NAME "wmemset"
1128 #define WCSFTIME_FUNCTION_NAME "wcsftime"
1129 #define BTOWC_FUNCTION_NAME "btowc"
1130 #define WCTOB_FUNCTION_NAME "wctob"
1131 #define MBSINIT_FUNCTION_NAME "mbsinit"
1132 #define MBRLEN_FUNCTION_NAME "mbrlen"
1133 #define MBRTOWC_FUNCTION_NAME "mbrtowc"
1134 #define WCRTOMB_FUNCTION_NAME "wcrtomb"
1135 #define MBSRTOWCS_FUNCTION_NAME "mbsrtowcs"
1136 #define WCSRTOMBS_FUNCTION_NAME "wcsrtombs"
1137 
1138 
1139 /* #include <wctype.h> */
1140 
1141 #define ISWALNUM_OPERATOR_NAME "iswalnum"
1142 #define ISWALPHA_OPERATOR_NAME "iswalpha"
1143 #define ISWBLANK_OPERATOR_NAME "iswblank"
1144 #define ISWCNTRL_OPERATOR_NAME "iswcntrl"
1145 #define ISWDIGIT_OPERATOR_NAME "iswdigit"
1146 #define ISWGRAPH_OPERATOR_NAME "iswgraph"
1147 #define ISWLOWER_OPERATOR_NAME "iswlower"
1148 #define ISWPRINT_OPERATOR_NAME "iswprint"
1149 #define ISWPUNCT_OPERATOR_NAME "iswpunct"
1150 #define ISWSPACE_OPERATOR_NAME "iswspace"
1151 #define ISWUPPER_OPERATOR_NAME "iswupper"
1152 #define ISWXDIGIT_OPERATOR_NAME "iswxdigit"
1153 #define ISWCTYPE_OPERATOR_NAME "iswctype"
1154 #define WCTYPE_OPERATOR_NAME "wctype"
1155 #define TOWLOWER_OPERATOR_NAME "towlower"
1156 #define TOWUPPER_OPERATOR_NAME "towupper"
1157 #define TOWCTRANS_OPERATOR_NAME "towctrans"
1158 #define WCTRANS_OPERATOR_NAME "wctrans"
1159 
1160 
1161 /* #include <fcntl.h>*/
1162 
1163 #define FCNTL_FUNCTION_NAME "fcntl"
1164 #define CREAT_FUNCTION_NAME "creat"
1165 #define DIRECTIO_FUNCTION_NAME "directio"
1166 #define OPEN64_FUNCTION_NAME "open64"
1167 #define CREAT64_FUNCTION_NAME "creat64"
1168 
1169 /* fcntl is declared with fcntl.h */
1170 #define FSYNC_FUNCTION_NAME "fsync"
1171 #define FDATASYNC_FUNCTION_NAME "fdatasync"
1172 #define IOCTL_FUNCTION_NAME "ioctl" // sys/ioctl.h
1173 #define SELECT_FUNCTION_NAME "select" // sys/select.h
1174 #define PSELECT_FUNCTION_NAME "pselect" // sys/select.h
1175 #define STAT_FUNCTION_NAME "stat" // sys/stat.h
1176 #define FSTAT_FUNCTION_NAME "fstat" // sys/stat.h
1177 #define LSTAT_FUNCTION_NAME "lstat" // sys/stat.h
1178 
1179 
1180 
1181 
1182 
1183 #define J0_OPERATOR_NAME "j0"
1184 #define J1_OPERATOR_NAME "j1"
1185 #define JN_OPERATOR_NAME "jn"
1186 #define Y0_OPERATOR_NAME "y0"
1187 #define Y1_OPERATOR_NAME "y1"
1188 #define YN_OPERATOR_NAME "yn"
1189 
1190 #define NEXTAFTER_OPERATOR_NAME "nextafter"
1191 #define REMAINDER_OPERATOR_NAME "remainder"
1192 
1193 
1194 #define MATHERR_OPERATOR_NAME "matherr"
1195 #define SIGNIFICAND_OPERATOR_NAME "significand"
1196 
1197 
1198 #define MODFF_OPERATOR_NAME "modff"
1199 #define SIGFPE_OPERATOR_NAME "sigfpe"
1200 #define SINGLE_TO_DECIMAL_OPERATOR_NAME "single_to_decimal"
1201 #define DOUBLE_TO_DECIMAL_OPERATOR_NAME "double_to_decimal"
1202 #define EXTENDED_TO_DECIMAL_OPERATOR_NAME "extended_to_decimal"
1203 #define QUADRUPLE_TO_DECIMAL_OPERATOR_NAME "quadruple_to_decimal"
1204 #define DECIMAL_TO_SINGLE_OPERATOR_NAME "decimal_to_single"
1205 #define DECIMAL_TO_DOUBLE_OPERATOR_NAME "decimal_to_double"
1206 #define DECIMAL_TO_EXTENDED_OPERATOR_NAME "decimal_to_extended"
1207 #define DECIMAL_TO_QUADRUPLE_OPERATOR_NAME "decimal_to_quadruple"
1208 #define STRING_TO_DECIMAL_OPERATOR_NAME "string_to_decimal"
1209 #define FUNC_TO_DECIMAL_OPERATOR_NAME "func_to_decimal"
1210 #define FILE_TO_DECIMAL_OPERATOR_NAME "file_to_decimal"
1211 #define SECONVERT_OPERATOR_NAME "seconvert"
1212 #define SFCONVERT_OPERATOR_NAME "sfconvert"
1213 #define SGCONVERT_OPERATOR_NAME "sgconvert"
1214 #define ECONVERT_OPERATOR_NAME "econvert"
1215 #define FCONVERT_OPERATOR_NAME "fconvert"
1216 #define GCONVERT_OPERATOR_NAME "gconvert"
1217 #define QECONVERT_OPERATOR_NAME "qeconvert"
1218 #define QFCONVERT_OPERATOR_NAME "qfconvert"
1219 #define QGCONVERT_OPERATOR_NAME "qgconvert"
1220 
1221 #define CLOCK_FUNCTION_NAME "clock"
1222 #define SECOND_FUNCTION_NAME "SECOND" //gfortran extension
1223 #define CLOCK_GETTIME_FUNCTION_NAME "clock_gettime"
1224 #define GETTIMEOFDAY_FUNCTION_NAME "gettimeofday"
1225 
1226 /* netdb.h */
1227 #define __H_ERRNO_LOCATION_OPERATOR_NAME "__h_erno_location"
1228 
1229 
1230 /* These operators are used within the optimize transformation in
1231  order to manipulate operators such as n-ary add and multiply or
1232  multiply-add operators ( JZ - sept 98)
1233  */
1234 #define EOLE_FMA_OPERATOR_NAME "EOLE-FMA-OP"
1235 #define EOLE_FMS_OPERATOR_NAME "EOLE-FMS-OP"
1236 #define EOLE_PROD_OPERATOR_NAME "EOLE-PROD-OP"
1237 #define EOLE_SUM_OPERATOR_NAME "EOLE-SUM-OP"
1238 
1239 /* Integer Multiply Add and Sub, FC 27/10/2005 for FI
1240  */
1241 #define IMA_OPERATOR_NAME "IMA-OP"
1242 #define IMS_OPERATOR_NAME "IMS-OP"
1243 
1244 /*****************************************************************************************/
1245 
1246 /* moved from ricedg-local.h */
1247 #define LOOP_COUNTER_MODULE_NAME "LOOP-COUNTER"
1248 #define DI_VAR_MODULE_NAME "DI-VAR"
1249 
1250 /* special pips intrinsics with global effects */
1251 #define PIPS_MEMORY_BARRIER_OPERATOR_NAME "__pips_memory_barrier"
1252 #define PIPS_IO_BARRIER_OPERATOR_NAME "__pips_io_barrier"
1253 
1254 /* macros */
1255 
1256 /* FI: entity_local_name() should be sufficient for these comparisons */
1257 #define entity_an_operator_p(e,name) \
1258  (same_string_p(global_name_to_user_name(entity_name(e)), name##_OPERATOR_NAME))
1259 #define entity_a_function_p(e,name) \
1260  (same_string_p(global_name_to_user_name(entity_name(e)), name##_FUNCTION_NAME))
1261 #define entity_a_special_entity_p(e,name) \
1262  (same_string_p(global_name_to_user_name(entity_name(e)), name))
1263 
1264 #define ENTITY_CONVERSION_P(e,name) \
1265  (strcmp(entity_local_name(e), name##_GENERIC_CONVERSION_NAME)==0)
1266 #define ENTITY_CONVERSION_CMPLX_P(e) ENTITY_CONVERSION_P(e, CMPLX)
1267 #define ENTITY_CONVERSION_DCMPLX_P(e) ENTITY_CONVERSION_P(e, DCMPLX)
1268 
1269 #define ENTITY_CONTINUE_P(e) entity_a_function_p(e, CONTINUE)
1270 #define ENTITY_STOP_P(e) entity_a_function_p(e, STOP)
1271 #define ENTITY_RETURN_P(e) entity_a_function_p(e, RETURN)
1272 #define ENTITY_C_RETURN_P(e) entity_a_function_p(e, C_RETURN)
1273 
1274 #define ENTITY_ASSIGN_P(e) entity_an_operator_p(e, ASSIGN)
1275 #define ENTITY_POST_INCREMENT_P(e) entity_an_operator_p(e, POST_INCREMENT)
1276 #define ENTITY_POST_DECREMENT_P(e) entity_an_operator_p(e, POST_DECREMENT)
1277 #define ENTITY_PRE_INCREMENT_P(e) entity_an_operator_p(e, PRE_INCREMENT)
1278 #define ENTITY_PRE_DECREMENT_P(e) entity_an_operator_p(e, PRE_DECREMENT)
1279 #define ENTITY_MULTIPLY_UPDATE_P(e) entity_an_operator_p(e, MULTIPLY_UPDATE)
1280 #define ENTITY_DIVIDE_UPDATE_P(e) entity_an_operator_p(e, DIVIDE_UPDATE)
1281 #define ENTITY_MODULO_UPDATE_P(e) entity_an_operator_p(e, MODULO_UPDATE)
1282 #define ENTITY_PLUS_UPDATE_P(e) entity_an_operator_p(e, PLUS_UPDATE)
1283 #define ENTITY_MINUS_UPDATE_P(e) entity_an_operator_p(e, MINUS_UPDATE)
1284 #define ENTITY_LEFT_SHIFT_UPDATE_P(e) entity_an_operator_p(e, LEFT_SHIFT_UPDATE)
1285 #define ENTITY_RIGHT_SHIFT_UPDATE_P(e) entity_an_operator_p(e, RIGHT_SHIFT_UPDATE)
1286 #define ENTITY_BITWISE_AND_UPDATE_P(e) entity_an_operator_p(e, BITWISE_AND_UPDATE)
1287 #define ENTITY_BITWISE_XOR_UPDATE_P(e) entity_an_operator_p(e, BITWISE_XOR_UPDATE)
1288 #define ENTITY_BITWISE_OR_UPDATE_P(e) entity_an_operator_p(e, BITWISE_OR_UPDATE)
1289 #define ENTITY_COMMA_P(e) entity_an_operator_p(e, COMMA)
1290 #define ENTITY_ADDRESS_OF_P(e) entity_an_operator_p(e, ADDRESS_OF)
1291 #define ENTITY_CONDITIONAL_P(e) entity_an_operator_p(e, CONDITIONAL)
1292 
1293 #define ENTITY_PLUS_P(e) entity_an_operator_p(e, PLUS)
1294 #define ENTITY_PLUS_C_P(e) entity_an_operator_p(e, PLUS_C)
1295 #define ENTITY_MINUS_P(e) entity_an_operator_p(e, MINUS)
1296 #define ENTITY_MINUS_C_P(e) entity_an_operator_p(e, MINUS_C)
1297 #define ENTITY_UNARY_MINUS_P(e) entity_an_operator_p(e, UNARY_MINUS)
1298 #define ENTITY_UNARY_PLUS_P(e) entity_an_operator_p(e, UNARY_PLUS)
1299 #define ENTITY_MULTIPLY_P(e) entity_an_operator_p(e, MULTIPLY)
1300 #define ENTITY_MODULO_P(e) entity_an_operator_p(e, MODULO)
1301 #define ENTITY_C_MODULO_P(e) entity_an_operator_p(e, C_MODULO)
1302 #define ENTITY_POWER_P(e) entity_an_operator_p(e, POWER)
1303 #define ENTITY_DIVIDE_P(e) entity_an_operator_p(e, DIVIDE)
1304 
1305 #define ENTITY_MIN_P(e) entity_an_operator_p(e, MIN)
1306 #define ENTITY_C_MIN_P(e) entity_an_operator_p(e,PIPS_C_MIN)
1307 #define ENTITY_MAX_P(e) entity_an_operator_p(e, MAX)
1308 #define ENTITY_C_MAX_P(e) entity_an_operator_p(e,PIPS_C_MAX)
1309 #define ENTITY_MIN0_P(e) entity_an_operator_p(e, MIN0)
1310 #define ENTITY_MAX0_P(e) entity_an_operator_p(e, MAX0)
1311 #define ENTITY_AMIN1_P(e) entity_an_operator_p(e, AMIN1)
1312 #define ENTITY_AMAX1_P(e) entity_an_operator_p(e, AMAX1)
1313 #define ENTITY_DMIN1_P(e) entity_an_operator_p(e, DMIN1)
1314 #define ENTITY_DMAX1_P(e) entity_an_operator_p(e, DMAX1)
1315 #define ENTITY_MIN_OR_MAX_P(e) (ENTITY_MIN_P(e) || ENTITY_MAX_P(e) )
1316 
1317 #define ENTITY_ABS_P(e) entity_an_operator_p(e, ABS)
1318 #define ENTITY_IABS_P(e) entity_an_operator_p(e, IABS)
1319 #define ENTITY_DABS_P(e) entity_an_operator_p(e, DABS)
1320 #define ENTITY_CABS_P(e) entity_an_operator_p(e, CABS)
1321 //abs in stdlib.h C89
1322 #define ENTITY_C_ABS_P(e) entity_a_function_p(e, C_ABS)
1323 #define ENTITY_LABS_P(e) entity_a_function_p(e, LABS)
1324 #define ENTITY_LLABS_P(e) entity_a_function_p(e, LLABS) //C99
1325 //abs in inttypes.h C99
1326 #define ENTITY_IMAXABS_P(e) entity_a_function_p(e, IMAXABS)
1327 //abs in math.h C99
1328 #define ENTITY_FABS_P(e) entity_an_operator_p(e, FABS)
1329 #define ENTITY_FABSF_P(e) entity_an_operator_p(e, FABSF)
1330 #define ENTITY_FABSL_P(e) entity_an_operator_p(e, FABSL)
1331 //abs in complex.h C99
1332 #define ENTITY_C_CABS_P(e) entity_an_operator_p(e, C_CABS)
1333 #define ENTITY_CABSF_P(e) entity_an_operator_p(e, CABSF)
1334 #define ENTITY_CABSL_P(e) entity_an_operator_p(e, CABSL)
1335 
1336 #define ENTITY_AND_P(e) (entity_an_operator_p(e, AND) || entity_an_operator_p(e, C_AND))
1337 #define ENTITY_OR_P(e) (entity_an_operator_p(e, OR) || entity_an_operator_p(e, C_OR))
1338 #define ENTITY_BITWISE_AND_P(e) (entity_an_operator_p(e, BITWISE_AND))
1339 #define ENTITY_BITWISE_OR_P(e) (entity_an_operator_p(e, BITWISE_OR))
1340 #define ENTITY_BITWISE_XOR_P(e) (entity_an_operator_p(e, BITWISE_XOR))
1341 #define ENTITY_NOT_P(e) (entity_an_operator_p(e, NOT) || entity_an_operator_p(e, C_NOT))
1342 // NON_EQUIV is in fact a logical operator - to simplify semantics
1343 #define ENTITY_NON_EQUAL_P(e) (entity_an_operator_p(e, NON_EQUAL) || entity_an_operator_p(e, NON_EQUIV) || entity_an_operator_p(e, C_NON_EQUAL))
1344 #define ENTITY_EQUIV_P(e) entity_an_operator_p(e, EQUIV)
1345 #define ENTITY_NON_EQUIV_P(e) entity_an_operator_p(e, NON_EQUIV)
1346 #define ENTITY_LEFT_SHIFT_P(e) entity_an_operator_p(e, LEFT_SHIFT)
1347 #define ENTITY_RIGHT_SHIFT_P(e) entity_an_operator_p(e, RIGHT_SHIFT)
1348 
1349 #define ENTITY_ADDRESS_OF_P(e) entity_an_operator_p(e, ADDRESS_OF)
1350 
1351 /* Attention :
1352  This definition is different with the Fortran Standard where the logical
1353  operators are the following only: AND, OR, NOT, EQUIV, NEQUIV (NN-Mars 2000)*/
1354 
1355 #define ENTITY_LOGICAL_OPERATOR_P(e) ( ENTITY_RELATIONAL_OPERATOR_P(e) || \
1356  ENTITY_AND_P(e) || \
1357  ENTITY_OR_P(e) || \
1358  ENTITY_NOT_P(e))
1359 
1360 #define ENTITY_TRUE_P(e) entity_an_operator_p(e, TRUE)
1361 #define ENTITY_FALSE_P(e) entity_an_operator_p(e, FALSE)
1362 #define ENTITY_ONE_P(e) entity_an_operator_p(e, ONE)
1363 #define ENTITY_ZERO_P(e) entity_an_operator_p(e, ZERO)
1364 
1365 #define ENTITY_GREATER_OR_EQUAL_P(e) (entity_an_operator_p(e, GREATER_OR_EQUAL) || entity_an_operator_p(e, C_GREATER_OR_EQUAL))
1366 #define ENTITY_GREATER_THAN_P(e) (entity_an_operator_p(e, GREATER_THAN) || entity_an_operator_p(e, C_GREATER_THAN))
1367 #define ENTITY_LESS_OR_EQUAL_P(e) (entity_an_operator_p(e, LESS_OR_EQUAL) || entity_an_operator_p(e, C_LESS_OR_EQUAL))
1368 #define ENTITY_LESS_THAN_P(e) (entity_an_operator_p(e, LESS_THAN) || entity_an_operator_p(e, C_LESS_THAN))
1369 
1370 // EQUIV is in fact a logical operator - to simplify semantics
1371 #define ENTITY_EQUAL_P(e) (entity_an_operator_p(e, EQUAL) || entity_an_operator_p(e, EQUIV) || entity_an_operator_p(e, C_EQUAL))
1372 
1373 #define ENTITY_RELATIONAL_OPERATOR_P(e) ( \
1374  ENTITY_GREATER_OR_EQUAL_P(e) || \
1375  ENTITY_GREATER_THAN_P(e) || \
1376  ENTITY_LESS_OR_EQUAL_P(e) || \
1377  ENTITY_LESS_THAN_P(e) || \
1378  ENTITY_NON_EQUAL_P(e) || \
1379  ENTITY_EQUAL_P(e) )
1380 
1381 #define ENTITY_NAME_P(e, name)(same_string_p(entity_user_name(e),name))
1382 
1383 /* Fortran IO Management */
1384 
1385 #define ENTITY_WRITE_P(e) ENTITY_NAME_P(e, "WRITE")
1386 #define ENTITY_REWIND_P(e) ENTITY_NAME_P(e, "REWIND")
1387 #define ENTITY_OPEN_P(e) ENTITY_NAME_P(e, "OPEN")
1388 #define ENTITY_CLOSE_P(e) ENTITY_NAME_P(e, "CLOSE")
1389 #define ENTITY_READ_P(e) ENTITY_NAME_P(e, READ_FUNCTION_NAME)
1390 #define ENTITY_BUFFERIN_P(e) ENTITY_NAME_P(e, "BUFFERIN")
1391 #define ENTITY_BUFFEROUT_P(e) ENTITY_NAME_P(e, "BUFFEROUT")
1392 #define ENTITY_ENDFILE_P(e) ENTITY_NAME_P(e, "ENDFILE")
1393 #define ENTITY_IMPLIEDDO_P(e) ENTITY_NAME_P(e, IMPLIED_DO_NAME)
1394 #define ENTITY_IO_LIST_P(e) ENTITY_NAME_P(e, IO_LIST_STRING_NAME)
1395 #define ENTITY_FORMAT_P(e) ENTITY_NAME_P(e, "FORMAT")
1396 
1397 /* Bit manipulation functions. Amira Mensi */
1398 #define ENTITY_ISHFT_P(e) ENTITY_NAME_P(e, "ISHFT")
1399 #define ENTITY_ISHFTC_P(e) ENTITY_NAME_P(e, "ISHFTC")
1400 #define ENTITY_IBITS_P(e) ENTITY_NAME_P(e, "IBITS")
1401 #define ENTITY_MVBITS_P(e) ENTITY_NAME_P(e, "MVBITS")
1402 #define ENTITY_BTEST_P(e) ENTITY_NAME_P(e, "BTEST")
1403 #define ENTITY_IBSET_P(e) ENTITY_NAME_P(e, "IBSET")
1404 #define ENTITY_IBCLR_P(e) ENTITY_NAME_P(e, "IBCLR")
1405 #define ENTITY_BIT_SIZE_P(e) ENTITY_NAME_P(e, "BIT_SIZE")
1406 #define ENTITY_IOR_P(e) ENTITY_NAME_P(e, "IOR")
1407 #define ENTITY_IEOR_P(e) ENTITY_NAME_P(e, "IEOR")
1408 #define ENTITY_IAND_P(e) ENTITY_NAME_P(e, "IAND")
1409 
1410 /* OMP entity test */
1411 #define ENTITY_OMP_IF_P(e) ENTITY_NAME_P(e,OMP_IF_FUNCTION_NAME)
1412 #define ENTITY_OMP_OMP_P(e) ENTITY_NAME_P(e,OMP_OMP_FUNCTION_NAME)
1413 #define ENTITY_OMP_FOR_P(e) ENTITY_NAME_P(e,OMP_FOR_FUNCTION_NAME)
1414 #define ENTITY_OMP_PRIVATE_P(e) ENTITY_NAME_P(e,OMP_PRIVATE_FUNCTION_NAME)
1415 #define ENTITY_OMP_PARALLEL_P(e) ENTITY_NAME_P(e,OMP_PARALLEL_FUNCTION_NAME)
1416 #define ENTITY_OMP_REDUCTION_P(e) ENTITY_NAME_P(e,OMP_REDUCTION_FUNCTION_NAME)
1417 
1418 
1419 /*io functions: C library and system io.Amira Mensi*/
1420 
1421 /*#include<stdio.h> */
1422 
1423 #define ENTITY_PRINTF_P(e) ENTITY_NAME_P(e, "printf")
1424 #define ENTITY_FPRINTF_P(e) ENTITY_NAME_P(e, "fprintf")
1425 #define ENTITY_SCANF_P(e) ENTITY_NAME_P(e, "scanf")
1426 #define ENTITY_ISOC99_SCANF_P(e) ENTITY_NAME_P(e, ISOC99_SCANF_FUNCTION_NAME)
1427 #define ENTITY_FSCANF_P(e) ENTITY_NAME_P(e, "fscanf")
1428 #define ENTITY_ISOC99_FSCANF_P(e) ENTITY_NAME_P(e, ISOC99_FSCANF_FUNCTION_NAME)
1429 #define ENTITY_PUTS_P(e) ENTITY_NAME_P(e, "puts")
1430 #define ENTITY_GETS_P(e) ENTITY_NAME_P(e, "gets")
1431 #define ENTITY_FPUTS_P(e) ENTITY_NAME_P(e, "fputs")
1432 #define ENTITY_FGETS_P(e) ENTITY_NAME_P(e, "fgets")
1433 #define ENTITY_FPUTC_P(e) ENTITY_NAME_P(e, "fputc")
1434 #define ENTITY_FGETC_P(e) ENTITY_NAME_P(e, "fgetc")
1435 #define ENTITY_FOPEN_P(e) ENTITY_NAME_P(e, "fopen")
1436 #define ENTITY_FDOPEN_P(e) ENTITY_NAME_P(e, "fdopen")
1437 #define ENTITY_FREOPEN_P(e) ENTITY_NAME_P(e, "freopen")
1438 #define ENTITY_FCLOSE_P(e) ENTITY_NAME_P(e, "fclose")
1439 #define ENTITY_SNPRINTF_P(e) ENTITY_NAME_P(e, "snprintf")
1440 #define ENTITY_SSCANF_P(e) ENTITY_NAME_P(e, "sscanf")
1441 #define ENTITY_ISOC99_SSCANF_P(e) ENTITY_NAME_P(e, ISOC99_SSCANF_FUNCTION_NAME)
1442 #define ENTITY_VFPRINTF_P(e) ENTITY_NAME_P(e, "vfprintf")
1443 #define ENTITY_VFSCANF_P(e) ENTITY_NAME_P(e, "vfscanf")
1444 #define ENTITY_ISOC99_VFSCANF_P(e) ENTITY_NAME_P(e, ISOC99_VFSCANF_FUNCTION_NAME)
1445 #define ENTITY_VPRINTF_P(e) ENTITY_NAME_P(e, "vprintf")
1446 #define ENTITY_VSCANF_P(e) ENTITY_NAME_P(e, "vscanf")
1447 #define ENTITY_ISOC99_VSCANF_P(e) ENTITY_NAME_P(e, ISOC99_VSCANF_FUNCTION_NAME)
1448 #define ENTITY_VSNPRINTF_P(e) ENTITY_NAME_P(e, "vsnprintf")
1449 #define ENTITY_VSPRINTF_P(e) ENTITY_NAME_P(e, "vsprintf")
1450 #define ENTITY_SPRINTF_P(e) ENTITY_NAME_P(e, "sprintf")
1451 #define ENTITY_VSSCANF_P(e) ENTITY_NAME_P(e, "vsscanf")
1452 #define ENTITY_ISOC99_VSSCANF_P(e) ENTITY_NAME_P(e, ISOC99_VSSCANF_FUNCTION_NAME)
1453 #define ENTITY_GETC_P(e) ENTITY_NAME_P(e, "getc")
1454 #define ENTITY__IO_GETC_P(e) ENTITY_NAME_P(e, "_IO_getc")
1455 #define ENTITY_GETCHAR_P(e) ENTITY_NAME_P(e, "getchar")
1456 #define ENTITY_PUTC_P(e) ENTITY_NAME_P(e, "putc")
1457 #define ENTITY__IO_PUTC_P(e) ENTITY_NAME_P(e, "_IO_putc")
1458 #define ENTITY_PUTCHAR_P(e) ENTITY_NAME_P(e, "putchar")
1459 #define ENTITY_UNGETC_P(e) ENTITY_NAME_P(e, "ungetc")
1460 #define ENTITY_FREAD_P(e) ENTITY_NAME_P(e, "fread")
1461 #define ENTITY_FWRITE_P(e) ENTITY_NAME_P(e, "fwrite")
1462 #define ENTITY_FGETPOS_P(e) ENTITY_NAME_P(e, "fgetpos")
1463 #define ENTITY_FSEEK_P(e) ENTITY_NAME_P(e, "fseek")
1464 #define ENTITY_FSETPOS_P(e) ENTITY_NAME_P(e, "fsetpos")
1465 #define ENTITY_FTELL_P(e) ENTITY_NAME_P(e, "ftell")
1466 #define ENTITY_C_REWIND_P(e) ENTITY_NAME_P(e, "rewind")
1467 #define ENTITY_CLEARERR_P(e) ENTITY_NAME_P(e, "clearer")
1468 #define ENTITY_FEOF_P(e) ENTITY_NAME_P(e, "feof")
1469 #define ENTITY_FERROR_P(e) ENTITY_NAME_P(e, "ferror")
1470 #define ENTITY_FILENO_P(e) ENTITY_NAME_P(e, "fileno")
1471 #define ENTITY_PERROR_P(e) ENTITY_NAME_P(e, "perror")
1472 
1473 /*io functions: C library and system io.Amira Mensi*/
1474 
1475 #define ENTITY_C_OPEN_SYSTEM_P(e) ENTITY_NAME_P(e, C_OPEN_FUNCTION_NAME)
1476 #define ENTITY_C_CLOSE_SYSTEM_P(e) ENTITY_NAME_P(e, C_CLOSE_FUNCTION_NAME)
1477 #define ENTITY_C_READ_SYSTEM_P(e) ENTITY_NAME_P(e, C_READ_FUNCTION_NAME)
1478 #define ENTITY_C_WRITE_SYSTEM_P(e) ENTITY_NAME_P(e, C_WRITE_FUNCTION_NAME)
1479 #define ENTITY_LINK_SYSTEM_P(e) ENTITY_NAME_P(e, LINK_FUNCTION_NAME)
1480 #define ENTITY_SYMLINK_SYSTEM_P(e) ENTITY_NAME_P(e, SYMLINK_FUNCTION_NAME)
1481 #define ENTITY_UNLINK_SYSTEM_P(e) ENTITY_NAME_P(e, UNLINK_FUNCTION_NAME)
1482 
1483 /* fcntl() */
1484 #define ENTITY_FSYNC_SYSTEM_P(e) ENTITY_NAME_P(e, FSYNC_FUNCTION_NAME)
1485 #define ENTITY_FDATASYNC_SYSTEM_P(e) ENTITY_NAME_P(e, FDATASYNC_FUNCTION_NAME)
1486 #define ENTITY_IOCTL_SYSTEM_P(e) ENTITY_NAME_P(e, IOCTL_FUNCTION_NAME)
1487 #define ENTITY_SELECT_SYSTEM_P(e) ENTITY_NAME_P(e, SELECT_FUNCTION_NAME)
1488 #define ENTITY_PSELECT_SYSTEM_P(e) ENTITY_NAME_P(e, PSELECT_FUNCTION_NAME)
1489 #define ENTITY_STAT_SYSTEM_P(e) ENTITY_NAME_P(e, STAT_FUNCTION_NAME)
1490 #define ENTITY_FSTAT_SYSTEM_P(e) ENTITY_NAME_P(e, FSTAT_FUNCTION_NAME)
1491 #define ENTITY_LSTAT_SYSTEM_P(e) ENTITY_NAME_P(e, LSTAT_FUNCTION_NAME)
1492 
1493 #define ENTITY_REMOVE_SYSTEM_P(e) ENTITY_NAME_P(e, "remove")
1494 #define ENTITY_RENAME_SYSTEM_P(e) ENTITY_NAME_P(e, "rename")
1495 #define ENTITY_TMPFILE_SYSTEM_P(e) ENTITY_NAME_P(e, "tmpfile")
1496 #define ENTITY_TMPNAM_SYSTEM_P(e) ENTITY_NAME_P(e, "tmpnam")
1497 #define ENTITY_FFLUSH_SYSTEM_P(e) ENTITY_NAME_P(e, "fflush")
1498 #define ENTITY_FREOPEN_SYSTEM_P(e) ENTITY_NAME_P(e, "freopen")
1499 #define ENTITY_SETBUF_SYSTEM_P(e) ENTITY_NAME_P(e, "setbuf")
1500 #define ENTITY_SETVBUF_SYSTEM_P(e) ENTITY_NAME_P(e, "setvbuf")
1501 #define ENTITY__FILBUF_SYSTEM_P(e) ENTITY_NAME_P(e, "__filbuf")
1502 #define ENTITY__FILSBUF_SYSTEM_P(e) ENTITY_NAME_P(e, "__flsbuf")
1503 #define ENTITY_SETBUFFER_SYSTEM_P(e) ENTITY_NAME_P(e, "setbuffer")
1504 #define ENTITY_SETLINEBUF_SYSTEM_P(e) ENTITY_NAME_P(e, "setlinebuf")
1505 #define ENTITY_FDOPEN_SYSTEM_P(e) ENTITY_NAME_P(e, "fdopen")
1506 #define ENTITY_CTERMID_SYSTEM_P(e) ENTITY_NAME_P(e, "ctermid")
1507 #define ENTITY_FILENO_SYSTEM_P(e) ENTITY_NAME_P(e, "fileno")
1508 #define ENTITY_POPEN_SYSTEM_P(e) ENTITY_NAME_P(e, "popen")
1509 #define ENTITY_CUSERID_SYSTEM_P(e) ENTITY_NAME_P(e, "cuserid")
1510 #define ENTITY_TEMPNAM_SYSTEM_P(e) ENTITY_NAME_P(e, "tempnam")
1511 #define ENTITY_GETW_SYSTEM_P(e) ENTITY_NAME_P(e, "getw")
1512 #define ENTITY_PUTW_SYSTEM_P(e) ENTITY_NAME_P(e, "putw")
1513 #define ENTITY_PCLOSE_SYSTEM_P(e) ENTITY_NAME_P(e, "pclose")
1514 #define ENTITY_FSEEKO_SYSTEM_P(e) ENTITY_NAME_P(e, "fseeko")
1515 #define ENTITY_FTELLO_SYSTEM_P(e) ENTITY_NAME_P(e, "ftello")
1516 #define ENTITY_FOPEN64_SYSTEM_P(e) ENTITY_NAME_P(e, "fopen64")
1517 #define ENTITY_FREOPEN64_SYSTEM_P(e) ENTITY_NAME_P(e, "freopen64")
1518 #define ENTITY_TMPFILE64_SYSTEM_P(e) ENTITY_NAME_P(e, "tmpfile64")
1519 #define ENTITY_FGETPOS64_SYSTEM_P(e) ENTITY_NAME_P(e, "fgetpos64")
1520 #define ENTITY_FSETPOS64_SYSTEM_P(e) ENTITY_NAME_P(e, "fsetpos64")
1521 #define ENTITY_FSEEKO64_SYSTEM_P(e) ENTITY_NAME_P(e, "fseeko64")
1522 #define ENTITY_FTELLO64_SYSTEM_P(e) ENTITY_NAME_P(e, "ftello64")
1523 
1524 #define ENTITY_ABORT_SYSTEM_P(e) ENTITY_NAME_P(e, "abort")
1525 #define ENTITY_C_ABS_SYSTEM_P(e) ENTITY_NAME_P(e, "abs")
1526 #define ENTITY_ATEXIT_SYSTEM_P(e) ENTITY_NAME_P(e, "atexit")
1527 #define ENTITY_ATOF_SYSTEM_P(e) ENTITY_NAME_P(e, "atof")
1528 #define ENTITY_ATOI_SYSTEM_P(e) ENTITY_NAME_P(e, "atoi")
1529 #define ENTITY_BSEARCH_SYSTEM_P(e) ENTITY_NAME_P(e, "bsearch")
1530 #define ENTITY_CALLOC_SYSTEM_P(e) ENTITY_NAME_P(e, "calloc")
1531 #define ENTITY_DIV_SYSTEM_P(e) ENTITY_NAME_P(e, "div")
1532 #define ENTITY_EXIT_SYSTEM_P(e) ENTITY_NAME_P(e, "exit")
1533 #define ENTITY_FREE_SYSTEM_P(e) ENTITY_NAME_P(e, "free")
1534 #define ENTITY_GETENV_SYSTEM_P(e) ENTITY_NAME_P(e, "getenv")
1535 #define ENTITY_LABS_SYSTEM_P(e) ENTITY_NAME_P(e, "labs")
1536 #define ENTITY_LDIV_SYSTEM_P(e) ENTITY_NAME_P(e, "ldiv")
1537 #define ENTITY_MALLOC_SYSTEM_P(e) ENTITY_NAME_P(e, "malloc")
1538 #define ENTITY_MBLEN_SYSTEM_P(e) ENTITY_NAME_P(e, "mblen")
1539 #define ENTITY_MBSTOWCS_SYSTEM_P(e) ENTITY_NAME_P(e, "mbstowcs")
1540 #define ENTITY_MBTOWC_SYSTEM_P(e) ENTITY_NAME_P(e, "mbtowc")
1541 #define ENTITY_QSORT_SYSTEM_P(e) ENTITY_NAME_P(e, "qsort")
1542 #define ENTITY_REALLOC_SYSTEM_P(e) ENTITY_NAME_P(e, "realloc")
1543 #define ENTITY_STRTOD_SYSTEM_P(e) ENTITY_NAME_P(e, "strtod")
1544 #define ENTITY_STRTOL_SYSTEM_P(e) ENTITY_NAME_P(e, "strtol")
1545 #define ENTITY_STRTOUL_SYSTEM_P(e) ENTITY_NAME_P(e, "strtoul")
1546 #define ENTITY_SYSTEM_SYSTEM_P(e) ENTITY_NAME_P(e, "system")
1547 #define ENTITY_WCTOMB_SYSTEM_P(e) ENTITY_NAME_P(e, "wctomb")
1548 #define ENTITY_WCSTOMBS_SYSTEM_P(e) ENTITY_NAME_P(e, "wcstombs")
1549 #define ENTITY_EXITHANDLESYSTEM_P(e) ENTITY_NAME_P(e, "exithandle")
1550 #define ENTITY_DRAND48_SYSTEM_P(e) ENTITY_NAME_P(e, "drand48")
1551 #define ENTITY_ERAND48_SYSTEM_P(e) ENTITY_NAME_P(e, "erand48")
1552 #define ENTITY_JRAND48_SYSTEM_P(e) ENTITY_NAME_P(e, "jrand48")
1553 #define ENTITY_LCONG48_SYSTEM_P(e) ENTITY_NAME_P(e, "lcong48")
1554 #define ENTITY_LRAND48_SYSTEM_P(e) ENTITY_NAME_P(e, "lrand48")
1555 #define ENTITY_MRAND48_SYSTEM_P(e) ENTITY_NAME_P(e, "mrand48")
1556 #define ENTITY_NRAND48_SYSTEM_P(e) ENTITY_NAME_P(e, "nrand48")
1557 #define ENTITY_SEED48_SYSTEM_P(e) ENTITY_NAME_P(e, "seed48")
1558 #define ENTITY_SRAND48_SYSTEM_P(e) ENTITY_NAME_P(e, "srand48")
1559 #define ENTITY_PUTENV_SYSTEM_P(e) ENTITY_NAME_P(e, "putenv")
1560 #define ENTITY_SETKEY_SYSTEM_P(e) ENTITY_NAME_P(e, "setkey")
1561 #define ENTITY_SWAB_SYSTEM_P(e) ENTITY_NAME_P(e, "swab")
1562 #define ENTITY_MKSTEMP_SYSTEM_P(e) ENTITY_NAME_P(e, "mkstemp")
1563 #define ENTITY_MKSTEMP64_SYSTEM_P(e) ENTITY_NAME_P(e, "mkstemp64")
1564 #define ENTITY_A614_SYSTEM_P(e) ENTITY_NAME_P(e, "a64l")
1565 #define ENTITY_ECVT_SYSTEM_P(e) ENTITY_NAME_P(e, "ecvt")
1566 #define ENTITY_FCVT_SYSTEM_P(e) ENTITY_NAME_P(e, "fcvt")
1567 #define ENTITY_GCVT_SYSTEM_P(e) ENTITY_NAME_P(e, "gcvt")
1568 #define ENTITY_GETSUBOPT_SYSTEM_P(e) ENTITY_NAME_P(e, "getsubopt")
1569 #define ENTITY_GRANTPT_SYSTEM_P(e) ENTITY_NAME_P(e, "grantpt")
1570 #define ENTITY_INITSTATE_SYSTEM_P(e) ENTITY_NAME_P(e, "initstate")
1571 #define ENTITY_C_164A_SYSTEM_P(e) ENTITY_NAME_P(e, "l64a")
1572 #define ENTITY_MKTEMP_SYSTEM_P(e) ENTITY_NAME_P(e, "mktemp")
1573 #define ENTITY_PTSNAME_SYSTEM_P(e) ENTITY_NAME_P(e, "ptsname")
1574 #define ENTITY_REALPATH_SYSTEM_P(e) ENTITY_NAME_P(e, "realpath")
1575 #define ENTITY_SETSTATE_SYSTEM_P(e) ENTITY_NAME_P(e, "setstate")
1576 #define ENTITY_TTYSLOT_SYSTEM_P(e) ENTITY_NAME_P(e, "ttyslot")
1577 #define ENTITY_UNLOCKPT_SYSTEM_P(e) ENTITY_NAME_P(e, "unlockpt")
1578 #define ENTITY_VALLOC_SYSTEM_P(e) ENTITY_NAME_P(e, "valloc")
1579 #define ENTITY_DUP2_SYSTEM_P(e) ENTITY_NAME_P(e, "dup2")
1580 #define ENTITY_QECVT_SYSTEM_P(e) ENTITY_NAME_P(e, "qecvt")
1581 #define ENTITY_QFCVT_SYSTEM_P(e) ENTITY_NAME_P(e, "qfcvt")
1582 #define ENTITY_QGCVT_SYSTEM_P(e) ENTITY_NAME_P(e, "qgcvt")
1583 #define ENTITY_GETCWD_SYSTEM_P(e) ENTITY_NAME_P(e, "getcwd")
1584 #define ENTITY_GETEXECNAME_SYSTEM_P(e) ENTITY_NAME_P(e, "getexecname")
1585 #define ENTITY_GETLOGIN_SYSTEM_P(e) ENTITY_NAME_P(e, "getlogin")
1586 #define ENTITY_GETOPT_SYSTEM_P(e) ENTITY_NAME_P(e, "getopt")
1587 #define ENTITY_GETPASS_SYSTEM_P(e) ENTITY_NAME_P(e, "getpass")
1588 #define ENTITY_GETPASSPHRASE_SYSTEM_P(e) ENTITY_NAME_P(e, "getpassphrase")
1589 #define ENTITY_GETPW_SYSTEM_P(e) ENTITY_NAME_P(e, "getpw")
1590 #define ENTITY_ISATTY_SYSTEM_P(e) ENTITY_NAME_P(e, "isatty")
1591 #define ENTITY_MEMALIGN_SYSTEM_P(e) ENTITY_NAME_P(e, "memalign")
1592 #define ENTITY_TTYNAME_SYSTEM_P(e) ENTITY_NAME_P(e, "ttyname")
1593 #define ENTITY_ATOLL_SYSTEM_P(e) ENTITY_NAME_P(e, "atoll")
1594 #define ENTITY_LLABS_SYSTEM_P(e) ENTITY_NAME_P(e, "llabs")
1595 #define ENTITY_LLDIV_SYSTEM_P(e) ENTITY_NAME_P(e, "lldiv")
1596 #define ENTITY_LLTOSTR_SYSTEM_P(e) ENTITY_NAME_P(e, "lltostr")
1597 #define ENTITY_STROLL_SYSTEM_P(e) ENTITY_NAME_P(e, "strtoll")
1598 #define ENTITY_STROULL_SYSTEM_P(e) ENTITY_NAME_P(e, "strtoull")
1599 #define ENTITY_ULLOSTR_SYSTEM_P(e) ENTITY_NAME_P(e, "ulltostr")
1600 
1601 /* include <assert.h> */
1602 
1603 #define ENTITY_ASSERT_SYSTEM_P(e) ENTITY_NAME_P(e, ASSERT_FUNCTION_NAME)
1604 #define ENTITY_ASSERT_FAIL_SYSTEM_P(e) ENTITY_NAME_P(e, ASSERT_FAIL_FUNCTION_NAME)
1605 
1606 /* include <string.h> */
1607 
1608 #define ENTITY_STRCMP_SYSTEM_P(e) ENTITY_NAME_P(e, "strcmp")
1609 #define ENTITY_STRNCMP_SYSTEM_P(e) ENTITY_NAME_P(e, "strncmp")
1610 #define ENTITY_STRCPY_SYSTEM_P(e) ENTITY_NAME_P(e, "strcpy")
1611 #define ENTITY_STRCAT_SYSTEM_P(e) ENTITY_NAME_P(e, "strcat")
1612 #define ENTITY_STRNCAT_SYSTEM_P(e) ENTITY_NAME_P(e, "strncat")
1613 #define ENTITY_STRLEN_SYSTEM_P(e) ENTITY_NAME_P(e, "strlen")
1614 #define ENTITY_STRERROR_SYSTEM_P(e) ENTITY_NAME_P(e, "strerror")
1615 #define ENTITY_STRERROR_R_SYSTEM_P(e) ENTITY_NAME_P(e, "strerror_r")
1616 
1617 /* FI: Why is it declared "system"? Why is it in the middle of string functions? */
1618 #define ENTITY_FOPEN_SYSTEM_P(e) ENTITY_NAME_P(e, "fopen")
1619 
1620 /* #include <fcntl.h>*/
1621 
1622 #define ENTITY_FCNTL_SYSTEM_P(e) ENTITY_NAME_P(e,"fcntl")
1623 #define ENTITY_OPEN_SYSTEM_P(e) ENTITY_NAME_P(e,"open")
1624 #define ENTITY_CREAT_SYSTEM_P(e) ENTITY_NAME_P(e,"creat")
1625 #define ENTITY_DIRECTIO_SYSTEM_P(e) ENTITY_NAME_P(e,"directio")
1626 #define ENTITY_OPEN64_SYSTEM_P(e) ENTITY_NAME_P(e,"open64")
1627 #define ENTITY_CREAT64_SYSTEM_P(e) ENTITY_NAME_P(e,"creat64")
1628 
1629 /* some random functions of stdlib.h */
1630 
1631 #define ENTITY_RANDOM_P(e) ENTITY_NAME_P(e,"random")
1632 #define ENTITY_SRANDOM_P(e) ENTITY_NAME_P(e,"srandom")
1633 #define ENTITY_RAND_P(e) ENTITY_NAME_P(e,"rand")
1634 #define ENTITY_SRAND_P(e) ENTITY_NAME_P(e,"srand")
1635 
1636 /* signal.h */
1637 #define ENTITY_SIGNAL_P(e) ENTITY_NAME_P(e,"signal")
1638 
1639 /* Fortran DATA management */
1640 
1641 #define ENTITY_STATIC_INITIALIZATION_P(e) ENTITY_NAME_P(e, STATIC_INITIALIZATION_FUNCTION_NAME)
1642 #define ENTITY_REPEAT_VALUE_P(e) ENTITY_NAME_P(e, REPEAT_VALUE_FUNCTION_NAME)
1643 #define ENTITY_DATA_LIST_P(e) ENTITY_NAME_P(e, DATA_LIST_FUNCTION_NAME)
1644 
1645 /* C initialization expression */
1646 
1647 #define ENTITY_BRACE_INTRINSIC_P(e) ENTITY_NAME_P(e, BRACE_INTRINSIC)
1648 
1649 #define ENTITY_IMPLIED_CMPLX_P(e) ENTITY_NAME_P(e, IMPLIED_COMPLEX_NAME)
1650 #define ENTITY_IMPLIED_DCMPLX_P(e) ENTITY_NAME_P(e, IMPLIED_DCOMPLEX_NAME)
1651 
1652 /* C data structure and pointer management */
1653 
1654 #define ENTITY_FIELD_P(e) entity_an_operator_p(e, FIELD)
1655 #define ENTITY_POINT_TO_P(e) entity_an_operator_p(e, POINT_TO)
1656 #define ENTITY_DEREFERENCING_P(e) entity_an_operator_p(e, DEREFERENCING)
1657 /* Defined elsewhere: #define ENTITY_ADDRESS_OF_P(e) entity_an_operator_p(e, ADDRESS_OF) */
1658 
1659 /* C varargs stuff */
1660 #define ENTITY_VA_END_P(e) ENTITY_NAME_P(e, BUILTIN_VA_END)
1661 #define ENTITY_VA_START_P(e) ENTITY_NAME_P(e, BUILTIN_VA_START)
1662 #define ENTITY_VA_COPY_P(e) ENTITY_NAME_P(e, BUILTIN_VA_COPY)
1663 
1664 
1665 #define ENTITY_FIVE_OPERATION_P(e) ( ENTITY_PLUS_P(e) || \
1666  ENTITY_PLUS_C_P(e) || \
1667  ENTITY_MINUS_P(e) || \
1668  ENTITY_MINUS_C_P(e) || \
1669  ENTITY_UNARY_MINUS_P(e) || \
1670  ENTITY_MULTIPLY_P(e) || \
1671  ENTITY_MODULO_P(e) ||\
1672  ENTITY_DIVIDE_P(e) )
1673 
1674 #define IO_CALL_P(call) io_intrinsic_p(call_function(call))
1675 
1676 /*
1677  * Fortran 95 Allocatable
1678  */
1679 #define ALLOCATABLE_PREFIX "__pips_allocatable__"
1680 #define ALLOCATABLE_LBOUND_PREFIX "__pips__allocatable__lbound__"
1681 #define ALLOCATABLE_UBOUND_PREFIX "__pips__allocatable__ubound__"
1682 #define ENTITY_ALLOCATABLE_BOUND_P(e) \
1683  (strncmp(entity_user_name(e), ALLOCATABLE_LBOUND_PREFIX, strlen(ALLOCATABLE_LBOUND_PREFIX)) == 0 \
1684  || strncmp(entity_user_name(e), ALLOCATABLE_UBOUND_PREFIX, strlen(ALLOCATABLE_UBOUND_PREFIX)) == 0 )
1685 
1686 
1687 /* classification of basics */
1688 
1689 #define basic_numeric_simple_p(b) (basic_int_p(b) || basic_float_p(b))
1690 #define basic_numeric_p(b) (basic_numeric_simple_p(b) || basic_complex_p(b))
1691 #define basic_compatible_simple_p(b1, b2) (\
1692  (basic_numeric_simple_p(b1) && basic_numeric_simple_p(b2)) ||\
1693  (basic_string_p(b1) && basic_string_p(b2)) ||\
1694  (basic_logical_p(b1) && basic_logical_p(b2)) ||\
1695  (basic_overloaded_p(b1) && basic_overloaded_p(b2)) ||\
1696  (basic_undefined_p(b1) && basic_undefined_p(b2)))
1697 #define basic_compatible_p(b1, b2) (\
1698  (basic_numeric_p(b1) && basic_numeric_p(b2)) ||\
1699  (basic_string_p(b1) && basic_string_p(b2)) ||\
1700  (basic_logical_p(b1) && basic_logical_p(b2)) ||\
1701  (basic_overloaded_p(b1) && basic_overloaded_p(b2)) ||\
1702  (basic_undefined_p(b1) && basic_undefined_p(b2)))
1703 
1704 /* constant sizes */
1705 
1706 #define LABEL_SIZE 5
1707 #define INDENTATION (get_int_property("PRETTYPRINT_INDENTATION"))
1708 #define INDENT_A_LIST_OF_WORDS(list_of_words) { \
1709  if(list_of_words) { \
1710  list blanks = NIL; \
1711  for(int i=0; i<INDENTATION; i++) { \
1712  blanks = CHAIN_SWORD(blanks, " "); \
1713  } \
1714  list_of_words = gen_nconc(blanks,list_of_words); \
1715  } \
1716 }
1717 
1718 /* default values */
1719 
1720 #define STATEMENT_NUMBER_UNDEFINED (-1)
1721 #define UNKNOWN_RAM_OFFSET (-1)
1722 // It is for extern variables whose ram offset is not known
1723 #define UNDEFINED_RAM_OFFSET (-2)
1724 // It is for dynamic allocation of arrays whose ram offset is not known either.
1725 /* FI: I would have assumed that it is used for the stack area, but I
1726  must be wrong... */
1727 #define DYNAMIC_RAM_OFFSET (-3)
1728 
1729 
1730 /* On devrait utiliser Newgen pour cela, mais comme on ne doit pas
1731  les utiliser directement (mais via statement_less_p), cela devrait
1732  decourager les temeraires */
1733 
1734 #define MAKE_ORDERING(u,s) (u<<16|s)
1735 #define ORDERING_NUMBER(o) (o>>16)
1736 #define ORDERING_STATEMENT(o) (o & 0xffff)
1737 
1738 #define NORMALIZE_EXPRESSION(e) \
1739  ((expression_normalized(e) == normalized_undefined) ? \
1740  (expression_normalized(e) = NormalizeExpression(e)) : \
1741  (expression_normalized(e)))
1742 
1743 /* MISC: newgen shorthands */
1744 
1745 #define entity_declarations(e) (code_declarations(entity_code(e)))
1746 
1747 
1748 /* An entity_variable_p(e) may hide a typedef and hence a functional
1749  type. In C, use type_variable_p(ultimate_type(entity_type(e))) to
1750  make sure e is a variable.
1751 
1752  It may also be a dummy C parameter.
1753 
1754  It may also be a hidden entity such as an abstract location.
1755 
1756  To sum up, this predicate does not imply that entity e represents a
1757  variable declared in the source code by the programmer.
1758 
1759  See also the function variable_entity_p() which checks the storage
1760  of the entity.
1761  */
1762 #define entity_variable_p(e) (type_variable_p(entity_type(e)))
1763 
1764 #define entity_symbolic_p(e) (type_functional_p(entity_type(e)) && \
1765  storage_rom_p(entity_storage(e)) && value_symbolic_p(entity_initial(e)))
1766 
1767 /* implemented as a macro to allow lhs */
1768 #define module_language(e)\
1769  code_language(value_code(entity_initial((e))))
1770 
1771 #define module_functional_parameters(func) \
1772  functional_parameters(type_functional(entity_type(func)))
1773 
1774 #define call_intrinsic_p(C) \
1775  value_intrinsic_p(entity_initial(call_function(C)))
1776 
1777 
1778 #define statement_block_p(stat) \
1779  (instruction_block_p(statement_instruction(stat)))
1780 
1781 #define entity_constant_p(e) (type_functional_p(entity_type(e)) && \
1782  storage_rom_p(entity_storage(e)) && value_constant_p(entity_initial(e)))
1783 
1784 #define loop_to_instruction make_instruction_loop
1785 #define test_to_instruction make_instruction_test
1786 #define call_to_instruction make_instruction_call
1787 
1788 #define loop_to_statement(l) instruction_to_statement(loop_to_instruction(l))
1789 #define test_to_statement(t) instruction_to_statement(test_to_instruction(t))
1790 #define call_to_statement(c) instruction_to_statement(call_to_instruction(c))
1791 
1792 
1793 /***************************************************** BOOLEAN EXPRESSIONS */
1794 
1795 /* Building quickly bool expressions, FC. */
1796 
1797 #define unary_intrinsic_expression(name, e)\
1798  call_to_expression(make_call(entity_intrinsic(name),CONS(EXPRESSION,e,NIL)))
1799 
1800 #define binary_intrinsic_expression(name, e1, e2)\
1801  call_to_expression(make_call(entity_intrinsic(name),\
1802  CONS(EXPRESSION, e1, CONS(EXPRESSION, e2, NIL))))
1803 
1804 #define not_expression(e) \
1805  unary_intrinsic_expression(NOT_OPERATOR_NAME, e)
1806 #define or_expression(e1, e2) \
1807  binary_intrinsic_expression(OR_OPERATOR_NAME, e1, e2)
1808 #define and_expression(e1, e2) \
1809  binary_intrinsic_expression(AND_OPERATOR_NAME, e1, e2)
1810 #define ne_expression(e1, e2) \
1811  binary_intrinsic_expression(NON_EQUAL_OPERATOR_NAME, e1, e2)
1812 #define eq_expression(e1, e2) \
1813  binary_intrinsic_expression(EQUAL_OPERATOR_NAME, e1, e2)
1814 #define gt_expression(e1, e2) \
1815  binary_intrinsic_expression(GREATER_THAN_OPERATOR_NAME, e1, e2)
1816 #define ge_expression(e1, e2) \
1817  binary_intrinsic_expression(GREATER_OR_EQUAL_OPERATOR_NAME, e1, e2)
1818 #define lt_expression(e1, e2) \
1819  binary_intrinsic_expression(LESS_THAN_OPERATOR_NAME, e1, e2)
1820 #define le_expression(e1, e2) \
1821  binary_intrinsic_expression(LESS_OR_EQUAL_OPERATOR_NAME, e1, e2)
1822 
1823 
1824 /******************************************************** CONTROL GRAPH... */
1825 
1826 /* For the control graph modifiers: */
1827 
1828 /* To specify the way that remove_a_control_from_a_list_and_relink
1829  acts: */
1831 {
1832  /* Put some strange number to avoid random clash as much as
1833  possible... */
1836  };
1839 
1840 /* Constants for some ex-atomizer variable generation */
1841 
1842 #define TMP_ENT 1
1843 #define AUX_ENT 2
1844 #define DOUBLE_PRECISION_SIZE 8
1845 
1846 
1847 /***************************************************** HPF/HPFC DIRECTIVES */
1848 
1849 /* moved here because needed by syntax:-(
1850  */
1851 /* Directive names encoding: HPF_PREFIX + one character.
1852  * This encoding is achieved thru a sed script that transforms directives
1853  * into calls that can be parsed by the PIPS F77 parser. It's a hack but
1854  * it greatly reduced the number of lines for directive analysis, and
1855  * it allowed quite simply to figure out where the executable directives
1856  * are in the code.
1857  * However the syntax allowed in mapping directives is restricted to F77.
1858  */
1859 
1860 /* prefix for spacial directive calls
1861  */
1862 #define HPF_PREFIX "HPFC"
1863 
1864 /* suffixies for encoded hpf keywords
1865  */
1866 #define BLOCK_SUFFIX "K"
1867 #define CYCLIC_SUFFIX "C"
1868 #define STAR_SUFFIX "S"
1869 
1870 /* suffixes for HPF directives managed by HPFC
1871  */
1872 #define ALIGN_SUFFIX "A"
1873 #define REALIGN_SUFFIX "B"
1874 #define DISTRIBUTE_SUFFIX "D"
1875 #define REDISTRIBUTE_SUFFIX "E"
1876 #define INDEPENDENT_SUFFIX "I"
1877 #define NEW_SUFFIX "N"
1878 #define REDUCTION_SUFFIX "R"
1879 #define PROCESSORS_SUFFIX "P"
1880 #define TEMPLATE_SUFFIX "T"
1881 #define PURE_SUFFIX "U"
1882 #define DYNAMIC_SUFFIX "Y"
1883 
1884 /* suffixes for my own (FCD:-) directives.
1885  * these directives are used to instrument the code.
1886  * must be used carefully. may be ignore with some properties.
1887  */
1888 #define TELL_SUFFIX "0"
1889 #define SYNCHRO_SUFFIX "1"
1890 #define TIMEON_SUFFIX "2"
1891 #define TIMEOFF_SUFFIX "3"
1892 #define SETBOOL_SUFFIX "4"
1893 #define SETINT_SUFFIX "5"
1894 #define HPFCIO_SUFFIX "6"
1895 #define HOSTSECTION_SUFFIX "7"
1896 #define DEAD_SUFFIX "8"
1897 #define FAKE_SUFFIX "9"
1898 
1899 /* property prefix for ignoring FCD directives
1900  * TIME, SYNCHRO and SET exists.
1901  */
1902 #define FCD_IGNORE_PREFIX "HPFC_IGNORE_FCD_"
1903 
1904 /* __asm function
1905  */
1906 #define ASM_FUNCTION_NAME "__asm"
1907 
1908 /* soft block->sequence transition
1909  */
1910 #define is_instruction_block is_instruction_sequence
1911 #define instruction_block_p(i) instruction_sequence_p(i)
1912 #define instruction_block(i) sequence_statements(instruction_sequence(i))
1913 
1914 /* easy list constructor
1915  */
1916 #define make_statement_list( stats... ) \
1917  (gen_make_list(statement_domain, ##stats, 0))
1918 #define make_expression_list( stats... ) \
1919  (gen_make_list(expression_domain, ##stats, 0))
1920 
1921 /* After the modification in Newgen: unstructured = entry:control x exit:control
1922  we have create a macro to transform automatically unstructured_control to unstructured_entry */
1923 #define unstructured_control unstructured_entry
1924 
1925 /* Default type sizes */
1926 
1927 #define DEFAULT_CHARACTER_TYPE_SIZE (1)
1928 #define DEFAULT_SHORT_INTEGER_TYPE_SIZE (2)
1929 #define DEFAULT_INTEGER_TYPE_SIZE (4)
1930 #define DEFAULT_LONG_INTEGER_TYPE_SIZE (6)
1931 #define DEFAULT_LONG_LONG_INTEGER_TYPE_SIZE (8)
1932 #define DEFAULT_LONG_LONG_LONG_INTEGER_TYPE_SIZE (9)
1933 
1934 // To avoid issues with the PIPS validation suite on a 32-bit pointer machine
1935 //#define DEFAULT_POINTER_TYPE_SIZE (sizeof(void *)) // could be 4 or 8 or sizeof(pointer)
1936 #define DEFAULT_POINTER_TYPE_SIZE (8)
1937 #define DEFAULT_UNSIGNED_TYPE_SIZE (1) // type_size/10==1
1938 #define DEFAULT_SIGNED_TYPE_SIZE (2) // type_size/10=2
1939 
1940 /* The standard C integer types are represented as follow
1941 char = 1
1942 short_int = 2
1943 int = 4
1944 long_int = 6
1945 long_long_int = 8
1946 __int128_t = 9 (gcc extension)
1947 
1948 unsigned_char = 11
1949 unsigned_short_int = 12
1950 unsigned_int = 14
1951 unsigned_long_int = 16
1952 unsigned_long_long_int = 18
1953 __uint128_t = 19 (gcc extension)
1954 
1955 signed_char = 21
1956 signed_short_int = 22
1957 signed_int = 24
1958 signed_long_int = 26
1959 signed_long_long_int = 28
1960 
1961 mod(i,10) refers to the basic size and div(i,10) refers that
1962 the variable is unsigned, signed or not */
1963 
1964 #define DEFAULT_REAL_TYPE_SIZE (4)
1965 #define DEFAULT_DOUBLEPRECISION_TYPE_SIZE (8)
1966 #define DEFAULT_QUADPRECISION_TYPE_SIZE (16)
1967 #define DEFAULT_COMPLEX_TYPE_SIZE (8)
1968 #define DEFAULT_DOUBLECOMPLEX_TYPE_SIZE (16)
1969 #define DEFAULT_LONGDOUBLECOMPLEX_TYPE_SIZE (32)
1970 #define DEFAULT_LOGICAL_TYPE_SIZE (4)
1971 
1972 /* Already defined */
1973 //#define DEFAULT_POINTER_TYPE_SIZE (4)
1974 
1975 /* package name for region variables */
1976 #define REGIONS_MODULE_NAME "REGIONS-PACKAGE"
1977 
1978 /* Implicit variables to handle IO effetcs */
1979 /* package name for io routines */
1980 #define IO_EFFECTS_PACKAGE_NAME "__IO_EFFECTS"
1981 /* package name for time routines */
1982 #define TIME_EFFECTS_PACKAGE_NAME "__TIME_EFFECTS"
1983 /* package name for random routines */
1984 #define RAND_EFFECTS_PACKAGE_NAME "_RANDOM_EFFECTS"
1985 /* variable name for random unit */
1986 #define RAND_GEN_EFFECTS_NAME "GEN_SEED"
1987 /* package name for malloc routines (could be libc package) */
1988 #define MALLOC_EFFECTS_PACKAGE_NAME "_MALLOC_EFFECTS"
1989 /* variable name for heap effects */
1990 #define MALLOC_EFFECTS_NAME "_MALLOC_"
1991 /* package name for memmove routines */
1992 #define MEMMOVE_EFFECTS_PACKAGE_NAME "_MEMMOVE_EFFECTS"
1993 /* variable name for memmove unit */
1994 #define MEMMOVE_EFFECTS_NAME "_MEMMOVE_"
1995 /* array of Logical UNits; it is more or less handled as the current file pointer; in C, used for open, close, read, write... */
1996 #define IO_EFFECTS_ARRAY_NAME "LUNS"
1997 /* Array of struct io_files pointed to by pointers returned by fopen
1998  and used by fclose, fscanf, fprintf... */
1999 #define IO_EFFECTS_IO_FILE_NAME "IO_FILES"
2000 /* To express C IO intrinsics effects */
2001 #define IO_EFFECTS_PTR_NAME "_C_IO_ptr"
2002 /* array of end of file codes */
2003 #define IO_EOF_ARRAY_NAME "END_LUNS"
2004 /* array of error codes for LUNs */
2005 #define IO_ERROR_ARRAY_NAME "ERR_LUNS"
2006 /* variable holding time effects */
2007 #define TIME_EFFECTS_VARIABLE_NAME "KALI" /* Kali is the goddess of time in the Hindu mythology */
2008 #define TIME_EFFECTS_BUFFER_NAME "KALI-BUFFER" /* Kali is the goddess of time in the Hindu mythology */
2009 /* size of the unit specifier */
2010 #define IO_EFFECTS_UNIT_SPECIFIER_LENGTH 4
2011 /* Standard unit numbers depend on the operating system. Here are UNIX definitions. */
2012 #define STDERR_LUN (0)
2013 #define STDERR_NAME "stderr"
2014 #define ENTITY_STDERR_P(e) entity_a_special_entity_p(e, STDERR_NAME)
2015 #define STDIN_LUN (5)
2016 #define STDIN_NAME "stdin"
2017 #define ENTITY_STDIN_P(e) entity_a_special_entity_p(e, STDIN_NAME)
2018 #define STDOUT_LUN (6)
2019 #define STDOUT_NAME "stdout"
2020 #define ENTITY_STDOUT_P(e) entity_a_special_entity_p(e, STDOUT_NAME)
2021 
2022 /*Symbolic constants for the file descriptors belonging to the standard streams: unistd.h */
2023 #if !defined(HAVE_UNISTD_H) && !defined(_UNISTD_H)
2024 #define STDIN_FILENO (0)
2025 #define STDOUT_FILENO (1)
2026 #define STDERR_FILENO (2)
2027 #endif
2028 
2029 /* Implicit variable names for C */
2030 
2031 #define IMPLICIT_VARIABLE_NAME_1 "__FUNCTION__"
2032 #define IMPLICIT_VARIABLE_NAME_2 "__func__"
2033 
2034 /* Empty comments (i.e. default comments) */
2035 /* FI: this is a poor choice as the statements won't be gen_defined_p
2036  and as strdup() won't be usable without an extra test. Would it be
2037  so bad to use strdup(""); as empty_comments? */
2038 #define empty_comments string_undefined
2039 
2040 /** An alias for make_empty_block_statement */
2041 #define make_empty_statement make_empty_block_statement
2042 
2043 /** An alias for make_empty_block_statement */
2044 #define make_nop_statement make_empty_block_statement
2045 
2046 
2047 /* \addtogroup control_visitors */
2048 
2049 /* @{ */
2050 /* Macro to walk through all the controls reachable from a given control
2051  node of an unstructured
2052 
2053  Reachability is defined by successors and predecessors (i.e. the control
2054  flow graph is seen as non-directed)
2055 
2056  @param ctl is a name of a control node variable that is declared inside
2057  this macro and is used by the following code to access the visited
2058  control node
2059 
2060  @param code is the actions to execute on the visited control node
2061 
2062  @param c is a control node to start visiting with
2063 
2064  @param list is a list that will store the visited control nodes. It is
2065  used mainly for this macro to avoid visiting twice a node. The simple
2066  usage is to give a list variable initialized to NIL. A nice side effect
2067  is that it will contain the list of all the reachable control nodes. Do
2068  not forget to free this list afterwards. Another classical usage is to
2069  give to the macro a list with a list of nodes to avoid visiting.
2070 */
2071 #define CONTROL_MAP( ctl, code, c, list ) \
2072  do { \
2073  GENERIC_CONTROL_MAP( control_map_get_blocs, ctl, code, c, list ) \
2074  } while(0)
2075 
2076 
2077 /* Walk through all the controls of un unstructured
2078 
2079  This macro do not work indeed because often the...
2080 
2081  The nodes are those reachable from the entry node and also from the exit
2082  node (that may be unreachable from the entry node of th unstructured).
2083 
2084  Reachability is defined by successors and predecessors (i.e. the control
2085  flow graph is seen as non-directed)
2086 
2087  @param c is a name of a control node variable that is declared inside
2088  this macro and is used by the following code to access the visited
2089  control node
2090 
2091  @param code is the actions to execute on the visited control node
2092 
2093  @param u is the unstructured to visit
2094 
2095  @param l is a list that will store the visited control nodes. It is used
2096  mainly for this macro to avoid visiting twice a node. The simple usage
2097  is to give a list variable initialized to NIL. A nice side effect is
2098  that it will contain the list of all the reachable control nodes. Do not
2099  forget to free this list afterwards. Another classical usage is to give
2100  to the macro a list with a list of nodes to avoid visiting.
2101 */
2102 #define UNSTRUCTURED_CONTROL_MAP(c, u, l, code) \
2103  /* The implementation is sub-optimal because it duplicates the \
2104  code... */ \
2105  do { \
2106  /* First get the control nodes reachable from the entry node: */ \
2107  control_map_get_blocs(unstructured_entry(u), &l); \
2108  /* Add then the control nodes reachable from the exit nodes if not \
2109  already in: */ \
2110  control_map_get_blocs(unstructured_exit(u), &l); \
2111  /* Reverse the list because previous construction was done in the \
2112  reverse way: */ \
2113  l = gen_nreverse(l); \
2114  /* Iterate on all the selected control nodes: */ \
2115  FOREACH(CONTROL, c, l) \
2116  code \
2117  } while(0)
2118 
2119 
2120 /* Walk through all the controls forward-reachable from a given control
2121  node of an unstructured
2122 
2123  Reachability is defined by successor-only relation (i.e. the control
2124  flow graph is seen as directed)
2125 
2126  @param ctl is a name of a control node variable that is declared inside
2127  this macro and is used by the following code to access the visited
2128  control node
2129 
2130  @param code is the actions to execute on the visited control node
2131 
2132  @param c is a control node to start visiting with
2133 
2134  @param list is a list that will store the visited control nodes. It is
2135  used mainly for this macro to avoid visiting twice a node. The simple
2136  usage is to give a list variable initialized to NIL. A nice side effect
2137  is that it will contain the list of all the forward-reachable control
2138  nodes. Do not forget to free this list afterwards. Another classical
2139  usage is to give to the macro a list with a list of nodes to avoid
2140  visiting.
2141 */
2142 #define FORWARD_CONTROL_MAP( ctl, code, c, list ) \
2143  do { \
2144  GENERIC_CONTROL_MAP( forward_control_map_get_blocs, ctl, code, c, list ) \
2145  } while(0)
2146 
2147 
2148 /* Walk through all the controls backward-reachable from a given control
2149  node of an unstructured
2150 
2151  Reachability is defined by predecessor-only relation (i.e. the control
2152  flow graph is seen as directed)
2153 
2154  @param ctl is a name of a control node variable that is declared inside
2155  this macro and is used by the following code to access the visited
2156  control node
2157 
2158  @param code is the actions to execute on the visited control node
2159 
2160  @param c is a control node to start visiting with
2161 
2162  @param list is a list that will store the visited control nodes. It is
2163  used mainly for this macro to avoid visiting twice a node. The simple
2164  usage is to give a list variable initialized to NIL. A nice side effect
2165  is that it will contain the list of all the backward-reachable control
2166  nodes. Do not forget to free this list afterwards. Another classical
2167  usage is to give to the macro a list with a list of nodes to avoid
2168  visiting.
2169 */
2170 #define BACKWARD_CONTROL_MAP( ctl, code, c, list ) \
2171  do { \
2172  GENERIC_CONTROL_MAP( backward_control_map_get_blocs, ctl, code, c, list ) \
2173  } while(0)
2174 
2175 
2176 /* Walk through all the controls backward-reachable from a given control
2177  node of an unstructured
2178 
2179  Reachability is defined by successor-only relation (i.e. the control
2180  flow graph is seen as directed)
2181 
2182  @param ctl is a name of a control node variable that is declared inside
2183  this macro and is used by the following code to access the visited
2184  control node
2185 
2186  @param code is the actions to execute on the visited control node
2187 
2188  @param c is a control node to start visiting with
2189 
2190  @param list is a list that will store the visited control nodes. It is
2191  used mainly for this macro to avoid visiting twice a node. The simple
2192  usage is to give a list variable initialized to NIL. A nice side effect
2193  is that it will contain the list of all the reachable control nodes. Do
2194  not forget to free this list afterwards. Another classical usage is to
2195  give to the macro a list with a list of nodes to avoid visiting.
2196 */
2197 #define WIDE_FORWARD_CONTROL_MAP( ctl, code, c, list ) \
2198  do { \
2199  GENERIC_CONTROL_MAP(wide_forward_control_map_get_blocs, \
2200  ctl, code, c, list ) \
2201  } while(0)
2203 
2204 /* The control node visiting engine. */
2205 #define GENERIC_CONTROL_MAP( get_controls, ctl, code, c, list ) \
2206 { \
2207  cons *_cm_list_init = (list) ; \
2208  cons *_cm_list = _cm_list_init ; \
2209  if( _cm_list == NIL ) {\
2210  get_controls( c, &_cm_list ) ; \
2211  _cm_list = gen_nreverse( _cm_list ) ; \
2212  }\
2213  MAPL( _cm_ctls, {control ctl = CONTROL( CAR( _cm_ctls )) ; \
2214  \
2215  code ;}, \
2216  _cm_list ) ; \
2217  if( _cm_list_init == NIL ) \
2218  list = _cm_list ; \
2219 }
2220 
2221 
2222 
2223 /** @} */
2224 
2225 
2226 /** @defgroup phase_definition Functions used to define phases
2227 
2228  It defines macros for simple transformation phases that use (at least)
2229  the CODE of a module and write back a (possibly) new version of the
2230  CODE.
2231 
2232  @{
2233 */
2234 
2235 
2236 /** Start a phase that use a module CODE
2237 
2238  @param module_name is a string with the name of the module the phase is
2239  applied to
2240 
2241  @param debug_env_var is a string with the name of the environment variable used to get the debug level to use inside the phase
2243  @return the statement of the module
2244 */
2245 #define PIPS_PHASE_PRELUDE(module_name, debug_env_var) \
2246  /* Get and return the CODE resource of the module and define this \
2247  module as the current one at the same time to avoid introducing \
2248  a new variable: */ \
2249  set_current_module_statement((statement) \
2250  db_get_memory_resource(DBR_CODE, \
2251  module_name, \
2252  true)); \
2253  \
2254  /* Set the current module entity required to have many things \
2255  working in PIPS: */ \
2256  set_current_module_entity(module_name_to_entity(module_name)); \
2257  \
2258  /* The debug is now controled by this environment variable name: */ \
2259  debug_on(debug_env_var); \
2260  pips_debug(1, "Entering...\n"); \
2261  pips_assert("Statement should be OK at entry...", \
2262  statement_consistent_p(get_current_module_statement()))
2263 
2264 
2265 /** End a transformation phase by putting back into PIPS the (possibly)
2266  modified statement
2267 
2268  @param new_module_statement point to the (potentially) new module
2269  statement of the module
2270  */
2271 #define PIPS_PHASE_POSTLUDE(new_module_statement) \
2272  pips_assert("Statement should be OK at exit...", \
2273  statement_consistent_p(new_module_statement)); \
2274  pips_debug(1, "done\n"); \
2275  /* Exit current debug context */ \
2276  debug_off(); \
2277  \
2278  /* Reorder the module, because some statements have been replaced. */ \
2279  module_reorder(new_module_statement); \
2280  \
2281  /* Put the new CODE ressource into PIPS: */ \
2282  DB_PUT_MEMORY_RESOURCE(DBR_CODE, \
2283  get_current_module_name(), \
2284  new_module_statement); \
2285  \
2286  /* There is no longer a current module: */ \
2287  reset_current_module_statement(); \
2288  reset_current_module_entity(); \
2289  \
2290  /* Assume it should have worked by returning true... */ \
2291  return true
2292 
2293 /** @} */
2296 /* polymorhism thanks to newgen ! */
2297 #define INSTANCE_OF(type,value) ( (_int)((value)->u) == (_int)(type##_domain) )
2299 #define binary_call_lhs(c) (EXPRESSION(CAR(call_arguments((c)))))
2300 #define binary_call_rhs(c) (EXPRESSION(CAR(CDR(call_arguments((c))))))
2301 #define expression_scalar_p(e) (expression_reference_p((e)) && reference_scalar_p(expression_reference((e))))
2302 #define hash_contains_p(htp, key) (hash_get(htp, key) != HASH_UNDEFINED_VALUE)
2307 } ;
2308 #define range_to_distance_p(e) ((e) == range_to_distance)
2309 #define range_to_nbiter_p(e) ((e) == range_to_nbiter)
2310 
2312 #define GENERATED_LABEL_MODULE_NAME "__GENSYM"
2314 /* that is all for ri-util-local.h
2315  */
2316 
2317 typedef enum {
2322 
2323 /* for intrinsic registration */
2324 typedef struct {
2326  int prec;
2329 enum {
2333  ENTITY_STACK_AREA = 4,
2334  ENTITY_HEAP_AREA = 8,
2336  ENTITY_STATIC_AREA = 32,
2339 };
2341 #define make_entity(n,t,s,i) make_entity(n,t,s,i,DEFAULT_ENTITY_KIND)
2342 
2343 /* SPIRE API */
2344 #define SEND_FUNCTION_NAME "send"
2345 #define RECV_FUNCTION_NAME "recv"
2346 #define SIGNAL_FUNCTION_NAME "signal"
2347 #define WAIT_FUNCTION_NAME "wait"
2348 
2350 /*MPI calls*/
2351 #define MPI_INIT_FUNCTION_NAME "MPI_Init"
2352 #define MPI_FINALIZE_FUNCTION_NAME "MPI_Finalize"
2353 #define MPI_ISEND_FUNCTION_NAME "MPI_Isend"
2354 #define MPI_RECV_FUNCTION_NAME "MPI_Recv"
2355 #define MPI_BARRIER_FUNCTION_NAME "MPI_Barrier"
2356 //not use yet
2357 #define MPI_COMM_SIZE_FUNCTION_NAME "MPI_Comm_size"
2358 #define MPI_COMM_RANK_FUNCTION_NAME "MPI_Comm_rank"
2359 #define MPI_SEND_FUNCTION_NAME "MPI_Send" //implementation dependent
2360 #define MPI_SSEND_FUNCTION_NAME "MPI_Ssend" //Synchronous send
2361 #define MPI_RSEND_FUNCTION_NAME "MPI_Rsend" //Ready send
2362 #define MPI_BSEND_FUNCTION_NAME "MPI_Bsend" //Buffer send
2363 #define MPI_ISEND_FUNCTION_NAME "MPI_Isend" //non blocking version
2364 #define MPI_ISSEND_FUNCTION_NAME "MPI_Issend"
2365 #define MPI_IRSEND_FUNCTION_NAME "MPI_Irsend"
2366 #define MPI_IBSEND_FUNCTION_NAME "MPI_Ibsend"
2367 #define MPI_RECV_FUNCTION_NAME "MPI_Recv"
2368 #define MPI_IRECV_FUNCTION_NAME "MPI_Irecv"
2369 //#define MPI_MRECV_FUNCTION_NAME "MPI_Mrecv" //match Receive - MPI3.0
2370 //#define MPI_IMRECV_FUNCTION_NAME "MPI_Imrecv"
2371 #define MPI_SENDRECV_FUNCTION_NAME "MPI_Sendrecv"
2373 
2374 /*MPI types*/
2375 #define MPI_STATUS "MPI_Status"
2376 #define MPI_REQUEST "MPI_Request"
2377 #define MPI_COMM "MPI_Comm"
2378 #define MPI_DATATYPE "MPI_Datatype"
2380 /* intrinsic entity declarations */
2381 #define ENTITY_SEND_P(e) ENTITY_NAME_P(e, "send")
2382 
2383 // for new entities
void const char const char const int
int bool
we cannot use an enum or stdbool because we need to be compatible with newgen, thus boolean need to h...
Definition: newgen_types.h:78
struct cons * list
Definition: newgen_types.h:106
int f(int off1, int off2, int n, float r[n], float a[n], float b[n])
Definition: offsets.c:15
list double_entities
void print_type(type)
For debugging.
Definition: type.c:111
list real_entities
list complex_entities
remove_a_control_from_a_list_and_relink_direction
For the control graph modifiers:
@ source_is_predecessor_and_dest_is_successor
Put some strange number to avoid random clash as much as possible...
@ source_is_successor_and_dest_is_predecessor
list logical_entities
list char_entities
if_clause_policy
that is all for ri-util-local.h
@ AND_IF_POLICY
@ OR_IF_POLICY
@ IGNORE_IF_POLICY
string basic_to_string(basic)
RI-UTIL Library: Functions dealing with and constants related to PIPS intermediate representation ri....
Definition: type.c:87
bool same_type_name_p(type, type)
For naming homogeneity: expression_to_string(), reference_to_string()...
Definition: type.c:74
range_to_expression_mode
@ range_to_distance
@ range_to_nbiter
list integer_entities
Make a new variable entity which name is one letter prefix + one incrementing number.
Definition: ri-util.h:2787
string string_of_type(type)
Definition: type.c:56
@ ENTITY_POINTER_DUMMY_TARGETS_AREA
@ ENTITY_STATIC_AREA
@ ENTITY_FORMAL_AREA
@ EFFECTS_PACKAGE
@ ABSTRACT_LOCATION
@ DEFAULT_ENTITY_KIND
@ ENTITY_DYNAMIC_AREA
@ ENTITY_STACK_AREA
@ ENTITY_HEAP_AREA
struct _newgen_struct_call_ * call
Definition: ri.h:63
The structure used to build lists in NewGen.
Definition: newgen_list.h:41
for intrinsic registration