summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorabel <abel@138bc75d-0d04-0410-961f-82ee72b054a4>2013-04-30 10:55:52 +0000
committerabel <abel@138bc75d-0d04-0410-961f-82ee72b054a4>2013-04-30 10:55:52 +0000
commitd5897457cc8c10dae2b805269dcb8ff1b547de87 (patch)
tree3d9c0e789beb68074f0dcebb9a4ca3f6bc4ca676
parent060d11f4169cceb8bea7a5a4739163ce249be6e1 (diff)
downloadppe42-gcc-d5897457cc8c10dae2b805269dcb8ff1b547de87.tar.gz
ppe42-gcc-d5897457cc8c10dae2b805269dcb8ff1b547de87.zip
PR rtl-optimization/56957
PR rtl-optimization/57105 * sel-sched.c (move_op_orig_expr_found): Remove insn_emitted variable. Use just INSN_UID for determining whether an insn should be only disconnected from the insn stream. * sel-sched-ir.h (EXPR_WAS_CHANGED): Remove. * gcc.dg/pr57105.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@198449 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/sel-sched-ir.h2
-rw-r--r--gcc/sel-sched.c7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr57105.c18
5 files changed, 36 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 236a905f7f3..cde1dec3578 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2013-04-30 Andrey Belevantsev <abel@ispras.ru>
+
+ PR rtl-optimization/56957
+ PR rtl-optimization/57105
+
+ * sel-sched.c (move_op_orig_expr_found): Remove insn_emitted
+ variable. Use just INSN_UID for determining whether an insn
+ should be only disconnected from the insn stream.
+ * sel-sched-ir.h (EXPR_WAS_CHANGED): Remove.
+
2013-04-30 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/57104
diff --git a/gcc/sel-sched-ir.h b/gcc/sel-sched-ir.h
index 6d9394a4428..486159dd262 100644
--- a/gcc/sel-sched-ir.h
+++ b/gcc/sel-sched-ir.h
@@ -191,8 +191,6 @@ typedef expr_def *expr_t;
#define EXPR_WAS_RENAMED(EXPR) ((EXPR)->was_renamed)
#define EXPR_CANT_MOVE(EXPR) ((EXPR)->cant_move)
-#define EXPR_WAS_CHANGED(EXPR) (EXPR_HISTORY_OF_CHANGES (EXPR).length () > 0)
-
/* Insn definition for list of original insns in find_used_regs. */
struct _def
{
diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c
index 11bf2e62c31..fb9386f9690 100644
--- a/gcc/sel-sched.c
+++ b/gcc/sel-sched.c
@@ -6051,14 +6051,13 @@ move_op_orig_expr_found (insn_t insn, expr_t expr,
cmpd_local_params_p lparams ATTRIBUTE_UNUSED,
void *static_params)
{
- bool only_disconnect, insn_emitted;
+ bool only_disconnect;
moveop_static_params_p params = (moveop_static_params_p) static_params;
copy_expr_onside (params->c_expr, INSN_EXPR (insn));
track_scheduled_insns_and_blocks (insn);
- insn_emitted = handle_emitting_transformations (insn, expr, params);
- only_disconnect = (params->uid == INSN_UID (insn)
- && ! insn_emitted && ! EXPR_WAS_CHANGED (expr));
+ handle_emitting_transformations (insn, expr, params);
+ only_disconnect = params->uid == INSN_UID (insn);
/* Mark that we've disconnected an insn. */
if (only_disconnect)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 77183feb8f2..00576eec6a3 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2013-04-30 Andrey Belevantsev <abel@ispras.ru>
+
+ PR rtl-optimization/57105
+ * gcc.dg/pr57105.c: New test.
+
2013-04-30 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/57104
diff --git a/gcc/testsuite/gcc.dg/pr57105.c b/gcc/testsuite/gcc.dg/pr57105.c
new file mode 100644
index 00000000000..a968f52375e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr57105.c
@@ -0,0 +1,18 @@
+/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */
+/* { dg-options "-Os -fselective-scheduling2 -g" } */
+int bar (int);
+int *baz (int *);
+
+void
+foo (int a)
+{
+ while (bar (0))
+ {
+ int *c = baz (0);
+ if (a)
+ {
+ int i = *baz (c);
+ }
+ bar (*baz (c));
+ }
+}
OpenPOWER on IntegriCloud