update isl for isl_*_eval returning an isl_val instead of an isl_qpolynomial
[ppn.git] / srel.h
blob9255d96abdcb41bb6ef68cead4739809a97e799b
1 #ifndef SREL_H
2 #define SREL_H
4 #include "suif_inc.h"
5 #include <omega.h>
6 #include <vector>
7 #include <isa/pdg.h>
9 using namespace omega;
11 class symtab_ann;
12 class stmt_node;
14 class SRelation : public Relation {
15 public:
16 symtab_ann *sa;
17 F_Exists *e;
18 F_And *f;
19 std::vector<stmt_node *> nested;
21 SRelation(symtab_ann *a) : Relation(0), sa(a) {
22 e = add_exists();
23 f = e->add_and();
25 SRelation(symtab_ann *a, named_lin_ineq *nlq) : Relation(0, 0), sa(a) {
26 e = add_exists();
27 f = e->add_and();
28 intersect(nlq);
30 SRelation(SRelation &s) : Relation(s), sa(s.sa), nested(s.nested) {}
31 SRelation (Relation & r, symtab_ann *a) : Relation(r), sa(a) {}
32 SRelation(Relation &r, symtab_ann *a, std::vector<stmt_node *> nested)
33 : Relation(r), sa(a), nested(nested) {}
34 SRelation (int in, int out, std::vector< std::vector<int> > & c,
35 symtab_ann *a);
36 void fix(var_sym *var, int val);
37 void set_infinite(var_sym *var);
38 void intersect(named_lin_ineq *nlq);
39 SRelation *Intersection(SRelation *b);
40 SRelation *Union(SRelation *b);
41 SRelation *Difference(SRelation *b);
42 SRelation *Composition(SRelation *b);
43 SRelation *Complement();
46 #endif