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:
@@ -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) {
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user