25 #include "pips_config.h"
57 debug(6,
"parametric_statement_feasible_p",
58 "Begin for statement %d (%d,%d) and precondition %p\n",
63 feasible_p = !empty_p(pre);
65 debug(6,
"parametric_statement_feasible_p",
" End with feasible_p = %d\n",
123 bool non_empty =
false;
147 pips_debug(8,
"begins for check %s\n", check_empty?
"empty" :
"non-empty");
153 "Expression should have been normalized. "
154 "Maybe you have DOALL statements in your "
155 "supposedly sequential source code!\n");
165 if(incr_lb==0 && incr_ub==0) {
167 "Range with illegal zero increment\n");
170 if(incr_lb<=incr_ub) {
182 else if(incr_ub<=-1) {
204 else if(incr_ub<=-1) {
230 debug(8,
"check_range_wrt_precondition",
231 "Test feasibility for system:\n");
239 debug(8,
"check_range_wrt_precondition",
240 "System after normalization:\n");
254 debug(8,
"check_range_wrt_precondition",
255 "The loop is never executed because it is in a dead code section\n");
260 debug(8,
"check_range_wrt_precondition",
261 "No decision can be made because the increment sign is unknown\n");
265 debug(8,
"check_range_wrt_precondition",
266 "ends with check=%s for check_empty=%s\n",
287 bool non_empty =
false;
313 pips_debug(8,
"ends with check=%s for check_true=%s\n",
struct _newgen_struct_entity_ * entity
#define VALUE_TO_INT(val)
transformer transformer_dup(transformer t_in)
transformer package - basic routines
#define CONTRAINTE_UNDEFINED
Pcontrainte contrainte_make(Pvecteur pv)
Pcontrainte contrainte_make(Pvecteur pv): allocation et initialisation d'une contrainte avec un vecte...
bool vect_constant_p(Pvecteur)
bool vect_constant_p(Pvecteur v): v contains only a constant term, may be zero
#define ENDP(l)
Test if a list is empty.
int vect_size(Pvecteur v)
package vecteur - reductions
#define pips_debug
these macros use the GNU extensions that allow variadic macros, including with an empty list.
#define user_error(fn,...)
void debug(const int the_expected_debug_level, const char *calling_function_name, const char *a_message_format,...)
ARARGS0.
string bool_to_string(bool)
#define ORDERING_NUMBER(o)
#define ORDERING_STATEMENT(o)
#define NORMALIZE_EXPRESSION(e)
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...
type expression_to_type(expression)
For an array declared as int a[10][20], the type returned for a[i] is int [20].
#define transformer_undefined_p(x)
#define normalized_linear_p(x)
#define statement_ordering(x)
#define range_increment(x)
#define transformer_relation(x)
#define transformer_arguments(x)
#define normalized_undefined_p(x)
#define statement_number(x)
#define normalized_linear(x)
#define predicate_system(x)
Psysteme sc_make(Pcontrainte leg, Pcontrainte lineg)
Psysteme sc_make(Pcontrainte leg, Pcontrainte lineg): allocation et initialisation d'un systeme d'equ...
void sc_rm(Psysteme ps)
void sc_rm(Psysteme ps): liberation de l'espace memoire occupe par le systeme de contraintes ps;
bool sc_empty_p(Psysteme sc)
bool sc_empty_p(Psysteme sc): check if the set associated to sc is the constant sc_empty or not.
Psysteme sc_dup(Psysteme ps)
Psysteme sc_dup(Psysteme ps): should becomes a link.
bool sc_minmax_of_variable(Psysteme ps, Variable var, Value *pmin, Value *pmax)
void sc_minmax_of_variable(Psysteme ps, Variable var, Value *pmin, *pmax): examine un systeme pour tr...
Psysteme sc_inequality_add(Psysteme sc, Pcontrainte c)
void sc_fprint(FILE *fp, Psysteme ps, get_variable_name_t nom_var)
void sc_fprint(FILE * f, Psysteme ps, char * (*nom_var)()): cette fonction imprime dans le fichier po...
Psysteme sc_strong_normalize5(Psysteme ps, char *(*variable_name)(Variable))
transformer transformer_add_condition_information(transformer pre, expression c, transformer context, bool veracity)
transformer integer_expression_to_transformer(entity v, expression expr, transformer pre, bool is_internal)
Do check wrt to value mappings...
bool empty_range_wrt_precondition_p(range r, transformer p)
A range cannot be tested exactly wrt a precondition You can try to prove that it is empty or you can ...
static bool parametric_statement_feasible_p(statement s, bool empty_p(transformer))
Return true if statement s is reachable according to its precondition.
void integer_expression_and_precondition_to_integer_interval(expression e, transformer p, int *plb, int *pub)
Could be used for bool expressions too? Extended to any kind of expression?
bool statement_weakly_feasible_p(statement s)
Return false if precondition of statement s is transformer_empty()
bool check_range_wrt_precondition(range r, transformer p, bool check_empty)
FI: this function is outdated because it does not compute the transformers for the range expressions,...
bool condition_false_wrt_precondition_p(expression c, transformer p)
bool condition_true_wrt_precondition_p(expression c, transformer p)
A condition cannot be tested exactly wrt a precondition You can try to prove that it is always true (...
bool statement_feasible_p(statement s)
Return true if statement s is reachable according to its precondition.
bool check_condition_wrt_precondition(expression c, transformer pre, bool check_true)
void expression_and_precondition_to_integer_interval(expression e, transformer p, int *plb, int *pub)
Evaluate expression e in context p, assuming that e is an integer expression.
void integer_value_and_precondition_to_integer_interval(entity v, transformer p, int *plb, int *pub)
Should be used by previous function, integer_expression_and_precondition_to_integer_interval()
bool non_empty_range_wrt_precondition_p(range r, transformer p)
bool statement_strongly_feasible_p(statement s)
Return true if statement s is reachable according to its precondition.
transformer load_statement_precondition(statement)
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
@ empty
b1 < bj -> h1/hj = empty
#define TCST
VARIABLE REPRESENTANT LE TERME CONSTANT.
struct Svecteur * Pvecteur
void * Variable
arithmetique is a requirement for vecteur, but I do not want to inforce it in all pips files....
Pvecteur vect_dup(Pvecteur v_in)
Pvecteur vect_dup(Pvecteur v_in): duplication du vecteur v_in; allocation de et copie dans v_out;.
Pvecteur vect_substract(Pvecteur v1, Pvecteur v2)
Pvecteur vect_substract(Pvecteur v1, Pvecteur v2): allocation d'un vecteur v dont la valeur est la di...
void vect_add_elem(Pvecteur *pvect, Variable var, Value val)
void vect_add_elem(Pvecteur * pvect, Variable var, Value val): addition d'un vecteur colineaire au ve...
Value vect_coeff(Variable var, Pvecteur vect)
Variable vect_coeff(Variable var, Pvecteur vect): coefficient de coordonnee var du vecteur vect —> So...