nir_opt_algebraic: Don't shrink 64-bit bitwise ops if pack_split is going to be lowered
Otherwise this can cause optimizations to fight resulting in infinite
optimization loops with opt_algebraic, constant_folding, and copy_prop.
Fixes: 368be872 ("nir/algebraic: shrink 64-bit bitwise operations with 0/-1 constant half")
Reviewed-by: Emma Anholt <emma@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23192>
This commit is contained in:
parent
44b960a645
commit
6c62eaf22d
1 changed files with 20 additions and 10 deletions
|
|
@ -1317,36 +1317,46 @@ optimizations.extend([
|
|||
|
||||
(('iand@64', a, '#b(is_lower_half_zero)'),
|
||||
('pack_64_2x32_split', 0,
|
||||
('iand', ('unpack_64_2x32_split_y', a), ('unpack_64_2x32_split_y', b)))),
|
||||
('iand', ('unpack_64_2x32_split_y', a), ('unpack_64_2x32_split_y', b))),
|
||||
'!options->lower_pack_64_2x32_split'),
|
||||
(('iand@64', a, '#b(is_upper_half_zero)'),
|
||||
('pack_64_2x32_split', ('iand', ('unpack_64_2x32_split_x', a), ('unpack_64_2x32_split_x', b)),
|
||||
0)),
|
||||
0),
|
||||
'!options->lower_pack_64_2x32_split'),
|
||||
(('iand@64', a, '#b(is_lower_half_negative_one)'),
|
||||
('pack_64_2x32_split', ('unpack_64_2x32_split_x', a),
|
||||
('iand', ('unpack_64_2x32_split_y', a), ('unpack_64_2x32_split_y', b)))),
|
||||
('iand', ('unpack_64_2x32_split_y', a), ('unpack_64_2x32_split_y', b))),
|
||||
'!options->lower_pack_64_2x32_split'),
|
||||
(('iand@64', a, '#b(is_upper_half_negative_one)'),
|
||||
('pack_64_2x32_split', ('iand', ('unpack_64_2x32_split_x', a), ('unpack_64_2x32_split_x', b)),
|
||||
('unpack_64_2x32_split_y', a))),
|
||||
('unpack_64_2x32_split_y', a)),
|
||||
'!options->lower_pack_64_2x32_split'),
|
||||
|
||||
(('ior@64', a, '#b(is_lower_half_zero)'),
|
||||
('pack_64_2x32_split', ('unpack_64_2x32_split_x', a),
|
||||
('ior', ('unpack_64_2x32_split_y', a), ('unpack_64_2x32_split_y', b)))),
|
||||
('ior', ('unpack_64_2x32_split_y', a), ('unpack_64_2x32_split_y', b))),
|
||||
'!options->lower_pack_64_2x32_split'),
|
||||
(('ior@64', a, '#b(is_upper_half_zero)'),
|
||||
('pack_64_2x32_split', ('ior', ('unpack_64_2x32_split_x', a), ('unpack_64_2x32_split_x', b)),
|
||||
('unpack_64_2x32_split_y', a))),
|
||||
('unpack_64_2x32_split_y', a)),
|
||||
'!options->lower_pack_64_2x32_split'),
|
||||
(('ior@64', a, '#b(is_lower_half_negative_one)'),
|
||||
('pack_64_2x32_split', -1,
|
||||
('ior', ('unpack_64_2x32_split_y', a), ('unpack_64_2x32_split_y', b)))),
|
||||
('ior', ('unpack_64_2x32_split_y', a), ('unpack_64_2x32_split_y', b))),
|
||||
'!options->lower_pack_64_2x32_split'),
|
||||
(('ior@64', a, '#b(is_upper_half_negative_one)'),
|
||||
('pack_64_2x32_split', ('ior', ('unpack_64_2x32_split_x', a), ('unpack_64_2x32_split_x', b)),
|
||||
-1)),
|
||||
-1),
|
||||
'!options->lower_pack_64_2x32_split'),
|
||||
|
||||
(('ixor@64', a, '#b(is_lower_half_zero)'),
|
||||
('pack_64_2x32_split', ('unpack_64_2x32_split_x', a),
|
||||
('ixor', ('unpack_64_2x32_split_y', a), ('unpack_64_2x32_split_y', b)))),
|
||||
('ixor', ('unpack_64_2x32_split_y', a), ('unpack_64_2x32_split_y', b))),
|
||||
'!options->lower_pack_64_2x32_split'),
|
||||
(('ixor@64', a, '#b(is_upper_half_zero)'),
|
||||
('pack_64_2x32_split', ('ixor', ('unpack_64_2x32_split_x', a), ('unpack_64_2x32_split_x', b)),
|
||||
('unpack_64_2x32_split_y', a))),
|
||||
('unpack_64_2x32_split_y', a)),
|
||||
'!options->lower_pack_64_2x32_split'),
|
||||
|
||||
# DeMorgan's Laws
|
||||
(('iand', ('inot', a), ('inot', b)), ('inot', ('ior', a, b))),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue