Remove global call sets: function.c
Whatever the rights and wrongs of the way aggregate_value_p handles call-preserved registers, it's a de facto part of the ABI, so we shouldn't change it. The patch simply extends the current approach to whatever call-preserved set the function happens to be using. 2019-09-30 Richard Sandiford <richard.sandiford@arm.com> gcc/ * function.c (aggregate_value_p): Work out which ABI the function is using before testing which registers are at least partly preserved by a call. From-SVN: r276322
This commit is contained in:
parent
1849569621
commit
c1b582720a
|
@ -1,3 +1,9 @@
|
|||
2019-09-30 Richard Sandiford <richard.sandiford@arm.com>
|
||||
|
||||
* function.c (aggregate_value_p): Work out which ABI the
|
||||
function is using before testing which registers are at least
|
||||
partly preserved by a call.
|
||||
|
||||
2019-09-30 Richard Sandiford <richard.sandiford@arm.com>
|
||||
|
||||
* early-remat.c: Include regs.h and function-abi.h.
|
||||
|
|
|
@ -2120,10 +2120,17 @@ aggregate_value_p (const_tree exp, const_tree fntype)
|
|||
if (!REG_P (reg))
|
||||
return 0;
|
||||
|
||||
/* Use the default ABI if the type of the function isn't known.
|
||||
The scheme for handling interoperability between different ABIs
|
||||
requires us to be able to tell when we're calling a function with
|
||||
a nondefault ABI. */
|
||||
const predefined_function_abi &abi = (fntype
|
||||
? fntype_abi (fntype)
|
||||
: default_function_abi);
|
||||
regno = REGNO (reg);
|
||||
nregs = hard_regno_nregs (regno, TYPE_MODE (type));
|
||||
for (i = 0; i < nregs; i++)
|
||||
if (! call_used_or_fixed_reg_p (regno + i))
|
||||
if (!fixed_regs[regno + i] && !abi.clobbers_full_reg_p (regno + i))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue