mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-15 05:20:25 +08:00
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
This commit is contained in:
parent
0fcb564b72
commit
436a956a80
@ -1,3 +1,12 @@
|
||||
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);
|
||||
|
@ -1,3 +1,8 @@
|
||||
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
|
||||
|
21
gcc/testsuite/gcc.dg/pr45472.c
Normal file
21
gcc/testsuite/gcc.dg/pr45472.c
Normal file
@ -0,0 +1,21 @@
|
||||
/* { 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;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user