------- Comment #12 from dave at hiauly1 dot hia dot nrc dot ca  2007-02-04 
23:31 -------
Subject: Re:  FAIL: gfortran.fortran-torture/execute/intrinsic_set_exponent.f90

> Also I don't see anything wrong with the expand's RTL.  The difference between
> 4.1.1 and 4.2's RTL is that we don't go through memory for the case of memcpy
> any more.

Well, it circumvents the CONST_DOUBLE handling used on hppa64.
The only way to load a CONST_DOUBLE to the floating registers is from
memory.  For that reason, LEGITIMATE_CONSTANT_P rejects CONST_DOUBLEs.
We always need a general register to load CONST_DOUBLEs from memory.

The ICE is caused in this case by reload trying to load a CONST_DOUBLE
directly to fr4.  We don't have a general register available for this
operation and we can't create a new pseudo at this point.  So, we are
dead in the water.

I'm trying a change to the movdf and movdi expanders to FAIL in such
situations.  I also noticed that we need to legitimize the address of
the MEM created for the CONST_DOUBLE.  I suspect that reload won't be
able to handle failure.

If this scheme doesn't work, then the only solution that I can see is
to reserve a general register for emergency use during instruction
generation.

Dave


-- 


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

Reply via email to