From b009467b810ce42a97f80c15cbb5647781a5f807 Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Wed, 21 Jul 2021 17:03:01 +0100 Subject: [PATCH] nir/algebraic: add optimizations for imul(a, INT_MIN) is_pos_power_of_two would catch this, but nir_op_imul has signed sources, so is_neg_power_of_two catches it instead, which creates a useless nir_op_ineg. fossil-db (Sienna Cichlid): Totals from 1014 (0.68% of 150170) affected shaders: CodeSize: 3592296 -> 3592288 (-0.00%); split: -0.00%, +0.00% Instrs: 671211 -> 670426 (-0.12%) Latency: 5268917 -> 5268479 (-0.01%); split: -0.01%, +0.00% InvThroughput: 2187349 -> 2187343 (-0.00%); split: -0.00%, +0.00% VClause: 8634 -> 8636 (+0.02%) Copies: 97585 -> 97604 (+0.02%) Signed-off-by: Rhys Perry Reviewed-by: Ian Romanick Part-of: --- src/compiler/nir/nir_opt_algebraic.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py index bbc89b6..225bb3e 100644 --- a/src/compiler/nir/nir_opt_algebraic.py +++ b/src/compiler/nir/nir_opt_algebraic.py @@ -95,6 +95,10 @@ def intBitsToFloat(i): optimizations = [ (('imul', a, '#b(is_pos_power_of_two)'), ('ishl', a, ('find_lsb', b)), '!options->lower_bitops'), + (('imul', 'a@8', 0x80), ('ishl', a, 7), '!options->lower_bitops'), + (('imul', 'a@16', 0x8000), ('ishl', a, 15), '!options->lower_bitops'), + (('imul', 'a@32', 0x80000000), ('ishl', a, 31), '!options->lower_bitops'), + (('imul', 'a@64', 0x8000000000000000), ('ishl', a, 63), '!options->lower_bitops'), (('imul', a, '#b(is_neg_power_of_two)'), ('ineg', ('ishl', a, ('find_lsb', ('iabs', b)))), '!options->lower_bitops'), (('ishl', a, '#b'), ('imul', a, ('ishl', 1, b)), 'options->lower_bitops'), -- 2.7.4