Commit 436a956a by Andrey Belevantsev Committed by Andrey Belevantsev

re PR middle-end/45472 ([Middle-end volatile semantics] ICE: in move_op_ascend,…

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

        PR middle-end/45472

	gcc/
        * 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.

	testsuite/
	* gcc.dg/45472.c: New test.

From-SVN: r196308
parent 0fcb564b
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.
2013-02-27 Jakub Jelinek <jakub@redhat.com>
* incpath.c (add_standard_paths): Use reconcat instead of concat
......
......@@ -1866,8 +1866,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);
......
2013-02-27 Andrey Belevantsev <abel@ispras.ru>
PR middle-end/45472
* gcc.dg/pr45472.c: New test.
2013-02-26 Marek Polacek <polacek@redhat.com>
PR tree-optimization/56426
......
/* { 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;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment