Home | History | Annotate | Download | only in spirv

Lines Matching refs:block

125       assert(b->block == NULL);
126 b->block = rzalloc(b, struct vtn_block);
127 b->block->node.type = vtn_cf_node_type_block;
128 b->block->label = w;
129 vtn_push_value(b, w[1], vtn_value_type_block)->block = b->block;
132 /* This is the first block encountered for this function. In this
133 * case, we set the start block and add it to the list of
136 b->func->start_block = b->block;
144 assert(b->block && b->block->merge == NULL);
145 b->block->merge = w;
155 assert(b->block && b->block->branch == NULL);
156 b->block->branch = w;
157 b->block = NULL;
174 vtn_value(b, block_id, vtn_value_type_block)->block;
232 vtn_get_branch_type(struct vtn_block *block,
236 if (block->switch_case) {
239 swcase->fallthrough == block->switch_case);
240 swcase->fallthrough = block->switch_case;
242 } else if (block == loop_break) {
244 } else if (block == loop_cont) {
246 } else if (block == switch_break) {
260 struct vtn_block *block = start;
261 while (block != end) {
262 if (block->merge && (*block->merge & SpvOpCodeMask) == SpvOpLoopMerge &&
263 !block->loop) {
269 loop->control = block->merge[3];
272 block->loop = loop;
275 vtn_value(b, block->merge[1], vtn_value_type_block)->block;
277 vtn_value(b, block->merge[2], vtn_value_type_block)->block;
279 /* Note: This recursive call will start with the current block as
280 * its start block. If we weren't careful, we would get here
282 * block->loop above and check for it before creating one. This
285 * handled as a regular block.
290 * possible that the merge block for the loop is the start of
293 vtn_cfg_walk_blocks(b, &loop->body, block, switch_case, NULL,
296 new_loop_break, NULL, block);
298 block = new_loop_break;
302 assert(block->node.link.next == NULL);
303 list_addtail(&block->node.link, cf_list);
305 switch (*block->branch & SpvOpCodeMask) {
308 vtn_value(b, block->branch[1], vtn_value_type_block)->block;
310 block->branch_type = vtn_get_branch_type(branch_block,
314 if (block->branch_type != vtn_branch_type_none)
317 block = branch_block;
323 block->branch_type = vtn_branch_type_return;
327 block->branch_type = vtn_branch_type_discard;
332 vtn_value(b, block->branch[2], vtn_value_type_block)->block;
334 vtn_value(b, block->branch[3], vtn_value_type_block)->block;
339 if_stmt->condition = block->branch[1];
345 if (block->merge &&
346 (*block->merge & SpvOpCodeMask) == SpvOpSelectionMerge) {
347 if_stmt->control = block->merge[2];
360 assert((*block->merge & SpvOpCodeMask) == SpvOpSelectionMerge);
362 vtn_value(b, block->merge[1], vtn_value_type_block)->block;
375 block = merge_block;
391 block = then_block;
393 block = else_block;
401 assert((*block->merge & SpvOpCodeMask) == SpvOpSelectionMerge);
403 vtn_value(b, block->merge[1], vtn_value_type_block)->block;
408 swtch->selector = block->branch[1];
415 block->branch + (block->branch[0] >> SpvWordCountShift);
417 vtn_add_case(b, swtch, break_block, block->branch[2], 0, true);
418 for (const uint32_t *w = block->branch + 3; w < branch_end; w += 2)
434 for (const uint32_t *w = block->branch + 2; w < branch_end; w += 2) {
436 vtn_value(b, *w, vtn_value_type_block)->block;
451 block
459 block = break_block;
531 vtn_value(b, w[i + 1], vtn_value_type_block)->block;
582 struct vtn_block *block = (struct vtn_block *)node;
584 const uint32_t *block_start = block->label;
585 const uint32_t *block_end = block->merge ? block->merge :
586 block->branch;
593 block->end_nop = nir_intrinsic_instr_create(b->nb.shader,
595 nir_builder_instr_insert(&b->nb, &block->end_nop->instr);
597 if ((*block->branch & SpvOpCodeMask) == SpvOpReturnValue) {
598 struct vtn_ssa_value *src = vtn_ssa_value(b, block->branch[1]);
603 if (block->branch_type != vtn_branch_type_none) {
604 vtn_emit_branch(b, block->branch_type,