From fe2249eac504471306f8f0d2ff3f4ba759b91e28 Mon Sep 17 00:00:00 2001 From: Iago Toral Quiroga Date: Thu, 17 Feb 2022 10:25:48 +0100 Subject: [PATCH] nir: add a nir_instr_def_is_register helper MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This returns true if the instruction has a dest that is not an SSA value. Reviewed-by: Daniel Schürmann Part-of: --- src/compiler/nir/nir.c | 37 +++++++++++++++++++++++++++++++++++++ src/compiler/nir/nir.h | 1 + 2 files changed, 38 insertions(+) diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c index 7fb103f..32455e1 100644 --- a/src/compiler/nir/nir.c +++ b/src/compiler/nir/nir.c @@ -1477,6 +1477,43 @@ nir_instr_ssa_def(nir_instr *instr) } bool +nir_instr_def_is_register(nir_instr *instr) +{ + switch (instr->type) { + case nir_instr_type_alu: + return !nir_instr_as_alu(instr)->dest.dest.is_ssa; + + case nir_instr_type_deref: + return !nir_instr_as_deref(instr)->dest.is_ssa; + + case nir_instr_type_tex: + return !nir_instr_as_tex(instr)->dest.is_ssa; + + case nir_instr_type_intrinsic: { + nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr); + return nir_intrinsic_infos[intrin->intrinsic].has_dest && + !intrin->dest.is_ssa; + } + + case nir_instr_type_phi: + return !nir_instr_as_phi(instr)->dest.is_ssa; + + case nir_instr_type_parallel_copy: + unreachable("Parallel copies are unsupported by this function"); + + case nir_instr_type_load_const: + case nir_instr_type_ssa_undef: + return false; + + case nir_instr_type_call: + case nir_instr_type_jump: + return false; + } + + unreachable("Invalid instruction type"); +} + +bool nir_foreach_phi_src_leaving_block(nir_block *block, nir_foreach_src_cb cb, void *state) diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index a86c1af..1ca88c4 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -3947,6 +3947,7 @@ nir_cursor nir_instr_free_and_dce(nir_instr *instr); /** @} */ nir_ssa_def *nir_instr_ssa_def(nir_instr *instr); +bool nir_instr_def_is_register(nir_instr *instr); typedef bool (*nir_foreach_ssa_def_cb)(nir_ssa_def *def, void *state); typedef bool (*nir_foreach_dest_cb)(nir_dest *dest, void *state); -- 2.7.4