[PATCH] Fix PR63266: Keep track of impact of sign extension in bswap

Richard Biener richard.guenther@gmail.com
Wed Sep 24 08:01:00 GMT 2014


On Tue, Sep 16, 2014 at 12:24 PM, Thomas Preud'homme
<thomas.preudhomme@arm.com> wrote:
> Hi all,
>
> The fix for PR61306 disabled bswap when a sign extension is detected. However this led to a test case regression (and potential performance regression) in case where a sign extension happens but its effect is canceled by other bit manipulation. This patch aims to fix that by having a special marker to track bytes whose value is unpredictable due to sign extension. If the final result of a bit manipulation doesn't contain any such marker then the bswap optimization can proceed.

Nice and simple idea.

Ok.

Thanks,
Richard.

> *** gcc/ChangeLog ***
>
> 2014-09-15  Thomas Preud'homme  <thomas.preudhomme@arm.com>
>
>         PR tree-optimization/63266
>         * tree-ssa-math-opts.c (struct symbolic_number): Add comment about
>         marker for unknown byte value.
>         (MARKER_MASK): New macro.
>         (MARKER_BYTE_UNKNOWN): New macro.
>         (HEAD_MARKER): New macro.
>         (do_shift_rotate): Mark bytes with unknown values due to sign
>         extension when doing an arithmetic right shift. Replace hardcoded
>         mask for marker by new MARKER_MASK macro.
>         (find_bswap_or_nop_1): Likewise and adjust ORing of two symbolic
>         numbers accordingly.
>
> *** gcc/testsuite/ChangeLog ***
>
> 2014-09-15  Thomas Preud'homme  <thomas.preudhomme@arm.com>
>
>         PR tree-optimization/63266
>         * gcc.dg/optimize-bswapsi-1.c (swap32_d): New bswap pass test.
>
>
> Testing:
>
> * Built an arm-none-eabi-gcc cross-compiler and used it to run the testsuite on QEMU emulating Cortex-M3 without any regression
> * Bootstrapped on x86_64-linux-gnu target and testsuite was run without regression
>
>
> Ok for trunk?



More information about the Gcc-patches mailing list