This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/47727] [x32] Many passes can't handle const symbol when Pmode != ptr_mode
- From: "hjl.tools at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 14 Feb 2011 14:34:52 +0000
- Subject: [Bug middle-end/47727] [x32] Many passes can't handle const symbol when Pmode != ptr_mode
- Auto-submitted: auto-generated
- References: <bug-47727-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47727
--- Comment #7 from H.J. Lu <hjl.tools at gmail dot com> 2011-02-14 14:34:30 UTC ---
(In reply to comment #6)
> Not really. simplify-rtx should never emit new instuctions. Probably
> Ulrich, when introducing address-spaces didn't properly think about
> this in convert_memory_address_addr_space ().
>
I am not sure if that piece of code:
#if defined(POINTERS_EXTEND_UNSIGNED) && !defined(HAVE_ptr_extend)
/* As we do not know which address space the pointer is refering to,
we can do this only if the target does not support different pointer
or address modes depending on the address space. */
if (target_default_pointer_address_modes_p ()
&& POINTERS_EXTEND_UNSIGNED > 0
&& mode == Pmode && GET_MODE (op) == ptr_mode
&& (CONSTANT_P (op)
|| (GET_CODE (op) == SUBREG
&& REG_P (SUBREG_REG (op))
&& REG_POINTER (SUBREG_REG (op))
&& GET_MODE (SUBREG_REG (op)) == Pmode)))
return convert_memory_address (Pmode, op);
#endif
has ever worked before since convert_memory_address was there
before Ulrich added address-spaces. For x32, convert_memory_address
will generate new instructions when converting from SImode
to DImode. Should we simply remove them?