Polly
20.0.0git
llvm-project
polly
lib
External
isl
isl_multi_splice_templ.c
Go to the documentation of this file.
1
/*
2
* Copyright 2012 Ecole Normale Superieure
3
*
4
* Use of this software is governed by the MIT license
5
*
6
* Written by Sven Verdoolaege,
7
* Ecole Normale Superieure, 45 rue d'Ulm, 75230 Paris, France
8
*/
9
10
#include <
isl/ctx.h
>
11
#include <
isl/space.h
>
12
13
#include <
isl_multi_macro.h
>
14
15
/* Given two multi expressions, "multi1"
16
*
17
* [A1 A2] -> [B1 B2]
18
*
19
* where A2 starts at position "in_pos" and B2 starts at position "out_pos",
20
* and "multi2"
21
*
22
* [C] -> [D]
23
*
24
* return the multi expression
25
*
26
* [A1 C A2] -> [B1 D B2]
27
*
28
* We first insert input dimensions to obtain
29
*
30
* [A1 C A2] -> [B1 B2]
31
*
32
* and
33
*
34
* [A1 C A2] -> [D]
35
*
36
* and then apply range_splice.
37
*/
38
__isl_give
MULTI
(
BASE
) *
FN
(
MULTI
(
BASE
),splice)(
39
__isl_take
MULTI
(
BASE
) *multi1,
unsigned
in_pos,
unsigned
out_pos,
40
__isl_take
MULTI
(
BASE
) *multi2)
41
{
42
isl_size
n_in1;
43
isl_size
n_in2;
44
45
n_in1 =
FN
(
MULTI
(
BASE
),dim)(multi1,
isl_dim_in
);
46
n_in2 =
FN
(
MULTI
(
BASE
),dim)(multi2,
isl_dim_in
);
47
if
(n_in1 < 0 || n_in2 < 0)
48
goto
error;
49
50
if
(
FN
(
MULTI
(
BASE
),check_range)(multi1,
isl_dim_in
, in_pos, 0) < 0)
51
goto
error;
52
53
multi1 =
FN
(
MULTI
(
BASE
),
insert_dims
)(multi1,
isl_dim_in
, in_pos, n_in2);
54
multi2 =
FN
(
MULTI
(
BASE
),
insert_dims
)(multi2,
isl_dim_in
, n_in2,
55
n_in1 - in_pos);
56
multi2 =
FN
(
MULTI
(
BASE
),
insert_dims
)(multi2,
isl_dim_in
, 0, in_pos);
57
58
return
FN
(
MULTI
(
BASE
),range_splice)(multi1, out_pos, multi2);
59
error:
60
FN
(
MULTI
(
BASE
),free)(multi1);
61
FN
(
MULTI
(
BASE
),free)(multi2);
62
return
NULL;
63
}
FN
#define FN(TYPE, NAME)
Definition:
check_parse_fail_test_templ.c:15
ctx.h
__isl_take
#define __isl_take
Definition:
ctx.h:22
__isl_give
#define __isl_give
Definition:
ctx.h:19
isl_size
int isl_size
Definition:
ctx.h:96
BASE
#define BASE
Definition:
flow_cmp.c:49
insert_dims
static __isl_give isl_qpolynomial * insert_dims(__isl_take isl_qpolynomial *qp, void *user)
Definition:
isl_fold.c:412
isl_multi_macro.h
MULTI
#define MULTI(BASE)
Definition:
isl_multi_macro.h:6
space.h
isl_dim_in
@ isl_dim_in
Definition:
space_type.h:16
Generated on Wed Nov 13 2024 03:17:25 for Polly by
1.9.6