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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@197299
138bc75d-0d04-0410-961f-
82ee72b054a4
+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
/* 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);
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);
+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
--- /dev/null
+/* { 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;
+ }
+}