function.c (expand_function_start): Don't abort on PARALLEL returns from hard_function_value.

* function.c (expand_function_start): Don't abort on PARALLEL
        returns from hard_function_value.

From-SVN: r42577
This commit is contained in:
Richard Henderson 2001-05-25 12:05:24 -07:00 committed by Richard Henderson
parent 244ec848eb
commit 80a480ca16
2 changed files with 17 additions and 10 deletions

View File

@ -1,3 +1,8 @@
2001-05-25 Richard Henderson <rth@redhat.com>
* function.c (expand_function_start): Don't abort on PARALLEL
returns from hard_function_value.
2001-05-25 Richard Henderson <rth@redhat.com>
* config/i386/i386.md: Revert previous change. Do not apply

View File

@ -6378,17 +6378,19 @@ expand_function_start (subr, parms_have_cleanups)
= hard_function_value (TREE_TYPE (DECL_RESULT (subr)),
subr, 1);
/* Since we know the return value is not an aggregate, we should
have a REG here. */
if (!REG_P (hard_reg))
abort ();
/* Structures that are returned in registers are not aggregate_value_p,
so we may see a PARALLEL. Don't play pseudo games with this. */
if (! REG_P (hard_reg))
SET_DECL_RTL (DECL_RESULT (subr), hard_reg);
else
{
/* Create the pseudo. */
SET_DECL_RTL (DECL_RESULT (subr), gen_reg_rtx (GET_MODE (hard_reg)));
/* Create the pseudo. */
SET_DECL_RTL (DECL_RESULT (subr),
gen_reg_rtx (GET_MODE (hard_reg)));
/* Needed because we may need to move this to memory
in case it's a named return value whose address is taken. */
DECL_REGISTER (DECL_RESULT (subr)) = 1;
/* Needed because we may need to move this to memory
in case it's a named return value whose address is taken. */
DECL_REGISTER (DECL_RESULT (subr)) = 1;
}
}
/* Initialize rtx for parameters and local variables.