I get an ICE when I compile at -O1 (and only at -O1). With the original source only gcc403 ICEs but not gcc401. With the reduced source gcc401 ICEs too.
Michael Cieslinski g++403 -O1 -S mb.ii -v Using built-in specs. Target: x86_64-unknown-linux-gnu Configured with: ../gcc-4.0.3/configure --prefix=/usr/local/gcc403 --program-suffix=403 --with-arch=opteron --enable-languages=c,c++ Thread model: posix gcc version 4.0.3 /usr/local/gcc403/libexec/gcc/x86_64-unknown-linux-gnu/4.0.3/cc1plus -fpreprocessed mb.ii -quiet -dumpbase mb.ii -march=opteron -auxbase mb -O1 -version -o mb.s GNU C++ version 4.0.3 (x86_64-unknown-linux-gnu) compiled by GNU C version 4.0.3. GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 mb.ii: In function 'long int __vector__ foo()': mb.ii:29: error: unrecognizable insn: (insn 109 30 96 3 (set (reg:V2SI 0 ax) (const_vector:V2SI [ (const_int -1 [0xffffffffffffffff]) (const_int -1 [0xffffffffffffffff]) ])) -1 (nil) (nil)) mb.ii:29: internal compiler error: in extract_insn, at recog.c:2020 mb.ii: typedef long V2 __attribute__ ((__vector_size__(16))); typedef int V4 __attribute__ ((__vector_size__(16))); int bar(V2); __inline V2 baz(int a, int b) { return (V4) {a, b}; } V2 foo () { V2* G; int* H; V2 A; for (int E; E<10; E++) { G++; for (int F; F<E; F++) { *G = baz(0x0ffffffff, 0x0ffffffff); *H = bar(__builtin_ia32_psrldqi128(A, 8)) | bar(__builtin_ia32_psrldqi128(A, 96)); } } } -- Summary: ICE with SSE code in extract_insn, at recog.c:2020 Product: gcc Version: 4.0.3 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: micis at gmx dot de GCC build triplet: x86_64-unknown-linux-gnu GCC host triplet: x86_64-unknown-linux-gnu GCC target triplet: x86_64-unknown-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28421