On Thu, Aug 11, 2011 at 01:16:45PM -0500, Sebastian Pop wrote:
> +  if (1)
> +    {
> +      /* For now remove the isl_id's from the context before
> +      translating to CLooG: this code will be removed when the
> +      domain will also contain isl_id's.  */
> +      isl_set *context = isl_set_project_out (isl_set_copy (scop->context),
> +                                           isl_dim_set, 0, number_of_loops 
> ());
> +      isl_printer *p = isl_printer_to_str (scop->ctx);
> +      char *str;
> +
> +      p = isl_printer_set_output_format (p, ISL_FORMAT_EXT_POLYLIB);
> +      p = isl_printer_print_set (p, context);
> +      isl_set_free (context);
> +
> +      str = isl_printer_get_str (p);
> +      context = isl_set_read_from_str (scop->ctx, str,
> +                                    scop_nb_params (scop));
> +      free (str);
> +      isl_printer_free (p);

Hmm.... are you saying you would like a isl_set_reset_dim_id?

> @@ -415,4 +416,40 @@ openscop_read_polyhedron_matrix (FILE *file, 
> ppl_Polyhedron_t *ph,
>      }
>  }
>  
> +/* Prints an isl_set S to stderr.  */
> +
> +DEBUG_FUNCTION void
> +debug_isl_set (isl_set *s)

You could use isl_set_dump.
It's not documented because I don't want people to depend on the output,
but for debugging it should be just fine.

> @@ -1040,6 +1041,9 @@ free_scop (scop_p scop)
>    if (SCOP_CONTEXT (scop))
>      ppl_delete_Pointset_Powerset_C_Polyhedron (SCOP_CONTEXT (scop));
>  
> +  if (scop->context)
> +    isl_set_free (scop->context);
> +

isl_set_free will handle NULL input just fine.

> +static isl_pw_aff *
> +extract_affine_chrec (scop_p s, tree e)
> +{
> +  isl_pw_aff *lhs = extract_affine (s, CHREC_LEFT (e));
> +  isl_pw_aff *rhs = extract_affine (s, CHREC_RIGHT (e));
> +  isl_dim *dim = isl_dim_set_alloc (s->ctx, 0, number_of_loops ());
> +  isl_local_space *ls = isl_local_space_from_dim (dim);
> +  isl_aff *loop = isl_aff_set_coefficient_si
> +    (isl_aff_zero (ls), isl_dim_set, CHREC_VARIABLE (e), 1);
> +
> +  return isl_pw_aff_add (lhs,
> +                      isl_pw_aff_mul (rhs, isl_pw_aff_from_aff (loop)));

You should test that at least one of your arguments is constant.
Alternatively, if you want to construct polynomials, you should
use isl_pw_qpolynomials instead.

> +  isl_set *inner = isl_set_copy (outer);
> +  isl_dim *d = isl_set_get_dim (scop->context);
> +  isl_id *id = isl_id_for_loop (scop, loop);
> +  int pos = isl_dim_find_dim_by_id (d, isl_dim_set, id);

This is dangerous.  You cannot depend on non-parameters
keeping their ids across operations.  Don't you already
know the position somehow?  When you are using PPL,
you must keep track of this information, no?

> +
> +  /* FIXME: This function will be renamed isl_map_insert_dims and
> +     documented in a later version of ISL (current ISL is 0.07).  */

Since you are using isl_ids, 0.07 won't work for you.

> +       /* Make the dimension of LB and UB to be exactly NBS.  */
> +       lb = isl_pw_aff_drop_dims (lb, isl_dim_set, 0, nbl - 1);
> +       ub = isl_pw_aff_drop_dims (ub, isl_dim_set, 0, nbl - 1);
> +       lb = isl_pw_aff_add_dims (lb, isl_dim_set, nbs - 1);
> +       ub = isl_pw_aff_add_dims (ub, isl_dim_set, nbs - 1);

This looks fishy.  Are you sure the expressions don't depend on the
set variables?

> +  {
> +    isl_dim *dc = isl_set_get_dim (scop->context);
> +    int nb_in = isl_dim_size (dc, isl_dim_set);
> +    int nb_out = 1 + DR_NUM_DIMENSIONS (dr);
> +    int nbp = scop_nb_params (scop);
> +    isl_dim *dim = isl_dim_alloc (scop->ctx, nbp, nb_in, nb_out);
> +    int i;
> +
> +    for (i = 0; i < nbp; i++)
> +      dim = isl_dim_set_dim_id (dim, isl_dim_param, i,
> +                             isl_dim_get_dim_id (dc, isl_dim_param, i));
> +    for (i = 0; i < nb_in; i++)
> +      dim = isl_dim_set_dim_id (dim, isl_dim_in, i,
> +                             isl_dim_get_dim_id (dc, isl_dim_set, i));

This is dangerous too.  Why don't you derive dim directly from dc
instead of creating a fresh dim and then trying to copy some information?

skimo

Reply via email to