This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: target/6841: ICE on ssh-rand-helper.c from openssh-3.2.3p1 with -mcpu=ultrasparc -O3
- From: rth at gcc dot gnu dot org
- To: davem at gcc dot gnu dot org, dtucker at zip dot com dot au, gcc-bugs at gcc dot gnu dot org, gcc-prs at gcc dot gnu dot org, rth at gcc dot gnu dot org
- Date: 17 Jun 2002 21:51:04 -0000
- Subject: Re: target/6841: ICE on ssh-rand-helper.c from openssh-3.2.3p1 with -mcpu=ultrasparc -O3
- Reply-to: rth at gcc dot gnu dot org, davem at gcc dot gnu dot org, dtucker at zip dot com dot au, gcc-bugs at gcc dot gnu dot org, gcc-prs at gcc dot gnu dot org, rth at gcc dot gnu dot org, gcc-gnats at gcc dot gnu dot org
Synopsis: ICE on ssh-rand-helper.c from openssh-3.2.3p1 with -mcpu=ultrasparc -O3
Responsible-Changed-From-To: rth->davem
Responsible-Changed-By: rth
Responsible-Changed-When: Mon Jun 17 14:51:03 2002
Responsible-Changed-Why:
IIRC you're the last one to fiddle all the Sparc register preferencing.
State-Changed-From-To: open->analyzed
State-Changed-By: rth
State-Changed-When: Mon Jun 17 14:51:03 2002
State-Changed-Why:
Again can easily be reproduced with a cross-compiler.
The problem is that we try to reload
(insn 1149 1114 1107 (set (reg/v:DF 293)
(const_double:DF 0 [0x0] -3689348814688223232 [0xccccccccd0000000] 1073532108 [0x3ffccccc])) 93 {*movdf_insn_v9only_novis} (nil)
(nil))
with
Reload 0: reload_in (SI) = (plus:SI (reg/f:SI 30 %fp)
(const_int -4512 [0xffffffffffffee60]))
GENERAL_REGS, RELOAD_FOR_OPERAND_ADDRESS (opnum = 0), can't combine
reload_in_reg: (plus:SI (reg/f:SI 30 %fp)
(const_int -4512 [0xffffffffffffee60]))
Reload 1: reload_out (DF) = (mem:DF (plus:SI (reg/f:SI 30 %fp)
(const_int -4512 [0xffffffffffffee60])) [97 total_entropy_estimate S8 A64])
NO_REGS, RELOAD_FOR_OUTPUT (opnum = 0), optional
reload_out_reg: (reg/v:DF 293)
Reload 2: reload_in (DF) = (const_double:DF 0 [0x0] -3689348814688223232 [0xccccccccd0000000] 1073532108 [0x3ffccccc])
GENERAL_OR_FP_REGS, RELOAD_FOR_INPUT (opnum = 1)
reload_in_reg: (const_double:DF 0 [0x0] -3689348814688223232 [0xccccccccd0000000] 1073532108 [0x3ffccccc])
we select an FP register for reload 2, then gen_movdf
tries to use validize_mem during reload. Boom.
The preferences on movdf_insn_v9only_novis definitely seem
to indicate GENERAL_OR_FP_REGS, so that part seems ok, as
far as it goes. But we don't handle FP_REGS in the move
patterns during reload. Which makes me think the preferencing
is just wrong. Alternately, you may need some reload_in
patterns to help with the address validation and allocation
of a scratch register for the address.
http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=6841