Bug 47908 - attribute((optimize(2))) causes ICE in m68k_sched_issue_rate
Summary: attribute((optimize(2))) causes ICE in m68k_sched_issue_rate
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: 4.6.0
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords: ice-on-valid-code
: 49856 (view as bug list)
Depends on:
Blocks:
 
Reported: 2011-02-26 20:50 UTC by Mikael Pettersson
Modified: 2011-08-22 11:58 UTC (History)
2 users (show)

See Also:
Host:
Target: m68k-linux
Build:
Known to work: 4.3.5
Known to fail: 4.4.5, 4.5.2, 4.6.0
Last reconfirmed:


Attachments
fix for gcc-4.5.3 and gcc-4.4.6 (852 bytes, patch)
2011-07-29 11:44 UTC, Mikael Pettersson
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Mikael Pettersson 2011-02-26 20:50:44 UTC
When targeting m68k-linux, if a function declaration has __attribute__((__optimize__(2))), then gcc ICEs in m68k_sched_issue_rate:

> cat O16384.c
__attribute__((__optimize__(2))) void foo (void) { }
> objdir/gcc/xgcc -Bobjdir/gcc -S O16384.c
O16384.c: In function 'foo':
O16384.c:1:1: internal compiler error: in m68k_sched_issue_rate, at config/m68k/m68k.c:6055
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.

The immediate cause is that m68k_sched_cpu indicates a non-ColdFire target, and m68k_sched_issue_rate explicitly calls gcc_unreachable in that case.  I don't know why attribute((optimize(2))) causes scheduling to be attempted, esp. since m68k_option_override seems to disable a number of scheduling-related flags.

This bug causes gcc.dg/O16384.c to fail with gcc-4.4.5/4.5.2/4.6.0 on m68k-linux.  With gcc-4.3.5 the optimize attribute is ignored and there is no ICE.

> objdir/gcc/xgcc -v
Using built-in specs.
COLLECT_GCC=objdir/gcc/xgcc
Target: m68k-unknown-linux
Configured with: /tmp/gcc-4.6-20110219/configure --target=m68k-unknown-linux --prefix=/home/mikpe/pkgs/linux-x86/cross-m68k --with-gmp=/home/mikpe/pkgs/linux-x86/gmp-4.3.2 --with-mpfr=/home/mikpe/pkgs/linux-x86/mpfr-2.4.2 --with-mpc=/home/mikpe/pkgs/linux-x86/mpc-0.8.2 --disable-plugin --disable-lto --disable-nls --enable-shared --disable-libmudflap --disable-multilib --enable-threads=posix --enable-checking=release --enable-languages=c
Thread model: posix
gcc version 4.6.0 20110219 (experimental) (GCC)
Comment 1 Mikael Pettersson 2011-02-26 21:04:19 UTC
Other test cases that fail for the same reason include gcc.dg/pr37106-1.c, gcc.dg/pr43562.c, and gcc.dg/pr43564.c.
Comment 2 Mikael Pettersson 2011-03-01 23:45:01 UTC
m68k needs to define TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE in order to override the instruction scheduling options implied by attribute((optimize(2))).
Comment 3 Alan Hourihane 2011-04-10 18:36:37 UTC
I'm also hitting this when compiling tar 1.26 with gcc 4.5.2 from Gentoo.
Comment 4 Mikael Pettersson 2011-04-11 07:36:17 UTC
I have fully tested patches to fix this for 4.4.5, 4.5.2, and 4.6.0 (presumably that one will also work for 4.7 but I haven't checked), but I've avoided posting them because the FSF hasn't yet confirmed that my copyright assignment is in place. (They've had the papers for ages.) I just pinged them again.

Meanwhile you can just comment out any offending attribute((optimize(...))).
Comment 5 Andreas Schwab 2011-07-26 20:57:11 UTC
*** Bug 49856 has been marked as a duplicate of this bug. ***
Comment 6 Thorsten Glaser 2011-07-27 23:29:13 UTC
Mikael, can you please publish your “fully tested patches to fix this for
4.4.5, 4.5.2, and 4.6.0” so we can at least include this in the packages?

If the FSF itself (i.e. gnulib) starts using those pragmas which cause
this ICE, I think we’re going to see more and more popping up; I could
convince the maintainer of libvirt to include the m68k workaround in
his package (compile with -DWRAPV -fwrapv) but that doesn’t really scale.

Without the copyright assignment (WTF is going on there, mine took about
three weeks!) it’s still distributable under GPL, just with you as author.

Thanks!
Comment 7 Mikael Pettersson 2011-07-29 11:44:34 UTC
Created attachment 24863 [details]
fix for gcc-4.5.3 and gcc-4.4.6

A patch for trunk and gcc-4.6.1 has been posted:
http://gcc.gnu.org/ml/gcc-patches/2011-07/msg02514.html

I'm attaching the corresponding patch for gcc-4.5.3 and gcc-4.4.6 here, in case anyone needs the fix for those branches.
Comment 8 Andreas Schwab 2011-07-31 15:01:02 UTC
Author: schwab
Date: Sun Jul 31 15:00:58 2011
New Revision: 176975

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=176975
Log:
Author: Mikael Pettersson <mikpe@it.uu.se>

PR target/47908
* gcc/config/m68k/m68k.c (m68k_override_options_after_change): New function.
Disable instruction scheduling for non-ColdFire targets.
(TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE): Define.

Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/config/m68k/m68k.c
Comment 9 Andreas Schwab 2011-07-31 15:09:28 UTC
Author: schwab
Date: Sun Jul 31 15:09:25 2011
New Revision: 176976

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=176976
Log:
Author: Mikael Pettersson <mikpe@it.uu.se>

PR target/47908
* gcc/config/m68k/m68k.c (m68k_override_options_after_change): New function.
Disable instruction scheduling for non-ColdFire targets.
(TARGET_OVERRIDE_OPTIONS_AFTER_CHANGE): Define.

Modified:
    branches/gcc-4_6-branch/gcc/ChangeLog
    branches/gcc-4_6-branch/gcc/config/m68k/m68k.c
Comment 10 owner 2011-08-01 13:45:23 UTC
Thank you for the additional information you have supplied regarding
this Bug report.

This is an automatically generated reply to let you know your message
has been received.

Your message is being forwarded to the package maintainers and other
interested parties for their attention; they will reply in due course.

Your message has been sent to the package maintainer(s):
 Debian GCC Maintainers <debian-gcc@lists.debian.org>

If you wish to submit further information on this problem, please
send it to 635919@bugs.debian.org.

Please do not send mail to owner@bugs.debian.org unless you wish
to report a problem with the Bug-tracking system.
Comment 11 Andreas Schwab 2011-08-22 11:58:27 UTC
Fixed for 4.6 and trunk.