PIPS
scalopes.h File Reference
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

bool scalopify (char *)
 Warning! Do not modify this file that is automatically generated! More...
 
bool sesamify (char *)
 
bool scalopragma (char *)
 
bool sesam_buffers_processing (const char *)
 sesam_tasks_processing.c More...
 
bool sesam_servers_processing (const char *)
 

Variables

hash_table shared_mem
 sesamify.c More...
 
hash_table entity_action
 
list statement_to_outline
 scalopragma.c More...
 

Function Documentation

◆ scalopify()

bool scalopify ( char *  module_name)

Warning! Do not modify this file that is automatically generated!

Modify src/Libs/scalopes/scalopes-local.h instead, to add your own modifications. header file built by cproto scalopes-local.h Nothing yet... cproto-generated files scalopify.c

wo cases: vector or scalar

Parameters
module_nameodule_name

Definition at line 94 of file scalopify.c.

94  {
95 
96  // Use this module name and this environment variable to set
98  "SCALOPIFY_DEBUG_LEVEL");
99  set entities_to_wrap=set_make(set_pointer);
100  list call_to_wrap=NIL;
101 
102  expression exp;
103  type t;
104 
105  entity get_call_entity = local_name_to_top_level_entity("P4A_scmp_flow");
106 
108 
109  gen_context_recurse(module_statement,&entities_to_wrap,
111 
112  gen_context_recurse(module_statement, &call_to_wrap,
114 
115  FOREACH(CALL, c , call_to_wrap){
116 
117  if(!call_load_store_p(c)){
118 
119  SET_FOREACH(entity, e, entities_to_wrap){
120 
121  /*Two cases: vector or scalar*/
122  if(entity_array_p(e)) {
123 
124  exp = MakeUnaryCall(get_call_entity, entity_to_expression(e));
125 
126  if(!pointer_to_array_p(e)){
128  }
129  else{
130  t= entity_type(e);
131  }
132 
134  }
135  else{
136 
139 
141  exp = MakeUnaryCall(get_call_entity, exp);
144  }
146  }
147  }
148  }
149 
150 
151 
152  gen_free_list(call_to_wrap);
153  set_free(entities_to_wrap);
154 
155  // We may have outline some code, so recompute the callees:
156  DB_PUT_MEMORY_RESOURCE(DBR_CALLEES, module_name,
158 
160  // Put back the new statement module
162 
163  return true;
164 }
cast make_cast(type a1, expression a2)
Definition: ri.c:311
expression make_expression(syntax a1, normalized a2)
Definition: ri.c:886
type make_type_variable(variable _field_)
Definition: ri.c:2715
type copy_type(type p)
TYPE.
Definition: ri.c:2655
basic make_basic_pointer(type _field_)
Definition: ri.c:179
variable make_variable(basic a1, list a2, list a3)
Definition: ri.c:2895
syntax make_syntax_cast(cast _field_)
Definition: ri.c:2503
static statement module_statement
Definition: alias_check.c:125
callees compute_callees(const statement stat)
Recompute the callees of a module statement.
Definition: callgraph.c:355
void set_cumulated_rw_effects(statement_effects)
void reset_cumulated_rw_effects(void)
const char * module_name(const char *s)
Return the module part of an entity name.
Definition: entity_names.c:296
#define gen_context_recurse(start, ctxt, domain_number, flt, rwt)
Definition: genC.h:285
statement get_current_module_statement(void)
Get the current module statement.
Definition: static.c:208
void replace_entity_by_expression(void *s, entity ent, expression exp)
replace all reference to entity ent by expression exp in s.
Definition: replace.c:220
void gen_null2(__attribute__((unused)) void *u1, __attribute__((unused)) void *u2)
idem with 2 args, to please overpeaky compiler checks
Definition: genClib.c:2758
#define NIL
The empty list (nil in Lisp)
Definition: newgen_list.h:47
void gen_free_list(list l)
free the spine of the list
Definition: list.c:327
#define FOREACH(_fe_CASTER, _fe_item, _fe_list)
Apply/map an instruction block on all the elements of a list.
Definition: newgen_list.h:179
#define PIPS_PHASE_POSTLUDE(new_module_statement)
End a transformation phase by putting back into PIPS the (possibly) modified statement.
#define PIPS_PHASE_PRELUDE(module_name, debug_env_var)
Start a phase that use a module CODE.
string db_get_memory_resource(const char *rname, const char *oname, bool pure)
Return the pointer to the resource, whatever it is.
Definition: database.c:755
#define DB_PUT_MEMORY_RESOURCE(res_name, own_name, res_val)
conform to old interface.
Definition: pipsdbm-local.h:66
#define SET_FOREACH(type_name, the_item, the_set)
enumerate set elements in their internal order.
Definition: newgen_set.h:78
void set_free(set)
Definition: set.c:332
@ set_pointer
Definition: newgen_set.h:44
set set_make(set_type)
Create an empty set of any type but hash_private.
Definition: set.c:102
#define DEREFERENCING_OPERATOR_NAME
Definition: ri-util-local.h:93
#define ADDRESS_OF_OPERATOR_NAME
bool entity_array_p(entity e)
Is e a variable with an array type?
Definition: entity.c:754
entity local_name_to_top_level_entity(const char *n)
This function try to find a top-level entity from a local name.
Definition: entity.c:1450
entity entity_intrinsic(const char *name)
FI: I do not understand this function name (see next one!).
Definition: entity.c:1292
expression entity_to_expression(entity e)
if v is a constant, returns a constant call.
Definition: expression.c:165
expression MakeUnaryCall(entity f, expression a)
Creates a call expression to a function with one argument.
Definition: expression.c:342
#define normalized_undefined
Definition: ri.h:1745
#define call_domain
newgen_callees_domain_defined
Definition: ri.h:58
#define CALL(x)
CALL.
Definition: ri.h:679
#define entity_type(x)
Definition: ri.h:2792
static bool pointer_to_array_p(entity e)
Definition: scalopify.c:70
static bool call_load_store_p(call c)
A simple phase that change wrap references to flow outside kernel for dataflow runtime manager.
Definition: scalopify.c:29
static bool find_entities_to_wrap(call c, set *entities_to_wrap)
Definition: scalopify.c:45
static type convert_local_to_pointer_array(type local_type)
Definition: scalopify.c:79
static bool find_call_to_wrap(call c, list *call_to_wrap)
Definition: scalopify.c:39
FI: I do not understand why the type is duplicated at the set level.
Definition: set.c:59
The structure used to build lists in NewGen.
Definition: newgen_list.h:41
#define exp
Avoid some warnings from "gcc -Wshadow".
Definition: vasnprintf.c:207

References ADDRESS_OF_OPERATOR_NAME, CALL, call_domain, call_load_store_p(), compute_callees(), convert_local_to_pointer_array(), copy_type(), db_get_memory_resource(), DB_PUT_MEMORY_RESOURCE, DEREFERENCING_OPERATOR_NAME, entity_array_p(), entity_intrinsic(), entity_to_expression(), entity_type, exp, find_call_to_wrap(), find_entities_to_wrap(), FOREACH, gen_context_recurse, gen_free_list(), gen_null2(), get_current_module_statement(), local_name_to_top_level_entity(), make_basic_pointer(), make_cast(), make_expression(), make_syntax_cast(), make_type_variable(), make_variable(), MakeUnaryCall(), module_name(), module_statement, NIL, normalized_undefined, PIPS_PHASE_POSTLUDE, PIPS_PHASE_PRELUDE, pointer_to_array_p(), replace_entity_by_expression(), reset_cumulated_rw_effects(), set_cumulated_rw_effects(), SET_FOREACH, set_free(), set_make(), and set_pointer.

+ Here is the call graph for this function:

◆ scalopragma()

bool scalopragma ( char *  module_name)

ook for statement with SCMP pragma

elete statement pragma

Parameters
module_nameodule_name

Definition at line 59 of file scalopragma.c.

59  {
60 
61  // Use this module name and this environment variable to set
63  "SCALOPRAGMA_DEBUG_LEVEL");
64 
66 
68 
69  /*look for statement with SCMP pragma*/
71 
73 
74 
76 
77  /*delete statement pragma*/
79 
81  }
82 
83 
84 
85 
86 
88 
89  // We may have outline some code, so recompute the callees:
92 
94  // Put back the new statement module
96 
97  return true;
98 }
statement outliner(const char *, list)
outline the statements in statements_to_outline into a module named outline_module_name the outlined ...
Definition: outlining.c:1327
char * get_string_property(const char *)
#define gen_recurse(start, domain_number, flt, rwt)
Definition: genC.h:283
void gen_null(__attribute__((unused)) void *unused)
Ignore the argument.
Definition: genClib.c:2752
list gen_nreverse(list cp)
reverse a list in place
Definition: list.c:304
#define CONS(_t_, _i_, _l_)
List element cell constructor (insert an element at the beginning of a list)
Definition: newgen_list.h:150
string build_new_top_level_module_name(const char *prefix, bool prevent_suffix)
Get a new name for a module built from a prefix.
Definition: module.c:55
#define statement_domain
newgen_sizeofexpression_domain_defined
Definition: ri.h:362
#define statement_extensions(x)
Definition: ri.h:2464
#define extensions_extension(x)
Definition: ri.h:1330
#define STATEMENT(x)
STATEMENT.
Definition: ri.h:2413
list statement_to_outline
A simple phase that outline task with pragma for SCMP.
Definition: scalopragma.c:25
static bool find_pragma(const statement s)
Definition: scalopragma.c:37
Definition: statement.c:54

References build_new_top_level_module_name(), compute_callees(), CONS, db_get_memory_resource(), DB_PUT_MEMORY_RESOURCE, extensions_extension, find_pragma(), FOREACH, gen_free_list(), gen_nreverse(), gen_null(), gen_recurse, get_current_module_statement(), get_string_property(), module_name(), module_statement, NIL, outliner(), PIPS_PHASE_POSTLUDE, PIPS_PHASE_PRELUDE, reset_cumulated_rw_effects(), set_cumulated_rw_effects(), STATEMENT, statement_domain, statement_extensions, and statement_to_outline.

+ Here is the call graph for this function:

◆ sesam_buffers_processing()

bool sesam_buffers_processing ( const char *  module_name)

sesam_tasks_processing.c

sesam_tasks_processing.c

Parameters
module_nameis the current module name
Parameters
module_nameodule_name

Definition at line 420 of file sesam_tasks_processing.c.

421 {
422  // Use this module name and this environment variable to set
424  "SCALOPES_DEBUG_LEVEL");
427 
428  sbp_context_init(&sbp_context);
429 
430  // use cumulated effects for the moment, regions can be used later if need be
432  db_get_memory_resource(DBR_CUMULATED_EFFECTS, module_name, true));
433 
439 
441 
443  // Put back the new statement module
445 
446  return (true);
447 }
void free_sesam_buffers_processing_context(sesam_buffers_processing_context p)
void reset_methods_for_effects_prettyprint(const char *)
void set_methods_for_rw_effects_prettyprint(const char *)
#define sesam_buffers_processing_context_undefined
static void print_sesam_tasks_buffers_header(const char *module_name, sesam_buffers_processing_context sbp_context)
prints a header file describing how the targeted sesam application uses buffers
static void sbp_context_init(sesam_buffers_processing_context *sbp_context)
initalizes the object describing how the targeted sesam application uses buffers all sets and hash ta...
static bool update_sesam_tasks_buffers(statement stmt, sesam_buffers_processing_context *sbp_context)
update the object describing how the targeted sesam application uses buffers with the current stateme...

References db_get_memory_resource(), free_sesam_buffers_processing_context(), gen_context_recurse, gen_null2(), module_name(), module_statement, PIPS_PHASE_POSTLUDE, PIPS_PHASE_PRELUDE, print_sesam_tasks_buffers_header(), reset_cumulated_rw_effects(), reset_methods_for_effects_prettyprint(), sbp_context_init(), sesam_buffers_processing_context_undefined, set_cumulated_rw_effects(), set_methods_for_rw_effects_prettyprint(), statement_domain, and update_sesam_tasks_buffers().

+ Here is the call graph for this function:

◆ sesam_servers_processing()

bool sesam_servers_processing ( const char *  module_name)
Parameters
module_nameodule_name

Definition at line 449 of file sesam_tasks_processing.c.

450 {
451  // Use this module name and this environment variable to set
453  "SCALOPES_DEBUG_LEVEL");
454 
455  // Put back the new statement module
457 
458  return (true);
459 }

References module_name(), module_statement, PIPS_PHASE_POSTLUDE, and PIPS_PHASE_PRELUDE.

+ Here is the call graph for this function:

◆ sesamify()

bool sesamify ( char *  module_name)

ist effects in the task

heck if the entities has already been processed with the same action to avoid doublons

f the entity is not stored yet

validate

ostlude

Parameters
module_nameodule_name

Definition at line 52 of file sesamify.c.

52  {
53  debug_on("SESAMIFY_DEBUG_LEVEL");
54 
55  list args,args2,args3, args4, args5, malloc_statements, map_statements, unmap_statements, wait_statements, send_statements, rw_effects, entity_declaration;
56  callees callees_list = (callees) db_get_memory_resource(DBR_CALLEES, module_name, true);
57  intptr_t id;
58  entity reserve_data = local_name_to_top_level_entity("sesam_reserve_data");
59  entity get_page_size = local_name_to_top_level_entity("sesam_get_page_size");
60  entity data_assignation = local_name_to_top_level_entity("sesam_data_assignation");
61  entity map_data = local_name_to_top_level_entity("sesam_map_data");
62  entity unmap_data = local_name_to_top_level_entity("sesam_unmap_data");
63  entity wait_dispo = local_name_to_top_level_entity("sesam_wait_dispo");
64  entity send_dispo = local_name_to_top_level_entity("sesam_send_dispo");
65  entity chown_data = local_name_to_top_level_entity("sesam_chown_data");
66  entity new, re;
67  struct dma_action * val;
68 
71 
72  intptr_t counter = 1;
73  int nb_task_total = gen_length(callees_callees(callees_list));
74  int num_task=1;
75 
76  FOREACH(STRING,callee_name,gen_nreverse(callees_callees(callees_list))) {
77 
78  pips_debug(1,"%s\n", callee_name);
79  //Change context
82  callee_name,
83  true));
85  callee_name,
86  true));
87 
88  //reset tables
90 
92  map_statements = NIL;
93  malloc_statements = NIL;
94  unmap_statements = NIL;
95  wait_statements = NIL;
96  send_statements = NIL;
97  entity_declaration = NIL;
98 
99  /*list effects in the task*/
100  FOREACH(EFFECT,e,rw_effects) {
101 
103 
104  val = (struct dma_action *) hash_get(entity_action, re);
105  /*check if the entities has already been processed with the same action to avoid doublons*/
106  if(val==HASH_UNDEFINED_VALUE|| (action_read_p(effect_action(e)) && val->read==0) || (action_write_p(effect_action(e)) && val->write==0)){
107 
108  /*if the entity is not stored yet*/
109  if(val==HASH_UNDEFINED_VALUE)
110  val = (struct dma_action *) malloc(sizeof(struct dma_action));
111  //flags entity effects
113  val->read=1;
114  else
115  val->write=1;
116 
117  //MEMORY ALLOCATION
119  //shared memory ID
120  id=counter-1;
121  hash_put(shared_mem, re, (void*)counter);
122  //compute table memory size
123  range the_range = make_range(int_to_expression(0),
127  int_to_expression(1)),
128  int_to_expression(1));
129 
130  expression memory_size = range_to_expression(the_range,range_to_distance);
132  memory_size,
133  call_to_expression(make_call(get_page_size,NIL)));
134 
136  size,
137  int_to_expression(1));
138  args = make_expression_list(size);
139 
140  args2 = CONS(EXPRESSION, int_to_expression(1), NIL);
141  args2 = CONS(EXPRESSION, size,args2);
142  args2 = CONS(EXPRESSION, int_to_expression(counter-1),args2);
143 
144  malloc_statements=CONS(STATEMENT,
146  malloc_statements);
147  malloc_statements=CONS(STATEMENT,
148  instruction_to_statement(make_instruction_call(make_call(data_assignation,args2))),
149  malloc_statements);
150  counter++;
151  }
152  else{
153  id = (intptr_t) hash_get(shared_mem, re)-1;
154  }
155 
156  //MAP_DATA + pointer creation +UNMAP + CHMOD
159  make_basic_pointer(t));
160  entity_declaration = CONS(ENTITY,new, entity_declaration);
162  expression map_data_exp = call_to_expression(make_call(map_data,args3));
163  expression new_exp = entity_to_expression(new);
165  args4 = CONS(EXPRESSION,map_data_exp, NIL);
166  args4 = CONS(EXPRESSION,new_exp,args4);
167 
168  map_statements=CONS(STATEMENT,
170  map_statements);
171  unmap_statements=CONS(STATEMENT,
173  unmap_statements);
174 
175  //change data owner
176  if(num_task < nb_task_total){
178  unmap_statements=CONS(STATEMENT,
180  unmap_statements);
181  }
182 
183  //SEND + WAIT dispo
184  print_effect(e);
187  pips_debug(1,"READ\n");
188  wait_statements=CONS(STATEMENT,
193  int_to_expression(0))))),
194  wait_statements);
195  send_statements=CONS(STATEMENT,
199  int_to_expression(1))))),
200  send_statements);
201  }
202  else{
204  pips_debug(1,"WRITE\n");
205  wait_statements=CONS(STATEMENT,
210  int_to_expression(0))))),
211  wait_statements);
212  send_statements=CONS(STATEMENT,
216  int_to_expression(0))))),
217  send_statements);
218  }
219  }
220  }
221 
222  //insert all statements
224  make_block_statement(gen_nreverse(wait_statements)),true);
226  make_block_statement(gen_nreverse(map_statements)),true);
228  make_block_statement(gen_nreverse(malloc_statements)),true);
230  make_block_statement(gen_nreverse(send_statements)),false);
232  make_block_statement(gen_nreverse(unmap_statements)),false);
233 
234  //add declaration
235  FOREACH(ENTITY,ent,entity_declaration){
237  }
238 
239  /* validate */
241  DB_PUT_MEMORY_RESOURCE(DBR_CODE, callee_name,
243  DB_PUT_MEMORY_RESOURCE(DBR_CALLEES, callee_name,
245 
246  /*postlude*/
250  num_task++;
251  }
252 
253  debug_off();
254  return true;
255 }
call make_call(entity a1, list a2)
Definition: ri.c:269
syntax make_syntax_sizeofexpression(sizeofexpression _field_)
Definition: ri.c:2506
sizeofexpression make_sizeofexpression_type(type _field_)
Definition: ri.c:2177
instruction make_instruction_call(call _field_)
Definition: ri.c:1184
range make_range(expression a1, expression a2, expression a3)
Definition: ri.c:2041
list load_cumulated_rw_effects_list(statement)
#define effect_any_reference(e)
FI: cannot be used as a left hand side.
#define effect_action(x)
Definition: effects.h:642
#define action_write_p(x)
Definition: effects.h:314
#define action_read_p(x)
Definition: effects.h:311
#define EFFECT(x)
EFFECT.
Definition: effects.h:608
#define STRING(x)
Definition: genC.h:87
void * malloc(YYSIZE_T)
statement make_block_statement(list)
Make a block statement from a list of statement.
Definition: statement.c:616
statement instruction_to_statement(instruction)
Build a statement from a give instruction.
Definition: statement.c:597
void reset_current_module_entity(void)
Reset the current module entity.
Definition: static.c:97
void reset_current_module_statement(void)
Reset the current module statement.
Definition: static.c:221
statement set_current_module_statement(statement)
Set the current module statement.
Definition: static.c:165
entity set_current_module_entity(entity)
static.c
Definition: static.c:66
entity get_current_module_entity(void)
Get the entity of the current module.
Definition: static.c:85
size_t gen_length(const list l)
Definition: list.c:150
void insert_statement(statement, statement, bool)
This is the normal entry point.
Definition: statement.c:2570
hash_table hash_table_make(hash_key_type key_type, size_t size)
Definition: hash.c:294
void * hash_get(const hash_table htp, const void *key)
this function retrieves in the hash table pointed to by htp the couple whose key is equal to key.
Definition: hash.c:449
void hash_put(hash_table htp, const void *key, const void *val)
This functions stores a couple (key,val) in the hash table pointed to by htp.
Definition: hash.c:364
void hash_table_clear(hash_table htp)
Clears all entries of a hash table HTP.
Definition: hash.c:305
#define debug_on(env)
Definition: misc-local.h:157
#define pips_debug
these macros use the GNU extensions that allow variadic macros, including with an empty list.
Definition: misc-local.h:145
#define debug_off()
Definition: misc-local.h:160
@ hash_pointer
Definition: newgen_hash.h:32
#define HASH_UNDEFINED_VALUE
value returned by hash_get() when the key is not found; could also be called HASH_KEY_NOT_FOUND,...
Definition: newgen_hash.h:56
#define HASH_DEFAULT_SIZE
Definition: newgen_hash.h:26
#define print_effect(e)
Definition: print.c:336
bool module_reorder(statement body)
Reorder a module and recompute order to statement if any.
Definition: reorder.c:244
#define make_expression_list(stats...)
#define MINUS_OPERATOR_NAME
#define PLUS_OPERATOR_NAME
#define DIVIDE_OPERATOR_NAME
@ range_to_distance
#define ASSIGN_OPERATOR_NAME
Definition: ri-util-local.h:95
entity module_name_to_entity(const char *mn)
This is an alias for local_name_to_top_level_entity.
Definition: entity.c:1479
void print_entities(list l)
Definition: entity.c:167
expression range_to_expression(range r, enum range_to_expression_mode mode)
computes the distance between the lower bound and the upper bound of the range
Definition: eval.c:963
expression MakeBinaryCall(entity f, expression eg, expression ed)
Creates a call expression to a function with 2 arguments.
Definition: expression.c:354
expression int_to_expression(_int i)
transform an int into an expression and generate the corresponding entity if necessary; it is not cle...
Definition: expression.c:1188
expression make_op_exp(char *op_name, expression exp1, expression exp2)
================================================================
Definition: expression.c:2012
expression call_to_expression(call c)
Build an expression that call a function or procedure.
Definition: expression.c:309
entity make_new_scalar_variable(entity, basic)
Definition: variable.c:741
void AddEntityToCurrentModule(entity)
Add a variable entity to the current module declarations.
Definition: variable.c:260
struct _newgen_struct_callees_ * callees
Definition: ri.h:55
#define callees_callees(x)
Definition: ri.h:675
#define reference_variable(x)
Definition: ri.h:2326
#define ENTITY(x)
ENTITY.
Definition: ri.h:2755
#define EXPRESSION(x)
EXPRESSION.
Definition: ri.h:1217
hash_table shared_mem
sesamify.c
Definition: sesamify.c:35
static type convert_local_to_pointer_array(type local_type)
onvert pointer to fixed size type to normal pointer
Definition: sesamify.c:38
hash_table entity_action
Definition: sesamify.c:36
#define intptr_t
Definition: stdint.in.h:294
A phase that transform simple tasks in SCMP code.
Definition: sesamify.c:30
int read
Definition: sesamify.c:31
int write
Definition: sesamify.c:32

References action_read_p, action_write_p, AddEntityToCurrentModule(), ASSIGN_OPERATOR_NAME, call_to_expression(), callees_callees, compute_callees(), CONS, convert_local_to_pointer_array(), db_get_memory_resource(), DB_PUT_MEMORY_RESOURCE, debug_off, debug_on, DIVIDE_OPERATOR_NAME, EFFECT, effect_action, effect_any_reference, ENTITY, entity_action, entity_intrinsic(), entity_to_expression(), entity_type, EXPRESSION, FOREACH, gen_length(), gen_nreverse(), get_current_module_entity(), get_current_module_statement(), HASH_DEFAULT_SIZE, hash_get(), hash_pointer, hash_put(), hash_table_clear(), hash_table_make(), HASH_UNDEFINED_VALUE, insert_statement(), instruction_to_statement(), int_to_expression(), intptr_t, load_cumulated_rw_effects_list(), local_name_to_top_level_entity(), make_basic_pointer(), make_block_statement(), make_call(), make_expression(), make_expression_list, make_instruction_call(), make_new_scalar_variable(), make_op_exp(), make_range(), make_sizeofexpression_type(), make_syntax_sizeofexpression(), MakeBinaryCall(), malloc(), MINUS_OPERATOR_NAME, module_name(), module_name_to_entity(), module_reorder(), NIL, normalized_undefined, pips_debug, PLUS_OPERATOR_NAME, print_effect, print_entities(), range_to_distance, range_to_expression(), dma_action::read, reference_variable, replace_entity_by_expression(), reset_cumulated_rw_effects(), reset_current_module_entity(), reset_current_module_statement(), set_cumulated_rw_effects(), set_current_module_entity(), set_current_module_statement(), shared_mem, STATEMENT, STRING, and dma_action::write.

+ Here is the call graph for this function:

Variable Documentation

◆ entity_action

hash_table entity_action
extern

Definition at line 36 of file sesamify.c.

Referenced by sesamify().

◆ shared_mem

hash_table shared_mem
extern

sesamify.c

Definition at line 35 of file sesamify.c.

Referenced by sesamify().

◆ statement_to_outline