http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46758

Alexander Monakov <amonakov at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |NEW
         AssignedTo|amonakov at gcc dot gnu.org |unassigned at gcc dot
                   |                            |gnu.org

--- Comment #4 from Alexander Monakov <amonakov at gcc dot gnu.org> 2010-12-13 
17:24:59 UTC ---
Ouch.  The "obvious" fix:

diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c
index 5036fba..8fda288 100644
--- a/gcc/graphite-sese-to-poly.c
+++ b/gcc/graphite-sese-to-poly.c
@@ -626,16 +626,9 @@ scan_tree_for_params_int (tree cst,
ppl_Linear_Expression_t expr, mpz_t k)
 {
   mpz_t val;
   ppl_Coefficient_t coef;
-  int v = int_cst_value (cst);

   mpz_init (val);
-  mpz_set_si (val, 0);
-
-  /* Necessary to not get "-1 = 2^n - 1". */
-  if (v < 0)
-    mpz_sub_ui (val, val, -v);
-  else
-    mpz_add_ui (val, val, v);
+  tree_int_to_gmp (cst, val);

   mpz_mul (val, val, k);
   ppl_new_Coefficient (&coef);

Makes Graphite fail most tests because this scanning machinery curiously
depends on signed/unsigned conversions/overflow.  For example, when an IV upper
bound N-1 is expressed as (unsigned)(N + 0xFFFFFFFFU), the patch makes Graphite
actually generate N + 0xFFFFFFFFU as upper bound in the corresponding PPL
expression:

(gdb) p nb_iters
$2 = (tree) 0x7ffff7ff9ee0
(gdb) pt
 <plus_expr 0x7ffff7ff9ee0
    type <integer_type 0x7ffff7ed0540 unsigned int public unsigned SI
        size <integer_cst 0x7ffff7ebd6e0 constant 32>
        unit size <integer_cst 0x7ffff7ebd3e8 constant 4>
        align 32 symtab 0 alias set -1 canonical type 0x7ffff7ed0540 precision
32 min <integer_cst 0x7ffff7ebd708 0> max <integer_cst 0x7ffff7ebd6b8
4294967295>
        pointer_to_this <pointer_type 0x7ffff7ee5150>>

    arg 0 <nop_expr 0x7ffff5a72420 type <integer_type 0x7ffff7ed0540 unsigned
int>

        arg 0 <ssa_name 0x7ffff5a73370 type <integer_type 0x7ffff7ed0498 int>
            visited var <parm_decl 0x7ffff7ec6880 y>def_stmt GIMPLE_NOP

            version 6>>
    arg 1 <integer_cst 0x7ffff7ebd6b8 type <integer_type 0x7ffff7ed0540
unsigned int> constant 4294967295>>
(gdb) call debug_ppl_linear_expr (ub_expr)
1 5
0 0 1 0 4294967295 

I don't know how to fix this; thus, unassigning.  Sorry.

Reply via email to