| typedef int *loop_p; |
| typedef struct VEC_loop_p_base |
| { |
| unsigned num; |
| loop_p vec[1]; |
| } |
| VEC_loop_p_base; |
| |
| __inline__ int |
| VEC_loop_p_base_iterate (const VEC_loop_p_base * vec_, unsigned ix_, |
| loop_p * ptr) |
| { |
| if (vec_ && ix_ < vec_->num) |
| { |
| *ptr = vec_->vec[ix_]; |
| return 1; |
| } |
| else |
| { |
| return 0; |
| } |
| } |
| |
| typedef struct VEC_loop_p_heap |
| { |
| VEC_loop_p_base base; |
| } |
| VEC_loop_p_heap; |
| |
| |
| static __inline__ int |
| am_vector_index_for_loop (VEC_loop_p_heap * loop_nest, int loop_num) |
| { |
| int i; |
| loop_p l; |
| |
| for (i = 0; |
| VEC_loop_p_base_iterate ((loop_nest) ? &(loop_nest)->base : 0, i, |
| &(l)); i++) |
| if (l == loop_num) |
| return i; |
| |
| __builtin_unreachable (); |
| } |
| |
| unsigned char |
| build_access_matrix (unsigned max) |
| { |
| unsigned i; |
| for (i = 0; i < max; i++) |
| { |
| if (am_vector_index_for_loop (foo (), 0)) |
| return 0; |
| } |
| } |