}
static bool
-agx_lower_front_face(struct nir_builder *b, nir_instr *instr, UNUSED void *data)
+agx_lower_front_face(struct nir_builder *b, nir_intrinsic_instr *intr,
+ UNUSED void *data)
{
- if (instr->type != nir_instr_type_intrinsic)
- return false;
-
- nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr);
if (intr->intrinsic != nir_intrinsic_load_front_face)
return false;
NIR_PASS_V(nir, nir_lower_load_const_to_scalar);
NIR_PASS_V(nir, nir_lower_flrp, 16 | 32 | 64, false);
NIR_PASS_V(nir, agx_lower_sincos);
- NIR_PASS_V(nir, nir_shader_instructions_pass, agx_lower_front_face,
+ NIR_PASS_V(nir, nir_shader_intrinsics_pass, agx_lower_front_face,
nir_metadata_block_index | nir_metadata_dominance, NULL);
NIR_PASS_V(nir, nir_lower_frag_coord_to_pixel_coord);
}
static bool
-pass(struct nir_builder *b, nir_instr *instr, void *data)
+pass(struct nir_builder *b, nir_intrinsic_instr *intr, void *data)
{
- if (instr->type != nir_instr_type_intrinsic)
- return false;
-
- nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr);
if (intr->intrinsic != nir_intrinsic_store_output)
return false;
return false;
*done = true;
- b->cursor = nir_before_instr(instr);
+ b->cursor = nir_before_instr(&intr->instr);
insert_z_write(b);
return true;
}
return false;
bool done = false;
- nir_shader_instructions_pass(
+ nir_shader_intrinsics_pass(
s, pass, nir_metadata_block_index | nir_metadata_dominance, &done);
/* If there's no render targets written, just put the write at the end */
/* Local memory instructions require 16-bit offsets, so we add conversions. */
static bool
-pass(struct nir_builder *b, nir_instr *instr, UNUSED void *data)
+pass(struct nir_builder *b, nir_intrinsic_instr *intr, UNUSED void *data)
{
- if (instr->type != nir_instr_type_intrinsic)
- return false;
-
- nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr);
switch (intr->intrinsic) {
case nir_intrinsic_load_shared:
case nir_intrinsic_store_shared:
if (nir_src_bit_size(*offset) == 16)
return false;
- b->cursor = nir_before_instr(instr);
+ b->cursor = nir_before_instr(&intr->instr);
nir_src_rewrite(offset, nir_u2u16(b, nir_ssa_for_src(b, *offset, 1)));
return true;
}
bool
agx_nir_lower_shared_bitsize(nir_shader *shader)
{
- return nir_shader_instructions_pass(
+ return nir_shader_intrinsics_pass(
shader, pass, nir_metadata_block_index | nir_metadata_dominance, NULL);
}
}
static bool
-opt_remove_respills_instr(struct nir_builder *b, nir_instr *instr, void *data)
+opt_remove_respills_instr(struct nir_builder *b,
+ nir_intrinsic_instr *store_intrin, void *data)
{
- if (instr->type != nir_instr_type_intrinsic)
- return false;
-
- nir_intrinsic_instr *store_intrin = nir_instr_as_intrinsic(instr);
if (store_intrin->intrinsic != nir_intrinsic_store_stack)
return false;
static bool
nir_opt_remove_respills(nir_shader *shader)
{
- return nir_shader_instructions_pass(shader,
- opt_remove_respills_instr,
+ return nir_shader_intrinsics_pass(shader, opt_remove_respills_instr,
nir_metadata_block_index |
nir_metadata_dominance,
NULL);
}
static bool
-split_stack_components_instr(struct nir_builder *b, nir_instr *instr, void *data)
+split_stack_components_instr(struct nir_builder *b,
+ nir_intrinsic_instr *intrin, void *data)
{
- if (instr->type != nir_instr_type_intrinsic)
- return false;
-
- nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
if (intrin->intrinsic != nir_intrinsic_load_stack &&
intrin->intrinsic != nir_intrinsic_store_stack)
return false;
intrin->src[0].ssa->num_components == 1)
return false;
- b->cursor = nir_before_instr(instr);
+ b->cursor = nir_before_instr(&intrin->instr);
unsigned align_mul = nir_intrinsic_align_mul(intrin);
unsigned align_offset = nir_intrinsic_align_offset(intrin);
}
}
- nir_instr_remove(instr);
+ nir_instr_remove(&intrin->instr);
return true;
}
static bool
nir_split_stack_components(nir_shader *shader)
{
- return nir_shader_instructions_pass(shader,
- split_stack_components_instr,
+ return nir_shader_intrinsics_pass(shader, split_stack_components_instr,
nir_metadata_block_index |
nir_metadata_dominance,
NULL);
#define RQ_NEW_INDEX_NONE 0xFFFFFFFF
static bool
-count_ranges(struct nir_builder *b, nir_instr *instr, void *data)
+count_ranges(struct nir_builder *b, nir_intrinsic_instr *intrinsic,
+ void *data)
{
- if (instr->type != nir_instr_type_intrinsic)
- return false;
-
- nir_intrinsic_instr *intrinsic = nir_instr_as_intrinsic(instr);
if (intrinsic->intrinsic == nir_intrinsic_rq_initialize)
(*(uint32_t *)data)++;
}
uint32_t range_count = 0;
- nir_shader_instructions_pass(shader, count_ranges, nir_metadata_all, &range_count);
+ nir_shader_intrinsics_pass(shader, count_ranges, nir_metadata_all,
+ &range_count);
struct rq_range *ranges = rzalloc_array(mem_ctx, struct rq_range, range_count);
}
static bool
-lower_xfb_intrinsics(struct nir_builder *b, nir_instr *instr, void *data)
+lower_xfb_intrinsics(struct nir_builder *b, nir_intrinsic_instr *intr,
+ void *data)
{
- if (instr->type != nir_instr_type_intrinsic)
- return false;
-
- nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr);
- b->cursor = nir_before_instr(instr);
+ b->cursor = nir_before_instr(&intr->instr);
struct agx_xfb_key *key = data;
NIR_PASS_V(nir, insert_overflow_check, key);
NIR_PASS_V(nir, nir_shader_intrinsics_pass, lower_xfb,
nir_metadata_block_index | nir_metadata_dominance, key);
- NIR_PASS_V(nir, nir_shader_instructions_pass, lower_xfb_intrinsics,
+ NIR_PASS_V(nir, nir_shader_intrinsics_pass, lower_xfb_intrinsics,
nir_metadata_block_index | nir_metadata_dominance, key);
/* Lowering XFB creates piles of dead code. Eliminate now so we don't
static bool
brw_nir_adjust_task_payload_offsets_instr(struct nir_builder *b,
- nir_instr *instr, void *data)
+ nir_intrinsic_instr *intrin,
+ void *data)
{
- if (instr->type != nir_instr_type_intrinsic)
- return false;
-
- nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
switch (intrin->intrinsic) {
case nir_intrinsic_store_task_payload:
case nir_intrinsic_load_task_payload: {
static bool
brw_nir_adjust_task_payload_offsets(nir_shader *nir)
{
- return nir_shader_instructions_pass(nir,
+ return nir_shader_intrinsics_pass(nir,
brw_nir_adjust_task_payload_offsets_instr,
nir_metadata_block_index |
nir_metadata_dominance,
}
static bool
-brw_nir_zero_inputs_instr(struct nir_builder *b, nir_instr *instr, void *data)
+brw_nir_zero_inputs_instr(struct nir_builder *b, nir_intrinsic_instr *intrin,
+ void *data)
{
- if (instr->type != nir_instr_type_intrinsic)
- return false;
-
- nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
if (intrin->intrinsic != nir_intrinsic_load_deref)
return false;
if (!(BITFIELD64_BIT(var->data.location) & zero_inputs))
return false;
- b->cursor = nir_before_instr(instr);
+ b->cursor = nir_before_instr(&intrin->instr);
nir_def *zero = nir_imm_zero(b, 1, 32);
nir_def_rewrite_uses(&intrin->def, zero);
- nir_instr_remove(instr);
+ nir_instr_remove(&intrin->instr);
return true;
}
static bool
brw_nir_zero_inputs(nir_shader *shader, uint64_t *zero_inputs)
{
- return nir_shader_instructions_pass(shader, brw_nir_zero_inputs_instr,
- nir_metadata_block_index | nir_metadata_dominance, zero_inputs);
+ return nir_shader_intrinsics_pass(shader, brw_nir_zero_inputs_instr,
+ nir_metadata_block_index | nir_metadata_dominance,
+ zero_inputs);
}
/* Code for Wa_18019110168 may have created input/output variables beyond
}
static bool
-lower_shader_call_instr(struct nir_builder *b, nir_instr *instr, void *data)
+lower_shader_call_instr(struct nir_builder *b, nir_intrinsic_instr *call,
+ void *data)
{
- if (instr->type != nir_instr_type_intrinsic)
- return false;
-
- /* Leave nir_intrinsic_rt_resume to be lowered by
- * brw_nir_lower_rt_intrinsics()
- */
- nir_intrinsic_instr *call = nir_instr_as_intrinsic(instr);
if (call->intrinsic != nir_intrinsic_rt_execute_callable)
return false;
- b->cursor = nir_instr_remove(instr);
+ b->cursor = nir_instr_remove(&call->instr);
store_resume_addr(b, call);
lower_shader_trace_ray_instr,
nir_metadata_none,
key);
- bool b = nir_shader_instructions_pass(shader,
- lower_shader_call_instr,
+ bool b = nir_shader_intrinsics_pass(shader, lower_shader_call_instr,
nir_metadata_block_index |
nir_metadata_dominance,
NULL);
}
static bool
-lower_ubo_array_one_to_static(struct nir_builder *b, nir_instr *inst,
+lower_ubo_array_one_to_static(struct nir_builder *b,
+ nir_intrinsic_instr *intrin,
void *cb_data)
{
- if (inst->type != nir_instr_type_intrinsic)
- return false;
-
- nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(inst);
-
if (intrin->intrinsic != nir_intrinsic_load_vulkan_descriptor)
return false;
bool
dxil_nir_lower_ubo_array_one_to_static(nir_shader *s)
{
- bool progress = nir_shader_instructions_pass(
- s, lower_ubo_array_one_to_static, nir_metadata_none, NULL);
+ bool progress = nir_shader_intrinsics_pass(s,
+ lower_ubo_array_one_to_static,
+ nir_metadata_none, NULL);
return progress;
}
}
static bool
-lower_kill(struct nir_builder *builder, nir_instr *instr, void *_cb_data)
+lower_kill(struct nir_builder *builder, nir_intrinsic_instr *intr,
+ void *_cb_data)
{
- if (instr->type != nir_instr_type_intrinsic)
- return false;
-
- nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr);
-
if (intr->intrinsic != nir_intrinsic_discard &&
intr->intrinsic != nir_intrinsic_terminate &&
intr->intrinsic != nir_intrinsic_discard_if &&
intr->intrinsic != nir_intrinsic_terminate_if)
return false;
- builder->cursor = nir_instr_remove(instr);
+ builder->cursor = nir_instr_remove(&intr->instr);
if (intr->intrinsic == nir_intrinsic_discard ||
intr->intrinsic == nir_intrinsic_terminate) {
nir_demote(builder);
state.active_block = NULL;
nir_shader_instructions_pass(s, remove_after_discard, nir_metadata_none,
&state);
- return nir_shader_instructions_pass(s, lower_kill, nir_metadata_none,
+ return nir_shader_intrinsics_pass(s, lower_kill, nir_metadata_none,
NULL);
}
static bool
-update_writes(struct nir_builder *b, nir_instr *instr, void *_state)
+update_writes(struct nir_builder *b, nir_intrinsic_instr *intr, void *_state)
{
- if (instr->type != nir_instr_type_intrinsic)
- return false;
- nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr);
if (intr->intrinsic != nir_intrinsic_store_output)
return false;
if (src->num_components == 4 && write_mask == 0xf)
return false;
- b->cursor = nir_before_instr(instr);
+ b->cursor = nir_before_instr(&intr->instr);
unsigned first_comp = nir_intrinsic_component(intr);
nir_def *channels[4] = { NULL, NULL, NULL, NULL };
assert(first_comp + src->num_components <= ARRAY_SIZE(channels));
if ((s->info.outputs_written & VARYING_BIT_POS) == 0)
return false;
- return nir_shader_instructions_pass(s, update_writes,
+ return nir_shader_intrinsics_pass(s, update_writes,
nir_metadata_block_index | nir_metadata_dominance,
NULL);
}
}
static bool
-discard_psiz_access(struct nir_builder *builder, nir_instr *instr,
+discard_psiz_access(struct nir_builder *builder, nir_intrinsic_instr *intrin,
void *cb_data)
{
- if (instr->type != nir_instr_type_intrinsic)
- return false;
-
- nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
-
if (intrin->intrinsic != nir_intrinsic_store_deref &&
intrin->intrinsic != nir_intrinsic_load_deref)
return false;
var->data.location != VARYING_SLOT_PSIZ)
return false;
- builder->cursor = nir_before_instr(instr);
+ builder->cursor = nir_before_instr(&intrin->instr);
if (intrin->intrinsic == nir_intrinsic_load_deref)
nir_def_rewrite_uses(&intrin->def, nir_imm_float(builder, 1.0));
- nir_instr_remove(instr);
+ nir_instr_remove(&intrin->instr);
return true;
}
if (!psiz)
return false;
- if (!nir_shader_instructions_pass(shader, discard_psiz_access,
+ if (!nir_shader_intrinsics_pass(shader, discard_psiz_access,
nir_metadata_block_index |
nir_metadata_dominance |
nir_metadata_loop_analysis,
}
static bool
-adjust_resource_index_binding(struct nir_builder *builder, nir_instr *instr,
+adjust_resource_index_binding(struct nir_builder *builder,
+ nir_intrinsic_instr *intrin,
void *cb_data)
{
- if (instr->type != nir_instr_type_intrinsic)
- return false;
-
- nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
-
if (intrin->intrinsic != nir_intrinsic_vulkan_resource_index)
return false;
}
return ret;
} else {
- return nir_shader_instructions_pass(shader, adjust_resource_index_binding,
+ return nir_shader_intrinsics_pass(shader, adjust_resource_index_binding,
nir_metadata_all, (void *)layout);
}
}
* compiler. The DDK inserts these moves, so we will as well. */
static bool
-bifrost_nir_lower_blend_components(struct nir_builder *b, nir_instr *instr,
- void *data)
+bifrost_nir_lower_blend_components(struct nir_builder *b,
+ nir_intrinsic_instr *intr, void *data)
{
- if (instr->type != nir_instr_type_intrinsic)
- return false;
-
- nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr);
-
if (intr->intrinsic != nir_intrinsic_store_output)
return false;
NIR_PASS(progress, nir, nir_opt_dce);
if (nir->info.stage == MESA_SHADER_FRAGMENT) {
- NIR_PASS_V(nir, nir_shader_instructions_pass,
+ NIR_PASS_V(nir, nir_shader_intrinsics_pass,
bifrost_nir_lower_blend_components,
nir_metadata_block_index | nir_metadata_dominance, NULL);
}
* it's a pretty trivial difference */
static bool
-pan_lower_sample_pos_impl(struct nir_builder *b, nir_instr *instr,
+pan_lower_sample_pos_impl(struct nir_builder *b, nir_intrinsic_instr *intr,
UNUSED void *data)
{
- if (instr->type != nir_instr_type_intrinsic)
- return false;
-
- nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr);
if (intr->intrinsic != nir_intrinsic_load_sample_pos)
return false;
- b->cursor = nir_before_instr(instr);
+ b->cursor = nir_before_instr(&intr->instr);
/* Elements are 4 bytes */
nir_def *addr =
if (shader->info.stage != MESA_SHADER_FRAGMENT)
return false;
- return nir_shader_instructions_pass(
+ return nir_shader_intrinsics_pass(
shader, pan_lower_sample_pos_impl,
nir_metadata_block_index | nir_metadata_dominance, NULL);
}