diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 51476b1a7ddd49b80f4d0f0305fceaf7b491feea..e3410473d09ef32975a9bd02cc02730e65fea09e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2006-12-07  Maxim Kuvyrkov  <mkuvyrkov@ispras.ru>
+
+	PR target/29794
+	* sched-rgn.c (add_block1): Use correct initializer.
+
 2006-12-07  Richard Guenther  <rguenther@suse.de>
 
 	* tree-vect-transform.c (vectorizable_call): Fix leftover of
diff --git a/gcc/sched-rgn.c b/gcc/sched-rgn.c
index 8b9cf9931beaf0914e77d379a65fc7aba5320072..7f7f58692388683a7856b9e072339e0f1b114350 100644
--- a/gcc/sched-rgn.c
+++ b/gcc/sched-rgn.c
@@ -3124,9 +3124,15 @@ add_block1 (basic_block bb, basic_block after)
 	 is _always_ valid for access.  */
 
       i = BLOCK_TO_BB (after->index) + 1;
-      for (pos = ebb_head[i]; rgn_bb_table[pos] != after->index; pos--);
+      pos = ebb_head[i] - 1;
+      /* Now POS is the index of the last block in the region.  */
+
+      /* Find index of basic block AFTER.  */
+      for (; rgn_bb_table[pos] != after->index; pos--);
+
       pos++;
       gcc_assert (pos > ebb_head[i - 1]);
+
       /* i - ebb right after "AFTER".  */
       /* ebb_head[i] - VALID.  */