nir: Refactor nir_src_as_* constant functions

Now that we have the nir_const_value_as_* helpers, every one of these
functions is effectively the same except for the suffix they use so we
can easily define them with a repeated macro.  This also means that
they're inline and the fact that the nir_src is being passed by-value
should no longer really hurt anything.

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
This commit is contained in:
Jason Ekstrand
2019-06-25 20:33:46 -05:00
parent ce5581e23e
commit 3acddc733f
2 changed files with 28 additions and 101 deletions

View File

@@ -1239,98 +1239,6 @@ nir_const_value_as_float(nir_const_value value, unsigned bit_size)
}
}
int64_t
nir_src_comp_as_int(nir_src src, unsigned comp)
{
assert(nir_src_is_const(src));
nir_load_const_instr *load = nir_instr_as_load_const(src.ssa->parent_instr);
assert(comp < load->def.num_components);
switch (load->def.bit_size) {
/* int1_t uses 0/-1 convention */
case 1: return -(int)load->value[comp].b;
case 8: return load->value[comp].i8;
case 16: return load->value[comp].i16;
case 32: return load->value[comp].i32;
case 64: return load->value[comp].i64;
default:
unreachable("Invalid bit size");
}
}
uint64_t
nir_src_comp_as_uint(nir_src src, unsigned comp)
{
assert(nir_src_is_const(src));
nir_load_const_instr *load = nir_instr_as_load_const(src.ssa->parent_instr);
assert(comp < load->def.num_components);
switch (load->def.bit_size) {
case 1: return load->value[comp].b;
case 8: return load->value[comp].u8;
case 16: return load->value[comp].u16;
case 32: return load->value[comp].u32;
case 64: return load->value[comp].u64;
default:
unreachable("Invalid bit size");
}
}
bool
nir_src_comp_as_bool(nir_src src, unsigned comp)
{
int64_t i = nir_src_comp_as_int(src, comp);
/* Booleans of any size use 0/-1 convention */
assert(i == 0 || i == -1);
return i;
}
double
nir_src_comp_as_float(nir_src src, unsigned comp)
{
assert(nir_src_is_const(src));
nir_load_const_instr *load = nir_instr_as_load_const(src.ssa->parent_instr);
assert(comp < load->def.num_components);
switch (load->def.bit_size) {
case 16: return _mesa_half_to_float(load->value[comp].u16);
case 32: return load->value[comp].f32;
case 64: return load->value[comp].f64;
default:
unreachable("Invalid bit size");
}
}
int64_t
nir_src_as_int(nir_src src)
{
assert(nir_src_num_components(src) == 1);
return nir_src_comp_as_int(src, 0);
}
uint64_t
nir_src_as_uint(nir_src src)
{
assert(nir_src_num_components(src) == 1);
return nir_src_comp_as_uint(src, 0);
}
bool
nir_src_as_bool(nir_src src)
{
assert(nir_src_num_components(src) == 1);
return nir_src_comp_as_bool(src, 0);
}
double
nir_src_as_float(nir_src src)
{
assert(nir_src_num_components(src) == 1);
return nir_src_comp_as_float(src, 0);
}
nir_const_value *
nir_src_as_const_value(nir_src src)
{