diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c2accb758de0ece598fa37b605294d89f920179c..ebd19f7a06fcff79d2f66808233d60b8142c421c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2013-02-26  Marek Polacek  <polacek@redhat.com>
+
+	PR tree-optimization/56426
+	* tree-ssa-loop.c (tree_ssa_loop_init): Always call
+	scev_initialize.
+
 2013-02-26  Richard Biener  <rguenther@suse.de>
 
 	PR target/56444
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1da7b6fe03a30df173d82d84f1a67e2b9f1296e8..9f00b8708c29b17217e12d5638f1a56313870757 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2013-02-26  Marek Polacek  <polacek@redhat.com>
+
+	PR tree-optimization/56426
+	* gcc.dg/pr56436.c: New test.
+
 2013-02-26  Jakub Jelinek  <jakub@redhat.com>
 
 	PR tree-optimization/56448
diff --git a/gcc/testsuite/gcc.dg/pr56436.c b/gcc/testsuite/gcc.dg/pr56436.c
new file mode 100644
index 0000000000000000000000000000000000000000..cae4d2a4bd291c650952cdb175280bdbe510c7bc
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr56436.c
@@ -0,0 +1,22 @@
+/* PR tree-optimization/56426 */
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+
+int a, *c;
+
+void
+f (void)
+{
+  int b = 0;
+
+  for (a = 0;; a++)
+    if (--b)
+      {
+	if (a)
+	lbl:
+	  a++;
+
+	c = &b;
+	goto lbl;
+      }
+}
diff --git a/gcc/tree-ssa-loop.c b/gcc/tree-ssa-loop.c
index f4a270461236fa73dcb5030ef459e3c969f80ec0..edc04eaa014964d81f73d4a43101e1312215edf9 100644
--- a/gcc/tree-ssa-loop.c
+++ b/gcc/tree-ssa-loop.c
@@ -70,10 +70,13 @@ tree_ssa_loop_init (void)
 		       | LOOPS_HAVE_RECORDED_EXITS);
   rewrite_into_loop_closed_ssa (NULL, TODO_update_ssa);
 
+  /* We might discover new loops, e.g. when turning irreducible
+     regions into reducible.  */
+  scev_initialize ();
+
   if (number_of_loops () <= 1)
     return 0;
 
-  scev_initialize ();
   return 0;
 }