diff options
author | Andrey Belevantsev <abel@ispras.ru> | 2013-04-30 14:55:52 +0400 |
---|---|---|
committer | Andrey Belevantsev <abel@gcc.gnu.org> | 2013-04-30 14:55:52 +0400 |
commit | 54b8379a261d1b36958aecbca568ef6475a8e1ca (patch) | |
tree | 3d9c0e789beb68074f0dcebb9a4ca3f6bc4ca676 | |
parent | abc27962b81152a9c68108b2e11e8a90129a46e9 (diff) | |
download | gcc-54b8379a261d1b36958aecbca568ef6475a8e1ca.zip gcc-54b8379a261d1b36958aecbca568ef6475a8e1ca.tar.gz gcc-54b8379a261d1b36958aecbca568ef6475a8e1ca.tar.bz2 |
re PR rtl-optimization/56957 (ICE in add_insn_after, at emit-rtl.c:3783)
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.
From-SVN: r198449
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/sel-sched-ir.h | 2 | ||||
-rw-r--r-- | gcc/sel-sched.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr57105.c | 18 |
5 files changed, 36 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 236a905..cde1dec 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 6d9394a..486159d 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 11bf2e6..fb9386f 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 77183fe..00576ee 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 0000000..a968f52 --- /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)); + } +} |