public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/57052] New: missed optimization with rotate and mask
@ 2013-04-24  0:00 amodra at gmail dot com
  2013-04-24  9:13 ` [Bug target/57052] " amodra at gmail dot com
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: amodra at gmail dot com @ 2013-04-24  0:00 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57052

             Bug #: 57052
           Summary: missed optimization with rotate and mask
    Classification: Unclassified
           Product: gcc
           Version: 4.8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: amodra@gmail.com


/* -m32 -O -S */
int
foo (unsigned int x, int r)
{
  return ((x << r) | (x >> (32 - r))) & 0xff;
}

results in:

foo:
    rlwnm 3,3,4,0xffffffff
    rlwinm 3,3,0,24,31
    blr

Compiling the same code with -m32 -O -S -mlittle gives the properly optimized
result of:

foo:
    rlwnm 3,3,4,0xff
    blr

This is because many of the rs6000.md rotate/shift and mask patterns use
subregs with wrong byte offsets.  eg. rotlsi3_internal7, the insn that ought to
match here, has (subreg:QI (rotate:SI ...) 0).  The 0 selects the most
significant byte when BYTES_BIG_ENDIAN and the least significant when
!BYTES_BIG_ENDIAN.

Fortunately combine doesn't seem to generate subregs for high parts, so
changing the testcase mask to 0xff000000 doesn't result in wrong code.

Annoyingly, rotlsi3_internal4 would match here too if combine_simplify_rtx()
didn't simplify (set (reg:SI) (and:SI () 255)) to use subregs.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug target/57052] missed optimization with rotate and mask
  2013-04-24  0:00 [Bug target/57052] New: missed optimization with rotate and mask amodra at gmail dot com
@ 2013-04-24  9:13 ` amodra at gmail dot com
  2013-04-25  7:57 ` amodra at gmail dot com
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: amodra at gmail dot com @ 2013-04-24  9:13 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57052

Alan Modra <amodra at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Target|                            |powerpc-linux
             Status|UNCONFIRMED                 |ASSIGNED
                URL|                            |http://gcc.gnu.org/ml/gcc-p
                   |                            |atches/2013-04/msg01370.htm
                   |                            |l
           Keywords|                            |missed-optimization
   Last reconfirmed|                            |2013-04-24
         AssignedTo|unassigned at gcc dot       |amodra at gmail dot com
                   |gnu.org                     |
     Ever Confirmed|0                           |1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug target/57052] missed optimization with rotate and mask
  2013-04-24  0:00 [Bug target/57052] New: missed optimization with rotate and mask amodra at gmail dot com
  2013-04-24  9:13 ` [Bug target/57052] " amodra at gmail dot com
@ 2013-04-25  7:57 ` amodra at gmail dot com
  2014-03-14 19:36 ` meissner at gcc dot gnu.org
  2014-04-04 15:11 ` wschmidt at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: amodra at gmail dot com @ 2013-04-25  7:57 UTC (permalink / raw)
  To: gcc-bugs


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57052

Alan Modra <amodra at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|                            |FIXED

--- Comment #1 from Alan Modra <amodra at gmail dot com> 2013-04-25 07:57:39 UTC ---
http://gcc.gnu.org/ml/gcc-cvs/2013-04/msg00982.html


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug target/57052] missed optimization with rotate and mask
  2013-04-24  0:00 [Bug target/57052] New: missed optimization with rotate and mask amodra at gmail dot com
  2013-04-24  9:13 ` [Bug target/57052] " amodra at gmail dot com
  2013-04-25  7:57 ` amodra at gmail dot com
@ 2014-03-14 19:36 ` meissner at gcc dot gnu.org
  2014-04-04 15:11 ` wschmidt at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: meissner at gcc dot gnu.org @ 2014-03-14 19:36 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57052

--- Comment #2 from Michael Meissner <meissner at gcc dot gnu.org> ---
Author: meissner
Date: Fri Mar 14 19:36:18 2014
New Revision: 208574

URL: http://gcc.gnu.org/viewcvs?rev=208574&root=gcc&view=rev
Log:
2014-03-12  Michael Meissner  <meissner@linux.vnet.ibm.com>

    Back port from trunk
    2013-04-25  Alan Modra  <amodra@gmail.com>

    PR target/57052
    * config/rs6000/rs6000.md (rotlsi3_internal7): Rename to
    rotlsi3_internal7le and condition on !BYTES_BIG_ENDIAN.
    (rotlsi3_internal8be): New BYTES_BIG_ENDIAN insn.
    Repeat for many other rotate/shift and mask patterns using subregs.
    Name lshiftrt insns.
    (ashrdisi3_noppc64): Rename to ashrdisi3_noppc64be and condition
    on WORDS_BIG_ENDIAN.

    2013-06-07  Alan Modra  <amodra@gmail.com>

    * config/rs6000/rs6000.c (rs6000_option_override_internal): Don't
    override user -mfp-in-toc.
    (offsettable_ok_by_alignment): Consider just the current access
    rather than the whole object, unless BLKmode.  Handle
    CONSTANT_POOL_ADDRESS_P constants that lack a decl too.
    (use_toc_relative_ref): Allow CONSTANT_POOL_ADDRESS_P constants
    for -mcmodel=medium.
    * config/rs6000/linux64.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Don't
    override user -mfp-in-toc or -msum-in-toc.  Default to
    -mno-fp-in-toc for -mcmodel=medium.

    2013-06-18  Alan Modra  <amodra@gmail.com>

    * config/rs6000/rs6000.h (enum data_align): New.
    (LOCAL_ALIGNMENT, DATA_ALIGNMENT): Use rs6000_data_alignment.
    (DATA_ABI_ALIGNMENT): Define.
    (CONSTANT_ALIGNMENT): Correct comment.
    * config/rs6000/rs6000-protos.h (rs6000_data_alignment): Declare.
    * config/rs6000/rs6000.c (rs6000_data_alignment): New function.

    2013-07-11  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

    * config/rs6000/rs6000.md (""*tls_gd_low<TLSmode:tls_abi_suffix>"):
    Require GOT register as additional operand in UNSPEC.
    ("*tls_ld_low<TLSmode:tls_abi_suffix>"): Likewise.
    ("*tls_got_dtprel_low<TLSmode:tls_abi_suffix>"): Likewise.
    ("*tls_got_tprel_low<TLSmode:tls_abi_suffix>"): Likewise.
    ("*tls_gd<TLSmode:tls_abi_suffix>"): Update splitter.
    ("*tls_ld<TLSmode:tls_abi_suffix>"): Likewise.
    ("tls_got_dtprel_<TLSmode:tls_abi_suffix>"): Likewise.
    ("tls_got_tprel_<TLSmode:tls_abi_suffix>"): Likewise.

    2014-01-23  Pat Haugen  <pthaugen@us.ibm.com>

    * config/rs6000/rs6000.c (rs6000_option_override_internal): Don't
    force flag_ira_loop_pressure if set via command line.

    2014-02-06  Alan Modra  <amodra@gmail.com>

    PR target/60032
    * config/rs6000/rs6000.c (rs6000_secondary_memory_needed_mode): Only
    change SDmode to DDmode when lra_in_progress.


Modified:
    branches/ibm/gcc-4_8-branch/gcc/ChangeLog.ibm
    branches/ibm/gcc-4_8-branch/gcc/config/rs6000/linux64.h
    branches/ibm/gcc-4_8-branch/gcc/config/rs6000/rs6000-protos.h
    branches/ibm/gcc-4_8-branch/gcc/config/rs6000/rs6000.c
    branches/ibm/gcc-4_8-branch/gcc/config/rs6000/rs6000.h
    branches/ibm/gcc-4_8-branch/gcc/config/rs6000/rs6000.md


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug target/57052] missed optimization with rotate and mask
  2013-04-24  0:00 [Bug target/57052] New: missed optimization with rotate and mask amodra at gmail dot com
                   ` (2 preceding siblings ...)
  2014-03-14 19:36 ` meissner at gcc dot gnu.org
@ 2014-04-04 15:11 ` wschmidt at gcc dot gnu.org
  3 siblings, 0 replies; 5+ messages in thread
From: wschmidt at gcc dot gnu.org @ 2014-04-04 15:11 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57052

--- Comment #3 from Bill Schmidt <wschmidt at gcc dot gnu.org> ---
Author: wschmidt
Date: Fri Apr  4 15:10:24 2014
New Revision: 209114

URL: http://gcc.gnu.org/viewcvs?rev=209114&root=gcc&view=rev
Log:
2014-04-04  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

    Back port from trunk
    2013-04-25  Alan Modra  <amodra@gmail.com>

    PR target/57052
    * config/rs6000/rs6000.md (rotlsi3_internal7): Rename to
    rotlsi3_internal7le and condition on !BYTES_BIG_ENDIAN.
    (rotlsi3_internal8be): New BYTES_BIG_ENDIAN insn.
    Repeat for many other rotate/shift and mask patterns using subregs.
    Name lshiftrt insns.
    (ashrdisi3_noppc64): Rename to ashrdisi3_noppc64be and condition
    on WORDS_BIG_ENDIAN.

    2013-06-07  Alan Modra  <amodra@gmail.com>

    * config/rs6000/rs6000.c (rs6000_option_override_internal): Don't
    override user -mfp-in-toc.
    (offsettable_ok_by_alignment): Consider just the current access
    rather than the whole object, unless BLKmode.  Handle
    CONSTANT_POOL_ADDRESS_P constants that lack a decl too.
    (use_toc_relative_ref): Allow CONSTANT_POOL_ADDRESS_P constants
    for -mcmodel=medium.
    * config/rs6000/linux64.h (SUBSUBTARGET_OVERRIDE_OPTIONS): Don't
    override user -mfp-in-toc or -msum-in-toc.  Default to
    -mno-fp-in-toc for -mcmodel=medium.

    2013-06-18  Alan Modra  <amodra@gmail.com>

    * config/rs6000/rs6000.h (enum data_align): New.
    (LOCAL_ALIGNMENT, DATA_ALIGNMENT): Use rs6000_data_alignment.
    (DATA_ABI_ALIGNMENT): Define.
    (CONSTANT_ALIGNMENT): Correct comment.
    * config/rs6000/rs6000-protos.h (rs6000_data_alignment): Declare.
    * config/rs6000/rs6000.c (rs6000_data_alignment): New function.

    2013-07-11  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

    * config/rs6000/rs6000.md (""*tls_gd_low<TLSmode:tls_abi_suffix>"):
    Require GOT register as additional operand in UNSPEC.
    ("*tls_ld_low<TLSmode:tls_abi_suffix>"): Likewise.
    ("*tls_got_dtprel_low<TLSmode:tls_abi_suffix>"): Likewise.
    ("*tls_got_tprel_low<TLSmode:tls_abi_suffix>"): Likewise.
    ("*tls_gd<TLSmode:tls_abi_suffix>"): Update splitter.
    ("*tls_ld<TLSmode:tls_abi_suffix>"): Likewise.
    ("tls_got_dtprel_<TLSmode:tls_abi_suffix>"): Likewise.
    ("tls_got_tprel_<TLSmode:tls_abi_suffix>"): Likewise.

    2014-01-23  Pat Haugen  <pthaugen@us.ibm.com>

    * config/rs6000/rs6000.c (rs6000_option_override_internal): Don't
    force flag_ira_loop_pressure if set via command line.

    2014-02-06  Alan Modra  <amodra@gmail.com>

    PR target/60032
    * config/rs6000/rs6000.c (rs6000_secondary_memory_needed_mode): Only
    change SDmode to DDmode when lra_in_progress.


Modified:
    branches/gcc-4_8-branch/gcc/ChangeLog
    branches/gcc-4_8-branch/gcc/config/rs6000/linux64.h
    branches/gcc-4_8-branch/gcc/config/rs6000/rs6000-protos.h
    branches/gcc-4_8-branch/gcc/config/rs6000/rs6000.c
    branches/gcc-4_8-branch/gcc/config/rs6000/rs6000.h
    branches/gcc-4_8-branch/gcc/config/rs6000/rs6000.md


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2014-04-04 15:11 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-04-24  0:00 [Bug target/57052] New: missed optimization with rotate and mask amodra at gmail dot com
2013-04-24  9:13 ` [Bug target/57052] " amodra at gmail dot com
2013-04-25  7:57 ` amodra at gmail dot com
2014-03-14 19:36 ` meissner at gcc dot gnu.org
2014-04-04 15:11 ` wschmidt at gcc dot gnu.org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).