http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51882
Bug #: 51882 Summary: ICE: in extract_insn, at recog.c:2109 (unrecognizable insn) when building Mesa on ARM Classification: Unclassified Product: gcc Version: 4.6.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassig...@gcc.gnu.org ReportedBy: thierry.red...@avionic-design.de Created attachment 26351 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=26351 Preprocessed source. I can reproduce this ICE reliably by running the following commands in a git checkout of Mesa (git://anongit.freedesktop.org/mesa/mesa.git): $ cd src/mesa $ ${CROSS_COMPILE}gcc -c -o swrast/s_span.o swrast/s_span.c -DFEATURE_GL=1 -DFEATURE_ES1=1 -DFEATURE_ES2=1 -D_GNU_SOURCE -DPTHREADS -DHAVE_POSIX_MEMALIGN -DUSE_XCB -DUSE_XSHM -DHAVE_MINCORE -DHAVE_LIBUDEV -I../../include -I../../src/glsl -I../../src/mesa -I../../src/mapi -I../../src/gallium/include -I../../src/gallium/auxiliary -mlittle-endian -mapcs -mabi=aapcs-linux -mno-thumb-interwork -g -O2 -marm -march=armv7-a -mtune=cortex-a9 -Uarm -mfpu=vfpv3-d16 -mfloat-abi=softfp -Wall -Wextra -Wmissing-prototypes -std=c99 -ffast-math -fno-strict-aliasing -fno-builtin-memcmp -fPIC -fvisibility=hidden -save-temps -v Where the CROSS_COMPILE variable points to the ARM cross-compiler. I've tested with a variety of versions and can reproduce this with the CodeSourcery 2009q3 (gcc 4.4.1), 2010q1 (gcc 4.4.1), 2010.09 (gcc 4.5.1), 2011.03 (gcc 4.5.2) and 2011.09 (gcc 4.6.1) toolchains as well as with a custom toolchain based on gcc 4.6.2 and gcc-4.6-20120113. However, the issue is no longer present in the latest 4.7 snapshot (tested with a custom toolchain based on gcc-4.7-20120114). I was also not able to reproduce the ICE with an older CodeSourcery toolchain (2009q1, gcc 4.3.3). The attached preprocessed source file is from the custom gcc-4.6-20120113 toolchain, with the following output when running the above command: --- Using built-in specs. COLLECT_GCC=/home/thierry.reding/src/pbs-experimental.git/toolchains/arm-unknown-linux-gnueabi/usr/bin/arm-unknown-linux-gnueabi-gcc-4.6.3 COLLECT_LTO_WRAPPER=/home/thierry.reding/src/pbs-experimental.git/toolchains/arm-unknown-linux-gnueabi/usr/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/4.6.3/lto-wrapper Target: arm-unknown-linux-gnueabi Configured with: ../configure --target=arm-unknown-linux-gnueabi --prefix=/home/thierry.reding/src/pbs-experimental.git/toolchains/arm-unknown-linux-gnueabi/usr --datadir=/home/thierry.reding/src/pbs-experimental.git/toolchains/arm-unknown-linux-gnueabi/usr/arm-unknown-linux-gnueabi/share --infodir=/home/thierry.reding/src/pbs-experimental.git/toolchains/arm-unknown-linux-gnueabi/usr/arm-unknown-linux-gnueabi/share/info --mandir=/home/thierry.reding/src/pbs-experimental.git/toolchains/arm-unknown-linux-gnueabi/usr/arm-unknown-linux-gnueabi/share/man --libdir=/home/thierry.reding/src/pbs-experimental.git/toolchains/arm-unknown-linux-gnueabi/usr/arm-unknown-linux-gnueabi/lib --libexecdir=/home/thierry.reding/src/pbs-experimental.git/toolchains/arm-unknown-linux-gnueabi/usr/arm-unknown-linux-gnueabi/lib --includedir=/home/thierry.reding/src/pbs-experimental.git/toolchains/arm-unknown-linux-gnueabi/usr/arm-unknown-linux-gnueabi/sys-root/usr/include --with-gxx-include-dir=/home/thierry.reding/src/pbs-experimental.git/toolchains/arm-unknown-linux-gnueabi/usr/arm-unknown-linux-gnueabi/sys-root/usr/include/c++/4.6.3 --with-pkgversion='PBS 2010.08-wip' --program-prefix=arm-unknown-linux-gnueabi- --with-mpfr=/home/thierry.reding/src/pbs-experimental.git/toolchains/arm-unknown-linux-gnueabi/usr --with-gmp=/home/thierry.reding/src/pbs-experimental.git/toolchains/arm-unknown-linux-gnueabi/usr --enable-languages=c,c++,objc,obj-c++ --disable-libssp --with-as=/home/thierry.reding/src/pbs-experimental.git/toolchains/arm-unknown-linux-gnueabi/usr/bin/arm-unknown-linux-gnueabi-as --with-ld=/home/thierry.reding/src/pbs-experimental.git/toolchains/arm-unknown-linux-gnueabi/usr/bin/arm-unknown-linux-gnueabi-ld --with-sysroot=yes Thread model: posix gcc version 4.6.3 20120113 (prerelease) (PBS 2010.08-wip) COLLECT_GCC_OPTIONS='-c' '-o' 'swrast/s_span.o' '-D' 'FEATURE_GL=1' '-D' 'FEATURE_ES1=1' '-D' 'FEATURE_ES2=1' '-D' '_GNU_SOURCE' '-D' 'PTHREADS' '-D' 'HAVE_POSIX_MEMALIGN' '-D' 'USE_XCB' '-D' 'USE_XSHM' '-D' 'HAVE_MINCORE' '-D' 'HAVE_LIBUDEV' '-I' '../../include' '-I' '../../src/glsl' '-I' '../../src/mesa' '-I' '../../src/mapi' '-I' '../../src/gallium/include' '-I' '../../src/gallium/auxiliary' '-mlittle-endian' '-mapcs' '-mabi=aapcs-linux' '-mno-thumb-interwork' '-g' '-O2' '-marm' '-march=armv7-a' '-mtune=cortex-a9' '-U' 'arm' '-mfpu=vfpv3-d16' '-mfloat-abi=softfp' '-Wall' '-Wextra' '-Wmissing-prototypes' '-std=c99' '-ffast-math' '-fno-strict-aliasing' '-fno-builtin-memcmp' '-fPIC' '-fvisibility=hidden' '-save-temps' '-v' /home/thierry.reding/src/pbs-experimental.git/toolchains/arm-unknown-linux-gnueabi/usr/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/4.6.3/cc1 -E -quiet -v -I ../../include -I ../../src/glsl -I ../../src/mesa -I ../../src/mapi -I ../../src/gallium/include -I ../../src/gallium/auxiliary -D FEATURE_GL=1 -D FEATURE_ES1=1 -D FEATURE_ES2=1 -D _GNU_SOURCE -D PTHREADS -D HAVE_POSIX_MEMALIGN -D USE_XCB -D USE_XSHM -D HAVE_MINCORE -D HAVE_LIBUDEV -U arm swrast/s_span.c -mlittle-endian -mapcs -mabi=aapcs-linux -mno-thumb-interwork -marm -march=armv7-a -mtune=cortex-a9 -mfpu=vfpv3-d16 -mfloat-abi=softfp -std=c99 -Wall -Wextra -Wmissing-prototypes -ffast-math -fno-strict-aliasing -fno-builtin-memcmp -fPIC -fvisibility=hidden -g -fworking-directory -O2 -fpch-preprocess -o s_span.i ignoring nonexistent directory "/home/thierry.reding/src/pbs-experimental.git/toolchains/arm-unknown-linux-gnueabi/usr/arm-unknown-linux-gnueabi/sys-root/usr/local/include" ignoring nonexistent directory "/home/thierry.reding/src/pbs-experimental.git/toolchains/arm-unknown-linux-gnueabi/usr/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/4.6.3/../../../../../arm-unknown-linux-gnueabi/include" #include "..." search starts here: #include <...> search starts here: ../../include ../../src/glsl ../../src/mesa ../../src/mapi ../../src/gallium/include ../../src/gallium/auxiliary /home/thierry.reding/src/pbs-experimental.git/toolchains/arm-unknown-linux-gnueabi/usr/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/4.6.3/include /home/thierry.reding/src/pbs-experimental.git/toolchains/arm-unknown-linux-gnueabi/usr/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/4.6.3/include-fixed /home/thierry.reding/src/pbs-experimental.git/toolchains/arm-unknown-linux-gnueabi/usr/arm-unknown-linux-gnueabi/sys-root/usr/include End of search list. COLLECT_GCC_OPTIONS='-c' '-o' 'swrast/s_span.o' '-D' 'FEATURE_GL=1' '-D' 'FEATURE_ES1=1' '-D' 'FEATURE_ES2=1' '-D' '_GNU_SOURCE' '-D' 'PTHREADS' '-D' 'HAVE_POSIX_MEMALIGN' '-D' 'USE_XCB' '-D' 'USE_XSHM' '-D' 'HAVE_MINCORE' '-D' 'HAVE_LIBUDEV' '-I' '../../include' '-I' '../../src/glsl' '-I' '../../src/mesa' '-I' '../../src/mapi' '-I' '../../src/gallium/include' '-I' '../../src/gallium/auxiliary' '-mlittle-endian' '-mapcs' '-mabi=aapcs-linux' '-mno-thumb-interwork' '-g' '-O2' '-marm' '-march=armv7-a' '-mtune=cortex-a9' '-U' 'arm' '-mfpu=vfpv3-d16' '-mfloat-abi=softfp' '-Wall' '-Wextra' '-Wmissing-prototypes' '-std=c99' '-ffast-math' '-fno-strict-aliasing' '-fno-builtin-memcmp' '-fPIC' '-fvisibility=hidden' '-save-temps' '-v' /home/thierry.reding/src/pbs-experimental.git/toolchains/arm-unknown-linux-gnueabi/usr/arm-unknown-linux-gnueabi/lib/gcc/arm-unknown-linux-gnueabi/4.6.3/cc1 -fpreprocessed s_span.i -quiet -dumpbase s_span.c -mlittle-endian -mapcs -mabi=aapcs-linux -mno-thumb-interwork -marm -march=armv7-a -mtune=cortex-a9 -mfpu=vfpv3-d16 -mfloat-abi=softfp -auxbase-strip swrast/s_span.o -g -O2 -Wall -Wextra -Wmissing-prototypes -std=c99 -version -ffast-math -fno-strict-aliasing -fno-builtin-memcmp -fPIC -fvisibility=hidden -o s_span.s GNU C (PBS 2010.08-wip) version 4.6.3 20120113 (prerelease) (arm-unknown-linux-gnueabi) compiled by GNU C version 4.6.2 20111223 (prerelease), GMP version 5.0.2, MPFR version 3.1.0, MPC version 0.9 GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 GNU C (PBS 2010.08-wip) version 4.6.3 20120113 (prerelease) (arm-unknown-linux-gnueabi) compiled by GNU C version 4.6.2 20111223 (prerelease), GMP version 5.0.2, MPFR version 3.1.0, MPC version 0.9 GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 7fad8c4e675218b56e8d9c2b6af7198f swrast/s_span.c: In function ‘_swrast_write_rgba_span’: swrast/s_span.c:1304:1: error: unrecognizable insn: (insn 5607 5606 5608 280 (set (reg:HI 1 r1) (reg:SI 69 s6)) swrast/s_span.c:891 -1 (nil)) swrast/s_span.c:1304:1: internal compiler error: in extract_insn, at recog.c:2109 Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. --- I haven't been able to reduce this into a small test-case unfortunately. However I was able to bisect the issue to the following commit in Mesa: 3d7c5a4f6f4155e249f6eac76d861eb1bc59eb69. I'm not sure if that helps, though. I have also played around with various compiler options. The ICE goes away if I use -O1 instead of -O2. It also goes away if I change -mfloat-abi=softfp to -mfloat-abi=soft. If I change -mtune=cortex-a9 to -mtune=cortex-a8, it also compiles fine. I'd be happy to provide more information if needed.