nir: propagate bitsize information in nir_search

When we replace an expresion we have to compute bitsize information for the
replacement. We do this in two passes to validate that bitsize information
is consistent and correct: first we propagate bitsize from child nodes to
parent, then we do it the other way around, starting from the original's
instruction destination bitsize.

v2 (Iago):
- Always use nir_type_bool32 instead of nir_type_bool when generating
  algebraic optimizations. Before we used nir_type_bool32 with constants
  and nir_type_bool with variables.
- Fix bool comparisons in nir_search.c to account for bitsized types.

v3 (Sam):
- Unpack the double constant value as unsigned long long (8 bytes) in
nir_algrebraic.py.

v4 (Sam):
- Use helpers to get type size and base type from nir_alu_type.

Signed-off-by: Iago Toral Quiroga <itoral@igalia.com>
Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
This commit is contained in:
Connor Abbott
2015-08-14 11:45:30 -07:00
committed by Samuel Iglesias Gonsálvez
parent 3124ce699b
commit 58fe7837b8
3 changed files with 248 additions and 28 deletions

View File

@@ -71,10 +71,12 @@ typedef struct {
typedef struct {
nir_search_value value;
nir_alu_type type;
union {
uint32_t u;
int32_t i;
float f;
uint64_t u;
int64_t i;
double d;
} data;
} nir_search_constant;