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 <tarceri@itsqueeze.com>
This commit is contained in:
@@ -1455,6 +1455,16 @@ nir_intrinsic_align(const nir_intrinsic_instr *intrin)
|
||||
void nir_rewrite_image_intrinsic(nir_intrinsic_instr *instr,
|
||||
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
|
||||
*
|
||||
|
@@ -756,12 +756,8 @@ instr_can_rewrite(nir_instr *instr)
|
||||
case nir_instr_type_load_const:
|
||||
case nir_instr_type_phi:
|
||||
return true;
|
||||
case nir_instr_type_intrinsic: {
|
||||
const nir_intrinsic_info *info =
|
||||
&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_intrinsic:
|
||||
return nir_intrinsic_can_reorder(nir_instr_as_intrinsic(instr));
|
||||
case nir_instr_type_call:
|
||||
case nir_instr_type_jump:
|
||||
case nir_instr_type_ssa_undef:
|
||||
|
@@ -152,11 +152,7 @@ gcm_pin_instructions_block(nir_block *block, struct gcm_state *state)
|
||||
break;
|
||||
|
||||
case nir_instr_type_intrinsic: {
|
||||
const nir_intrinsic_info *info =
|
||||
&nir_intrinsic_infos[nir_instr_as_intrinsic(instr)->intrinsic];
|
||||
|
||||
if ((info->flags & NIR_INTRINSIC_CAN_ELIMINATE) &&
|
||||
(info->flags & NIR_INTRINSIC_CAN_REORDER)) {
|
||||
if (nir_intrinsic_can_reorder(nir_instr_as_intrinsic(instr))) {
|
||||
instr->pass_flags = 0;
|
||||
} else {
|
||||
instr->pass_flags = GCM_INSTR_PINNED;
|
||||
|
Reference in New Issue
Block a user