On Tue, Sep 16, 2014 at 12:24 PM, Thomas Preud'homme <thomas.preudho...@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.preudho...@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.preudho...@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?