Commit a1c73792 authored by Connor Abbott's avatar Connor Abbott

nir: Add a helper to determine if an intrinsic can be reordered

This is simple now, but we're going to be adding a few more conditions
to this later.
Reviewed-by: Timothy Arceri's avatarTimothy Arceri <tarceri@itsqueeze.com>
parent 6fc83c25
...@@ -1455,6 +1455,16 @@ nir_intrinsic_align(const nir_intrinsic_instr *intrin) ...@@ -1455,6 +1455,16 @@ nir_intrinsic_align(const nir_intrinsic_instr *intrin)
void nir_rewrite_image_intrinsic(nir_intrinsic_instr *instr, void nir_rewrite_image_intrinsic(nir_intrinsic_instr *instr,
nir_ssa_def *handle, bool bindless); nir_ssa_def *handle, bool bindless);
/* Determine if an intrinsic can be arbitrarily reordered and eliminated. */
static inline bool
nir_intrinsic_can_reorder(nir_intrinsic_instr *instr)
{
const nir_intrinsic_info *info =
&nir_intrinsic_infos[instr->intrinsic];
return (info->flags & NIR_INTRINSIC_CAN_ELIMINATE) &&
(info->flags & NIR_INTRINSIC_CAN_REORDER);
}
/** /**
* \group texture information * \group texture information
* *
......
...@@ -756,12 +756,8 @@ instr_can_rewrite(nir_instr *instr) ...@@ -756,12 +756,8 @@ instr_can_rewrite(nir_instr *instr)
case nir_instr_type_load_const: case nir_instr_type_load_const:
case nir_instr_type_phi: case nir_instr_type_phi:
return true; return true;
case nir_instr_type_intrinsic: { case nir_instr_type_intrinsic:
const nir_intrinsic_info *info = return nir_intrinsic_can_reorder(nir_instr_as_intrinsic(instr));
&nir_intrinsic_infos[nir_instr_as_intrinsic(instr)->intrinsic];
return (info->flags & NIR_INTRINSIC_CAN_ELIMINATE) &&
(info->flags & NIR_INTRINSIC_CAN_REORDER);
}
case nir_instr_type_call: case nir_instr_type_call:
case nir_instr_type_jump: case nir_instr_type_jump:
case nir_instr_type_ssa_undef: case nir_instr_type_ssa_undef:
......
...@@ -152,11 +152,7 @@ gcm_pin_instructions_block(nir_block *block, struct gcm_state *state) ...@@ -152,11 +152,7 @@ gcm_pin_instructions_block(nir_block *block, struct gcm_state *state)
break; break;
case nir_instr_type_intrinsic: { case nir_instr_type_intrinsic: {
const nir_intrinsic_info *info = if (nir_intrinsic_can_reorder(nir_instr_as_intrinsic(instr))) {
&nir_intrinsic_infos[nir_instr_as_intrinsic(instr)->intrinsic];
if ((info->flags & NIR_INTRINSIC_CAN_ELIMINATE) &&
(info->flags & NIR_INTRINSIC_CAN_REORDER)) {
instr->pass_flags = 0; instr->pass_flags = 0;
} else { } else {
instr->pass_flags = GCM_INSTR_PINNED; instr->pass_flags = GCM_INSTR_PINNED;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment