------- Comment #7 from dave at hiauly1 dot hia dot nrc dot ca  2005-11-27 
17:51 -------
Subject: Re:  [4.2 Regression] libgcov.c:652: ICE: in default_secondary_reload,
at targhooks.c:529

This is what I see in gdb:

Assembling functions:
 __gcov_merge_single
Breakpoint 3, default_secondary_reload (in_p=0 '\0', x=0x4000d720,
    reload_class=FP_REGS, reload_mode=DImode, sri=0xbff5ed10)
    at ../../gcc/gcc/targhooks.c:534
534                   gcc_assert (scratch_class == class);
(gdb) p class
$1 = GENERAL_REGS
(gdb) p scratch_class
$2 = GENERAL_REGS
(gdb) p insn_data[(int) icode]
$3 = {name = 0x864b60 "reload_outdi", output = {single = 0x0, multi = 0x0,
    function = 0}, genfun = @0x8dfda2: 0x8e117c <fixup_branch_offset+15508>,
  operand = 0x862bc4, n_operands = 3 '\003', n_dups = 0 '\0',
  n_alternatives = 1 '\001', output_format = 0 '\0'}
(gdb) p debug_rtx (x)
(mem:DI (reg/f:SI 30 %r30) [0 S8 A64])
$4 = void
(gdb) p reload_class
$5 = FP_REGS
(gdb) p reload_mode
$6 = DImode

The problem is that the class for the scratch register specified in
"reload_outdi" is GENERAL_REGS but we actually need R1_REGS for certain
reloads.

The documentation indicates that reload_in* and reload_out* have
been obsoleted by the new target hook.  If that's really the case,
then it would appear emit_move_sequence needs a rewrite to somehow
integrate it with the new target hook.

Dave


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25027

Reply via email to