This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug gcov-profile/55121] New: ICE in if-convertion with PGO (ARM)
- From: "christophe.lyon at st dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 29 Oct 2012 16:01:33 +0000
- Subject: [Bug gcov-profile/55121] New: ICE in if-convertion with PGO (ARM)
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55121
Bug #: 55121
Summary: ICE in if-convertion with PGO (ARM)
Classification: Unclassified
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: gcov-profile
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: christophe.lyon@st.com
Created attachment 28555
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=28555
patch 1
Hi,
As discussed in
http://gcc.gnu.org/ml/gcc/2012-10/msg00330.html
then
http://gcc.gnu.org/ml/gcc/2012-10/msg00341.html
there is an ICE when compiling SPEC2k's GAP bench with GCC for ARM using
profiling data.
My tests are based upon SVN rev #191819, with 4 patches (attached)
submitted by Matthew Gretton-Dann.
You can reproduce the ICE with:
$ XXXX/cc1 -fpreprocessed eval.i -quiet -dumpbase eval.c -march=armv7-a
-mtune=cortex-a9 -mthumb -mfpu=neon -mvectorize-with-neon-quad
-mfloat-abi=softfp -mtls-dialect=gnu -auxbase-strip eval.o -g -O3 -version
-fprofile-use=YYY -fno-common -o eval.s
eval.c: In function 'Ge':
eval.c:792:1: internal compiler error: in df_compact_blocks, at df-core.c:1570
0x6917c1 df_compact_blocks()
/work1/lyon/Work/ARM/Linaro/sources/gcc-fsf-hot-cold-pgo/gcc/df-core.c:1570
0x62c3f6 compact_blocks()
/work1/lyon/Work/ARM/Linaro/sources/gcc-fsf-hot-cold-pgo/gcc/cfg.c:165
0x659b89 relink_block_chain(bool)
/work1/lyon/Work/ARM/Linaro/sources/gcc-fsf-hot-cold-pgo/gcc/cfgrtl.c:3112
0xeb7061 reorder_basic_blocks
/work1/lyon/Work/ARM/Linaro/sources/gcc-fsf-hot-cold-pgo/gcc/bb-reorder.c:2172
0xeb71b8 rest_of_handle_reorder_blocks
/work1/lyon/Work/ARM/Linaro/sources/gcc-fsf-hot-cold-pgo/gcc/bb-reorder.c:2237
It could be that calls to merge_blocks() in merge_if_block() should be
guarded by e.g. can_merge_blocks_p (combo_bb, join_bb).
Adding this line before calling
merge_blocks (combo_bb, join_bb);
makes the compilation succeed.
However, the resulting code is still not functional but that problem
may come from another module of the bench.
Also attached: eval.i and eval.gcda