1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
#ifndef OMEGATOOLS_HH
#define OMEGATOOLS_HH
#include <string>
#include <omega.h>
#include "dep.hh"
#include "ir_code.hh"
std::string tmp_e();
void exp2formula(IR_Code *ir, omega::Relation &r, omega::F_And *f_root,
std::vector<omega::Free_Var_Decl *> &freevars,
omega::CG_outputRepr *repr, omega::Variable_ID lhs, char side,
IR_CONDITION_TYPE rel, bool destroy);
omega::Relation arrays2relation(IR_Code *ir, std::vector<omega::Free_Var_Decl*> &freevars,
const IR_ArrayRef *ref_src, const omega::Relation &IS_w,
const IR_ArrayRef *ref_dst, const omega::Relation &IS_r);
std::pair<std::vector<DependenceVector>, std::vector<DependenceVector> > relation2dependences(
const IR_ArrayRef *ref_src, const IR_ArrayRef *ref_dst, const omega::Relation &r);
void exp2constraint(IR_Code *ir, omega::Relation &r, omega::F_And *f_root,
std::vector<omega::Free_Var_Decl *> &freevars,
omega::CG_outputRepr *repr, bool destroy);
// suif legacy code
// void suif2formula(Relation &r, F_And *f_root,
// std::vector<Free_Var_Decl*> &freevars,
// operand op, Variable_ID lhs,
// char side, char rel);
// void suif2formula(Relation &r, F_And *f_root,
// std::vector<Free_Var_Decl*> &freevars,
// instruction *ins, Variable_ID lhs,
// char side, char rel);
// void add_loop_stride_constraints(omega::Relation &r, omega::F_And *f_root,
// std::vector<omega::Free_Var_Decl*> &freevars,
// tree_for *tnf, char side);
// void add_loop_bound_constraints(IR_Code *ir, omega::Relation &r, omega::F_And *f_root,
// std::vector<omega::Free_Var_Decl*> &freevars,
// tree_for *tnf,
// char upper_or_lower, char side, IR_CONDITION_TYPE rel);
// Relation loop_iteration_space(std::vector<Free_Var_Decl*> &freevars,
// tree_node *tn, std::vector<tree_for*> &loops);
// Relation arrays2relation(std::vector<Free_Var_Decl*> &freevars,
// in_array *ia_w, const Relation &IS1,
// in_array *ia_r, const Relation &IS2);
// std::vector<DependenceVector> relation2dependences(IR_Code *ir, in_array *ia_w,
// in_array *ia_r, const Relation &r);
// end of suif legacy code
bool is_single_iteration(const omega::Relation &r, int dim);
void assign_const(omega::Relation &r, int dim, int val);
int get_const(const omega::Relation &r, int dim, omega::Var_Kind type);
omega::Variable_ID find_index(omega::Relation &r, const std::string &s, char side);
omega::Relation permute_relation(const std::vector<int> &pi);
omega::Relation get_loop_bound(const omega::Relation &r, int dim);
bool is_single_loop_iteration(const omega::Relation &r, int level, const omega::Relation &known);
omega::Relation get_loop_bound(const omega::Relation &r, int level, const omega::Relation &known);
omega::Relation get_max_loop_bound(const std::vector<omega::Relation> &r, int dim);
omega::Relation get_min_loop_bound(const std::vector<omega::Relation> &r, int dim);
void add_loop_stride(omega::Relation &r, const omega::Relation &bound, int dim, int stride);
bool is_inner_loop_depend_on_level(const omega::Relation &r, int level, const omega::Relation &known);
// void adjust_loop_bound(omega::Relation &r, int dim, int adjustment, std::vector<omega::Free_Var_Decl *> globals = std::vector<omega::Free_Var_Decl *>());
omega::Relation adjust_loop_bound(const omega::Relation &r, int level, int adjustment);
// void adjust_loop_bound(Relation &r, int dim, int adjustment);
// void adjust_loop_bound(Relation &r, int dim, Free_Var_Decl *global_var, int adjustment);
// boolean is_private_statement(const omega::Relation &r, int dim);
// coef_t mod(const Relation &r, Variable_ID v, int dividend);
enum LexicalOrderType {LEX_MATCH, LEX_BEFORE, LEX_AFTER, LEX_UNKNOWN};
// template <typename T>
// LexicalOrderType lexical_order(const std::vector<T> &a, const std::vector<T> &b) {
// int size = min(a.size(), b.size());
// for (int i = 0; i < size; i++) {
// if (a[i] < b[i])
// return LEX_BEFORE;
// else if (b[i] < a[i])
// return LEX_AFTER;
// }
// if (a.size() < b.size())
// return LEX_BEFORE;
// else if (b.size() < a.size())
// return LEX_AFTER;
// else
// return LEX_MATCH;
// }
// struct LoopException {
// std::string descr;
// LoopException(const std::string &s): descr(s) {};
// };
#endif
|