[armhf] trunk 20111223, ICE in output_move_double, at config/arm/arm.c

Bug #910791 reported by Matthias Klose
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Linaro GCC
Won't Fix
Undecided
Unassigned
gcc
Invalid
Medium
gcc-snapshot (Ubuntu)
Fix Released
High
Unassigned

Bug Description

seen with more than one package, here with binutils gold. works with 4.6, or with -O0

$ g++-4.7 -c -g -O2 output.ii
In file included from ../../gold/compressed_output.h:33:0,
                 from ../../gold/compressed_output.cc:31:
../../gold/output.h: In member function 'virtual bool gold::Output_section::do_is_section_flag_set(elfcpp::Elf_Xword) const':
../../gold/output.h:3640:40: internal compiler error: in output_move_double, at config/arm/arm.c:13925
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.7/README.Bugs> for instructions.

Revision history for this message
In , Carrot (carrot) wrote :

Created attachment 26168
test

Compile the attached code and profile data with following command, I got an ICE

/usr/local/google/home/carrot/disk2/armobja/gcc/cc1 -fpreprocessed function.i -mbionic -quiet -dumpbase function.c -march=armv7-a -mfloat-abi=softfp -mthumb-interwork -mfpu=vfpv3-d16 -mthumb -auxbase-strip obj/function.o -O2 -Wno-unused -fpic -fprofile-use -o function.s
src/function.c: In function 'get_func_frame_size':
src/function.c:516:1: internal compiler error: in output_move_double, at config/arm/arm.c:13933
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.

Revision history for this message
In , Carrot (carrot) wrote :
Download full text (3.5 KiB)

(gdb) cont
Continuing.

Breakpoint 2, output_move_double (operands=0x19be680, emit=1 '\001', count=0x0) at ../../../trunk/gcc/config/arm/arm.c:13933
13933 gcc_assert (!emit);
(gdb) print debug_rtx(operands[0])
(reg:DI 2 r2 [orig:139 f_1(D)->x_frame_offset ] [139])
$1 = void
(gdb) print debug_rtx(operands[1])
(reg:SI 3 r3)
$2 = void

(gdb) bt
#0 output_move_double (operands=0x19be680, emit=1 '\001', count=0x0) at ../../../trunk/gcc/config/arm/arm.c:13933
#1 0x0000000000fdb969 in output_642 (operands=0x19be680, insn=0x7ffff643d900) at ../../../trunk/gcc/config/arm/vfp.md:202
#2 0x000000000079d73b in get_insn_template (code=642, insn=0x7ffff643d900) at ../../../trunk/gcc/final.c:1817
#3 0x000000000079f2ed in final_scan_insn (insn=0x7ffff643d900, file=0x1a451a0, optimize_p=2, nopeepholes=0, seen=0x7fffffffe208) at ../../../trunk/gcc/final.c:2682
#4 0x000000000079d5d9 in final (first=0x7ffff6ae6940, file=0x1a451a0, optimize_p=2) at ../../../trunk/gcc/final.c:1786
#5 0x00000000007a2280 in rest_of_handle_final () at ../../../trunk/gcc/final.c:4319
#6 0x0000000000a1f9ae in execute_one_pass (pass=0x1865060) at ../../../trunk/gcc/passes.c:2080
#7 0x0000000000a1fb9c in execute_pass_list (pass=0x1865060) at ../../../trunk/gcc/passes.c:2135
#8 0x0000000000a1fbbd in execute_pass_list (pass=0x1865ea0) at ../../../trunk/gcc/passes.c:2136
#9 0x0000000000a1fbbd in execute_pass_list (pass=0x1865e40) at ../../../trunk/gcc/passes.c:2136
#10 0x0000000000bc3b26 in tree_rest_of_compilation (fndecl=0x7ffff6c44a00) at ../../../trunk/gcc/tree-optimize.c:421
#11 0x0000000000699e81 in cgraph_expand_function (node=0x7ffff6937360) at ../../../trunk/gcc/cgraphunit.c:1818
#12 0x000000000069a04c in cgraph_expand_all_functions () at ../../../trunk/gcc/cgraphunit.c:1885
#13 0x000000000069ab8d in cgraph_optimize () at ../../../trunk/gcc/cgraphunit.c:2198
#14 0x0000000000697bce in cgraph_finalize_compilation_unit () at ../../../trunk/gcc/cgraphunit.c:1327
#15 0x00000000004c8b3c in c_write_global_declarations () at ../../../trunk/gcc/c-decl.c:10026
#16 0x0000000000b11a52 in compile_file () at ../../../trunk/gcc/toplev.c:573
#17 0x0000000000b13c8b in do_compile () at ../../../trunk/gcc/toplev.c:1935
#18 0x0000000000b13e02 in toplev_main (argc=20, argv=0x7fffffffe658) at ../../../trunk/gcc/toplev.c:2011
#19 0x00000000005c9d90 in main (argc=20, argv=0x7fffffffe658) at ../../../trunk/gcc/main.c:36
(gdb) f 3
#3 0x000000000079f2ed in final_scan_insn (insn=0x7ffff643d900, file=0x1a451a0, optimize_p=2, nopeepholes=0, seen=0x7fffffffe208) at ../../../trunk/gcc/final.c:2682
2682 templ = get_insn_template (insn_code_number, insn);
(gdb) print debug_rtx(insn)
(insn:TI 6 3 7 2 (set (reg:DI 2 r2 [orig:139 f_1(D)->x_frame_offset ] [139])
        (mem/s:DI (plus:SI (reg:SI 0 r0 [ f ])
                (const_int 152 [0x98])) [6 f_1(D)->x_frame_offset+0 S8 A64])) src/function.c:512 642 {*movdi_vfp_cortexa8}
     (expr_list:REG_DEAD (reg:SI 0 r0 [ f ])
        (nil)))
$3 = void

Apparently operands[1] doesn't match the actual operand (MEM ...) in the insn.

(gdb) print recog_data.operand
$6 = {0x7ffff5ff7100, 0x7ffff5ff77a0, 0xabababababababab <repeats 28 times>}
(gdb) print recog...

Read more...

Revision history for this message
Matthias Klose (doko) wrote :
Revision history for this message
Michael Hope (michaelh1) wrote :

Thank you for the bug report. I can't reproduce this with:
 * gcc-linaro-4.6-2011.12
 * gcc-4.7~svn182152
 * gcc-4.7~svn182780

I tried the following commands:

/tools/toolchains/arch/armv7l/gcc-4.7~svn182780-armv7l-natty-cbuild220-ursa2-cortexa9r1/bin/g++ -O2 -c -g -mfpu=vfpv3-d16 -marm lp910791.ii

/tools/toolchains/arch/armv7l/gcc-4.7~svn182780-armv7l-natty-cbuild220-ursa2-cortexa9r1/bin/g++ -O2 -c -g -mfpu=vfpv3-d16 lp910791.ii

/tools/toolchains/arch/armv7l/gcc-4.7~svn182780-armv7l-natty-cbuild220-ursa2-cortexa9r1/bin/g++ -O2 -c -g lp910791.ii

/tools/toolchains/arch/armv7l/gcc-4.7~svn182152-armv7l-natty-cbuild212-tcpanda02-cortexa9r1/bin/g++ -O2 -c lp910791.ii

/tools/toolchains/arch/armv7l/gcc-linaro-4.6-2011.12-armv7l-natty-cbuild212-tcpanda03-cortexa9r1/bin/g++ -O2 -c -g lp910791.ii

This is with the Linaro standard Cortex-A9 Thumb-2 NEON configuration.

Changed in gcc-linaro:
status: New → Incomplete
Revision history for this message
In , Carrot (carrot) wrote :

It can be reproduced with following simple code

struct function
{
  int pops_args;
  long long x_frame_offset;
};

long long get_func_frame_size (struct function *f)
{
  return -f->x_frame_offset;
}

Command line options are: -march=armv7-a -mfloat-abi=softfp -mthumb -Os

Arm mode and O2/O3 also show this ICE.

Revision history for this message
Michael Hope (michaelh1) wrote :
Revision history for this message
Michael Hope (michaelh1) wrote :

Found it. It only occurs with -mcpu=cortex-a8:
  ~/linaro/toolchains/gcc-4.7~svn182617-armv7l-natty-cbuild220-tcpanda05-cortexa9r1/bin/g++ -O2 -c -g -mfpu=vfpv3-d16 -mcpu=cortex-a8 lp910791.ii

The fault occurs in r178025, 178624, 182152, 182780 but not in 177688 so it was introduced somewhere between 177688 and 178025.

Assuming the bug is in config/arm then it could be 177689 (rsandifo), 177705 (ramana), 177759 (ramana), 177852 (ramana), 177855 (rsandifo), 177891 (jye2), or 177902 (ams). I'm suspicious of 177759.

Matthias, could you log this upsteam?

Revision history for this message
Matthias Klose (doko) wrote :

confirmed with 20120107 trunk (gcc-snapshot package in precise)

Revision history for this message
In , Doko-v (doko-v) wrote :

seen with hard float as well

g++ -c -g -O2 --with-arch=armv7-a --with-float=hard --with-fpu=vfpv3-d16 --with-mode=thumb output.ii
In file included from ../../gold/compressed_output.h:33:0,
                 from ../../gold/compressed_output.cc:31:
../../gold/output.h: In member function 'virtual bool gold::Output_section::do_is_section_flag_set(elfcpp::Elf_Xword) const':
../../gold/output.h:3640:40: internal compiler error: in output_move_double, at config/arm/arm.c:13933
Please submit a full bug report,
with preprocessed source if appropriate.

Revision history for this message
In , Doko-v (doko-v) wrote :

Created attachment 26277
preprocessed source

Revision history for this message
Matthias Klose (doko) wrote :

now PR51659

Changed in gcc:
importance: Unknown → Medium
status: Unknown → New
Changed in gcc:
status: New → Confirmed
Revision history for this message
In , Jakub-gcc (jakub-gcc) wrote :

Dup of PR51915.

*** This bug has been marked as a duplicate of bug 51915 ***

Changed in gcc:
status: Confirmed → Invalid
Revision history for this message
Michael Hope (michaelh1) wrote :

Was fixed upstream. Marking as won't fix against gcc-linaro.

Changed in gcc-linaro:
status: Incomplete → Fix Released
status: Fix Released → Won't Fix
Revision history for this message
Matthias Klose (doko) wrote :

fixed upstream (4.8)

Changed in gcc-snapshot (Ubuntu):
status: Confirmed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.