diff options
author | Vladimir Makarov <vmakarov@redhat.com> | 2013-06-28 19:43:39 +0000 |
---|---|---|
committer | Vladimir Makarov <vmakarov@gcc.gnu.org> | 2013-06-28 19:43:39 +0000 |
commit | e32e4c4a8826f872814b58deba660f6bb31e7b21 (patch) | |
tree | 936ccf1abdf76c32333fc7c2555b1fc82e89f93d /gcc | |
parent | f161bfd3300fb19ae04a865806612e4f8e7847d7 (diff) | |
download | gcc-e32e4c4a8826f872814b58deba660f6bb31e7b21.zip gcc-e32e4c4a8826f872814b58deba660f6bb31e7b21.tar.gz gcc-e32e4c4a8826f872814b58deba660f6bb31e7b21.tar.bz2 |
lra-constraints.c (need_for_split_p): Check call used hard regs living through calls.
2013-06-28 Vladimir Makarov <vmakarov@redhat.com>
* lra-constraints.c (need_for_split_p): Check call used hard regs
living through calls.
From-SVN: r200553
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/lra-constraints.c | 11 |
2 files changed, 15 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6c86c25..5aa5483 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-06-28 Vladimir Makarov <vmakarov@redhat.com> + + * lra-constraints.c (need_for_split_p): Check call used hard regs + living through calls. + 2013-06-28 Michael Meissner <meissner@linux.vnet.ibm.com> PR target/57744 diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index 4ac20fd..f667512 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -4201,6 +4201,15 @@ need_for_split_p (HARD_REG_SET potential_reload_hard_regs, int regno) && (regno >= FIRST_PSEUDO_REGISTER || ! TEST_HARD_REG_BIT (eliminable_regset, hard_regno)) && ! TEST_HARD_REG_BIT (lra_no_alloc_regs, hard_regno) + /* Don't split call clobbered hard regs living through + calls, otherwise we might have a check problem in the + assign sub-pass as in the most cases (exception is a + situation when lra_risky_transformations_p value is + true) the assign pass assumes that all pseudos living + through calls are assigned to call saved hard regs. */ + && (regno >= FIRST_PSEUDO_REGISTER + || ! TEST_HARD_REG_BIT (call_used_reg_set, regno) + || usage_insns[regno].calls_num == calls_num) /* We need at least 2 reloads to make pseudo splitting profitable. We should provide hard regno splitting in any case to solve 1st insn scheduling problem when @@ -4799,7 +4808,7 @@ inherit_in_ebb (rtx head, rtx tail) usage_insns invalidation. */ if ((dst_regno < FIRST_PSEUDO_REGISTER || reg_renumber[dst_regno] >= 0) - && ! reg->subreg_p && reg->type != OP_IN) + && ! reg->subreg_p && reg->type != OP_IN) { HARD_REG_SET s; |