Home | History | Annotate | Line # | Download | only in dist
      1  1.1  mrg /*
      2  1.1  mrg  * Copyright 2010      INRIA Saclay
      3  1.1  mrg  *
      4  1.1  mrg  * Use of this software is governed by the MIT license
      5  1.1  mrg  *
      6  1.1  mrg  * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France,
      7  1.1  mrg  * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod,
      8  1.1  mrg  * 91893 Orsay, France
      9  1.1  mrg  */
     10  1.1  mrg 
     11  1.1  mrg __isl_give PW *FN(PW,move_dims)(__isl_take PW *pw,
     12  1.1  mrg 	enum isl_dim_type dst_type, unsigned dst_pos,
     13  1.1  mrg 	enum isl_dim_type src_type, unsigned src_pos, unsigned n)
     14  1.1  mrg {
     15  1.1  mrg 	int i;
     16  1.1  mrg 	isl_size n_piece;
     17  1.1  mrg 	isl_space *space;
     18  1.1  mrg 
     19  1.1  mrg 	space = FN(PW,take_space)(pw);
     20  1.1  mrg 	space = isl_space_move_dims(space, dst_type, dst_pos,
     21  1.1  mrg 				    src_type, src_pos, n);
     22  1.1  mrg 	pw = FN(PW,restore_space)(pw, space);
     23  1.1  mrg 
     24  1.1  mrg 	n_piece = FN(PW,n_piece)(pw);
     25  1.1  mrg 	if (n_piece < 0)
     26  1.1  mrg 		return FN(PW,free)(pw);
     27  1.1  mrg 
     28  1.1  mrg 	for (i = 0; i < n_piece; ++i) {
     29  1.1  mrg 		EL *el;
     30  1.1  mrg 
     31  1.1  mrg 		el = FN(PW,take_base_at)(pw, i);
     32  1.1  mrg 		el = FN(EL,move_dims)(el,
     33  1.1  mrg 					dst_type, dst_pos, src_type, src_pos, n);
     34  1.1  mrg 		pw = FN(PW,restore_base_at)(pw, i, el);
     35  1.1  mrg 	}
     36  1.1  mrg 
     37  1.1  mrg 	if (dst_type == isl_dim_in)
     38  1.1  mrg 		dst_type = isl_dim_set;
     39  1.1  mrg 	if (src_type == isl_dim_in)
     40  1.1  mrg 		src_type = isl_dim_set;
     41  1.1  mrg 
     42  1.1  mrg 	for (i = 0; i < n_piece; ++i) {
     43  1.1  mrg 		isl_set *domain;
     44  1.1  mrg 
     45  1.1  mrg 		domain = FN(PW,take_domain_at)(pw, i);
     46  1.1  mrg 		domain = isl_set_move_dims(domain, dst_type, dst_pos,
     47  1.1  mrg 						src_type, src_pos, n);
     48  1.1  mrg 		pw = FN(PW,restore_domain_at)(pw, i, domain);
     49  1.1  mrg 	}
     50  1.1  mrg 
     51  1.1  mrg 	return pw;
     52  1.1  mrg }
     53