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).