diff options
Diffstat (limited to 'omegalib/omega_lib/include/omega/pres_conj.h')
| -rw-r--r-- | omegalib/omega_lib/include/omega/pres_conj.h | 299 | 
1 files changed, 0 insertions, 299 deletions
| diff --git a/omegalib/omega_lib/include/omega/pres_conj.h b/omegalib/omega_lib/include/omega/pres_conj.h deleted file mode 100644 index ea10a2c..0000000 --- a/omegalib/omega_lib/include/omega/pres_conj.h +++ /dev/null @@ -1,299 +0,0 @@ -#if ! defined _pres_conj_h -#define _pres_conj_h 1 - -#include <limits.h> -#include <omega/pres_decl.h> -#include <omega/pres_logic.h> -#include <omega/pres_cnstr.h> - -namespace omega { - -// -// Conjunct -// -// About variables in Conjunct: -// All varaibles appear in exactly one declaration. -// All variables used in Conjunct are referenced in mappedVars. -// Wildcard variables are referenced both in mappedVars and in myLocals,  -//   since they are declared in the conjunct. -// All other variables are declared at the levels above. -// Column number is:  -//   in forwardingAddress in Problem if variablesInitialized is set,  -//   equal to position of Variable_ID in mappedVars list otherwise. -// - -class Conjunct : public F_Declaration { -public: -  Constraint_Iterator constraints(); -  Variable_ID_Tuple  *variables(); -  EQ_Iterator         EQs(); -  GEQ_Iterator        GEQs(); -  inline int          n_EQs() { return problem->nEQs; } -  inline int          n_GEQs() { return problem->nGEQs; } - -  void promise_that_ub_solutions_exist(Relation &R); - -  inline Node_Type node_type() {return Op_Conjunct;} - -  inline int is_true() {return problem->nEQs==0 && problem->nGEQs==0  -      && exact;} - -  void query_difference(Variable_ID v1, Variable_ID v2, -                        coef_t &lowerBound, coef_t &upperBound, bool &guaranteed); -  void query_variable_bounds(Variable_ID v, coef_t &lowerBound, coef_t &upperBound); -  coef_t query_variable_mod(Variable_ID v, coef_t factor); -  bool query_variable_used(Variable_ID v); - -  int countNonzeros() const { -    int numberNZs; -    coef_t maxCoef, SumAbsCoef; -    problem->difficulty(numberNZs,maxCoef,SumAbsCoef); -    return numberNZs; -  } - -  void difficulty(int &numberNZs, coef_t &maxCoef, coef_t &SumAbsCoef) const { -    problem->difficulty(numberNZs,maxCoef,SumAbsCoef); -  } - -  int query_guaranteed_leading_0s() { -    count_leading_0s(); -    return guaranteed_leading_0s; -  } - -  int query_possible_leading_0s() { -    count_leading_0s(); -    return possible_leading_0s; -  } - -  int query_leading_dir() { -    count_leading_0s(); -    return leading_dir; -  } - -  void calculate_dimensions(Relation &R, int &ndim_all, int &ndim_domain); -  int max_ufs_arity_of_set(); -  int max_ufs_arity_of_in(); -  int max_ufs_arity_of_out(); - -  int rank(); - -  ~Conjunct(); - -  bool is_unknown() const; -  inline bool is_exact() const { return exact;} -  inline bool is_inexact() const { return !exact;} -  inline void make_inexact()   { exact=false;} -    - -#if ! defined NDEBUG -  void     assert_leading_info(); -#else -  void     assert_leading_info() {} -#endif - - -  // PRINTING FUNCTIONS -  void print(FILE *output_file); -  void prefix_print(FILE *output_file, int debug = 1); -  std::string print_to_string(int true_printed); -  std::string print_EQ_to_string(eqn *e) { return problem->print_EQ_to_string(e); } -  std::string print_GEQ_to_string(eqn *e) { return problem->print_GEQ_to_string(e); } -  std::string print_EQ_to_string(int e)  -  { return problem->print_EQ_to_string(&(problem->EQs[e])); } -  std::string print_GEQ_to_string(int e)  -  { return problem->print_GEQ_to_string(&(problem->GEQs[e])); } -  std::string print_term_to_string(eqn *e) { return problem->print_term_to_string(e,1); } -  std::string print_EQ_term_to_string(int e)  -  { return problem->print_term_to_string(&(problem->EQs[e]),1); } -  std::string print_GEQ_term_to_string(int e)  -  { return problem->print_term_to_string(&(problem->GEQs[e]),1); } -  std::string print_sub_to_string(int col) { return problem->print_sub_to_string(col); } - -private: - -  inline void interpret_unknown_as_true()   { exact=true;} - -  friend Relation approx_closure(NOT_CONST Relation &r, int n); - -  virtual Conjunct *really_conjunct(); - - -  // create new constraints with all co-efficients 0 -  // These are public in F_And, use them from there. -  EQ_Handle   add_stride(int step, int preserves_level = 0); -  EQ_Handle   add_EQ(int preserves_level = 0); -  GEQ_Handle  add_GEQ(int preserves_level = 0); -  EQ_Handle   add_EQ(const Constraint_Handle &c, int preserves_level = 0); -  GEQ_Handle  add_GEQ(const Constraint_Handle &c, int preserves_level = 0); - -  friend class GEQ_Handle; -  friend class  EQ_Handle; -  friend class Sub_Handle; -  friend class Constraint_Handle; -  friend class Constraint_Iterator; -  friend class GEQ_Iterator; -  friend class  EQ_Iterator; -  friend class Sub_Iterator; -  friend class Constr_Vars_Iter; - - -  // FUNCTIONS HAVING TO DO WITH BUILDING FORMULAS/DNFs  -  bool     can_add_child(); -  void remap(); -  void beautify(); -  DNF* DNFize(); -  int priority(); -  virtual Conjunct *find_available_conjunct(); -  void finalize(); - -  friend class DNF; - - - -  // CREATING CONJUNCTS -  Conjunct(); -  Conjunct(Conjunct &); -  Conjunct(Formula *, Rel_Body *); - -  friend class Formula; // add_conjunct (a private function) creates Conjuncts -  friend class F_Not; -  friend class F_Or; -  //   class F_And; is a friend below -   - -  // VARIOUS FUNCTIONS TO CREATE / WORK WITH VARIABLES -  Variable_ID declare(Const_String s); -  Variable_ID declare(); -  Variable_ID declare(Variable_ID v);   -   -  friend const char *get_var_name(unsigned int, void *); -  void push_exists(Variable_ID_Tuple &S); -  int  get_column(Variable_ID); -  int  find_column(Variable_ID); -  int  map_to_column(Variable_ID); -  void combine_columns(); -  void reorder(); -  void reorder_for_print(bool reverseOrder=false, -                         int first_pass_input=0, -                         int first_pass_output=0, -                         bool sort=false); - -  friend void      remap_DNF_vars(Rel_Body *new_rel, Rel_Body *old_rel); - -  void localize_var(Variable_ID D); - - -  // this creates variables in conjuncts for us: -  friend int       new_WC(Conjunct *nc, Problem *np); - - -  // UFS/LEADING ZEROS STUFF - -  void move_UFS_to_input(); - -  void count_leading_0s(); -  void invalidate_leading_info(int changed = -1); -  void enforce_leading_info(int guaranteed, int possible, int dir); - -  void reverse_leading_dir_info(); - -  - -  // CONJUNCT SPECIFIC STUFF - -  void      rm_color_constrs(); -  inline int N_protected() { return problem->safeVars; } - - -  void ordered_elimination(int symLen) { problem->ordered_elimination(symLen);} -  void convertEQstoGEQs(bool excludeStrides); - -  int cost(); -   -  inline Formula*  copy(Formula *parent, Rel_Body *reln) -  { return copy_conj_diff_relation(parent,reln); } -  Conjunct* copy_conj_diff_relation(Formula *parent, Rel_Body *reln); -  inline Conjunct* copy_conj_same_relation() -  { return copy_conj_diff_relation(&(parent()), relation()); } -  friend void internal_copy_conjunct(Conjunct* to, Conjunct* fr); -  friend void copy_constraint(Constraint_Handle H, -                              const Constraint_Handle initial); - -#if defined STUDY_EVACUATIONS -  // The core function of "evac.c" does lots of work with conjuncts: -  friend bool check_subseq_n(Conjunct *c, Sequence<Variable_ID> &evac_from, Sequence<Variable_ID> &evac_to, int n_from, int n_to, int max_arity, int n, bool allow_offset); -  friend void assert_subbed_syms(Conjunct *c); -  friend bool check_affine(Conjunct *d, Sequence<Variable_ID> &evac_from, Sequence<Variable_ID> &evac_to, int n_from, int n_to, int max_arity); -  friend evac study(Conjunct *C, Sequence<Variable_ID> &evac_from, Sequence<Variable_ID> &evac_to, int n_from, int n_to, int max_arity); -#endif - -  // The relational ops tend to do lots of demented things to Conjuncts: -  friend class Rel_Body; -  friend_rel_ops; - -  // F_And sometimes absorbs conjuncts -  friend class F_And; - -  // Various DNFize functions also get a the problem: - -  friend DNF* conj_and_not_dnf(Conjunct *pos_conj, DNF *neg_conjs, bool weak); -  friend class F_Exists; - -  // Substitutions are a wrapper around a low-level Problem operation -  friend class Substitutions; - -  // private functions to call problem functions  -  int simplifyProblem(); -  int simplifyProblem(int verify, int subs, int redundantElimination); -  int redSimplifyProblem(int effort, int computeGist); - -  friend int       simplify_conj(Conjunct* conj, int ver_sim, int elim_red, int color); -  friend DNF*      negate_conj(Conjunct* conj); -  friend Conjunct* merge_conjs(Conjunct* conj1, Conjunct* conj2, -                               Merge_Action action, Rel_Body *body = 0); -  friend void      copy_conj_header(Conjunct* to, Conjunct* fr); - - -  // === at last, the data === - -  Variable_ID_Tuple mappedVars; - -  int              n_open_constraints; -  bool             cols_ordered; -  bool             simplified; -  bool             verified; - -  int     guaranteed_leading_0s;  // -1 if unknown -  int     possible_leading_0s;  // -1 if unknown -  int     leading_dir; // 0 if unknown, else +/- 1 -  int     leading_dir_valid_and_known(); - -  bool             exact; - -  short     r_constrs; // are redundant constraints eliminated? -  Problem         *problem; - -  bool is_compressed(); -  void compress(); -  void uncompress(); - -  friend class Comp_Problem; -  Comp_Problem    *comp_problem; -}; - - -/* === Misc. problem manipulation utilities === */ - -const int CantBeNegated = INT_MAX-10; -const int AvoidNegating = INT_MAX-11; - -void copy_column(Problem *tp,  int to_col, -                 Problem *fp,  int fr_col, -                 int start_EQ, int start_GEQ); -void zero_column(Problem *tp,  int to_col, -                 int start_EQ, int start_GEQ, -                 int no_EQs,   int no_GEQs); - -} // namespace - -#endif | 
