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 <robdclark@chromium.org>
Reviewed-by: Jason Ekstsrand <jason@jleksrand.net>
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
Reviewed-by: Eduardo Lima Mitev <elima@igalia.com>
This commit is contained in:
Rob Clark
2019-09-25 11:59:49 -07:00
parent f30c256ec0
commit ad8167c1e0
2 changed files with 7 additions and 4 deletions

View File

@@ -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) nir_const_value_as_uint(nir_const_value value, unsigned bit_size)
{ {
switch (bit_size) { switch (bit_size) {

View File

@@ -42,7 +42,8 @@ is_pos_power_of_two(UNUSED struct hash_table *ht, nir_alu_instr *instr,
return false; return false;
for (unsigned i = 0; i < num_components; i++) { 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: { case nir_type_int: {
int64_t val = nir_src_comp_as_int(instr->src[src].src, swizzle[i]); 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)) 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; return false;
for (unsigned i = 0; i < num_components; i++) { 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: { case nir_type_int: {
int64_t val = nir_src_comp_as_int(instr->src[src].src, swizzle[i]); 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)) 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; return true;
for (unsigned i = 0; i < num_components; i++) { 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: case nir_type_float:
if (nir_src_comp_as_float(instr->src[src].src, swizzle[i]) == 0.0) if (nir_src_comp_as_float(instr->src[src].src, swizzle[i]) == 0.0)
return false; return false;