summaryrefslogtreecommitdiff
path: root/gcc/lra-int.h
diff options
context:
space:
mode:
authorVladimir Makarov <vmakarov@redhat.com>2018-03-09 16:00:36 +0000
committerVladimir Makarov <vmakarov@gcc.gnu.org>2018-03-09 16:00:36 +0000
commite0cd6bc00966de0a3a77b642f9507d9c83b398f1 (patch)
treede7bad1e1e9a7a1d01900aa85dc8de1b2e98279f /gcc/lra-int.h
parenta4017ff7722614f749a0d5eab315e929b2035e8a (diff)
re PR target/83712 ("Unable to find a register to spill" when compiling for thumb1)
2018-03-09 Vladimir Makarov <vmakarov@redhat.com> PR target/83712 * lra-assigns.c (assign_by_spills): Return a flag of reload assignment failure. Do not process the reload assignment failures. Do not spill other reload pseudos if they has the same reg class. (lra_assign): Add a return arg. Set up from the result of assign_by_spills call. (find_reload_regno_insns, lra_split_hard_reg_for): New functions. * lra-constraints.c (split_reg): Add a new arg. Use it instead of usage_insns if it is not NULL. (spill_hard_reg_in_range): New function. (split_if_necessary, inherit_in_ebb): Pass a new arg to split_reg. * lra-int.h (spill_hard_reg_in_range, lra_split_hard_reg_for): New function prototypes. (lra_assign): Change prototype. * lra.c (lra): Add code to deal with fails by splitting hard reg live ranges. 2018-03-09 Vladimir Makarov <vmakarov@redhat.com> PR target/83712 * gcc.target/arm/pr83712.c: New. From-SVN: r258390
Diffstat (limited to 'gcc/lra-int.h')
-rw-r--r--gcc/lra-int.h5
1 files changed, 3 insertions, 2 deletions
diff --git a/gcc/lra-int.h b/gcc/lra-int.h
index 509e29ec4b8..8a665625830 100644
--- a/gcc/lra-int.h
+++ b/gcc/lra-int.h
@@ -356,6 +356,7 @@ extern bool lra_constrain_insn (rtx_insn *);
extern bool lra_constraints (bool);
extern void lra_constraints_init (void);
extern void lra_constraints_finish (void);
+extern bool spill_hard_reg_in_range (int, enum reg_class, rtx_insn *, rtx_insn *);
extern void lra_inheritance (void);
extern bool lra_undo_inheritance (void);
@@ -389,8 +390,8 @@ extern void lra_setup_reload_pseudo_preferenced_hard_reg (int, int, int);
extern int lra_assignment_iter;
extern int lra_assignment_iter_after_spill;
extern void lra_setup_reg_renumber (int, int, bool);
-extern bool lra_assign (void);
-
+extern bool lra_assign (bool &);
+extern void lra_split_hard_reg_for (void);
/* lra-coalesce.c: */