LCOV - code coverage report
Current view: top level - metalib_isl - isl_multi_dims.c (source / functions) Hit Total Coverage
Test: 2018-10-31_point_maint_greina16.lcov Lines: 0 49 0.0 %
Date: 2018-11-01 11:27:00 Functions: 0 12 0.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright 2011      Sven Verdoolaege
       3             :  * Copyright 2012-2013 Ecole Normale Superieure
       4             :  *
       5             :  * Use of this software is governed by the MIT license
       6             :  *
       7             :  * Written by Sven Verdoolaege,
       8             :  * Ecole Normale Superieure, 45 rue d'Ulm, 75230 Paris, France
       9             :  */
      10             : 
      11             : #include <isl_space_private.h>
      12             : 
      13             : #include <isl_multi_macro.h>
      14             : 
      15             : /* Check whether "multi" has non-zero coefficients for any dimension
      16             :  * in the given range or if any of these dimensions appear
      17             :  * with non-zero coefficients in any of the integer divisions involved.
      18             :  */
      19           0 : isl_bool FN(MULTI(BASE),involves_dims)(__isl_keep MULTI(BASE) *multi,
      20             :         enum isl_dim_type type, unsigned first, unsigned n)
      21             : {
      22             :         int i;
      23             : 
      24           0 :         if (!multi)
      25           0 :                 return isl_bool_error;
      26           0 :         if (n == 0)
      27           0 :                 return isl_bool_false;
      28             : 
      29           0 :         for (i = 0; i < multi->n; ++i) {
      30             :                 isl_bool involves;
      31             : 
      32           0 :                 involves = FN(EL,involves_dims)(multi->u.p[i], type, first, n);
      33           0 :                 if (involves < 0 || involves)
      34           0 :                         return involves;
      35             :         }
      36             : 
      37           0 :         if (FN(MULTI(BASE),has_explicit_domain)(multi))
      38           0 :                 return FN(MULTI(BASE),involves_explicit_domain_dims)(multi,
      39             :                                                                 type, first, n);
      40             : 
      41           0 :         return isl_bool_false;
      42             : }
      43             : 
      44           0 : __isl_give MULTI(BASE) *FN(MULTI(BASE),insert_dims)(
      45             :         __isl_take MULTI(BASE) *multi,
      46             :         enum isl_dim_type type, unsigned first, unsigned n)
      47             : {
      48             :         int i;
      49             : 
      50           0 :         if (!multi)
      51           0 :                 return NULL;
      52           0 :         if (type == isl_dim_out)
      53           0 :                 isl_die(FN(MULTI(BASE),get_ctx)(multi), isl_error_invalid,
      54             :                         "cannot insert output/set dimensions",
      55             :                         return FN(MULTI(BASE),free)(multi));
      56           0 :         if (n == 0 && !isl_space_is_named_or_nested(multi->space, type))
      57           0 :                 return multi;
      58             : 
      59           0 :         multi = FN(MULTI(BASE),cow)(multi);
      60           0 :         if (!multi)
      61           0 :                 return NULL;
      62             : 
      63           0 :         multi->space = isl_space_insert_dims(multi->space, type, first, n);
      64           0 :         if (!multi->space)
      65           0 :                 return FN(MULTI(BASE),free)(multi);
      66           0 :         if (FN(MULTI(BASE),has_explicit_domain)(multi))
      67           0 :                 multi = FN(MULTI(BASE),insert_explicit_domain_dims)(multi,
      68             :                                                                 type, first, n);
      69           0 :         if (!multi)
      70           0 :                 return NULL;
      71             : 
      72           0 :         for (i = 0; i < multi->n; ++i) {
      73           0 :                 multi->u.p[i] = FN(EL,insert_dims)(multi->u.p[i],
      74             :                                                         type, first, n);
      75           0 :                 if (!multi->u.p[i])
      76           0 :                         return FN(MULTI(BASE),free)(multi);
      77             :         }
      78             : 
      79           0 :         return multi;
      80             : }
      81             : 
      82           0 : __isl_give MULTI(BASE) *FN(MULTI(BASE),add_dims)(__isl_take MULTI(BASE) *multi,
      83             :         enum isl_dim_type type, unsigned n)
      84             : {
      85             :         unsigned pos;
      86             : 
      87           0 :         pos = FN(MULTI(BASE),dim)(multi, type);
      88             : 
      89           0 :         return FN(MULTI(BASE),insert_dims)(multi, type, pos, n);
      90             : }
      91             : 
      92             : /* Project the domain of "multi" onto its parameter space.
      93             :  * "multi" may not involve any of the domain dimensions.
      94             :  */
      95           0 : __isl_give MULTI(BASE) *FN(MULTI(BASE),project_domain_on_params)(
      96             :         __isl_take MULTI(BASE) *multi)
      97             : {
      98             :         unsigned n;
      99             :         isl_bool involves;
     100             :         isl_space *space;
     101             : 
     102           0 :         n = FN(MULTI(BASE),dim)(multi, isl_dim_in);
     103           0 :         involves = FN(MULTI(BASE),involves_dims)(multi, isl_dim_in, 0, n);
     104           0 :         if (involves < 0)
     105           0 :                 return FN(MULTI(BASE),free)(multi);
     106           0 :         if (involves)
     107           0 :                 isl_die(FN(MULTI(BASE),get_ctx)(multi), isl_error_invalid,
     108             :                     "expression involves some of the domain dimensions",
     109             :                     return FN(MULTI(BASE),free)(multi));
     110           0 :         multi = FN(MULTI(BASE),drop_dims)(multi, isl_dim_in, 0, n);
     111           0 :         space = FN(MULTI(BASE),get_domain_space)(multi);
     112           0 :         space = isl_space_params(space);
     113           0 :         multi = FN(MULTI(BASE),reset_domain_space)(multi, space);
     114           0 :         return multi;
     115             : }

Generated by: LCOV version 1.12