Linux Archive

Linux Archive (http://www.linux-archive.org/)
-   Debian GCC (http://www.linux-archive.org/debian-gcc/)
-   -   ICE in reload_cse_simplify_operands, at postreload.c:392 (http://www.linux-archive.org/debian-gcc/4336-ice-reload_cse_simplify_operands-postreload-c-392-a.html)

"dave at hiauly1 dot hia dot nrc dot ca" 11-24-2007 06:27 PM

ICE in reload_cse_simplify_operands, at postreload.c:392
 
------- Comment #7 from dave at hiauly1 dot hia dot nrc dot ca 2007-11-24 19:27 -------
Subject: Re: [4.2/4.3 Regression] ICE in
reload_cse_simplify_operands, at postreload.c:392

The attached patch seems to fix the problem on the trunk. However,
it doesn't work on 4.2. It makes the problem reported in PR middle-end/32889
worse and I get bootstrap failure in stage2.

I've experimented with reload patterns to handle (mem (plus reg const))
but this doesn't seem to help with 32889. So, I think there's a problem
with the handling of reg_equiv_alt_mem_list in 4.2.

Dave


------- Comment #8 from dave at hiauly1 dot hia dot nrc dot ca 2007-11-24 19:27 -------
Created an attachment (id=14631)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=14631&action=view)


--


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

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.


--
To UNSUBSCRIBE, email to debian-gcc-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

"ebotcazou at gcc dot gnu dot org" 11-24-2007 07:31 PM

ICE in reload_cse_simplify_operands, at postreload.c:392
 
------- Comment #9 from ebotcazou at gcc dot gnu dot org 2007-11-24 20:31 -------
> This probably means I don't have the change quite right. I also have a
> problem with paradoxical SUBREGS when the inner register is spilled. I'm
> not clear on how this is to be handled on a big endian target with strict
> alignment. The documentation says reload is supposed to prevent this from
> happening, but it doesn't seem to. I see this with the testcase from this
> PR. It's combine that creates the paradoxical SUBREG.

Here is how the SPARC port deals with this specific case:

/* Return the register class of a scratch register needed to load IN into
a register of class CLASS in MODE.

We need a temporary when loading/storing a HImode/QImode value
between memory and the FPU registers. This can happen when combine puts
a paradoxical subreg in a float/fix conversion insn.

We need a temporary when loading/storing a DFmode value between
unaligned memory and the upper FPU registers. */

#define SECONDARY_INPUT_RELOAD_CLASS(CLASS, MODE, IN)

[...]

#define SECONDARY_OUTPUT_RELOAD_CLASS(CLASS, MODE, IN)


--

ebotcazou at gcc dot gnu dot org changed:

What |Removed |Added
----------------------------------------------------------------------------
CC| |ebotcazou at gcc dot gnu dot
| |org


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

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.


--
To UNSUBSCRIBE, email to debian-gcc-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

"ebotcazou at gcc dot gnu dot org" 11-24-2007 08:47 PM

ICE in reload_cse_simplify_operands, at postreload.c:392
 
------- Comment #11 from ebotcazou at gcc dot gnu dot org 2007-11-24 21:47 -------
> Is there a reason why you want to load/store HImode/QImode values in
> the FPU registers on sparc? On the pa, there aren't any insns that
> operate on them. So, the only reason we supported this was because
> these modes are tied to SImode and DImode.

Same on SPARC, there are no HImode/QImode move insns either.

> I haven't seen the paradoxical subreg in a float/fix conversion
> insns with the current patch. I did see this in some of the first
> versions of pa_cannot_change_mode_class. I think I eliminated
> this problem by prevent mode changes in the FP registers:
>
> if (MAYBE_FP_REG_CLASS_P (class))
> return true;
>
> Due you think this problem is latent?

On SPARC or on the PA even with CANNOT_CHANGE_MODE_CLASS?


--


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

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.


--
To UNSUBSCRIBE, email to debian-gcc-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org

"dave at hiauly1 dot hia dot nrc dot ca" 11-24-2007 09:14 PM

ICE in reload_cse_simplify_operands, at postreload.c:392
 
------- Comment #12 from dave at hiauly1 dot hia dot nrc dot ca 2007-11-24 22:14 -------
Subject: Re: [4.2/4.3 Regression] ICE in reload_cse_simplify_operands, at
postreload.c:392

> > I haven't seen the paradoxical subreg in a float/fix conversion
> > insns with the current patch. I did see this in some of the first
> > versions of pa_cannot_change_mode_class. I think I eliminated
> > this problem by prevent mode changes in the FP registers:
> >
> > if (MAYBE_FP_REG_CLASS_P (class))
> > return true;
> >
> > Due you think this problem is latent?
>
> On SPARC or on the PA even with CANNOT_CHANGE_MODE_CLASS?

I meant on the PA using the CANNOT_CHANGE_MODE_CLASS patch.

What I saw when mode changes were allowed was something like
the following:

set (subreg:SI (mem:HI)) (fix:SI (fix:SF))

where the mem was a spilled HImode pseudo. At the time,
I thought I had stopped mode changes to QImode/HImode in
the FPU registers but I believe they got tied to DImode.

Dave


--


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

------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.


--
To UNSUBSCRIBE, email to debian-gcc-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org


All times are GMT. The time now is 03:28 PM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.