From 0f84a7fde5ce224d4eb112f3ca64cfe1a00ca9fe Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 7 Dec 2010 16:23:15 +0100 Subject: [PATCH] backport: re PR middle-end/46629 (Failed to build 200.sixtrack in SPEC CPU 2000) Backport from mainline 2010-11-24 Jakub Jelinek PR middle-end/46629 * cfgexpand.c (maybe_cleanup_end_of_block): Test NEXT_INSN (insn) instead of insn with any_condjump_p. 2010-11-23 Jakub Jelinek PR middle-end/46499 * cfgexpand.c (maybe_cleanup_end_of_block): Remove also BARRIERs following unconditional jumps. * gcc.dg/pr46499-1.c: New test. * gcc.dg/pr46499-2.c: New test. From-SVN: r167545 --- gcc/ChangeLog | 15 +++++++++++++++ gcc/cfgexpand.c | 9 ++++++++- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gcc.dg/pr46499-1.c | 31 +++++++++++++++++++++++++++++++ gcc/testsuite/gcc.dg/pr46499-2.c | 19 +++++++++++++++++++ 5 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/pr46499-1.c create mode 100644 gcc/testsuite/gcc.dg/pr46499-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3d73e3f32248..c48faac196a8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,18 @@ +2010-12-07 Jakub Jelinek + + Backport from mainline + 2010-11-24 Jakub Jelinek + + PR middle-end/46629 + * cfgexpand.c (maybe_cleanup_end_of_block): Test NEXT_INSN (insn) + instead of insn with any_condjump_p. + + 2010-11-23 Jakub Jelinek + + PR middle-end/46499 + * cfgexpand.c (maybe_cleanup_end_of_block): Remove also BARRIERs + following unconditional jumps. + 2010-12-07 Sebastian Pop Backport from mainline: diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 69c3f5f56ee1..751bcd41c9e0 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -1573,7 +1573,14 @@ maybe_cleanup_end_of_block (edge e, rtx last) { insn = PREV_INSN (insn); if (JUMP_P (NEXT_INSN (insn))) - delete_insn (NEXT_INSN (insn)); + { + if (!any_condjump_p (NEXT_INSN (insn))) + { + gcc_assert (BARRIER_P (NEXT_INSN (NEXT_INSN (insn)))); + delete_insn (NEXT_INSN (NEXT_INSN (insn))); + } + delete_insn (NEXT_INSN (insn)); + } } } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d1a901c80074..297cc14d29dc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,12 @@ 2010-12-07 Jakub Jelinek Backport from mainline + 2010-11-23 Jakub Jelinek + + PR middle-end/46499 + * gcc.dg/pr46499-1.c: New test. + * gcc.dg/pr46499-2.c: New test. + 2010-11-20 Jakub Jelinek PR c++/46538 diff --git a/gcc/testsuite/gcc.dg/pr46499-1.c b/gcc/testsuite/gcc.dg/pr46499-1.c new file mode 100644 index 000000000000..9815272e681b --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr46499-1.c @@ -0,0 +1,31 @@ +/* PR middle-end/46499 */ +/* { dg-do run } */ +/* { dg-options "-O -fno-omit-frame-pointer -fno-tree-ccp -fno-tree-dominator-opts -finline-small-functions" } */ + +extern void abort (void); + +int count = 0; + +int +foo (void) +{ + count++; + return 0; +} + +int +bar (void) +{ + count++; + return 0; +} + +int +main () +{ + if ((foo () == 1) & (bar () == 1)) + abort (); + if (count != 2) + abort (); + return 0; +} diff --git a/gcc/testsuite/gcc.dg/pr46499-2.c b/gcc/testsuite/gcc.dg/pr46499-2.c new file mode 100644 index 000000000000..c3a264816d3f --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr46499-2.c @@ -0,0 +1,19 @@ +/* PR middle-end/46499 */ +/* { dg-do compile } */ +/* { dg-options "-O -fno-tree-ccp -fno-tree-dominator-opts" } */ + +extern void abort (void); + +static inline int +foo (void) +{ + return 0; +} + +int +main () +{ + if ((foo () == 1) & (foo () == 1)) + abort (); + return 0; +} -- 2.47.2