Remove global call sets: cfgloopanal.c

...or rather, make the use of the default ABI explicit.  That seems
OK if not ideal for this heuristic.

In practical terms, the code patched here is counting GENERAL_REGS,
which are treated in the same way by all concurrent ABI variants
on AArch64.  It might give bad results if used for interrupt
handlers though.

2019-09-30  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* cfgloopanal.c: Include regs.h and function-abi.h.
	(init_set_costs): Use default_function_abi to test whether
	a general register is call-clobbered.

From-SVN: r276315
This commit is contained in:
Richard Sandiford 2019-09-30 16:20:15 +00:00 committed by Richard Sandiford
parent 016996861c
commit 43b484fbf2
2 changed files with 12 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2019-09-30 Richard Sandiford <richard.sandiford@arm.com>
* cfgloopanal.c: Include regs.h and function-abi.h.
(init_set_costs): Use default_function_abi to test whether
a general register is call-clobbered.
2019-09-30 Richard Sandiford <richard.sandiford@arm.com>
* cfgcleanup.c (old_insns_match_p): Compare the ABIs of calls

View File

@ -32,6 +32,8 @@ along with GCC; see the file COPYING3. If not see
#include "graphds.h"
#include "params.h"
#include "sreal.h"
#include "regs.h"
#include "function-abi.h"
struct target_cfgloop default_target_cfgloop;
#if SWITCHABLE_TARGET
@ -353,7 +355,10 @@ init_set_costs (void)
&& !fixed_regs[i])
{
target_avail_regs++;
if (call_used_or_fixed_reg_p (i))
/* ??? This is only a rough heuristic. It doesn't cope well
with alternative ABIs, but that's an optimization rather than
correctness issue. */
if (default_function_abi.clobbers_full_reg_p (i))
target_clobbered_regs++;
}