2 * Copyright 2012 Ecole Normale Superieure
4 * Use of this software is governed by the MIT license
6 * Written by Sven Verdoolaege,
7 * Ecole Normale Superieure, 45 rue d'Ulm, 75230 Paris, France
11 #include <isl/space.h>
13 #include <isl_multi_macro.h>
15 /* Given two multi expressions, "multi1"
19 * where A2 starts at position "in_pos" and B2 starts at position "out_pos",
24 * return the multi expression
26 * [A1 C A2] -> [B1 D B2]
28 * We first insert input dimensions to obtain
30 * [A1 C A2] -> [B1 B2]
36 * and then apply range_splice.
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
)
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)
50 if (FN(MULTI(BASE
),check_range
)(multi1
, isl_dim_in
, in_pos
, 0) < 0)
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
,
56 multi2
= FN(MULTI(BASE
),insert_dims
)(multi2
, isl_dim_in
, 0, in_pos
);
58 return FN(MULTI(BASE
),range_splice
)(multi1
, out_pos
, multi2
);
60 FN(MULTI(BASE
),free
)(multi1
);
61 FN(MULTI(BASE
),free
)(multi2
);