diff options
author | vmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-07-16 15:26:35 +0000 |
---|---|---|
committer | vmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-07-16 15:26:35 +0000 |
commit | bf9df576a556d0557068d5f90430e4e2bb4267e5 (patch) | |
tree | 8007d3add2ae6117cc209d5f0d76980482f23ff8 /gcc/lra-constraints.c | |
parent | 1739ec91f99e0b9f914fa10280d7529d918b2c6f (diff) | |
download | gcc-bf9df576a556d0557068d5f90430e4e2bb4267e5.tar.gz |
2015-07-16 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/66626
* ira.h (emit-rtl.h): Include.
(non_spilled_static_chain_regno_p): New.
* ira-color.c (setup_profitable_hard_regs): Clear profitable regs
unless it is non spilled static chain pseudo.
(assign_hard_rego): Spill memory profitable allocno unless it is
non spilled static chain pseudo.
(allocno_spill_priority_compare): Put non spilled static chain
pseudo at the end of sorted array.
(improve_allocation): Do nothing if we have static chain and
non-local goto.
(allocno__priority_compare_func): Put non spilled static chain
pseudo at the beginning of sorted array.
(move_spill_restore): Ignore non spilled static chain pseudo.
* ira-costs.c (find_costs_and_classes): Don't assign class NO_REGS
to non spilled static chain pseudo.
* lra-assigns.c (pseudo_compare_func): Put non spilled static chain
pseudo at the beginning of sorted array.
(spill_for): Spill non spilled static chain pseudo last.
* lra-constraints.c (lra_constraints): Remove static chain pseudo
check for equivalence.
2015-07-16 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/66626
* gcc.target/i386/pr66626-2.c: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@225891 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/lra-constraints.c')
-rw-r--r-- | gcc/lra-constraints.c | 8 |
1 files changed, 1 insertions, 7 deletions
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index 58a388fa9e8..ddb91dd49cf 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -4306,13 +4306,7 @@ lra_constraints (bool first_p) && ((CONST_POOL_OK_P (PSEUDO_REGNO_MODE (i), x) && (targetm.preferred_reload_class (x, lra_get_allocno_class (i)) == NO_REGS)) - || contains_symbol_ref_p (x))) - /* Static chain equivalence may contain eliminable - regs and the result of elimination might be wrong - after restoring frame pointer for a nonlocal - goto. */ - || (cfun->static_chain_decl && crtl->has_nonlocal_goto - && REG_EXPR (reg) == cfun->static_chain_decl)) + || contains_symbol_ref_p (x)))) ira_reg_equiv[i].defined_p = false; if (contains_reg_p (x, false, true)) ira_reg_equiv[i].profitable_p = false; |