24 #ifndef OTAWA_DATA_CLP_SYMBOLICEXPR_H_
25 #define OTAWA_DATA_CLP_SYMBOLICEXPR_H_
28 #include <elm/io/Output.h>
29 #include <elm/genstruct/Vector.h>
30 #include <elm/string/AutoString.h>
36 using namespace elm::genstruct;
82 _op(op), _a(a), _b(b), _val(val), _parent(parent) {
83 ASSERT(_op >=
NONE && _op <=
OR);
94 _op(expr._op), _val(expr._val), _parent(expr._parent) {
95 ASSERT(_op >=
NONE && _op <=
OR);
107 if (_parent != NULL){
108 if (_parent->_a ==
this)
110 else if (_parent->_b ==
this)
156 V val(
void)
const {
return _val; }
185 virtual void canonize(
void);
300 virtual void canonize(
void);
348 virtual void canonize(
void);
402 virtual void canonize(
void);
458 virtual void canonize(
void);
511 virtual void canonize(
void);
575 virtual void canonize(
void);
579 SECmp* logicalNot(
void);
590 void getFilters(
void);
617 { out <<
"=> "; sym->
print(out);
return out; }
Definition: SymbolicExpr.h:50
bool operator==(const CString &s1, const CString &s2)
Definition: SymbolicExpr.h:70
struct otawa::sem::inst inst
equal
Definition: SymbolicExpr.h:64
SymbExpr * a(void) const
Definition: SymbolicExpr.h:148
void copy(T *target, const T *source, int size)
less or equal
Definition: SymbolicExpr.h:60
SEReg(const SEReg &expr)
Copy constructor.
Definition: SymbolicExpr.h:372
Identifier< Vector< SECmp * > > REG_FILTERS
SymbExpr * _a
Definition: SymbolicExpr.h:249
void applyFilter(V &v, se::op_t cmp_op, V f)
Apply a filter on the value.
Definition: clp_symbolic_expr.cpp:967
Undeterminate unsigned compare.
Definition: SymbolicExpr.h:59
void set_parent(SymbExpr *parent)
Set the reference to the parent of this.
Definition: SymbolicExpr.h:244
Vector< V > known_reg
Definition: SymbolicExpr.h:599
op_t op(void) const
Accessors.
Definition: SymbolicExpr.h:144
SEReg(V value, SymbExpr *parent=NULL)
Constructors.
Definition: SymbolicExpr.h:366
SEConst(V value, SymbExpr *parent=NULL)
Constructors.
Definition: SymbolicExpr.h:264
Register.
Definition: SymbolicExpr.h:54
SEAdd(const SEAdd &expr)
Copy constructor.
Definition: SymbolicExpr.h:481
Addition.
Definition: SymbolicExpr.h:56
Definition: SymbolicExpr.h:51
A block represents a sequence of semantic instructions inst.
Definition: inst.h:183
SEConst(const SEConst &expr)
Copy constructor.
Definition: SymbolicExpr.h:270
SymbExpr * _b
Definition: SymbolicExpr.h:250
void print(io::Output &out, const hard::Platform *pf=0)
Output a string representation of the expression.
Definition: clp_symbolic_expr.cpp:74
Memory reference.
Definition: SymbolicExpr.h:53
virtual SymbExpr * copy(void)
Operators.
Definition: clp_symbolic_expr.cpp:41
A pack of CLP states inside a BasicBlock.
Definition: ClpPack.h:41
Vector< SECmp * > reg_filters
Definition: SymbolicExpr.h:597
Symbolic expression.
Definition: SymbolicExpr.h:74
SymbExpr(const SymbExpr &expr)
Copy constructor.
Definition: SymbolicExpr.h:93
A set of values represented by a Circular Linear Progression.
Definition: ClpValue.h:66
value_t value(CString name, int value)
not equal
Definition: SymbolicExpr.h:66
Undeterminate compare.
Definition: SymbolicExpr.h:57
Vector< V > known_addr
Definition: SymbolicExpr.h:600
Definition: SymbolicExpr.h:586
Compare symbolic expression This class define three type of compare expression: condition (if): SECmp...
Definition: SymbolicExpr.h:520
SENeg(SymbExpr *expr=NULL, SymbExpr *parent=NULL)
Constructors.
Definition: SymbolicExpr.h:422
void set_b(SymbExpr *b)
Set the second child expression (b)
Definition: SymbolicExpr.h:228
bool operator!=(const CString &s1, const CString &s2)
SENeg(const SENeg &expr)
Copy constructor.
Definition: SymbolicExpr.h:428
Register.
Definition: SymbolicExpr.h:358
op_t _op
Attributes.
Definition: SymbolicExpr.h:248
Negation.
Definition: SymbolicExpr.h:412
Definition: SymbolicExpr.h:69
BasicBlock * bb
Definition: SymbolicExpr.h:596
sys::SystemOutStream & out
SymbExpr * parent(void) const
Definition: SymbolicExpr.h:160
cond_t
Definition: inst.h:76
greater or equal
Definition: SymbolicExpr.h:62
V _val
Definition: SymbolicExpr.h:251
SEAddr(const SEAddr &expr)
Copy constructor.
Definition: SymbolicExpr.h:318
clp::ClpStatePack pack
Definition: SymbolicExpr.h:601
Constant.
Definition: SymbolicExpr.h:52
This class represents identifier with a typed associated value.
Definition: Identifier.h:51
Vector< SECmp * > addr_filters
Definition: SymbolicExpr.h:598
This is the minimal definition of a basic block.
Definition: BasicBlock.h:43
Addition.
Definition: SymbolicExpr.h:462
AutoString & operator<<(CString str, const T &value)
clp::Value V
Definition: SymbolicExpr.h:46
This class represents assembly instruction of a piece of code.
Definition: Inst.h:62
SEAdd(SymbExpr *a=NULL, SymbExpr *b=NULL, SymbExpr *parent=NULL)
Constructors.
Definition: SymbolicExpr.h:475
Memory reference.
Definition: SymbolicExpr.h:304
Definition: SymbolicExpr.h:68
Constants.
Definition: SymbolicExpr.h:256
SymbExpr * b(void) const
Definition: SymbolicExpr.h:152
Definition: SymbolicExpr.h:67
SEAddr(V value, SymbExpr *parent=NULL)
Constructors.
Definition: SymbolicExpr.h:312
greater than
Definition: SymbolicExpr.h:63
SECmp(op_t op, SymbExpr *a=NULL, SymbExpr *b=NULL, SymbExpr *parent=NULL)
Constructors.
Definition: SymbolicExpr.h:539
SymbExpr * _parent
Definition: SymbolicExpr.h:252
less than
Definition: SymbolicExpr.h:61
virtual ~SymbExpr()
Destructor of a symbolic expression This recursively delete a and b childs, and set to NULL the refer...
Definition: SymbolicExpr.h:104
Oposite of.
Definition: SymbolicExpr.h:55
void print(Output &out, const T &v)
Definition: Identifier.h:44
SymbExpr(op_t op=NONE, SymbExpr *a=NULL, SymbExpr *b=NULL, V val=0, SymbExpr *parent=NULL)
Constructor and destructor.
Definition: SymbolicExpr.h:81
Identifier< Vector< SECmp * > > ADDR_FILTERS
V val(void) const
Definition: SymbolicExpr.h:156
SECmp(const SECmp &expr)
Copy constructor.
Definition: SymbolicExpr.h:545
void set_a(SymbExpr *a)
Setters.
Definition: SymbolicExpr.h:209
op_t
Defined operators.
Definition: SymbolicExpr.h:49