[PPL-devel] [GIT] ppl/ppl(master): Several improvements to Octagonal_Shape<T>:: relation_with(const Congruence&).
Enea Zaffanella
zaffanella at cs.unipr.it
Fri May 15 14:56:09 CEST 2009
Module: ppl/ppl
Branch: master
Commit: db4eb892c0382ac837fd8c2473450ed58ad35df3
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=db4eb892c0382ac837fd8c2473450ed58ad35df3
Author: Enea Zaffanella <zaffanella at cs.unipr.it>
Date: Fri May 15 14:54:23 2009 +0200
Several improvements to Octagonal_Shape<T>::relation_with(const Congruence&).
Alaso added a couple of FIXME regarding missing comments and rounding modes.
---
src/Octagonal_Shape.templates.hh | 41 ++++++++++++++++++++-----------------
1 files changed, 22 insertions(+), 19 deletions(-)
diff --git a/src/Octagonal_Shape.templates.hh b/src/Octagonal_Shape.templates.hh
index 021e235..464a87a 100644
--- a/src/Octagonal_Shape.templates.hh
+++ b/src/Octagonal_Shape.templates.hh
@@ -1206,36 +1206,39 @@ Octagonal_Shape<T>::relation_with(const Congruence& cg) const {
if (space_dim == 0) {
if (cg.is_inconsistent())
return Poly_Con_Relation::is_disjoint();
- else if (cg.inhomogeneous_term() % cg.modulus() == 0)
+ else {
+ assert(cg.is_tautological());
return Poly_Con_Relation::saturates()
&& Poly_Con_Relation::is_included();
+ }
}
- PPL_DIRTY_TEMP(Coefficient, min_num);
- PPL_DIRTY_TEMP(Coefficient, min_den);
+ // FIXME: the following code has to be checked and improved.
+ // Add comment to explain what we are doing and why.
+ const Coefficient& inhomo = cg.inhomogeneous_term();
+ Linear_Expression le = Linear_Expression(cg);
+ le -= inhomo;
+ PPL_DIRTY_TEMP_COEFFICIENT(min_num);
+ PPL_DIRTY_TEMP_COEFFICIENT(min_den);
bool min_included;
- PPL_DIRTY_TEMP_COEFFICIENT(mod);
- mod = cg.modulus();
- Linear_Expression le;
- for (dimension_type i = cg_space_dim; i-- > 0; )
- le += cg.coefficient(Variable(i)) * Variable(i);
bool bounded_below = minimize(le, min_num, min_den, min_included);
if (!bounded_below)
return Poly_Con_Relation::strictly_intersects();
- PPL_DIRTY_TEMP_COEFFICIENT(v);
- PPL_DIRTY_TEMP_COEFFICIENT(lower_num);
- PPL_DIRTY_TEMP_COEFFICIENT(lower_den);
+ PPL_DIRTY_TEMP_COEFFICIENT(val);
+ neg_assign(val, inhomo);
+
PPL_DIRTY_TEMP_COEFFICIENT(lower);
- assign_r(lower_num, min_num, ROUND_NOT_NEEDED);
- assign_r(lower_den, min_den, ROUND_NOT_NEEDED);
- neg_assign(v, cg.inhomogeneous_term());
- lower = lower_num / lower_den;
- v += ((lower / mod) * mod);
- if (v * lower_den < lower_num)
- v += mod;
- const Constraint& c(le == v);
+ // FIXME: specify rounding mode.
+ lower = min_num / min_den;
+
+ const Coefficient& mod = cg.modulus();
+ // FIXME: specify rounding mode.
+ val += ((lower / mod) * mod);
+ if (val * min_den < min_num)
+ val += mod;
+ Constraint c(le == val);
return relation_with(c);
}
More information about the PPL-devel
mailing list