Remove global call sets: cfgloopanal.c
authorRichard Sandiford <richard.sandiford@arm.com>
Mon, 30 Sep 2019 16:20:15 +0000 (16:20 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Mon, 30 Sep 2019 16:20:15 +0000 (16:20 +0000)
...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

gcc/ChangeLog
gcc/cfgloopanal.c

index a3e4ff2..6b08d70 100644 (file)
@@ -1,5 +1,11 @@
 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
        instead of the call-clobbered sets.
 
index 0ebecc3..95ec929 100644 (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++;
       }