This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Fix PR18896, addressing split complex args
- From: Richard Henderson <rth at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Fri, 10 Dec 2004 16:24:59 -0800
- Subject: Re: Fix PR18896, addressing split complex args
- References: <20041209135759.GL17237@bubble.modra.org>
On Fri, Dec 10, 2004 at 12:27:59AM +1030, Alan Modra wrote:
> + if (TREE_ADDRESSABLE (parm))
> + {
> + rtx in, imem;
> +
> + /* split_complex_arg put the imag part in a pseudo. Move
> + it to memory adjacent to the real part. */
> + gcc_assert (MEM_P (real));
> + imem = adjust_address_nv (real, VOIDmode, GET_MODE_SIZE (inner));
> + in = DECL_INCOMING_RTL (TREE_CHAIN (fnargs));
> + if (inner != GET_MODE (in))
> + in = gen_lowpart_SUBREG (inner, in);
> + if (!rtx_equal_p (imem, in))
> + emit_move_insn (imem, in);
Doesn't this fail for
void foo (..., complex int x)
for x addressable and "..." such that the real part of x is
incomming to a register and the imaginary part is incomming
to memory? I don't see how the real part has enough memory
allocated to it in the local stack frame in that case.
r~