This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug target/13515] `asm' operand requires impossible reload


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]