summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2014-03-14 12:54:25 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2014-03-14 12:54:25 +0000
commit671fe6509b7cf0b182a018b77f91ae494b2e32c1 (patch)
tree2e1efaa6b3462efc84836a6f0f0cf7d8df0b5654
parent0f3c9fa8d4f77947e0b699195dc067d7a832b119 (diff)
downloadppe42-gcc-671fe6509b7cf0b182a018b77f91ae494b2e32c1.tar.gz
ppe42-gcc-671fe6509b7cf0b182a018b77f91ae494b2e32c1.zip
2014-03-14 Richard Biener <rguenther@suse.de>
PR middle-end/60518 * cfghooks.c (split_block): Properly adjust all loops the block was a latch of. * g++.dg/pr60518.C: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@208567 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/cfghooks.c8
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/g++.dg/pr60518.C13
4 files changed, 32 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b2c7072cc20..95ae779284e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,4 +1,10 @@
-2014-03-13 Martin Jambor <mjambor@suse.cz>
+2014-03-14 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/60518
+ * cfghooks.c (split_block): Properly adjust all loops the
+ block was a latch of.
+
+2014-03-14 Martin Jambor <mjambor@suse.cz>
PR lto/60461
* ipa-prop.c (ipa_modify_call_arguments): Fix iteration condition
diff --git a/gcc/cfghooks.c b/gcc/cfghooks.c
index 7cf3cd50a66..bc1634aac87 100644
--- a/gcc/cfghooks.c
+++ b/gcc/cfghooks.c
@@ -510,9 +510,13 @@ split_block (basic_block bb, void *i)
if (current_loops != NULL)
{
+ edge_iterator ei;
+ edge e;
add_bb_to_loop (new_bb, bb->loop_father);
- if (bb->loop_father->latch == bb)
- bb->loop_father->latch = new_bb;
+ /* Identify all loops bb may have been the latch of and adjust them. */
+ FOR_EACH_EDGE (e, ei, new_bb->succs)
+ if (e->dest->loop_father->latch == bb)
+ e->dest->loop_father->latch = new_bb;
}
res = make_single_succ_edge (bb, new_bb, EDGE_FALLTHRU);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7f7c9743567..97e6bba7381 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,4 +1,9 @@
-2014-03-13 Martin Jambor <mjambor@suse.cz>
+2014-03-14 Richard Biener <rguenther@suse.de>
+
+ PR middle-end/60518
+ * g++.dg/pr60518.C: New testcase.
+
+2014-03-14 Martin Jambor <mjambor@suse.cz>
PR lto/60461
* gcc.dg/lto/pr60461_0.c: New test.
diff --git a/gcc/testsuite/g++.dg/pr60518.C b/gcc/testsuite/g++.dg/pr60518.C
new file mode 100644
index 00000000000..e3da48a2ec9
--- /dev/null
+++ b/gcc/testsuite/g++.dg/pr60518.C
@@ -0,0 +1,13 @@
+// { dg-do compile }
+// { dg-options "-Os -fprofile-use" }
+
+int a;
+int fn1 () { return a == ',' || a == ';'; }
+
+void fn2 ()
+{
+ do
+ while (fn1 ())
+ ;
+ while (1);
+}
OpenPOWER on IntegriCloud