ICE on gcc 4.0.0rc2, but both 3.3.5 and 3.4.3 work. $ /usr/local/gcc-4.0/bin/g++ -c -O2 -funroll-loops -march=pentium4 3.cpp 3.cpp: In function 'void f()': 3.cpp:29: error: could not find a spill register (insn:HI 95 94 96 0 (set (reg:V4HI 29 mm0 [orig:115 D.2920 ] [115]) (vec_duplicate:V4HI (truncate:HI (subreg:SI (reg:HI 111 [ B ]) 0)))) 817 {*vec_dupv4hi} (insn_list:REG_DEP_TRUE 88 (nil)) (expr_list:REG_DEAD (reg:HI 111 [ B ]) (nil))) 3.cpp:29: internal compiler error: in failed_reload, at reload1.c:4982
Created attachment 8683 [details] the test case
Confirmed.
Subject: Bug 21101 CVSROOT: /cvs/gcc Module name: gcc Changes by: rth@gcc.gnu.org 2005-04-24 07:59:23 Modified files: gcc : ChangeLog gcc/config/i386: i386-protos.h i386.c i386.h Added files: gcc/testsuite/gcc.target/i386: pr21101.c Log message: PR target/21101 * config/i386/i386.h (CANNOT_CHANGE_MODE_CLASS): Move guts to ... * config/i386/i386.c (ix86_cannot_change_mode_class): ... here. Deny modes smaller than 4 bytes. * config/i386/i386-protos.h: Update. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.8435&r2=2.8436 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/i386/i386-protos.h.diff?cvsroot=gcc&r1=1.137&r2=1.138 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/i386/i386.c.diff?cvsroot=gcc&r1=1.815&r2=1.816 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/i386/i386.h.diff?cvsroot=gcc&r1=1.429&r2=1.430 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.target/i386/pr21101.c.diff?cvsroot=gcc&r1=NONE&r2=1.1
Subject: Bug 21101 CVSROOT: /cvs/gcc Module name: gcc Branch: gcc-4_0-branch Changes by: rth@gcc.gnu.org 2005-04-24 08:02:22 Modified files: gcc : ChangeLog gcc/config/i386: i386-protos.h i386.c i386.h Added files: gcc/testsuite/gcc.target/i386: pr21101.c Log message: PR target/21101 * config/i386/i386.h (CANNOT_CHANGE_MODE_CLASS): Move guts to ... * config/i386/i386.c (ix86_cannot_change_mode_class): ... here. Deny modes smaller than 4 bytes. * config/i386/i386-protos.h: Update. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=2.7592.2.184&r2=2.7592.2.185 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/i386/i386-protos.h.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.131&r2=1.131.6.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/i386/i386.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.795.6.5&r2=1.795.6.6 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/i386/i386.h.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.421.6.1&r2=1.421.6.2 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/gcc.target/i386/pr21101.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=NONE&r2=1.1.2.1
Fixed.