Lines Matching refs:block
37 init_block(nir_block *block, nir_function_impl *impl)
39 if (block == nir_start_block(impl))
40 block->imm_dom = block;
42 block->imm_dom = NULL;
43 block->num_dom_children = 0;
46 block->dom_pre_index = UINT32_MAX;
47 block->dom_post_index = 0;
49 _mesa_set_clear(block->dom_frontier, NULL);
73 calc_dominance(nir_block *block)
76 set_foreach(block->predecessors, entry) {
87 if (block->imm_dom != new_idom) {
88 block->imm_dom = new_idom;
96 calc_dom_frontier(nir_block *block)
98 if (block->predecessors->entries > 1) {
99 set_foreach(block->predecessors, entry) {
106 while (runner != block->imm_dom) {
107 _mesa_set_add(runner->dom_frontier, block);
132 nir_foreach_block_unstructured(block, impl) {
133 if (block->imm_dom)
134 block->imm_dom->num_dom_children++;
137 nir_foreach_block_unstructured(block, impl) {
138 block->dom_children = ralloc_array(mem_ctx, nir_block *,
139 block->num_dom_children);
140 block->num_dom_children = 0;
143 nir_foreach_block_unstructured(block, impl) {
144 if (block->imm_dom) {
145 block->imm_dom->dom_children[block->imm_dom->num_dom_children++]
146 = block;
152 calc_dfs_indicies(nir_block *block, uint32_t *index)
157 block->dom_pre_index = (*index)++;
159 for (unsigned i = 0; i < block->num_dom_children; i++)
160 calc_dfs_indicies(block->dom_children[i], index);
162 block->dom_post_index = (*index)++;
174 nir_foreach_block_unstructured(block, impl) {
175 init_block(block, impl);
181 nir_foreach_block_unstructured(block, impl) {
182 if (block != nir_start_block(impl))
183 progress |= calc_dominance(block);
187 nir_foreach_block_unstructured(block, impl) {
188 calc_dom_frontier(block);
217 * is null or unreachable, the other block is returned or NULL if it's
242 * "The block A dominates the block B if every path from the start block
243 * to block B passes through A."
245 * This means, in particular, that any unreachable block is dominated by every
246 * other block and an unreachable block does not dominate anything except
247 * another unreachable block.
258 /* If a block is unreachable, then nir_block::dom_pre_index == UINT32_MAX
267 nir_block_is_unreachable(nir_block *block)
269 assert(nir_cf_node_get_function(&block->cf_node)->valid_metadata &
271 assert(nir_cf_node_get_function(&block->cf_node)->valid_metadata &
274 /* Unreachable blocks have no dominator. The only reachable block with no
275 * dominator is the start block which has index 0.
277 return block->index > 0 && block->imm_dom == NULL;
285 nir_foreach_block_unstructured(block, impl) {
286 if (block->imm_dom)
287 fprintf(fp, "\t%u -> %u\n", block->imm_dom->index, block->index);
305 nir_foreach_block_unstructured(block, impl) {
306 fprintf(fp, "DF(%u) = {", block->index);
307 set_foreach(block->dom_frontier, entry) {
329 nir_foreach_block_unstructured(block, impl) {
330 if (block->successors[0])
331 fprintf(fp, "\t%u -> %u\n", block->index, block->successors[0]->index);
332 if (block->successors[1])
333 fprintf(fp, "\t%u -> %u\n", block->index, block->successors[1]->index);