Fix serious bug in normalize_constraints
authorSven Verdoolaege <skimo@kotnet.org>
Sun, 17 Aug 2008 14:03:56 +0000 (16:03 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Sun, 24 Aug 2008 20:21:50 +0000 (22:21 +0200)
We would mistakenly relax constraints to include extra integer
points rather than tightening them to remove some rational points.

include/isl_int.h
isl_map.c

index 6e39a5d..ebc28c5 100644 (file)
@@ -34,6 +34,7 @@ typedef mpz_t isl_int;
 #define isl_int_lcm(r,i,j)     mpz_lcm(r,i,j)
 #define isl_int_divexact(r,i,j)        mpz_divexact(r,i,j)
 #define isl_int_cdiv_q(r,i,j)  mpz_cdiv_q(r,i,j)
+#define isl_int_fdiv_q(r,i,j)  mpz_fdiv_q(r,i,j)
 
 #define isl_int_print(out,i)                                           \
        do {                                                            \
index 12d6780..e2eb72c 100644 (file)
--- a/isl_map.c
+++ b/isl_map.c
@@ -958,7 +958,7 @@ static struct isl_basic_map *normalize_constraints(
                }
                if (isl_int_is_one(gcd))
                        continue;
-               isl_int_cdiv_q(bmap->ineq[i][0], bmap->ineq[i][0], gcd);
+               isl_int_fdiv_q(bmap->ineq[i][0], bmap->ineq[i][0], gcd);
                isl_seq_scale_down(bmap->ineq[i]+1, bmap->ineq[i]+1, gcd, total);
        }
        isl_int_clear(gcd);