>>> +  {
>>> +    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?
>
> Yes, thanks for pointing this out.  I will fix this.

I am confused on this one:
which function should I use to create dim from dc?
I don't see how to specify the number of input and output dimensions
like the isl_dim_alloc would do.

What do you think about copying only the parameters from scop->context?

  {
    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));

    acc = isl_map_universe (dim);
    acc = isl_map_set_tuple_id (acc, isl_dim_out, isl_id_for_dr (scop, dr));
    isl_dim_free (dc);
  }

Would this be ok?

Thanks,
Sebastian

Reply via email to