nir_builder *b = &state->builder;
b->cursor = nir_after_cf_node_and_phis(node);
- if (nir_cursors_equal(b->cursor, nir_after_cf_list(state->cf_list)))
+ if (!state->loop && nir_cursors_equal(b->cursor, nir_after_cf_list(state->cf_list)))
return; /* Nothing to predicate */
assert(state->return_flag);
/* Initialize the variable to 0 */
b->cursor = nir_before_cf_list(&b->impl->body);
- nir_store_var(b, state->return_flag, nir_imm_int(b, NIR_FALSE), 1);
+ nir_store_var(b, state->return_flag, nir_imm_false(b), 1);
}
b->cursor = nir_after_block(block);
- nir_store_var(b, state->return_flag, nir_imm_int(b, NIR_TRUE), 1);
+ nir_store_var(b, state->return_flag, nir_imm_true(b), 1);
if (state->loop) {
/* We're in a loop; we need to break out of it. */
if (progress) {
nir_metadata_preserve(impl, nir_metadata_none);
nir_repair_ssa_impl(impl);
+ } else {
+ nir_metadata_preserve(impl, nir_metadata_all);
}
return progress;