25 #include "pips_config.h"
311 value vout, v1, v2, v3;
312 _int arg1 = 0, arg2 = 0, arg3 = 0;
365 else if (t ==
PLUS) {
388 long long int i_arg_l = 0, i_arg_r = 0;
389 double f_arg_l, f_arg_r;
596 bool first_arg_p =
true;
828 bool positive_p =
false;
898 bool negative_p =
false;
990 * pcount = ((l-u)/(-inc))+1;
993 * pcount = ((u-l)/inc)+1;
constant make_constant(enum constant_utype tag, void *val)
value make_value_unknown(void)
value make_value_constant(constant _field_)
expression copy_expression(expression p)
EXPRESSION.
value make_value(enum value_utype tag, void *val)
reference make_reference(entity a1, list a2)
constant make_constant_int(intptr_t _field_)
value copy_value(value p)
VALUE.
#define value_notzero_p(val)
#define MIN(x, y)
minimum and maximum if they are defined somewhere else, they are very likely to be defined the same w...
bool get_bool_property(const string)
FC 2015-07-20: yuk, moved out to prevent an include cycle dependency include "properties....
void gen_full_free_list(list l)
list gen_nreverse(list cp)
reverse a list in place
#define NIL
The empty list (nil in Lisp)
size_t gen_length(const list l)
#define CONS(_t_, _i_, _l_)
List element cell constructor (insert an element at the beginning of a list)
#define CAR(pcons)
Get the value of the first element of a list.
#define FOREACH(_fe_CASTER, _fe_item, _fe_list)
Apply/map an instruction block on all the elements of a list.
#define CDR(pcons)
Get the list less its first element.
#define MAP(_map_CASTER, _map_item, _map_code, _map_list)
Apply/map an instruction block on all the elements of a list (old fashioned)
int vect_size(Pvecteur v)
package vecteur - reductions
#define pips_assert(what, predicate)
common macros, two flavors depending on NDEBUG
#define pips_internal_error
#define same_string_p(s1, s2)
int f(int off1, int off2, int n, float r[n], float a[n], float b[n])
#define LEFT_SHIFT_UPDATE
#define RIGHT_SHIFT_UPDATE
#define BITWISE_OR_UPDATE
static bool constant_p(entity e)
This function return a bool indicating if related entity e represents a constant.
#define BITWISE_OR_OPERATOR_NAME
#define MAX_OPERATOR_NAME
#define POWER_OPERATOR_NAME
#define POST_DECREMENT_OPERATOR_NAME
#define ENTITY_DIVIDE_P(e)
#define BITWISE_XOR_OPERATOR_NAME
#define C_LESS_OR_EQUAL_OPERATOR_NAME
#define C_AND_OPERATOR_NAME
#define GREATER_THAN_OPERATOR_NAME
#define C_GREATER_OR_EQUAL_OPERATOR_NAME
#define BITWISE_OR_UPDATE_OPERATOR_NAME
#define C_MODULO_OPERATOR_NAME
#define MINUS_OPERATOR_NAME
#define ENTITY_MINUS_P(e)
#define LESS_THAN_OPERATOR_NAME
#define ENTITY_UNARY_MINUS_P(e)
#define EQUIV_OPERATOR_NAME
#define DIVIDE_UPDATE_OPERATOR_NAME
#define PLUS_OPERATOR_NAME
#define EQUAL_OPERATOR_NAME
#define ENTITY_MULTIPLY_P(e)
#define MAX0_OPERATOR_NAME
#define MIN0_OPERATOR_NAME
#define C_NON_EQUAL_OPERATOR_NAME
#define LEFT_SHIFT_UPDATE_OPERATOR_NAME
#define range_to_nbiter_p(e)
#define ENTITY_CONDITIONAL_P(e)
#define MULTIPLY_UPDATE_OPERATOR_NAME
#define LEFT_SHIFT_OPERATOR_NAME
#define AND_OPERATOR_NAME
FI: intrinsics are defined at a third place after bootstrap and effects! I guess the name should be d...
#define MINUS_UPDATE_OPERATOR_NAME
#define C_NOT_OPERATOR_NAME
#define PRE_DECREMENT_OPERATOR_NAME
#define IMPLIED_DCOMPLEX_NAME
#define DIVIDE_OPERATOR_NAME
#define UNARY_MINUS_OPERATOR_NAME
#define UNARY_PLUS_OPERATOR_NAME
#define RIGHT_SHIFT_UPDATE_OPERATOR_NAME
#define C_LESS_THAN_OPERATOR_NAME
#define GREATER_OR_EQUAL_OPERATOR_NAME
#define PRE_INCREMENT_OPERATOR_NAME
#define POST_INCREMENT_OPERATOR_NAME
#define PLUS_UPDATE_OPERATOR_NAME
#define MINUS_C_OPERATOR_NAME
#define MULTIPLY_OPERATOR_NAME
#define LESS_OR_EQUAL_OPERATOR_NAME
#define C_OR_OPERATOR_NAME
#define BITWISE_AND_OPERATOR_NAME
#define RIGHT_SHIFT_OPERATOR_NAME
#define NOT_OPERATOR_NAME
#define IMPLIED_COMPLEX_NAME
#define NON_EQUAL_OPERATOR_NAME
#define C_EQUAL_OPERATOR_NAME
#define ASSIGN_OPERATOR_NAME
#define MODULO_OPERATOR_NAME
#define PLUS_C_OPERATOR_NAME
#define MIN_OPERATOR_NAME
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...
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
int IsUnaryOperator(entity e)
value EvalNaryOp(int t, list la)
value EvalBinaryOp(int t, list la)
t defines the operator and la is a list to two sub-expressions.
bool expression_linear_p(expression e)
returns if e is already normalized and linear.
bool positive_expression_p(expression e)
Use constants and type information to decide if the value of sigma(e) is always positive,...
value EvalConditionalOp(list la)
reference constant_reference_to_normalized_constant_reference(reference cr)
Allocate a new reference with evaluated subscripts.
Pvecteur vect_product(Pvecteur *pv1, Pvecteur *pv2)
returns a Pvecteur equal to (*pv1) * (*pv2) if this product is linear or NULL otherwise.
value EvalConstant(constant c)
Constant c is returned as field of value v.
value EvalCall(call c)
only calls to constant, symbolic or intrinsic functions might be evaluated.
value EvalExpression(expression e)
Evaluate statically an expression.
value EvalSizeofexpression(sizeofexpression soe)
bool negative_expression_p(expression e)
Use constants and type information to decide if the value of sigma(e) is always negative,...
int IsNaryOperator(entity e)
bool expression_integer_value(expression e, intptr_t *pval)
value EvalIntrinsic(entity e, list la)
This function tries to evaluate a call to an intrinsic function.
value EvalSyntax(syntax s)
value EvalUnaryOp(int t, list la)
int IsBinaryOperator(entity e)
FI: These string constants are defined in ri-util.h and the tokens in ri-util/operator....
static bool vect_const_p(Pvecteur v)
returns true if v is not NULL and is constant
int ipow(int vg, int vd)
FI: such a function should exist in Linear/arithmetique.
expression normalize_integer_constant_expression(expression e)
Allocate a new expression equivalent to e, but constant expressions are evaluated.
bool expression_negative_integer_value_p(expression e)
Return true iff the expression has an integer value known statically and this value is negative.
bool range_count(range r, intptr_t *pcount)
The range count only can be evaluated if the three range expressions are constant and if the incremen...
expression int_to_expression(_int i)
transform an int into an expression and generate the corresponding entity if necessary; it is not cle...
expression make_op_exp(char *op_name, expression exp1, expression exp2)
================================================================
bool expression_reference_p(expression e)
Test if an expression is a reference.
bool unbounded_expression_p(expression e)
bool const_variable_p(entity)
type expression_to_type(expression)
For an array declared as int a[10][20], the type returned for a[i] is int [20].
bool scalar_integer_type_p(type)
int type_memory_size(type)
bool unsigned_type_p(type)
Predicates on types.
bool overloaded_type_p(type)
Returns true if t is a variable type with a basic overloaded.
#define type_functional_p(x)
#define value_undefined_p(x)
#define syntax_reference_p(x)
#define functional_result(x)
#define value_constant(x)
#define syntax_reference(x)
#define reference_undefined
#define normalized_linear_p(x)
#define reference_variable(x)
#define constant_float_p(x)
#define sizeofexpression_type(x)
#define symbolic_constant(x)
#define sizeofexpression_expression(x)
#define type_functional(x)
@ is_syntax_sizeofexpression
#define range_increment(x)
#define value_constant_p(x)
#define value_symbolic(x)
#define EXPRESSION(x)
EXPRESSION.
#define constant_int_p(x)
#define expression_undefined
#define expression_normalized(x)
#define reference_indices(x)
#define syntax_sizeofexpression(x)
#define sizeofexpression_expression_p(x)
#define constant_call_p(x)
#define constant_float(x)
#define call_arguments(x)
#define normalized_undefined_p(x)
#define value_expression_p(x)
#define expression_syntax(x)
#define value_expression(x)
#define entity_initial(x)
Pvecteur vect_multiply(Pvecteur v, Value x)
Pvecteur vect_multiply(Pvecteur v, Value x): multiplication du vecteur v par le scalaire x,...
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
The structure used to build lists in NewGen.
#define TCST
VARIABLE REPRESENTANT LE TERME CONSTANT.
void vect_rm(Pvecteur v)
void vect_rm(Pvecteur v): desallocation des couples de v;
Value vect_coeff(Variable var, Pvecteur vect)
Variable vect_coeff(Variable var, Pvecteur vect): coefficient de coordonnee var du vecteur vect —> So...