Bug 20634 - code fails to compile/code generation issue with -funit-at-a-time
Summary: code fails to compile/code generation issue with -funit-at-a-time
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: 4.0.0
: P2 normal
Target Milestone: 4.5.0
Assignee: Not yet assigned to anyone
URL:
Keywords: ice-on-valid-code, ra
Depends on:
Blocks:
 
Reported: 2005-03-25 05:45 UTC by Mark Loeser
Modified: 2011-11-07 19:13 UTC (History)
2 users (show)

See Also:
Host:
Target: i686-pc-linux-gnu
Build:
Known to work: 3.4.6, 4.5.0
Known to fail: 4.0.4, 4.1.2, 4.2.0
Last reconfirmed: 2005-09-24 16:43:48


Attachments
Preprocessed file for above failure (18.61 KB, application/octet-stream)
2005-03-25 05:48 UTC, Mark Loeser
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Mark Loeser 2005-03-25 05:45:27 UTC
The package I'm trying to compile with the latest snapshot of GCC is sudo.  It
compiles with -O2, but when running it, it does not work properly.  Adding
-fno-unit-at-a-time fixes the runtime issue.  Also the program works fine if
compiled with -O1.  So I took all of the -O2 options and put them on the command
line along with -O1.  The program fails to compile now with the following error:

i686-pc-linux-gnu-gcc -c -I. -I.  -O1 -pipe -fthread-jumps -fcrossjumping
-foptimize-sibling-calls -fcse-follow-jumps  -fcse-skip-blocks -fgcse  -fgcse-lm
-fexpensive-optimizations -fstrength-reduce -frerun-cse-after-loop 
-frerun-loop-opt -fcaller-saves -fforce-mem -fpeephole2 -fschedule-insns 
-fschedule-insns2 -fsched-interblock -fsched-spec -fregmove -fstrict-aliasing
-fdelete-null-pointer-checks -freorder-blocks  -freorder-functions
-funit-at-a-time -falign-functions  -falign-jumps -falign-loops -falign-labels
-ftree-pre -D_PATH_SUDOERS=\"/etc/sudoers\"
-D_PATH_SUDOERS_TMP=\"/etc/sudoers.tmp\" -DSUDOERS_UID=0 -DSUDOERS_GID=0
-DSUDOERS_MODE=0440  sudo.tab.c
parse.yacc: In function 'append':
parse.yacc:1132: error: unable to find a register to spill in class 'CREG'
parse.yacc:1132: error: this is the insn:
(insn:HI 18 5 23 0 (parallel [
            (set (reg:SI 0 ax [70])
                (unspec:SI [
                        (mem:BLK (reg/v/f:SI 64 [ src ]) [0 A8])
                        (reg:QI 74)
                        (const_int 1 [0x1])
                        (reg:SI 73)
                    ] 20))
            (use (reg:SI 19 dirflag))
            (clobber (reg/f:SI 5 di [orig:72 src ] [72]))
            (clobber (reg:CC 17 flags))
        ]) 463 {*strlenqi_1} (insn_list:REG_DEP_TRUE 16 (insn_list:REG_DEP_TRUE
14 (insn_list:REG_DEP_TRUE 4 (insn_list:REG_DEP_TRUE 17 (nil)))))
    (expr_list:REG_DEAD (reg:SI 19 dirflag)
        (expr_list:REG_UNUSED (reg:CC 17 flags)
            (expr_list:REG_UNUSED (reg/f:SI 5 di [orig:72 src ] [72])
                (expr_list:REG_EQUAL (unspec:SI [
                            (mem:BLK (reg/v/f:SI 64 [ src ]) [0 A8])
                            (reg:QI 74)
                            (const_int 1 [0x1])
                            (reg:SI 73)
                        ] 20)
                    (nil))))))
parse.yacc:1132: confused by earlier errors, bailing out

Taking -funit-at-a-time out allows it to compile fine.

nest sudo-1.6.7p5 # gcc -v
Using built-in specs.
Target: i686-pc-linux-gnu
Configured with:
/mnt/ftp/temp/portage/gcc-4.0.0_beta20050319/work/gcc-4.0-20050319/configure
--enable-version-specific-runtime-libs --prefix=/usr
--bindir=/usr/i686-pc-linux-gnu/gcc-bin/4.0.0-beta20050319
--includedir=/usr/lib/gcc/i686-pc-linux-gnu/4.0.0-beta20050319/include
--datadir=/usr/share/gcc-data/i686-pc-linux-gnu/4.0.0-beta20050319
--mandir=/usr/share/gcc-data/i686-pc-linux-gnu/4.0.0-beta20050319/man
--infodir=/usr/share/gcc-data/i686-pc-linux-gnu/4.0.0-beta20050319/info
--with-gxx-include-dir=/usr/lib/gcc/i686-pc-linux-gnu/4.0.0-beta20050319/include/g++-v4
--host=i686-pc-linux-gnu --disable-altivec --enable-nls
--without-included-gettext --with-system-zlib --disable-checking
--disable-werror --disable-libunwind-exceptions --disable-multilib
--disable-libgcj --enable-languages=c,c++ --enable-shared --enable-threads=posix
--enable-__cxa_atexit --enable-clocale=gnu
Thread model: posix
gcc version 4.0.0-beta20050319 (Gentoo Linux 4.0.0_beta20050319)
Comment 1 Mark Loeser 2005-03-25 05:48:11 UTC
Created attachment 8454 [details]
Preprocessed file for above failure
Comment 2 Andrew Pinski 2005-03-25 14:03:47 UTC
I want to say this is the normal -fschedule-insns problem on i686-pc-linux-gnu which is known to 
cause problems.  There is another bug about the same issue.
Comment 3 Andrew Pinski 2005-03-26 18:22:32 UTC
For the first problem with code generation issue, does -fno-strict-aliasing helps?

For the second problem with respect with the ICE, well only -O1 -fschedule-insns -funit-at-a-time is 
needed to reproduce the problem.
Comment 4 Mark Loeser 2005-03-26 21:09:38 UTC
(In reply to comment #3)
> For the first problem with code generation issue, does -fno-strict-aliasing helps?

No, same problem still.  Only adding -fno-unit-at-a-time fixes the issue.  I
should add that it works fine with gcc 3.4 and -funit-at-a-time.

> For the second problem with respect with the ICE, well only -O1
-fschedule-insns -funit-at-a-time is 
> needed to reproduce the problem.

Yes, I get the ICE with only these options.
Comment 5 Serge Belyshev 2005-04-14 18:02:55 UTC
reduced testcase, compile with '-O1 -fschedule-insns -funit-at-a-time',
fails with 3.3-hammer, 3.4, 4.0 and mainline, introduced in 2003:
: Search converges between 2003-07-11-trunk (#291) and 2003-07-12-trunk (#292).

------------------------------------------------------------------------------
unsigned int strlen (const char *);

static void append (char *p0, char **pp, int *j, char *p1)
{
  int k = strlen (p0);

  if (p1 && pp)
    k += strlen (p1);
  
  if (*j + k)
    while (*j);
}

int yyparse (int foo)
{
  if (foo)
    append (0, 0, 0, 0);
  else 
    append (0, 0, 0, 0);
}
------------------------------------------------------------------------------
Comment 6 Serge Belyshev 2011-11-07 19:13:57 UTC
Fixed in gcc 4.5 by r151348:

    2009-09-02  Vladimir Makarov  <vmakarov@redhat.com>
    
        * doc/invoke.texi (-fsched-pressure): Document it.
        (-fsched-reg-pressure-heuristic): Remove it.
        ...