------- Additional Comments From wilson at gcc dot gnu dot org 2004-01-08 08:11 ------- The situation here is a little obscure. reload_as_needed calls constrain_operands during reload, to check whether insns emitted for asm reloads are valid insns. Since this is during reload, we need to accept unallocated pseudos as memory operands, even though we are in strict mode. constrain_operands has support for this for the 'm' constraint. The IA-64 port however must define its own 'Q' constraint for FP load/stores, because there are no volatile load/stores from FP registers. And the problem here is that 'Q' isn't accepting an unallocated psuedo when reload_in_progress is true.
The relatively new EXTRA_MEMORY_CONSTRAINT macro (Aug 2002) solves this problem. So all we need to do is define it for the IA-64 port. We need different patches for gcc-3.3 and mainline. This is the mainline change #define EXTRA_MEMORY_CONSTRAINT(C, STR) (C == 'Q' || C == 'S') The 3.3 change is similar, but without the STR argument. Unfortunately, when I try to bootstrap this, I get an ICE compiling libjava/java/lang/s_rint.c. The problem here is that we also get the check for address_reloaded which bypasses the MEM_VOLATILE_P check that the 'Q' constraint does. To fix this, we need yet another macro that controls reload, which seems unwise, or else we need a different approach, such as using secondary reloads, which will be a bigger patch, and there is no guarantee that it will work either. Since this is an obscure problem with an easy workaround, and the fix looks involved, I am tabling it for now to work on more tractable problems instead. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13515 ------- You are receiving this mail because: ------- You reported the bug, or are watching the reporter.