(aggregate_value_p): Return 1 if regs we would use are not all call-clobbered.
From-SVN: r2384
This commit is contained in:
parent
6ed1d6c5ed
commit
9d790a4f73
@ -2543,6 +2543,8 @@ int
|
|||||||
aggregate_value_p (exp)
|
aggregate_value_p (exp)
|
||||||
tree exp;
|
tree exp;
|
||||||
{
|
{
|
||||||
|
int i, regno, nregs;
|
||||||
|
rtx reg;
|
||||||
if (TYPE_MODE (TREE_TYPE (exp)) == BLKmode)
|
if (TYPE_MODE (TREE_TYPE (exp)) == BLKmode)
|
||||||
return 1;
|
return 1;
|
||||||
if (RETURN_IN_MEMORY (TREE_TYPE (exp)))
|
if (RETURN_IN_MEMORY (TREE_TYPE (exp)))
|
||||||
@ -2551,6 +2553,14 @@ aggregate_value_p (exp)
|
|||||||
&& (TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE
|
&& (TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE
|
||||||
|| TREE_CODE (TREE_TYPE (exp)) == UNION_TYPE))
|
|| TREE_CODE (TREE_TYPE (exp)) == UNION_TYPE))
|
||||||
return 1;
|
return 1;
|
||||||
|
/* Make sure we have suitable call-clobbered regs to return
|
||||||
|
the value in; if not, we must return it in memory. */
|
||||||
|
reg = hard_function_value (TREE_TYPE (exp), 0);
|
||||||
|
regno = REGNO (reg);
|
||||||
|
nregs = HARD_REGNO_NREGS (regno, TYPE_MODE (TREE_TYPE (exp)));
|
||||||
|
for (i = 0; i < nregs; i++)
|
||||||
|
if (! call_used_regs[regno + i])
|
||||||
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user