mirror of
https://review.haiku-os.org/buildtools
synced 2024-11-23 07:18:49 +01:00
c8db99d323
GCC had a horrible .gitignore, untracked files were not applied
68 lines
1.9 KiB
C
68 lines
1.9 KiB
C
/*
|
|
* Copyright 2012 Ecole Normale Superieure
|
|
* Copyright 2017 Sven Verdoolaege
|
|
*
|
|
* Use of this software is governed by the MIT license
|
|
*
|
|
* Written by Sven Verdoolaege,
|
|
* Ecole Normale Superieure, 45 rue d'Ulm, 75230 Paris, France
|
|
*/
|
|
|
|
#define xFN(TYPE,NAME) TYPE ## _ ## NAME
|
|
#define FN(TYPE,NAME) xFN(TYPE,NAME)
|
|
|
|
/* Drop the "n" domain dimensions starting at "first" from "obj",
|
|
* after checking that they do not appear in the affine expression.
|
|
*/
|
|
static __isl_give TYPE *FN(TYPE,drop_domain)(__isl_take TYPE *obj,
|
|
unsigned first, unsigned n)
|
|
{
|
|
isl_bool involves;
|
|
|
|
involves = FN(TYPE,involves_dims)(obj, isl_dim_in, first, n);
|
|
if (involves < 0)
|
|
return FN(TYPE,free)(obj);
|
|
if (involves)
|
|
isl_die(FN(TYPE,get_ctx)(obj), isl_error_invalid,
|
|
"affine expression involves some of the domain dimensions",
|
|
return FN(TYPE,free)(obj));
|
|
return FN(TYPE,drop_dims)(obj, isl_dim_in, first, n);
|
|
}
|
|
|
|
/* Check that the domain of "obj" is a product.
|
|
*/
|
|
static isl_stat FN(TYPE,check_domain_product)(__isl_keep TYPE *obj)
|
|
{
|
|
isl_bool is_product;
|
|
|
|
is_product = FN(TYPE,domain_is_product)(obj);
|
|
if (is_product < 0)
|
|
return isl_stat_error;
|
|
if (!is_product)
|
|
isl_die(FN(TYPE,get_ctx)(obj), isl_error_invalid,
|
|
"domain is not a product", return isl_stat_error);
|
|
return isl_stat_ok;
|
|
}
|
|
|
|
/* Given an affine function with a domain of the form [A -> B] that
|
|
* does not depend on B, return the same function on domain A.
|
|
*/
|
|
__isl_give TYPE *FN(TYPE,domain_factor_domain)(__isl_take TYPE *obj)
|
|
{
|
|
isl_space *space;
|
|
isl_size n, n_in;
|
|
|
|
if (FN(TYPE,check_domain_product)(obj) < 0)
|
|
return FN(TYPE,free)(obj);
|
|
space = FN(TYPE,get_domain_space)(obj);
|
|
n = isl_space_dim(space, isl_dim_set);
|
|
space = isl_space_factor_domain(space);
|
|
n_in = isl_space_dim(space, isl_dim_set);
|
|
if (n < 0 || n_in < 0)
|
|
obj = FN(TYPE,free)(obj);
|
|
else
|
|
obj = FN(TYPE,drop_domain)(obj, n_in, n - n_in);
|
|
obj = FN(TYPE,reset_domain_space)(obj, space);
|
|
return obj;
|
|
}
|