diff options
author | Richard Henderson <rth@redhat.com> | 2004-12-01 10:13:31 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2004-12-01 10:13:31 -0800 |
commit | 1466e38701d72d8f9655a467ca140fb2b8a10dab (patch) | |
tree | 0f615db96d2762fa43d9e464d0d9e93fff7ad6a2 /gcc/function.c | |
parent | 8c1cfd5aa4a3eb878b7591a688c79dd939684813 (diff) | |
download | gcc-1466e38701d72d8f9655a467ca140fb2b8a10dab.tar.gz |
re PR rtl-optimization/15289 (reload error with non-lowpart subregs)
PR rtl-opt/15289
* emit-rtl.c (gen_complex_constant_part): Remove.
(gen_realpart, gen_imagpart): Remove.
* rtl.h (gen_realpart, gen_imagpart): Remove.
* expmed.c (extract_bit_field): Remove CONCAT hack catering to
gen_realpart/gen_imagpart.
* expr.c (write_complex_part, read_complex_part): New.
(emit_move_via_alt_mode, emit_move_via_integer, emit_move_resolve_push,
emit_move_complex_push, emit_move_complex, emit_move_ccmode,
emit_move_multi_word): Split out from ...
(emit_move_insn_1): ... here.
(expand_expr_real_1) <COMPLEX_EXPR>: Use write_complex_part.
<REALPART_EXPR, IMAGPART_EXPR>: Use read_complex_part.
* function.c (assign_parm_setup_reg): Hard-code transformations
instead of using gen_realpart/gen_imagpart.
From-SVN: r91571
Diffstat (limited to 'gcc/function.c')
-rw-r--r-- | gcc/function.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/gcc/function.c b/gcc/function.c index 1021fc2ecf3..046a4adda6d 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -2869,10 +2869,11 @@ assign_parm_setup_reg (struct assign_parm_data_all *all, tree parm, { enum machine_mode submode = GET_MODE_INNER (GET_MODE (parmreg)); - int regnor = REGNO (gen_realpart (submode, parmreg)); - int regnoi = REGNO (gen_imagpart (submode, parmreg)); - rtx stackr = gen_realpart (submode, data->stack_parm); - rtx stacki = gen_imagpart (submode, data->stack_parm); + int regnor = REGNO (XEXP (parmreg, 0)); + int regnoi = REGNO (XEXP (parmreg, 1)); + rtx stackr = adjust_address_nv (data->stack_parm, submode, 0); + rtx stacki = adjust_address_nv (data->stack_parm, submode, + GET_MODE_SIZE (submode)); /* Scan backwards for the set of the real and imaginary parts. */ |