25 #include "pips_config.h"
50 #define reached_p(s) (bound_reached_p(s))
51 #define continued_p(s) (load_continued(s))
55 #define check_recursion(s) \
58 if (bound_continued_p(s)) { \
59 pips_debug(5, "Statement %p already seen, thus stop recursion.\n", s); \
60 return continued_p(s);
\
63 pips_debug(5, "Statement %p marked as reached but the execution does not continue on afterwards.\n\tSo return FALSE.\n", s); \
68 pips_debug(5, "New statement %p marked as reached.\n", s); \
69 store_reached(s, true); \
80 pips_debug(1,
"Entering control_propagate for control %p\n", c);
84 if (
reached_p(s) && bound_continued_p(s)) {
86 pips_debug(5,
"Statement %p already seen, thus stop recursion.\n", s);
100 continued = ctrue || cfalse;
109 else continued =
false;
112 pips_debug(1,
"Ending control_propagate for control %p and statement %p returning continued %d\n",
125 bool continued =
true;
169 continued = ctrue || cfalse;
214 pips_debug(1,
"Continued for statement %p = %d\n", s, continued);
215 store_continued(s, continued);
244 if (bound_continued_p(s))
static char start[1024]
The name of the variable from which to start counting domain numbers.
#define POP(l)
Modify a list pointer to point on the next element of the list.
size_t gen_length(const list l)
#define CAR(pcons)
Get the value of the first element of a list.
#define CDR(pcons)
Get the list less its first element.
#define pips_debug
these macros use the GNU extensions that allow variadic macros, including with an empty list.
#define pips_assert(what, predicate)
common macros, two flavors depending on NDEBUG
#define pips_internal_error
int f(int off1, int off2, int n, float r[n], float a[n], float b[n])
#define ENTITY_EXIT_SYSTEM_P(e)
#define unstructured_control
After the modification in Newgen: unstructured = entry:control x exit:control we have create a macro ...
#define ENTITY_ABORT_SYSTEM_P(e)
#define instruction_loop(x)
#define CONTROL(x)
CONTROL.
@ is_instruction_unstructured
@ is_instruction_whileloop
@ is_instruction_expression
@ is_instruction_multitest
@ is_instruction_sequence
#define instruction_tag(x)
#define sequence_statements(x)
#define instruction_sequence(x)
#define instruction_forloop(x)
#define control_successors(x)
#define unstructured_exit(x)
#define instruction_whileloop(x)
#define whileloop_body(x)
#define statement_instruction(x)
#define instruction_call(x)
#define control_statement(x)
#define instruction_test(x)
#define statement_undefined_p(x)
#define instruction_unstructured(x)
#define STATEMENT(x)
STATEMENT.
GENERIC_LOCAL_FUNCTION(directives, step_directives)
Copyright 2007, 2008, 2009 Alain Muller, Frederique Silber-Chaussumier.
The structure used to build lists in NewGen.
bool statement_reachable_p(statement s)
Test if the given statement is reachable from some statements given at init_reachable(start)
static bool propagate(statement)
returns whether propagation is continued after s.
bool statement_continued_p(statement s)
Test if the execution goes on after the given statement.
static bool control_propagate(control c)
#define check_recursion(s)
void init_reachable(statement start)
Compute reachable infomation from the.
void close_reachable(void)
Remove reachability information about previously checked statements.
#define reached_p(s)
A mapping to store if a given statement is reachable from the control flow point of view: