1 typedef int *loop_p; 2 typedef struct VEC_loop_p_base 3 { 4 unsigned num; 5 loop_p vec[1]; 6 } 7 VEC_loop_p_base; 8 9 __inline__ int VEC_loop_p_base_iterate(const VEC_loop_p_base * vec_,unsigned ix_,loop_p * ptr)10VEC_loop_p_base_iterate (const VEC_loop_p_base * vec_, unsigned ix_, 11 loop_p * ptr) 12 { 13 if (vec_ && ix_ < vec_->num) 14 { 15 *ptr = vec_->vec[ix_]; 16 return 1; 17 } 18 else 19 { 20 return 0; 21 } 22 } 23 24 typedef struct VEC_loop_p_heap 25 { 26 VEC_loop_p_base base; 27 } 28 VEC_loop_p_heap; 29 30 31 static __inline__ int am_vector_index_for_loop(VEC_loop_p_heap * loop_nest,int loop_num)32am_vector_index_for_loop (VEC_loop_p_heap * loop_nest, int loop_num) 33 { 34 int i; 35 loop_p l; 36 37 for (i = 0; 38 VEC_loop_p_base_iterate ((loop_nest) ? &(loop_nest)->base : 0, i, 39 &(l)); i++) 40 if (l == loop_num) 41 return i; 42 43 __builtin_unreachable (); 44 } 45 46 unsigned char build_access_matrix(unsigned max)47build_access_matrix (unsigned max) 48 { 49 unsigned i; 50 for (i = 0; i < max; i++) 51 { 52 if (am_vector_index_for_loop (foo (), 0)) 53 return 0; 54 } 55 } 56