Home | History | Annotate | Download | only in nir

Lines Matching refs:state

43                                      struct lower_returns_state *state);
46 predicate_following(nir_cf_node *node, struct lower_returns_state *state)
48 nir_builder *b = &state->builder;
51 if (nir_cursors_equal(b->cursor, nir_after_cf_list(state->cf_list)))
54 assert(state->return_flag);
57 if_stmt->condition = nir_src_for_ssa(nir_load_var(b, state->return_flag));
60 if (state->loop) {
65 nir_jump_instr_create(state->builder.shader, nir_jump_break);
73 nir_after_cf_list(state->cf_list));
80 lower_returns_in_loop(nir_loop *loop, struct lower_returns_state *state)
82 nir_loop *parent = state->loop;
83 state->loop = loop;
84 bool progress = lower_returns_in_cf_list(&loop->body, state);
85 state->loop = parent;
93 predicate_following(&loop->cf_node, state);
94 state->has_predicated_return = true;
101 lower_returns_in_if(nir_if *if_stmt, struct lower_returns_state *state)
105 bool has_predicated_return = state->has_predicated_return;
106 state->has_predicated_return = false;
108 then_progress = lower_returns_in_cf_list(&if_stmt->then_list, state);
109 else_progress = lower_returns_in_cf_list(&if_stmt->else_list, state);
122 if (progress && !state->loop) {
123 if (state->has_predicated_return) {
124 predicate_following(&if_stmt->cf_node, state);
131 nir_after_cf_list(state->cf_list));
144 state->has_predicated_return = progress || has_predicated_return;
150 lower_returns_in_block(nir_block *block, struct lower_returns_state *state)
153 block != nir_start_block(state->builder.impl)) {
157 nir_after_cf_list(state->cf_list));
183 nir_builder *b = &state->builder;
186 if (state->return_flag == NULL) {
187 state->return_flag =
192 nir_store_var(b, state->return_flag, nir_imm_int(b, NIR_FALSE), 1);
196 nir_store_var(b, state->return_flag, nir_imm_int(b, NIR_TRUE), 1);
198 if (state->loop) {
211 struct lower_returns_state *state)
215 struct exec_list *parent_list = state->cf_list;
216 state->cf_list = cf_list;
226 if (lower_returns_in_block(nir_cf_node_as_block(node), state))
231 if (lower_returns_in_if(nir_cf_node_as_if(node), state))
236 if (lower_returns_in_loop(nir_cf_node_as_loop(node), state))
245 state->cf_list = parent_list;
253 struct lower_returns_state state;
255 state.cf_list = &impl->body;
256 state.loop = NULL;
257 state.return_flag = NULL;
258 state.has_predicated_return = false;
259 nir_builder_init(&state.builder, impl);
261 bool progress = lower_returns_in_cf_list(&impl->body, &state);