summaryrefslogtreecommitdiff
path: root/source/ppl/checking.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/ppl/checking.c')
-rw-r--r--source/ppl/checking.c271
1 files changed, 0 insertions, 271 deletions
diff --git a/source/ppl/checking.c b/source/ppl/checking.c
deleted file mode 100644
index 5ff58c0..0000000
--- a/source/ppl/checking.c
+++ /dev/null
@@ -1,271 +0,0 @@
-
- /**-------------------------------------------------------------------**
- ** CLooG **
- **-------------------------------------------------------------------**
- ** checking.c **
- **-------------------------------------------------------------------**
- ** First version: July 22th 2008 **
- **-------------------------------------------------------------------**/
-
-
-/******************************************************************************
- * CLooG : the Chunky Loop Generator (experimental) *
- ******************************************************************************
- * *
- * Copyright (C) 2001-2008 Cedric Bastoul *
- * *
- * This is free software; you can redistribute it and/or modify it under the *
- * terms of the GNU General Public License as published by the Free Software *
- * Foundation; either version 2 of the License, or (at your option) any later *
- * version. *
- * *
- * This software is distributed in the hope that it will be useful, but *
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License *
- * for more details. *
- * *
- * You should have received a copy of the GNU General Public License along *
- * with software; if not, write to the Free Software Foundation, Inc., *
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
- * *
- * CLooG, the Chunky Loop Generator *
- * Written by Cedric Bastoul, Cedric.Bastoul@inria.fr *
- * *
- ******************************************************************************/
-
-static int cloog_check_polyhedral_ops = 1;
-static int cloog_return_ppl_result = 0;
-
-
-CloogDomain *
-cloog_domain_image (CloogDomain * domain, CloogMatrix * mapping)
-{
- Polyhedron *p = d2p (domain);
- CloogDomain *res =
- cloog_check_domain (cloog_domain_alloc
- (DomainImage (p, mapping, MAX_RAYS)));
- Polyhedron_Free (p);
- return print_result ("cloog_domain_image", res);
-}
-
-CloogDomain *
-cloog_domain_preimage (CloogDomain * domain, CloogMatrix * mapping)
-{
- Polyhedron *p = d2p (domain);
- CloogDomain *res =
- cloog_check_domain (cloog_domain_alloc
- (DomainPreimage (p, mapping, MAX_RAYS)));
- Polyhedron_Free (p);
- return print_result ("cloog_domain_preimage", res);
-}
-
-CloogDomain *
-cloog_domain_project_1 (CloogDomain * domain, int level, int nb_par)
-{
- int row, column, nb_rows, nb_columns, difference;
- CloogDomain *projected_domain;
- CloogMatrix *matrix;
-
- nb_rows = level + nb_par + 1;
- nb_columns = cloog_domain_dim (domain) + 1;
- difference = nb_columns - nb_rows;
-
- if (difference == 0)
- return print_result ("cloog_domain_project", cloog_domain_copy (domain));
-
- matrix = cloog_matrix_alloc (nb_rows, nb_columns);
-
- for (row = 0; row < level; row++)
- for (column = 0; column < nb_columns; column++)
- value_set_si (matrix->p[row][column], (row == column ? 1 : 0));
-
- for (; row < nb_rows; row++)
- for (column = 0; column < nb_columns; column++)
- value_set_si (matrix->p[row][column],
- (row + difference == column ? 1 : 0));
-
- projected_domain = cloog_domain_image (domain, matrix);
- cloog_matrix_free (matrix);
-
- return print_result ("cloog_domain_project_1", cloog_check_domain (projected_domain));
-}
-
-CloogDomain *
-cloog_domain_addconstraints_1 (domain_source, domain_target)
- CloogDomain *domain_source, *domain_target;
-{
- unsigned nb_constraint;
- Value *constraints;
- ppl_polyhedra_union *source, *target, *new, *next, *last;
-
- source = cloog_domain_upol (domain_source);
- target = cloog_domain_upol (domain_target);
-
- constraints = cloog_upol_polyhedron (source)->p_Init;
- nb_constraint = cloog_upol_nbc (source);
- last = new = cloog_new_upol (AddConstraints (constraints, nb_constraint,
- u2p (target), MAX_RAYS));
- source = cloog_upol_next (source);
- next = cloog_upol_next (target);
-
- while (next)
- { /* BUG !!! This is actually a bug. I don't know yet how to cleanly avoid
- * the situation where source and target do not have the same number of
- * elements. So this 'if' is an awful trick, waiting for better.
- */
- if (source)
- {
- constraints = cloog_upol_polyhedron (source)->p_Init;
- nb_constraint = cloog_upol_nbc (source);
- source = cloog_upol_next (source);
- }
- cloog_upol_set_next
- (last, cloog_new_upol (AddConstraints (constraints, nb_constraint,
- u2p (next), MAX_RAYS)));
- last = cloog_upol_next (last);
- next = cloog_upol_next (next);
- }
-
- return print_result ("cloog_domain_addconstraints", cloog_check_domain (cloog_new_domain (new)));
-}
-
-CloogDomain *
-cloog_domain_extend_1 (CloogDomain * domain, int dim, int nb_par)
-{
- int row, column, nb_rows, nb_columns, difference;
- CloogDomain *extended_domain;
- CloogMatrix *matrix;
-
- nb_rows = 1 + cloog_domain_dim (domain);
- nb_columns = dim + nb_par + 1;
- difference = nb_columns - nb_rows;
-
- if (difference == 0)
- return print_result ("cloog_domain_extend_1", cloog_domain_copy (domain));
-
- matrix = cloog_matrix_alloc (nb_rows, nb_columns);
-
- for (row = 0; row < cloog_domain_dim (domain) - nb_par; row++)
- for (column = 0; column < nb_columns; column++)
- value_set_si (matrix->p[row][column], (row == column ? 1 : 0));
-
- for (; row <= cloog_domain_dim (domain); row++)
- for (column = 0; column < nb_columns; column++)
- value_set_si (matrix->p[row][column],
- (row + difference == column ? 1 : 0));
-
- extended_domain = cloog_domain_preimage (domain, matrix);
- cloog_matrix_free (matrix);
-
- return print_result ("cloog_domain_extend_1", cloog_check_domain (extended_domain));
-}
-
-CloogDomain *
-cloog_domain_convex_1 (CloogDomain * domain)
-{
- Polyhedron *p = d2p (domain);
- CloogDomain *res =
- cloog_check_domain (cloog_domain_alloc
- (DomainConvex (p, MAX_RAYS)));
- Polyhedron_Free (p);
- return print_result ("cloog_domain_convex_1", res);
-}
-
-CloogDomain *
-cloog_domain_simplify_1 (CloogDomain * dom1, CloogDomain * dom2)
-{
- CloogMatrix *M, *M2;
- CloogDomain *dom;
- Polyhedron *p1 = d2p (dom1);
- Polyhedron *p2 = d2p (dom2);
- int nbc = cloog_domain_nbconstraints (dom1);
-
- /* DomainSimplify doesn't remove all redundant equalities,
- * so we remove them here first in case both dom1 and dom2
- * are single polyhedra (i.e., not unions of polyhedra).
- */
- if (cloog_domain_isconvex (dom1) && cloog_domain_isconvex (dom2)
- && cloog_domain_nbeq (dom1) && cloog_domain_nbeq (dom2))
- {
- int i, row;
- int rows = cloog_domain_nbeq (dom1) + cloog_domain_nbeq (dom2);
- int cols = cloog_domain_dim (dom1) + 2;
- int rank;
- M = cloog_matrix_alloc (rows, cols);
- M2 = cloog_matrix_alloc (nbc, cols);
- Vector_Copy (cloog_domain_polyhedron (dom2)->Constraint[0],
- M->p[0], cloog_domain_nbeq (dom2) * cols);
- rank = cloog_domain_nbeq (dom2);
- row = 0;
- for (i = 0; i < cloog_domain_nbeq (dom1); ++i)
- {
- Vector_Copy (p1->Constraint[i], M->p[rank], cols);
- if (Gauss (M, rank + 1, cols - 1) > rank)
- {
- Vector_Copy (p1->Constraint[i], M2->p[row++], cols);
- rank++;
- }
- }
- if (row < cloog_domain_nbeq (dom1))
- {
- Vector_Copy (p1->Constraint[cloog_domain_nbeq (dom1)],
- M2->p[row], (nbc - cloog_domain_nbeq (dom1)) * cols);
- p1 = Constraints2Polyhedron (M2, MAX_RAYS);
- }
- cloog_matrix_free (M2);
- cloog_matrix_free (M);
- }
-
- dom = cloog_domain_alloc (DomainSimplify (p1, p2, MAX_RAYS));
- Polyhedron_Free (p1);
- Polyhedron_Free (p2);
- return print_result ("cloog_domain_simplify", cloog_check_domain (dom));
-}
-
-/**
- * cloog_domain_difference function:
- * This function returns a new CloogDomain structure including a polyhedral
- * domain which is the difference of two polyhedral domains domain \ minus
- * inside two CloogDomain structures.
- * - November 8th 2001: first version.
- */
-
-CloogDomain *
-cloog_domain_difference_1 (CloogDomain * domain, CloogDomain * minus)
-{
- if (cloog_domain_isempty (minus))
- return print_result ("cloog_domain_difference", cloog_domain_copy (domain));
- else
- {
- Polyhedron *p1 = d2p (domain);
- Polyhedron *p2 = d2p (minus);
- CloogDomain *res = cloog_domain_alloc (DomainDifference (p1, p2, MAX_RAYS));
- Polyhedron_Free (p1);
- Polyhedron_Free (p2);
- return print_result ("cloog_domain_difference", res);
- }
-}
-
-static CloogDomain *
-cloog_check_domains (CloogDomain *ppl, CloogDomain *polylib)
-{
- /* Cannot use cloog_domain_lazy_equal (polylib, ppl) here as this
- function is too dumb: it does not detect permutations of
- constraints. */
- if (!cloog_domain_isempty (cloog_domain_difference (ppl, polylib))
- || !cloog_domain_isempty (cloog_domain_difference (polylib, ppl)))
- {
- fprintf (stderr, "different domains ( \n ppl (\n");
- cloog_domain_print (stderr, ppl);
- fprintf (stderr, ") \n polylib (\n");
- cloog_domain_print (stderr, polylib);
- fprintf (stderr, "))\n");
- exit (1);
- }
-
- if (cloog_return_ppl_result)
- return ppl;
- else
- return polylib;
-}
-