summaryrefslogtreecommitdiff
path: root/gcc/lra-constraints.c
diff options
context:
space:
mode:
authorvmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4>2013-10-25 21:34:26 +0000
committervmakarov <vmakarov@138bc75d-0d04-0410-961f-82ee72b054a4>2013-10-25 21:34:26 +0000
commite454a550477a651f415f7b67cced72ee01d2d1da (patch)
tree3ea933d09d48793f3d02906e2059a2fde73bc441 /gcc/lra-constraints.c
parentbcdf945cc95bc6963d77bdf2ae868be1d221ad81 (diff)
downloadgcc-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.c16
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)))