This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug optimization/13862] New: ICE while optimizing asm (Regression)
- From: "gcc-bugzilla at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 26 Jan 2004 04:28:37 -0000
- Subject: [Bug optimization/13862] New: ICE while optimizing asm (Regression)
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
The following code, extracted from fame version 0.9, triggers an ice when
optimization is enabled. Since gcc 3.3.1 groks this code without a problem it
seems that this is a regression.
Environment:
System: Linux kiste 2.4.21-166-default #1 Thu Dec 18 18:23:14 UTC 2003 i686 i686 i386 GNU/Linux
Architecture: i686
SuSE 9.0
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: ../gcc/configure --enable-threads=posix --enable-languages=c,c++,f77,objc --enable-__cxa_atexit --enable-libstdcxx-debug
How-To-Repeat:
crash.c:
typedef struct _fame_syntax_t_ {
} fame_syntax_t;
typedef struct _fame_bitbuffer_t_
{
unsigned char * base;
unsigned char * data;
unsigned long shift;
} fame_bitbuffer_t;
#define fast_bitbuffer_write(data, shift, c, l) \
{ \
int d; \
\
asm("add %1, %%ecx\n" /* ecx = shift + length */ \
"shrd %%cl, %2, %3\n" /* adjust code to fit in */ \
"shr %%cl, %2\n" /* adjust code to fit in */ \
"mov %%ecx, %1\n" /* shift += length */ \
"bswap %2\n" /* reverse byte order of code */ \
"shr $5, %%ecx\n" /* get dword increment */ \
"or %2, (%0)\n" /* put first 32 bits */ \
"bswap %3\n" /* reverse byte order of code */ \
"lea (%0, %%ecx, 4), %0\n" /* data += (ecx>32) */ \
"andl $31, %1\n" /* mask shift */ \
"orl %3, (%0)\n" /* put last 32 bits */ \
: "=r"(data), "=r"(shift), "=a"(d), "=d"(d), "=c"(d) \
: "0"(data), "1"(shift), "2"((unsigned long) c), "3"(0), "c"((unsigned long) l) \
: "memory"); \
}
#define bitbuffer_write(bb, c, l) fast_bitbuffer_write((bb)->data, (bb)->shift, c, l)
typedef enum { frame_type_I,
frame_type_P } frame_type_t;
typedef struct _fame_syntax_mpeg1_t_ {
fame_bitbuffer_t buffer;
frame_type_t frame_type;
} fame_syntax_mpeg1_t;
#define FAME_SYNTAX_MPEG1(x) ((fame_syntax_mpeg1_t *) x)
void mpeg1_start_picture(fame_syntax_t *syntax)
{
fame_syntax_mpeg1_t *syntax_mpeg1 = FAME_SYNTAX_MPEG1(syntax);
bitbuffer_write(&syntax_mpeg1->buffer, 0xFFFF, 16);
switch(syntax_mpeg1->frame_type) {
case frame_type_I:
bitbuffer_write(&syntax_mpeg1->buffer, 0, 1);
break;
case frame_type_P:
bitbuffer_write(&syntax_mpeg1->buffer, 0, 1);
break;
}
}
gcc 3.4
gcc -v -O -c crash.c -save-temps
Reading specs from /usr/local/lib/gcc/i686-pc-linux-gnu/3.5.0/specs
Configured with: ../gcc/configure --enable-threads=posix --enable-languages=c,c++,f77,objc --enable-__cxa_atexit --enable-libstdcxx-debug
Thread model: posix
gcc version 3.5.0 20040125 (experimental)
/usr/local/libexec/gcc/i686-pc-linux-gnu/3.5.0/cc1 -E -quiet -v crash.c -mtune=pentiumpro -O -o crash.i
ignoring nonexistent directory "NONE/include"
ignoring nonexistent directory "/usr/local/lib/gcc/i686-pc-linux-gnu/3.5.0/../../../../i686-pc-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/local/lib/gcc/i686-pc-linux-gnu/3.5.0/include
/usr/include
End of search list.
/usr/local/libexec/gcc/i686-pc-linux-gnu/3.5.0/cc1 -fpreprocessed crash.i -quiet -dumpbase crash.c -mtune=pentiumpro -auxbase crash -O -version -o crash.s
GNU C version 3.5.0 20040125 (experimental) (i686-pc-linux-gnu)
compiled by GNU C version 3.5.0 20040125 (experimental).
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
crash.c: In function `mpeg1_start_picture':
crash.c:59: internal compiler error: in cselib_record_set, at cselib.c:1196
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
gcc 3.3.1
/usr/bin/gcc -v -O -c crash.c -save-temps
Reading specs from /usr/lib/gcc-lib/i586-suse-linux/3.3.1/specs
Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib --enable-languages=c,c++,f77,objc,java,ada --disable-checking --enable-libgcj --with-gxx-include-dir=/usr/include/g++ --with-slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit i586-suse-linux
Thread model: posix
gcc version 3.3.1 (SuSE Linux)
/usr/lib/gcc-lib/i586-suse-linux/3.3.1/cc1 -E -quiet -v -D__GNUC__=3 -D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=1 crash.c -O crash.i
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/lib/gcc-lib/i586-suse-linux/3.3.1/include
/usr/i586-suse-linux/include
/usr/include
End of search list.
/usr/lib/gcc-lib/i586-suse-linux/3.3.1/cc1 -fpreprocessed crash.i -quiet -dumpbase crash.c -auxbase crash -O -version -o crash.s
GNU C version 3.3.1 (SuSE Linux) (i586-suse-linux)
compiled by GNU C version 3.3.1 (SuSE Linux).
GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=64274
/usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../../i586-suse-linux/bin/as -V -Qy -o crash.o crash.s
GNU assembler version 2.14.90.0.5 (i586-suse-linux) using BFD version 2.14.90.0.5 20030722 (SuSE Linux)
--
Summary: ICE while optimizing asm (Regression)
Product: gcc
Version: 3.5.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: poschmid at lbl dot gov
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: i686-pc-linux-gnu
GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13862