PIPS
myintrinsics.c
Go to the documentation of this file.
1 /*
2 
3  $Id: myintrinsics.c 23065 2016-03-02 09:05:50Z coelho $
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 #ifdef HAVE_CONFIG_H
25  #include "pips_config.h"
26 #endif
27 /*{{{ banner*/
28 /* package regions : Alexis Platonoff, 22 Aout 1990
29  *
30  * This File contains the main functions that compute the regions of
31  * a call to an intrinsic function : "+", "COS", etc...
32  */
33 /*}}}*/
34 #include "all.h"
35 /*{{{ data structures for handling descriptors*/
36 /* the following data structure indicates whether an io element generates
37 a read regions or a write region. the kind of region depends on the
38 instruction type: for instance, access generates a read region if used
39 within an open statement, and a write region when used inside an inquire
40 statement */
41 
42 typedef struct IoElementDescriptor {
43  string StmtName;
44  string IoElementName;
47 
49 
51  {"OPEN", "UNIT=", is_action_read, is_approximation_exact},
52  {"OPEN", "ERR=", is_action_read, is_approximation_may},
53  {"OPEN", "FILE=", is_action_read, is_approximation_exact},
54  {"OPEN", "STATUS=", is_action_read, is_approximation_may},
55  {"OPEN", "ACCESS=", is_action_read, is_approximation_exact},
56  {"OPEN", "FORM=", is_action_read, is_approximation_exact},
57  {"OPEN", "RECL=", is_action_read, is_approximation_exact},
58  {"OPEN", "BLANK=", is_action_read, is_approximation_may},
59  {"OPEN", "IOSTAT=", is_action_write, is_approximation_may},
60 
61  {"CLOSE", "UNIT=", is_action_read, is_approximation_exact},
62  {"CLOSE", "ERR=", is_action_read, is_approximation_may},
63  {"CLOSE", "STATUS=", is_action_read, is_approximation_may},
64  {"CLOSE", "IOSTAT=", is_action_write, is_approximation_may},
65 
66  {"INQUIRE", "UNIT=", is_action_read, is_approximation_exact},
67  {"INQUIRE", "ERR=", is_action_read, is_approximation_may},
68  {"INQUIRE", "FILE=", is_action_read, is_approximation_exact},
69  {"INQUIRE", "IOSTAT=", is_action_write, is_approximation_exact},
70  {"INQUIRE", "EXIST=", is_action_write, is_approximation_exact},
71  {"INQUIRE", "OPENED=", is_action_write, is_approximation_exact},
72  {"INQUIRE", "NUMBER=", is_action_write, is_approximation_exact},
73  {"INQUIRE", "NAMED=", is_action_write, is_approximation_exact},
74  {"INQUIRE", "NAME=", is_action_write, is_approximation_exact},
75  {"INQUIRE", "ACCESS=", is_action_write, is_approximation_exact},
76  {"INQUIRE", "SEQUENTIAL=", is_action_write, is_approximation_exact},
77  {"INQUIRE", "DIRECT=", is_action_write, is_approximation_exact},
78  {"INQUIRE", "FORM=", is_action_write, is_approximation_exact},
79  {"INQUIRE", "FORMATTED=", is_action_write, is_approximation_exact},
80  {"INQUIRE", "UNFORMATTED=", is_action_write, is_approximation_exact},
81  {"INQUIRE", "RECL=", is_action_write, is_approximation_exact},
82  {"INQUIRE", "NEXTREC=", is_action_write, is_approximation_exact},
83  {"INQUIRE", "BLANK=", is_action_write, is_approximation_exact},
84 
85  {"BACKSPACE", "UNIT=", is_action_read, is_approximation_exact},
86  {"BACKSPACE", "ERR=", is_action_read, is_approximation_may},
87  {"BACKSPACE", "IOSTAT=", is_action_write, is_approximation_may},
88 
89  {"ENDFILE", "UNIT=", is_action_read, is_approximation_exact},
90  {"ENDFILE", "ERR=", is_action_read, is_approximation_may},
91  {"ENDFILE", "IOSTAT=", is_action_write, is_approximation_may},
92 
93  {"REWIND", "UNIT=", is_action_read, is_approximation_exact},
94  {"REWIND", "ERR=", is_action_read, is_approximation_may},
95  {"REWIND", "IOSTAT=", is_action_write, is_approximation_may},
96 
97  {"READ", "FMT=", is_action_read, is_approximation_exact},
98  {"READ", "UNIT=", is_action_read, is_approximation_exact},
99  {"READ", "REC=", is_action_read, is_approximation_exact},
100  {"READ", "ERR=", is_action_read, is_approximation_may},
101  {"READ", "END=", is_action_read, is_approximation_exact},
102  {"READ", "IOSTAT=", is_action_write, is_approximation_may},
103  {"READ", "IOLIST=", is_action_write, is_approximation_exact},
104 
105  {"WRITE", "FMT=", is_action_read, is_approximation_exact},
106  {"WRITE", "UNIT=", is_action_read, is_approximation_exact},
107  {"WRITE", "REC=", is_action_read, is_approximation_exact},
108  {"WRITE", "ERR=", is_action_read, is_approximation_may},
109  {"WRITE", "END=", is_action_read, is_approximation_exact},
110  {"WRITE", "IOSTAT=", is_action_write, is_approximation_may},
111  {"WRITE", "IOLIST=", is_action_read, is_approximation_exact},
112  {0, 0, 0, 0}
113 };
114 
115 
116 /* the following data structure describes an intrinsic function: its
117 name and the function to apply on a call to this intrinsic to get the
118 effects of the call */
119 
120 typedef struct {
121  string name;
122  list (*f)();
124 
126  {"+", no_write_comp_regions},
127  {"-", no_write_comp_regions},
128  {"/", no_write_comp_regions},
129  {"*", no_write_comp_regions},
130  {"--", no_write_comp_regions},
131  {"**", no_write_comp_regions},
132  {".EQV.", no_write_comp_regions},
133  {".NEQV.", no_write_comp_regions},
134  {".OR.", no_write_comp_regions},
135  {".AND.", no_write_comp_regions},
136  {".LT.", no_write_comp_regions},
137  {".GT.", no_write_comp_regions},
138  {".LE.", no_write_comp_regions},
139  {".GE.", no_write_comp_regions},
140  {".EQ.", no_write_comp_regions},
141  {".NE.", no_write_comp_regions},
142  {"//", no_write_comp_regions},
143  {".NOT.", no_write_comp_regions},
144 
145  {"CONTINUE", no_write_comp_regions},
146  {"ENDDO", no_write_comp_regions},
147  {"PAUSE", no_write_comp_regions},
148  {"RETURN", no_write_comp_regions},
149  {"STOP", no_write_comp_regions},
150  {"END", no_write_comp_regions},
151  {"FORMAT", no_write_comp_regions},
152 
153  {"INT", no_write_comp_regions},
154  {"IFIX", no_write_comp_regions},
155  {"IDINT", no_write_comp_regions},
156  {"REAL", no_write_comp_regions},
157  {"FLOAT", no_write_comp_regions},
158  {"SNGL", no_write_comp_regions},
159  {"DBLE", no_write_comp_regions},
160  {"CMPLX", no_write_comp_regions},
161  {"ICHAR", no_write_comp_regions},
162  {"CHAR", no_write_comp_regions},
163  {"AINT", no_write_comp_regions},
164  {"DINT", no_write_comp_regions},
165  {"ANINT", no_write_comp_regions},
166  {"DNINT", no_write_comp_regions},
167  {"NINT", no_write_comp_regions},
168  {"IDNINT", no_write_comp_regions},
169  {"IABS", no_write_comp_regions},
170  {"ABS", no_write_comp_regions},
171  {"DABS", no_write_comp_regions},
172  {"CABS", no_write_comp_regions},
173 
174  {"MOD", no_write_comp_regions},
175  {"AMOD", no_write_comp_regions},
176  {"DMOD", no_write_comp_regions},
177  {"ISIGN", no_write_comp_regions},
178  {"SIGN", no_write_comp_regions},
179  {"DSIGN", no_write_comp_regions},
180  {"IDIM", no_write_comp_regions},
181  {"DIM", no_write_comp_regions},
182  {"DDIM", no_write_comp_regions},
183  {"DPROD", no_write_comp_regions},
184  {"MAX", no_write_comp_regions},
185  {"MAX0", no_write_comp_regions},
186  {"AMAX1", no_write_comp_regions},
187  {"DMAX1", no_write_comp_regions},
188  {"AMAX0", no_write_comp_regions},
189  {"MAX1", no_write_comp_regions},
190  {"MIN", no_write_comp_regions},
191  {"MIN0", no_write_comp_regions},
192  {"AMIN1", no_write_comp_regions},
193  {"DMIN1", no_write_comp_regions},
194  {"AMIN0", no_write_comp_regions},
195  {"MIN1", no_write_comp_regions},
196  {"LEN", no_write_comp_regions},
197  {"INDEX", no_write_comp_regions},
198  {"AIMAG", no_write_comp_regions},
199  {"CONJG", no_write_comp_regions},
200  {"SQRT", no_write_comp_regions},
201  {"DSQRT", no_write_comp_regions},
202  {"CSQRT", no_write_comp_regions},
203 
204  {"EXP", no_write_comp_regions},
205  {"DEXP", no_write_comp_regions},
206  {"CEXP", no_write_comp_regions},
207  {"LOG", no_write_comp_regions},
208  {"ALOG", no_write_comp_regions},
209  {"DLOG", no_write_comp_regions},
210  {"CLOG", no_write_comp_regions},
211  {"LOG10", no_write_comp_regions},
212  {"ALOG10", no_write_comp_regions},
213  {"DLOG10", no_write_comp_regions},
214  {"SIN", no_write_comp_regions},
215  {"DSIN", no_write_comp_regions},
216  {"CSIN", no_write_comp_regions},
217  {"COS", no_write_comp_regions},
218  {"DCOS", no_write_comp_regions},
219  {"CCOS", no_write_comp_regions},
220  {"TAN", no_write_comp_regions},
221  {"DTAN", no_write_comp_regions},
222  {"ASIN", no_write_comp_regions},
223  {"DASIN", no_write_comp_regions},
224  {"ACOS", no_write_comp_regions},
225  {"DACOS", no_write_comp_regions},
226  {"ATAN", no_write_comp_regions},
227  {"DATAN", no_write_comp_regions},
228  {"ATAN2", no_write_comp_regions},
229  {"DATAN2", no_write_comp_regions},
230  {"SINH", no_write_comp_regions},
231  {"DSINH", no_write_comp_regions},
232  {"COSH", no_write_comp_regions},
233  {"DCOSH", no_write_comp_regions},
234  {"TANH", no_write_comp_regions},
235  {"DTANH", no_write_comp_regions},
236 
237  {"LGE", no_write_comp_regions},
238  {"LGT", no_write_comp_regions},
239  {"LLE", no_write_comp_regions},
240  {"LLT", no_write_comp_regions},
241 
244 
245  {"=", affect_comp_regions},
246 
247  {"WRITE", io_comp_regions},
248  {"REWIND", io_comp_regions},
249  {"OPEN", io_comp_regions},
250  {"CLOSE", io_comp_regions},
251  {"INQUIRE", io_comp_regions},
252  {"READ", io_comp_regions},
253  {"BUFFERIN", io_comp_regions},
254  {"BUFFEROUT", io_comp_regions},
255  {"ENDFILE", io_comp_regions},
257  {NULL, 0}
258 };
259 /*}}}*/
260 
261 
262 /*{{{ comp_regions_of_intrinsic*/
263 /* list comp_regions_of_intrinsic(entity e, list args, transformer context)
264  * input : a intrinsic function name, the list or arguments, and
265  * the calling context.
266  * output : the corresponding list of regions.
267  * modifies : nothing.
268  * comment :
269  */
271 entity e;
272 list args;
274 {
275  return (proper_comp_regions_of_intrinsic(e, args, context));
276 }
277 /*}}}*/
278 /*{{{ proper_comp_regions_of_intrinsic*/
279 /* list proper_comp_regions_of_intrinsic(entity e, list args, transformer context)
280  * input : a intrinsic function name, the list or arguments, and
281  * the calling context.
282  * output : the corresponding list of regions.
283  * modifies : nothing.
284  * comment :
285  */
287 entity e;
288 list args;
290 {
291  const char* s = entity_local_name(e);
293  list lr;
294 
295  debug(3, "proper_comp_regions_of_intrinsic", "begin\n");
296 
297  while (pid->name != NULL) {
298  if (strcmp(pid->name, s) == 0) {
299  lr = (*(pid->f))(e, args, context);
300  debug(3, "proper_comp_regions_of_intrinsic", "end\n");
301  return(lr);
302  }
303 
304  pid += 1;
305  }
306 
307  pips_internal_error("unknown intrinsic %s", s);
308 
309  return(NIL);
310 }
311 /*}}}*/
312 /*{{{ no_write_comp_regions*/
313 /*===============================================================================*/
314 list
316  list args,
318 {
319  list lr;
320 
321  debug(5, "no_write_comp_regions", "begin\n");
323  debug(5, "no_write_comp_regions", "end\n");
324  return(lr);
325 }
326 
327 
328 /*}}}*/
329 /*{{{ affect_comp_regions*/
330 /*===============================================================================*/
331 list
333  list args,
335 {
336  list le = NIL;
337 
338  expression lhs = EXPRESSION(CAR(args));
339  syntax s = expression_syntax(lhs);
340 
341  expression rhs = EXPRESSION(CAR(CDR(args)));
342 
343  debug(5, "affect_comp_regions", "begin\n");
344 
345  if (! syntax_reference_p(s))
346  pips_internal_error("not a reference");
347 
348 
350 
353 
354  debug(5, "affect_comp_regions", "end\n");
355 
356  return(le);
357 }
358 /*}}}*/
359 
360 /*{{{ SearchIoElements*/
362 const char *s, *i;
363 {
365 
366  while (p->StmtName != NULL) {
367  if (strcmp(p->StmtName, s) == 0 && strcmp(p->IoElementName, i) == 0)
368  return(p);
369  p += 1;
370  }
371 
372  pips_internal_error("unknown io element %s %s", s, i);
373  /* Never reaches this point. Only to avoid a warning at compile time. BC. */
375 }
376 /*}}}*/
377 /*{{{ io_comp_regions*/
379 entity e;
380 list args;
382 {
383  list le = NIL, pc, lep;
384 
385  debug(5, "io_comp_regions", "begin\n");
386 
387  for (pc = args; pc != NIL; pc = CDR(pc)) {
389  entity ci;
391 
392  pips_assert("io_comp_regions", syntax_call_p(s));
393 
394  ci = call_function(syntax_call(s));
396 
397  pc = CDR(pc);
398 
399  if (strcmp(p->IoElementName, "IOLIST=") == 0) {
401  }
402  else {
404  p->ReadOrWrite, context);
405  }
406 
407  if (p->MayOrMust == is_approximation_may)
408  {
409  MAP(REGION, reg,
410  {
413  }, lep);
414  }
415 
417 
418  /* regions effects on logical units - taken from effects/io.c */
419  if ((get_bool_property ("PRETTYPRINT_IO_EFFECTS")) &&
420  (pc != NIL) &&
421  (strcmp(p->IoElementName, "UNIT=") == 0))
422  {
423  /* We simulate actions on files by read/write actions
424  to a static integer array
425  GO:
426  It is necessary to do a read and and write action to
427  the array, because it updates the file-pointer so
428  it reads it and then writes it ...*/
429  entity private_io_entity;
430  reference ref;
431  list indices = NIL;
432 
435  EXPRESSION(CAR(pc)),NIL));
436 
437  private_io_entity = FindEntity(TOP_LEVEL_MODULE_NAME,
439 
440  pips_assert("regions_effects", private_io_entity != entity_undefined);
441 
442  ref = make_reference(private_io_entity,indices);
443  le = CompRegionsExactUnion(le,
446  le = CompRegionsExactUnion(le,
449 
450  }
451 
452  }
453 
454  debug(5, "io_comp_regions", "end\n");
455 
456  return(le);
457 }
458 /*}}}*/
459 /*{{{ comp_regions_of_io_element*/
460 /*===============================================================================*/
463 tag act;
465 {
466  list lr;
467 
468  debug(5, "comp_regions_of_io_elem", "begin\n");
469  if (act == is_action_write) {
471 
472  debug(6, "comp_regions_of_io_elem", "is_action_write\n");
473  pips_assert("comp_regions_of_ioelem", syntax_reference_p(s));
474 
476  }
477  else {
478  debug(6, "comp_regions_of_io_elem", "is_action_read\n");
480  }
481 
482  debug(5, "comp_regions_of_elem", "end\n");
483 
484  return(lr);
485 }
486 /*}}}*/
487 /*{{{ comp_regions_of_io_list*/
488 /*===============================================================================*/
490 list exprs;
491 tag act;
493 {
494  list le = NIL;
495  debug(5, "comp_regions_of_io_list", "begin\n");
496  while (!ENDP(exprs))
497  {
498  expression exp = EXPRESSION(CAR(exprs));
499  list lep = NIL;
500 
501  /* There is a bug with effects of io list
502 
503  READ *,N,(T(I),I=1,N)
504 
505  there is write effect on N but for the io list,
506  we don't have this effect !
507 
508  Cause : there is no loop for the list exprs !!! /NN:2000/ */
509 
512  }
513  else {
514  if (act == is_action_write) {
516 
517  debug(6, "comp_regions_of_io_list", "is_action_write");
518  pips_assert("comp_regions_of_iolist", syntax_reference_p(s));
520  }
521  else {
522  debug(6, "comp_regions_of_io_elem", "is_action_read");
524  }
525  }
526 
528 
529  exprs = CDR(exprs);
530  }
531 
532  debug(5, "comp_regions_of_io_list", "end\n");
533 
534  return(le);
535 }
536 /*}}}*/
537 /*{{{ comp_regions_of_implied_do*/
538 /* an implied do is a call to an intrinsic function named IMPLIED-DO;
539  * its first argument is the loop index, the second one is a range, and the
540  * remaining ones are expressions to be written or references to be read,
541  * or another implied_do (BA).
542  */
543 
546 tag act;
548 {
549  list le, lep, lr, args;
550  transformer local_context;
551  expression arg1, arg2;
552  entity index;
553  range r;
554  reference ref;
555 
556  pips_assert("comp_regions_of_implied_do", expression_implied_do_p(exp));
557 
558  debug(5, "comp_regions_of_implied_do", "begin\n");
559 
561  arg1 = EXPRESSION(CAR(args)); /* loop index */
562  arg2 = EXPRESSION(CAR(CDR(args))); /* range */
563 
564  pips_assert("comp_regions_of_implied_do",
566 
567  pips_assert("comp_regions_of_implied_do",
569 
570 
572  ref = make_reference(index, NIL);
573 
574  r = syntax_range(expression_syntax(arg2));
575 
576  /* regions of implied do index
577  * it is must_written but may read because the implied loop
578  * might execute no iteration.
579  */
580 
581  le = comp_regions_of_write(ref, context); /* the loop index is must-written */
582  /* Read effects are masked by the first write to the implied-do loop variable */
583 
584  /* regions of implied-loop bounds and increment */
587 
588 
589  /* the preconditions of the current statement don't include those
590  * induced by the implied_do, because they are local to the statement.
591  * But we need them to properly calculate the regions.
592  * the solution is to add to the current context the preconditions
593  * due to the current implied_do (think of nested implied_do).
594  * the regions are calculated, and projected along the index.
595  * BA, September 27, 1993.
596  */
597 
598  local_context = transformer_dup(context);
599  local_context = add_index_range_conditions(local_context, index, r,
601  transformer_arguments(local_context) =
603  entity_to_new_value(index));
604 
605  ifdebug(7) {
606  debug(7, "comp_regions_of_implied_do", "local context : \n%s\n",
607  precondition_to_string(local_context));
608  }
609 
610  MAP(EXPRESSION, expr,
611  {
612  syntax s = expression_syntax(expr);
613 
614  if (syntax_reference_p(s))
615  if (act == is_action_write)
616  lep = comp_regions_of_write(syntax_reference(s),local_context);
617  else
618  lep = comp_regions_of_expression(expr, local_context);
619  else
620  /* on a un autre implied_do imbrique' */
621  lep = comp_regions_of_implied_do(expr, act, local_context);
622 
623 
624  /* indices are removed from regions because this is a loop */
625  lr = NIL;
626  MAP(REGION, reg,
627  {
628  if (region_entity(reg) != index)
629  lr = region_add_to_regions(reg,lr);
630  else
631  {
632  debug(5, "comp_regions_of_implied_do", "index removed");
633  region_free(reg);
634  }
635  }, lep);
636  gen_free_list(lep);
638 
639  }, CDR(CDR(args)));
640 
641  ifdebug(7) {
642  debug(7, "comp_regions_of_implied_do", "regions before projection :\n");
643  print_regions(le);
644  fprintf(stderr, "\n");
645  }
646 
648  entity_to_new_value(index),
649  r);
650 
651  ifdebug(6) {
652  debug(6, "comp_regions_of_implied_do", "regions after projection :\n");
653  print_regions(le);
654  fprintf(stderr, "\n");
655  }
656 
657 
658  transformer_free(local_context);
659  local_context = transformer_undefined;
660 
661  debug(5, "comp_regions_of_implied_do", "end\n");
662 
663  return(le);
664 }
665 /*}}}*/
666 
667 
668 
669 
670 
671 
672 
float a2sf[2] __attribute__((aligned(16)))
USER generates a user error (i.e., non fatal) by printing the given MSG according to the FMT.
Definition: 3dnow.h:3
reference make_reference(entity a1, list a2)
Definition: ri.c:2083
static reference ref
Current stmt (an integer)
Definition: adg_read_paf.c:163
cons * arguments_add_entity(cons *a, entity e)
Definition: arguments.c:85
transformer transformer_dup(transformer t_in)
transformer package - basic routines
Definition: basic.c:49
void transformer_free(transformer t)
Definition: basic.c:68
list comp_regions_of_expressions(list, transformer)
}}}
Definition: propagate.c:678
list comp_regions_of_write(reference, transformer)
}}}
Definition: propagate.c:753
list CompRegionsExactUnion(list, list, bool(*)(effect, effect))
list comp_regions_of_read(reference, transformer)
}}}
Definition: propagate.c:715
list comp_regions_of_expression(expression, transformer)
{{{ comp_regions_of_expression
Definition: propagate.c:701
#define region_entity(reg)
#define REGION
list region_add_to_regions(effect, list)
void region_free(effect)
void print_regions(list)
void project_regions_along_loop_index(list, entity, range)
void project_regions_along_loop_index(list l_reg, entity index, l_range) input : a list l_reg of regi...
bool effects_same_action_p(effect, effect)
#define approximation_tag(x)
Definition: effects.h:362
@ is_action_write
Definition: effects.h:293
@ is_action_read
Definition: effects.h:292
@ is_approximation_may
Definition: effects.h:341
@ is_approximation_exact
Definition: effects.h:343
#define effect_approximation(x)
Definition: effects.h:644
bool get_bool_property(const string)
FC 2015-07-20: yuk, moved out to prevent an include cycle dependency include "properties....
#define ENDP(l)
Test if a list is empty.
Definition: newgen_list.h:66
#define NIL
The empty list (nil in Lisp)
Definition: newgen_list.h:47
#define CONS(_t_, _i_, _l_)
List element cell constructor (insert an element at the beginning of a list)
Definition: newgen_list.h:150
list gen_nconc(list cp1, list cp2)
physically concatenates CP1 and CP2 but do not duplicates the elements
Definition: list.c:344
#define CAR(pcons)
Get the value of the first element of a list.
Definition: newgen_list.h:92
void gen_free_list(list l)
free the spine of the list
Definition: list.c:327
#define CDR(pcons)
Get the list less its first element.
Definition: newgen_list.h:111
#define MAP(_map_CASTER, _map_item, _map_code, _map_list)
Apply/map an instruction block on all the elements of a list (old fashioned)
Definition: newgen_list.h:226
static list indices
Definition: icm.c:204
#define pips_assert(what, predicate)
common macros, two flavors depending on NDEBUG
Definition: misc-local.h:172
#define pips_internal_error
Definition: misc-local.h:149
void debug(const int the_expected_debug_level, const char *calling_function_name, const char *a_message_format,...)
ARARGS0.
Definition: debug.c:189
static IoElementDescriptor * SearchIoElement(char *s, char *i) const
}}
Definition: myintrinsics.c:361
list comp_regions_of_implied_do(expression exp, tag act, transformer context)
}}
Definition: myintrinsics.c:544
list no_write_comp_regions(entity __attribute__((unused)) e, list args, transformer context)
}}
Definition: myintrinsics.c:315
list proper_comp_regions_of_intrinsic(entity e, list args, transformer context)
}}
Definition: myintrinsics.c:286
list comp_regions_of_intrinsic(entity e, list args, transformer context)
}}
Definition: myintrinsics.c:270
list io_comp_regions(entity e, list args, transformer context)
}}
Definition: myintrinsics.c:378
struct IoElementDescriptor IoElementDescriptor
{{ banner
static IoElementDescriptor IoElementDescriptorUndefined
Definition: myintrinsics.c:48
list comp_regions_of_iolist(list exprs, tag act, transformer context)
}}
Definition: myintrinsics.c:489
static IoElementDescriptor IoElementDescriptorTable[]
Definition: myintrinsics.c:50
list comp_regions_of_ioelem(expression exp, tag act, transformer context)
}}
Definition: myintrinsics.c:461
list affect_comp_regions(entity __attribute__((unused)) e, list args, transformer context)
}}
Definition: myintrinsics.c:332
static IntrinsicEffectDescriptor IntrinsicDescriptorTable[]
Definition: myintrinsics.c:125
#define LIST_DIRECTED_FORMAT_NAME
Definition: naming-local.h:97
#define TOP_LEVEL_MODULE_NAME
Module containing the global variables in Fortran and C.
Definition: naming-local.h:101
int tag
TAG.
Definition: newgen_types.h:92
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
#define UNBOUNDED_DIMENSION_NAME
Definition: ri-util-local.h:74
#define IO_EFFECTS_ARRAY_NAME
array of Logical UNits; it is more or less handled as the current file pointer; in C,...
#define IMPLIED_DO_NAME
Definition: ri-util-local.h:75
entity FindEntity(const char *package, const char *name)
Retrieve an entity from its package/module name and its local name.
Definition: entity.c:1503
const char * entity_local_name(entity e)
entity_local_name modified so that it does not core when used in vect_fprint, since someone thought t...
Definition: entity.c:453
bool expression_implied_do_p(e)
Definition: expression.c:817
#define syntax_reference_p(x)
Definition: ri.h:2728
#define transformer_undefined
Definition: ri.h:2847
#define syntax_reference(x)
Definition: ri.h:2730
#define call_function(x)
Definition: ri.h:709
#define reference_variable(x)
Definition: ri.h:2326
#define syntax_call_p(x)
Definition: ri.h:2734
#define syntax_range(x)
Definition: ri.h:2733
#define EXPRESSION(x)
EXPRESSION.
Definition: ri.h:1217
#define entity_undefined
Definition: ri.h:2761
#define transformer_arguments(x)
Definition: ri.h:2871
#define syntax_call(x)
Definition: ri.h:2736
#define call_arguments(x)
Definition: ri.h:711
#define syntax_range_p(x)
Definition: ri.h:2731
#define expression_syntax(x)
Definition: ri.h:1247
int fprintf()
test sc_min : ce test s'appelle par : programme fichier1.data fichier2.data ...
transformer add_index_range_conditions(transformer pre, entity i, range r, transformer tfb)
Definition: loop.c:711
#define ifdebug(n)
Definition: sg.c:47
the following data structure describes an intrinsic function: its name and the function to apply on a...
Definition: myintrinsics.c:120
The structure used to build lists in NewGen.
Definition: newgen_list.h:41
Definition: delay.c:253
string precondition_to_string(transformer pre)
Definition: prettyprint.c:58
entity entity_to_new_value(entity)
Definition: value.c:859
#define exp
Avoid some warnings from "gcc -Wshadow".
Definition: vasnprintf.c:207