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; } }