On Fri, Jul 15, 2022 at 4:17 PM Takayuki 'January June' Suwa
<jjsuwa_sys3...@yahoo.co.jp> wrote:
>
> This patch enhances the effectiveness of the previously posted one:
> "xtensa: Optimize bitwise AND operation with some specific forms of 
> constants".
>
>     /* example */
>     extern void foo(int);
>     void test(int a) {
>       if ((a & (-1U << 8)) == (128 << 8))  /* 0 or one of "b4const" */
>         foo(a);
>     }
>
>     ;; before
>         .global test
>     test:
>         movi    a3, -0x100
>         movi.n  a4, 1
>         and     a3, a2, a3
>         slli    a4, a4, 15
>         bne     a3, a4, .L3
>         j.l     foo, a9
>     .L1:
>         ret.n
>
>     ;; after
>         .global test
>     test:
>         srli    a3, a2, 8
>         bnei    a3, 128, .L1
>         j.l     foo, a9
>     .L1:
>         ret.n
>
> gcc/ChangeLog:
>
>         * config/xtensa/xtensa.md
>         (*masktrue_const_pow2_minus_one, *masktrue_const_negative_pow2,
>         *masktrue_const_shifted_mask): If the immediate for bitwise AND is
>         represented as '-(1 << N)', decrease the lower bound of N from 12
>         to 1.  And the other immediate for conditional branch is now no
>         longer limited to zero, but also one of some positive integers.
>         Finally, remove the checks of some conditions, because the comparison
>         expressions that don't satisfy such checks are determined as
>         compile-time constants and thus will be optimized away before
>         RTL expansion.
> ---
>  gcc/config/xtensa/xtensa.md | 73 ++++++++++++++++++++++---------------
>  1 file changed, 44 insertions(+), 29 deletions(-)

Regtested for target=xtensa-linux-uclibc, no new regressions.
Committed to master.

-- 
Thanks.
-- Max

Reply via email to