PIPS
continuation.c File Reference
#include <stdio.h>
#include <string.h>
#include "linear.h"
#include "genC.h"
#include "ri.h"
#include "effects.h"
#include "database.h"
#include "ri-util.h"
#include "effects-util.h"
#include "constants.h"
#include "misc.h"
#include "text-util.h"
#include "text.h"
#include "effects-generic.h"
#include "transformer.h"
#include "semantics.h"
#include "pipsdbm.h"
#include "resources.h"
#include "continuation.h"
+ Include dependency graph for continuation.c:

Go to the source code of this file.

Functions

static void module_continuation_conditions (statement mod_stat)
 statement stack More...
 
static void statement_continuation_conditions (statement s)
 static void statement_continuation_conditions(statement s) input : the current instruction output : nothing modifies : continuation conditions maps comment : More...
 
static void block_continuation_conditions (list l_stat)
 
static void test_continuation_conditions (test t)
 
static void loop_continuation_conditions (loop l)
 
static void call_continuation_conditions (call c)
 
static void unstructured_continuation_conditions (unstructured u)
 
static void module_summary_continuation_conditions (statement mod_stat)
 INTERPROCEDURAL SUMMARIZATION. More...
 
bool continuation_conditions (const string module_name)
 INTERFACE
More...
 

Variables

static transformer must_sum_cont_t = transformer_undefined
 package continuation : Be'atrice Creusillet, 1996 More...
 
static transformer may_sum_cont_t = transformer_undefined
 

Function Documentation

◆ block_continuation_conditions()

static void block_continuation_conditions ( list  l_stat)
static

Definition at line 218 of file continuation.c.

219 {
220  pips_assert("true", l_stat==l_stat);
221 
223 
226 }
transformer transformer_identity()
Allocate an identity transformer.
Definition: basic.c:110
transformer transformer_empty()
Allocate an empty transformer.
Definition: basic.c:120
void store_statement_must_continuation(statement, transformer)
void store_statement_may_continuation(statement, transformer)
#define current_stmt_head()
We want to keep track of the current statement inside the recurse.
Definition: icfg_scan.c:76
#define pips_assert(what, predicate)
common macros, two flavors depending on NDEBUG
Definition: misc-local.h:172

References current_stmt_head, pips_assert, store_statement_may_continuation(), store_statement_must_continuation(), transformer_empty(), and transformer_identity().

Referenced by statement_continuation_conditions().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ call_continuation_conditions()

static void call_continuation_conditions ( call  c)
static

Definition at line 247 of file continuation.c.

References current_stmt_head, pips_assert, store_statement_may_continuation(), store_statement_must_continuation(), transformer_empty(), and transformer_identity().

Referenced by statement_continuation_conditions().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ continuation_conditions()

bool continuation_conditions ( const string  module_name)

INTERFACE

Get the code of the module.

predicates defining summary regions from callees have to be translated into variables local to module

cumulated effects

Get the transformers of the module.

initialisation of local maps

Parameters
module_nameodule_name

Definition at line 91 of file continuation.c.

92 {
93 
94  /* Get the code of the module. */
96  db_get_memory_resource(DBR_CODE, module_name, true) );
97  /* predicates defining summary regions from callees have to be
98  translated into variables local to module */
100  /* cumulated effects */
102  db_get_memory_resource(DBR_CUMULATED_EFFECTS, module_name, true));
104  db_get_memory_resource(DBR_PROPER_EFFECTS, module_name, true));
106 
107  /* Get the transformers of the module. */
109  db_get_memory_resource(DBR_TRANSFORMERS, module_name, true) );
110 
111  /* initialisation of local maps */
114 
115  debug_on("CONTINUATION_DEBUG_LEVEL");
118  debug_off();
119 
120  DB_PUT_MEMORY_RESOURCE(DBR_MUST_CONTINUATION,
122  (char*) get_must_continuation_map() );
123  DB_PUT_MEMORY_RESOURCE(DBR_MAY_CONTINUATION,
125  (char*) get_may_continuation_map() );
126  DB_PUT_MEMORY_RESOURCE(DBR_MUST_SUMMARY_CONTINUATION,
128  (char*) must_sum_cont_t);
129  DB_PUT_MEMORY_RESOURCE(DBR_MAY_SUMMARY_CONTINUATION,
131  (char*) may_sum_cont_t);
140 
141  return(true);
142 }
static transformer may_sum_cont_t
Definition: continuation.c:68
static void module_continuation_conditions(statement mod_stat)
statement stack
Definition: continuation.c:156
static transformer must_sum_cont_t
package continuation : Be'atrice Creusillet, 1996
Definition: continuation.c:67
static void module_summary_continuation_conditions(statement mod_stat)
INTERPROCEDURAL SUMMARIZATION.
Definition: continuation.c:294
statement_mapping get_must_continuation_map(void)
void set_may_continuation_map(statement_mapping)
void set_must_continuation_map(statement_mapping)
void reset_may_continuation_map(void)
void reset_must_continuation_map(void)
statement_mapping get_may_continuation_map(void)
void reset_proper_rw_effects(void)
void set_proper_rw_effects(statement_effects)
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
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
statement get_current_module_statement(void)
Get the current module statement.
Definition: static.c:208
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
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 debug_on(env)
Definition: misc-local.h:157
#define debug_off()
Definition: misc-local.h:160
#define MAKE_STATEMENT_MAPPING()
Definition: newgen-local.h:43
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
char * strdup()
void module_to_value_mappings(entity m)
void module_to_value_mappings(entity m): build hash tables between variables and values (old,...
Definition: mappings.c:624
void set_transformer_map(statement_mapping)
void reset_transformer_map(void)
void free_value_mappings(void)
Normal call to free the mappings.
Definition: value.c:1212

References db_get_memory_resource(), DB_PUT_MEMORY_RESOURCE, debug_off, debug_on, free_value_mappings(), get_current_module_entity(), get_current_module_statement(), get_may_continuation_map(), get_must_continuation_map(), local_name_to_top_level_entity(), MAKE_STATEMENT_MAPPING, may_sum_cont_t, module_continuation_conditions(), module_name(), module_summary_continuation_conditions(), module_to_value_mappings(), must_sum_cont_t, reset_cumulated_rw_effects(), reset_current_module_entity(), reset_current_module_statement(), reset_may_continuation_map(), reset_must_continuation_map(), reset_proper_rw_effects(), reset_transformer_map(), set_cumulated_rw_effects(), set_current_module_entity(), set_current_module_statement(), set_may_continuation_map(), set_must_continuation_map(), set_proper_rw_effects(), set_transformer_map(), and strdup().

+ Here is the call graph for this function:

◆ loop_continuation_conditions()

static void loop_continuation_conditions ( loop  l)
static

Definition at line 237 of file continuation.c.

References current_stmt_head, pips_assert, store_statement_may_continuation(), store_statement_must_continuation(), transformer_empty(), and transformer_identity().

Referenced by statement_continuation_conditions().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ module_continuation_conditions()

static void module_continuation_conditions ( statement  mod_stat)
static

statement stack

LOCAL FUNCTION

LOCAL FUNCTION HEADERS

INTRAPROCEDURAL PROPAGATION static void module_continuation_conditions(statement mod_stat) input : main statement of the current module output : nothing modifies : continuation conditions maps comment :

Definition at line 156 of file continuation.c.

157 {
158  make_current_stmt_stack();
161  free_current_stmt_stack();
162 }
static void statement_continuation_conditions(statement s)
static void statement_continuation_conditions(statement s) input : the current instruction output : n...
Definition: continuation.c:172
#define gen_recurse(start, domain_number, flt, rwt)
Definition: genC.h:283
bool gen_true(__attribute__((unused)) gen_chunk *unused)
Return true and ignore the argument.
Definition: genClib.c:2780
static statement mod_stat
We want to keep track of the current statement inside the recurse.
Definition: impact_check.c:41
#define statement_domain
newgen_sizeofexpression_domain_defined
Definition: ri.h:362

References gen_recurse, gen_true(), mod_stat, statement_continuation_conditions(), and statement_domain.

Referenced by continuation_conditions().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ module_summary_continuation_conditions()

static void module_summary_continuation_conditions ( statement  mod_stat)
static

INTERPROCEDURAL SUMMARIZATION.

static void module_summary_continuation_conditions(statement mod_stat) input : main statement of the current module output : nothing modifies : continuation conditions maps comment :

Definition at line 294 of file continuation.c.

295 {
296  pips_assert("true", mod_stat==mod_stat);
297 
300 }

References may_sum_cont_t, mod_stat, must_sum_cont_t, pips_assert, transformer_empty(), and transformer_identity().

Referenced by continuation_conditions().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ statement_continuation_conditions()

static void statement_continuation_conditions ( statement  s)
static

static void statement_continuation_conditions(statement s) input : the current instruction output : nothing modifies : continuation conditions maps comment :

Definition at line 172 of file continuation.c.

173 {
175 
176  pips_debug(1, "BEGIN: statement %03td\n", statement_number(s));
177 
178  current_stmt_push(s);
179  switch(instruction_tag(i))
180  {
181  case is_instruction_goto:
184  break;
185 
187  pips_debug(3, "block\n");
189  break;
190 
191  case is_instruction_test:
192  pips_debug(3, "test\n");
194  break;
195 
196  case is_instruction_loop:
197  pips_debug(3, "loop\n");
199  break;
200 
201  case is_instruction_call:
202  pips_debug(3, "call\n");
204  break;
205 
207  pips_debug(3, "unstructured\n");
209  break ;
210 
211  default:
212  pips_debug(1, "unexpected tag %d\n", instruction_tag(i));
213  }
214  current_stmt_pop();
215  pips_debug(1,"END: statement %03td\n", statement_number(s));
216 }
static void loop_continuation_conditions(loop l)
Definition: continuation.c:237
static void block_continuation_conditions(list l_stat)
Definition: continuation.c:218
static void test_continuation_conditions(test t)
Definition: continuation.c:228
static void unstructured_continuation_conditions(unstructured u)
Definition: continuation.c:257
static void call_continuation_conditions(call c)
Definition: continuation.c:247
#define pips_debug
these macros use the GNU extensions that allow variadic macros, including with an empty list.
Definition: misc-local.h:145
#define is_instruction_block
soft block->sequence transition
#define instruction_block(i)
#define instruction_loop(x)
Definition: ri.h:1520
@ is_instruction_goto
Definition: ri.h:1473
@ is_instruction_unstructured
Definition: ri.h:1475
@ is_instruction_test
Definition: ri.h:1470
@ is_instruction_call
Definition: ri.h:1474
@ is_instruction_loop
Definition: ri.h:1471
#define instruction_tag(x)
Definition: ri.h:1511
#define statement_instruction(x)
Definition: ri.h:2458
#define instruction_call(x)
Definition: ri.h:1529
#define instruction_test(x)
Definition: ri.h:1517
#define statement_number(x)
Definition: ri.h:2452
#define instruction_unstructured(x)
Definition: ri.h:1532

References block_continuation_conditions(), call_continuation_conditions(), instruction_block, instruction_call, instruction_loop, instruction_tag, instruction_test, instruction_unstructured, is_instruction_block, is_instruction_call, is_instruction_goto, is_instruction_loop, is_instruction_test, is_instruction_unstructured, loop_continuation_conditions(), pips_debug, statement_instruction, statement_number, store_statement_may_continuation(), store_statement_must_continuation(), test_continuation_conditions(), transformer_identity(), and unstructured_continuation_conditions().

Referenced by module_continuation_conditions().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ test_continuation_conditions()

static void test_continuation_conditions ( test  t)
static

Definition at line 228 of file continuation.c.

References current_stmt_head, pips_assert, store_statement_may_continuation(), store_statement_must_continuation(), transformer_empty(), and transformer_identity().

Referenced by statement_continuation_conditions().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ unstructured_continuation_conditions()

static void unstructured_continuation_conditions ( unstructured  u)
static

there is only one statement in u; no need for a fix-point

nothing clever for the moment - 28/2/96 - BC

Definition at line 257 of file continuation.c.

258 {
259  pips_assert("true", u==u);
260 
262  transformer must_cont_t, may_cont_t;
263  control c;
264 
265  c = unstructured_control( u );
266 
268  {
269  /* there is only one statement in u; no need for a fix-point */
270  must_cont_t = transformer_dup
272  may_cont_t = transformer_dup
274  }
275  else
276  {
277  /* nothing clever for the moment - 28/2/96 - BC*/
278  must_cont_t = transformer_empty();
279  may_cont_t = transformer_identity();
280  }
281  store_statement_must_continuation(s,must_cont_t);
282  store_statement_may_continuation(s,may_cont_t);
283 }
transformer transformer_dup(transformer t_in)
transformer package - basic routines
Definition: basic.c:49
transformer load_statement_must_continuation(statement)
transformer load_statement_may_continuation(statement)
#define NIL
The empty list (nil in Lisp)
Definition: newgen_list.h:47
#define unstructured_control
After the modification in Newgen: unstructured = entry:control x exit:control we have create a macro ...
#define control_predecessors(x)
Definition: ri.h:943
#define control_successors(x)
Definition: ri.h:945
#define control_statement(x)
Definition: ri.h:941

References control_predecessors, control_statement, control_successors, current_stmt_head, load_statement_may_continuation(), load_statement_must_continuation(), NIL, pips_assert, store_statement_may_continuation(), store_statement_must_continuation(), transformer_dup(), transformer_empty(), transformer_identity(), and unstructured_control.

Referenced by statement_continuation_conditions().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ may_sum_cont_t

◆ must_sum_cont_t

transformer must_sum_cont_t = transformer_undefined
static

package continuation : Be'atrice Creusillet, 1996

This File contains the functions computing continuation conditions of a module (over- and under-approximations. LOCAL DEFINITIONS
CONTINUATION CONDITION MAPS AND SUMMARIES

Definition at line 67 of file continuation.c.

Referenced by continuation_conditions(), get_continuation_condition_text(), and module_summary_continuation_conditions().