aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2019-09-30 16:20:15 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2019-09-30 16:20:15 +0000
commit43b484fbf281553353c6ef55ff0871b222579004 (patch)
tree09be312850766d7bb5f4c6dfa86e810708db069f
parent016996861c7333f42772c84a5a2a4e52e0bd07c5 (diff)
downloadgcc-43b484fbf281553353c6ef55ff0871b222579004.zip
gcc-43b484fbf281553353c6ef55ff0871b222579004.tar.gz
gcc-43b484fbf281553353c6ef55ff0871b222579004.tar.bz2
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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cfgloopanal.c7
2 files changed, 12 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a3e4ff2..6b08d70 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/cfgloopanal.c b/gcc/cfgloopanal.c
index 0ebecc3..95ec929 100644
--- a/gcc/cfgloopanal.c
+++ b/gcc/cfgloopanal.c
@@ -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++;
}