diff options
author | vmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-10-25 21:34:26 +0000 |
---|---|---|
committer | vmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-10-25 21:34:26 +0000 |
commit | e454a550477a651f415f7b67cced72ee01d2d1da (patch) | |
tree | 3ea933d09d48793f3d02906e2059a2fde73bc441 /gcc/lra-constraints.c | |
parent | bcdf945cc95bc6963d77bdf2ae868be1d221ad81 (diff) | |
download | gcc-e454a550477a651f415f7b67cced72ee01d2d1da.tar.gz |
2013-10-25 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/58759
* lra-constraints.c (lra_constraints): Remove wrong condition to
remove insn setting up an equivalent pseudo.
2013-10-25 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/58759
* gcc.target/i386/pr58759.c: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@204080 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/lra-constraints.c')
-rw-r--r-- | gcc/lra-constraints.c | 16 |
1 files changed, 3 insertions, 13 deletions
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index e741dd60a73..a2d348d8dfe 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -3975,18 +3975,6 @@ lra_constraints (bool first_p) dest_reg = SUBREG_REG (dest_reg); if ((REG_P (dest_reg) && (x = get_equiv_substitution (dest_reg)) != dest_reg - /* Check that this is actually an insn setting up - the equivalence. */ - && (in_list_p (curr_insn, - ira_reg_equiv - [REGNO (dest_reg)].init_insns) - /* Init insns may contain not all insns setting - up equivalence as we have live range - splitting. So here we use another condition - to check insn setting up the equivalence - which should be removed, e.g. in case when - the equivalence is a constant. */ - || ! MEM_P (x)) /* Remove insns which set up a pseudo whose value can not be changed. Such insns might be not in init_insns because we don't update equiv data @@ -3999,8 +3987,10 @@ lra_constraints (bool first_p) secondary memory movement. Then the pseudo is spilled and we use the equiv constant. In this case we should remove the additional insn and - this insn is not init_insns list. */ + this insn is not init_insns list. */ && (! MEM_P (x) || MEM_READONLY_P (x) + /* Check that this is actually an insn setting + up the equivalence. */ || in_list_p (curr_insn, ira_reg_equiv [REGNO (dest_reg)].init_insns))) |