From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2526 invoked by alias); 17 Jun 2002 21:51:10 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 2454 invoked by uid 61); 17 Jun 2002 21:51:04 -0000 Date: Mon, 17 Jun 2002 15:16:00 -0000 Message-ID: <20020617215104.2453.qmail@sources.redhat.com> To: davem@gcc.gnu.org, dtucker@zip.com.au, gcc-bugs@gcc.gnu.org, gcc-prs@gcc.gnu.org, rth@gcc.gnu.org From: rth@gcc.gnu.org Reply-To: rth@gcc.gnu.org, davem@gcc.gnu.org, dtucker@zip.com.au, gcc-bugs@gcc.gnu.org, gcc-prs@gcc.gnu.org, rth@gcc.gnu.org, gcc-gnats@gcc.gnu.org Subject: Re: target/6841: ICE on ssh-rand-helper.c from openssh-3.2.3p1 with -mcpu=ultrasparc -O3 X-SW-Source: 2002-06/txt/msg00407.txt.bz2 List-Id: 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