This is the mail archive of the
mailing list for the GCC project.
Re: [Patch, middle-end] Fix PR 44878, IA64 build failure, partial inlining
On Sun, 2010-07-18 at 20:11 +0200, Richard Guenther wrote:
> The problem might be that the needs_to_live_in_memory predicate ends up
> being used in incompatible contexts. Which of the callers ends up
> making the difference to you?
Using my small test case, all of the calls to needs_to_live_in_memory
are coming from is_gimple_reg and all of the calls where I return a
different value after my patch are for the same return value reference.
I think the more likely incompatibility is in the use of
targetm.addr_space.pointer_mode (ptr_mode/SImode for me) and
targetm.addr_space.address_mode (Pmode/DImode) combined with the fact
that IA64 is one of the few platforms to define both PROMOTE_MODE
and POINTERS_EXTEND_UNSIGNED. But I have no idea where the
incompatibility actual is.
I do find it interesting that promote_mode in explow.c doesn't call the
PROMOTE_MODE macro for REFERENCE_TYPE or POINTER_TYPE but just returns
targetm.addr_space.address_mode for those types. I am not sure if that
is right or wrong but I find it a bit odd.