backport: re PR middle-end/45472 ([Middle-end volatile semantics] ICE: in move_op_ascend, at sel-sched.c:6124 with -fselective-scheduling2)

Backport from mainline
        2013-02-27  Andrey Belevantsev  <abel@ispras.ru>

        PR middle-end/45472

        * sel-sched-ir.c (merge_expr): Also change vinsn of merged expr
        when the may_trap_p bit of the exprs being merged differs.
        Reorder tests for speculativeness in the logical and operator.

        Backport from mainline
         2013-03-05  Jakub Jelinek  <jakub@redhat.com>

        PR middle-end/56461
        * sel-sched-ir.c (free_sched_pools): Release
        succs_info_pool.stack[succs_info_pool.max_top] vectors too
        if succs_info_pool.max_top isn't -1.

        Backport from mainline
        2013-02-27  Andrey Belevantsev  <abel@ispras.ru>

        PR middle-end/45472
        * gcc.dg/pr45472.c: New test.

From-SVN: r197299
This commit is contained in:
Andrey Belevantsev 2013-04-01 12:17:06 +04:00 committed by Andrey Belevantsev
parent a171f1c16c
commit d4e37aea87
4 changed files with 97 additions and 3 deletions

View File

@ -1,3 +1,22 @@
2013-04-01 Andrey Belevantsev <abel@ispras.ru>
Backport from mainline
2013-02-27 Andrey Belevantsev <abel@ispras.ru>
PR middle-end/45472
* sel-sched-ir.c (merge_expr): Also change vinsn of merged expr
when the may_trap_p bit of the exprs being merged differs.
Reorder tests for speculativeness in the logical and operator.
Backport from mainline
2013-03-05 Jakub Jelinek <jakub@redhat.com>
PR middle-end/56461
* sel-sched-ir.c (free_sched_pools): Release
succs_info_pool.stack[succs_info_pool.max_top] vectors too
if succs_info_pool.max_top isn't -1.
2013-04-01 Andrey Belevantsev <abel@ispras.ru>
Backport from mainline

View File

@ -1862,8 +1862,12 @@ merge_expr (expr_t to, expr_t from, insn_t split_point)
/* Make sure that speculative pattern is propagated into exprs that
have non-speculative one. This will provide us with consistent
speculative bits and speculative patterns inside expr. */
if (EXPR_SPEC_DONE_DS (to) == 0
&& EXPR_SPEC_DONE_DS (from) != 0)
if ((EXPR_SPEC_DONE_DS (from) != 0
&& EXPR_SPEC_DONE_DS (to) == 0)
/* Do likewise for volatile insns, so that we always retain
the may_trap_p bit on the resulting expression. */
|| (VINSN_MAY_TRAP_P (EXPR_VINSN (from))
&& !VINSN_MAY_TRAP_P (EXPR_VINSN (to))))
change_vinsn_in_expr (to, EXPR_VINSN (from));
merge_expr_data (to, from, split_point);
@ -5019,7 +5023,7 @@ free_sched_pools (void)
free_alloc_pool (sched_lists_pool);
gcc_assert (succs_info_pool.top == -1);
for (i = 0; i < succs_info_pool.max_top; i++)
for (i = 0; i <= succs_info_pool.max_top; i++)
{
VEC_free (rtx, heap, succs_info_pool.stack[i].succs_ok);
VEC_free (rtx, heap, succs_info_pool.stack[i].succs_other);

View File

@ -1,3 +1,11 @@
2013-04-01 Andrey Belevantsev <abel@ispras.ru>
Backport from mainline
2013-02-27 Andrey Belevantsev <abel@ispras.ru>
PR middle-end/45472
* gcc.dg/pr45472.c: New test.
2013-03-26 Richard Biener <rguenther@suse.de>
Backport from mainline

View File

@ -0,0 +1,63 @@
/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
/* { dg-options "-O -fschedule-insns2 -fselective-scheduling2" } */
struct S
{
volatile long vl;
int i;
};
struct S s1, s2;
void
foo (int j, int c)
{
int i;
for (i = 0; i <= j; i++)
{
if (c)
s2.vl += s1.vl;
s1 = s2;
}
}
/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
/* { dg-options "-O -fschedule-insns2 -fselective-scheduling2" } */
struct S
{
volatile long vl;
int i;
};
struct S s1, s2;
void
foo (int j, int c)
{
int i;
for (i = 0; i <= j; i++)
{
if (c)
s2.vl += s1.vl;
s1 = s2;
}
}
/* { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } */
/* { dg-options "-O -fschedule-insns2 -fselective-scheduling2" } */
struct S
{
volatile long vl;
int i;
};
struct S s1, s2;
void
foo (int j, int c)
{
int i;
for (i = 0; i <= j; i++)
{
if (c)
s2.vl += s1.vl;
s1 = s2;
}
}