From ad8167c1e0b8c522f3df774006f1824bcba8bf11 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Wed, 25 Sep 2019 11:59:49 -0700 Subject: [PATCH] nir/search: fix the PoT helpers Otherwise, if the base type is (for example) uint32, we would incorrectly think that PoT optimizations could not apply. Signed-off-by: Rob Clark Reviewed-by: Jason Ekstsrand Reviewed-by: Kristian H. Kristensen Reviewed-by: Eduardo Lima Mitev --- src/compiler/nir/nir.h | 2 +- src/compiler/nir/nir_search_helpers.h | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h index 43c9049..cb572ce 100644 --- a/src/compiler/nir/nir.h +++ b/src/compiler/nir/nir.h @@ -212,7 +212,7 @@ nir_const_value_as_int(nir_const_value value, unsigned bit_size) } } -static inline int64_t +static inline uint64_t nir_const_value_as_uint(nir_const_value value, unsigned bit_size) { switch (bit_size) { diff --git a/src/compiler/nir/nir_search_helpers.h b/src/compiler/nir/nir_search_helpers.h index 90ba897..4849aef 100644 --- a/src/compiler/nir/nir_search_helpers.h +++ b/src/compiler/nir/nir_search_helpers.h @@ -42,7 +42,8 @@ is_pos_power_of_two(UNUSED struct hash_table *ht, nir_alu_instr *instr, return false; for (unsigned i = 0; i < num_components; i++) { - switch (nir_op_infos[instr->op].input_types[src]) { + nir_alu_type type = nir_op_infos[instr->op].input_types[src]; + switch (nir_alu_type_get_base_type(type)) { case nir_type_int: { int64_t val = nir_src_comp_as_int(instr->src[src].src, swizzle[i]); if (val <= 0 || !util_is_power_of_two_or_zero64(val)) @@ -73,7 +74,8 @@ is_neg_power_of_two(UNUSED struct hash_table *ht, nir_alu_instr *instr, return false; for (unsigned i = 0; i < num_components; i++) { - switch (nir_op_infos[instr->op].input_types[src]) { + nir_alu_type type = nir_op_infos[instr->op].input_types[src]; + switch (nir_alu_type_get_base_type(type)) { case nir_type_int: { int64_t val = nir_src_comp_as_int(instr->src[src].src, swizzle[i]); if (val >= 0 || !util_is_power_of_two_or_zero64(-val)) @@ -153,7 +155,8 @@ is_not_const_zero(UNUSED struct hash_table *ht, nir_alu_instr *instr, return true; for (unsigned i = 0; i < num_components; i++) { - switch (nir_op_infos[instr->op].input_types[src]) { + nir_alu_type type = nir_op_infos[instr->op].input_types[src]; + switch (nir_alu_type_get_base_type(type)) { case nir_type_float: if (nir_src_comp_as_float(instr->src[src].src, swizzle[i]) == 0.0) return false; -- 2.7.4