This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[09/32] Remove global call sets: cfgloopanal.c
- From: Richard Sandiford <richard dot sandiford at arm dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Wed, 11 Sep 2019 20:08:04 +0100
- Subject: [09/32] Remove global call sets: cfgloopanal.c
- References: <mptimpyzmf1.fsf@arm.com>
...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-11 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.
Index: gcc/cfgloopanal.c
===================================================================
--- gcc/cfgloopanal.c 2019-09-10 19:56:45.313178201 +0100
+++ gcc/cfgloopanal.c 2019-09-11 19:47:53.946054595 +0100
@@ -32,6 +32,8 @@ Software Foundation; either version 3, o
#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++;
}