This is the mail archive of the gcc-patches@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]

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?
> 
> Richard.

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.

Steve Ellcey
sje@cup.hp.com


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