mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 06:30:10 +01:00
nir: Shift count for shift opcodes is always 32-bits
Previously both sources were unsized. This caused problems when the
thing being shifted was 64-bit but the shift count was 32-bit. The
expectation in NIR is that all unsized sources (and destination) will
ultimately have the same size.
The changes in nir_opt_algebraic.py are to prevent errors like:
Failed to parse transformation:
03:12:25 (('extract_i8', 'a', 'b'), ('ishr', ('ishl', 'a', ('imul', ('isub', 3, 'b'), 8)), 24), 'options->lower_extract_byte')
03:12:25 Traceback (most recent call last):
03:12:25 File "/home/jenkins/workspace/Leeroy_2/repos/mesa/src/compiler/nir/nir_algebraic.py", line 610, in __init__
03:12:25 xform = SearchAndReplace(xform)
03:12:25 File "/home/jenkins/workspace/Leeroy_2/repos/mesa/src/compiler/nir/nir_algebraic.py", line 495, in __init__
03:12:25 BitSizeValidator(varset).validate(self.search, self.replace)
03:12:25 File "/home/jenkins/workspace/Leeroy_2/repos/mesa/src/compiler/nir/nir_algebraic.py", line 311, in validate
03:12:25 validate_dst_class = self._validate_bit_class_up(replace)
03:12:25 File "/home/jenkins/workspace/Leeroy_2/repos/mesa/src/compiler/nir/nir_algebraic.py", line 414, in _validate_bit_class_up
03:12:25 src_class = self._validate_bit_class_up(val.sources[i])
03:12:25 File "/home/jenkins/workspace/Leeroy_2/repos/mesa/src/compiler/nir/nir_algebraic.py", line 420, in _validate_bit_class_up
03:12:25 assert src_class == src_type_bits
03:12:25 AssertionError
Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Suggested-by: Connor Abbott <cwabbott0@gmail.com>
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
Cc: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
parent
8ad74a2745
commit
fda33e09d8
2 changed files with 7 additions and 7 deletions
|
|
@ -492,9 +492,9 @@ binop("seq", tfloat32, commutative, "(src0 == src1) ? 1.0f : 0.0f") # Set on Equ
|
|||
binop("sne", tfloat32, commutative, "(src0 != src1) ? 1.0f : 0.0f") # Set on Not Equal
|
||||
|
||||
|
||||
binop("ishl", tint, "", "src0 << src1")
|
||||
binop("ishr", tint, "", "src0 >> src1")
|
||||
binop("ushr", tuint, "", "src0 >> src1")
|
||||
opcode("ishl", 0, tint, [0, 0], [tint, tuint32], "", "src0 << src1")
|
||||
opcode("ishr", 0, tint, [0, 0], [tint, tuint32], "", "src0 >> src1")
|
||||
opcode("ushr", 0, tuint, [0, 0], [tuint, tuint32], "", "src0 >> src1")
|
||||
|
||||
# bitwise logic operators
|
||||
#
|
||||
|
|
|
|||
|
|
@ -364,19 +364,19 @@ optimizations = [
|
|||
('ubfe', 'value', 'offset', 'bits')),
|
||||
'options->lower_bitfield_extract'),
|
||||
|
||||
(('extract_i8', a, b),
|
||||
(('extract_i8', a, 'b@32'),
|
||||
('ishr', ('ishl', a, ('imul', ('isub', 3, b), 8)), 24),
|
||||
'options->lower_extract_byte'),
|
||||
|
||||
(('extract_u8', a, b),
|
||||
(('extract_u8', a, 'b@32'),
|
||||
('iand', ('ushr', a, ('imul', b, 8)), 0xff),
|
||||
'options->lower_extract_byte'),
|
||||
|
||||
(('extract_i16', a, b),
|
||||
(('extract_i16', a, 'b@32'),
|
||||
('ishr', ('ishl', a, ('imul', ('isub', 1, b), 16)), 16),
|
||||
'options->lower_extract_word'),
|
||||
|
||||
(('extract_u16', a, b),
|
||||
(('extract_u16', a, 'b@32'),
|
||||
('iand', ('ushr', a, ('imul', b, 16)), 0xffff),
|
||||
'options->lower_extract_word'),
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue