This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/30634] FAIL: gfortran.fortran-torture/execute/intrinsic_set_exponent.f90
- From: "dave at hiauly1 dot hia dot nrc dot ca" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 4 Feb 2007 23:31:41 -0000
- Subject: [Bug target/30634] FAIL: gfortran.fortran-torture/execute/intrinsic_set_exponent.f90
- References: <bug-30634-276@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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