[Mesa-dev] [PATCH 48.1/59] nir: Remove incorrect src_size vs dest_size assertions
Connor Abbott
cwabbott0 at gmail.com
Thu Oct 27 03:41:27 UTC 2016
On Wed, Oct 26, 2016 at 11:23 PM, Ian Romanick <idr at freedesktop.org> wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> The bit-size of the sources and the bit-size of the destinations is
> almost always the same for instructions that can have variable sizes.
> The exception is shift instructions. We can have shift instructions
> where the destination and the first source are (matching) 8-, 16-, 32-,
> or 64-bits. However, in all these cases the second source is 32-bit.
This doesn't seem right. The assertion is just checking that unsized
sources & destinations match, which is definitely what we want -- we
don't want to shift a 32-bit value into a 64-bit value, for example.
Instead, we should be marking the shift amount as explicitly sized in
nir_opcodes.py, something like:
opcode("ishr", 0, tint, [0, 0], [tint, tuint32], "", "src0 >> src1")
and similar for the others. If that doesn't work, I could take a look
if you push what you tried to fdo.
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> Cc: Connor Abbott <cwabbott0 at gmail.com>
> Cc: Jason Ekstrand <jason at jlekstrand.net>
> ---
> src/compiler/nir/nir_builder.h | 4 +---
> src/compiler/nir/nir_validate.c | 7 -------
> 2 files changed, 1 insertion(+), 10 deletions(-)
>
> diff --git a/src/compiler/nir/nir_builder.h b/src/compiler/nir/nir_builder.h
> index 040f03e..e497a83 100644
> --- a/src/compiler/nir/nir_builder.h
> +++ b/src/compiler/nir/nir_builder.h
> @@ -204,9 +204,7 @@ nir_build_alu(nir_builder *build, nir_op op, nir_ssa_def *src0,
> for (unsigned i = 0; i < op_info->num_inputs; i++) {
> unsigned src_bit_size = instr->src[i].src.ssa->bit_size;
> if (nir_alu_type_get_type_size(op_info->input_types[i]) == 0) {
> - if (bit_size)
> - assert(src_bit_size == bit_size);
> - else
> + if (bit_size == 0)
> bit_size = src_bit_size;
> } else {
> assert(src_bit_size ==
> diff --git a/src/compiler/nir/nir_validate.c b/src/compiler/nir/nir_validate.c
> index bd73f04..9045a81 100644
> --- a/src/compiler/nir/nir_validate.c
> +++ b/src/compiler/nir/nir_validate.c
> @@ -238,13 +238,6 @@ validate_alu_src(nir_alu_instr *instr, unsigned index, validate_state *state)
> if (nir_alu_type_get_type_size(src_type)) {
> /* This source has an explicit bit size */
> validate_assert(state, nir_alu_type_get_type_size(src_type) == src_bit_size);
> - } else {
> - if (!nir_alu_type_get_type_size(nir_op_infos[instr->op].output_type)) {
> - unsigned dest_bit_size =
> - instr->dest.dest.is_ssa ? instr->dest.dest.ssa.bit_size
> - : instr->dest.dest.reg.reg->bit_size;
> - validate_assert(state, dest_bit_size == src_bit_size);
> - }
> }
>
> validate_src(&src->src, state);
> --
> 2.5.5
>
More information about the mesa-dev
mailing list