From 10f4a8871ec694b9d2835d670dfc1436736c23d2 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Tue, 5 Jun 2018 19:19:39 -0700 Subject: nir: Add helper functions to get the instruction that generated a nir_src Signed-off-by: Ian Romanick Reviewed-by: Thomas Helland --- src/compiler/nir/nir.h | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index e0df95c391c..9527079a9ef 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -2520,6 +2520,29 @@ bool nir_foreach_dest(nir_instr *instr, nir_foreach_dest_cb cb, void *state); bool nir_foreach_src(nir_instr *instr, nir_foreach_src_cb cb, void *state); nir_const_value *nir_src_as_const_value(nir_src src); + +static inline struct nir_instr * +nir_src_instr(const struct nir_src *src) +{ + return src->is_ssa ? src->ssa->parent_instr : NULL; +} + +#define NIR_SRC_AS_(name, c_type, type_enum, cast_macro) \ +static inline c_type * \ +nir_src_as_ ## name (struct nir_src *src) \ +{ \ + return src->is_ssa && src->ssa->parent_instr->type == type_enum \ + ? cast_macro(src->ssa->parent_instr) : NULL; \ +} \ +static inline const c_type * \ +nir_src_as_ ## name ## _const(const struct nir_src *src) \ +{ \ + return src->is_ssa && src->ssa->parent_instr->type == type_enum \ + ? cast_macro(src->ssa->parent_instr) : NULL; \ +} + +NIR_SRC_AS_(alu_instr, nir_alu_instr, nir_instr_type_alu, nir_instr_as_alu) + bool nir_src_is_dynamically_uniform(nir_src src); bool nir_srcs_equal(nir_src src1, nir_src src2); void nir_instr_rewrite_src(nir_instr *instr, nir_src *src, nir_src new_src); -- cgit v1.2.3