------- 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