1/*
2 * Copyright 2010 INRIA Saclay
3 *
4 * Use of this software is governed by the MIT license
5 *
6 * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France,
7 * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod,
8 * 91893 Orsay, France
9 */
10
11__isl_give PW *FN(PW,morph_domain)(__isl_take PW *pw,
12 __isl_take isl_morph *morph)
13{
14 int i;
15 isl_size n;
16 isl_ctx *ctx;
17 isl_space *space;
18
19 n = FN(PW,n_piece)(pw);
20 if (n < 0 || !morph)
21 goto error;
22
23 ctx = isl_space_get_ctx(space: pw->dim);
24 isl_assert(ctx, isl_space_is_domain_internal(morph->dom->dim, pw->dim),
25 goto error);
26
27 space = FN(PW,take_space)(pw);
28 space = isl_space_extend_domain_with_range(
29 domain: isl_space_copy(space: morph->ran->dim), model: space);
30 pw = FN(PW,restore_space)(pw, space);
31
32 for (i = 0; i < n; ++i) {
33 isl_set *domain;
34 EL *el;
35
36 domain = FN(PW,take_domain_at)(pw, pos: i);
37 domain = isl_morph_set(morph: isl_morph_copy(morph), set: domain);
38 pw = FN(PW,restore_domain_at)(pw, pos: i, domain);
39 el = FN(PW,take_base_at)(pw, pos: i);
40 el = FN(EL,morph_domain)(qp: el, morph: isl_morph_copy(morph));
41 pw = FN(PW,restore_base_at)(pw, pos: i, el);
42 }
43
44 isl_morph_free(morph);
45
46 return pw;
47error:
48 FN(PW,free)(pw);
49 isl_morph_free(morph);
50 return NULL;
51}
52

source code of polly/lib/External/isl/isl_pw_morph_templ.c