diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c695f47ca7e762e75adfdab8133ae4f0d1c8c4d0..59226336d6877a9d905c25382d9e989d54176864 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2009-03-25  Andrey Belevantsev  <abel@ispras.ru>
+
+	* config/ia64/ia64.c (ia64_set_sched_flags): Zero spec_info->mask when
+	neither of haifa/selective schedulers are working.
+
 2009-03-25  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
 	* doc/invoke.texi (Debugging Options): Fix description of
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index 420a8e463270a54d54cb1d9b1bafca302b990eec..da96fce6d4fbd28a660598f2753da8cbf260ace8 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -7274,6 +7274,8 @@ ia64_set_sched_flags (spec_info_t spec_info)
 	    spec_info->flags |= COUNT_SPEC_IN_CRITICAL_PATH;
 	}
     }
+  else
+    spec_info->mask = 0;
 }
 
 /* If INSN is an appropriate load return its mode.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 11b2ae3600208b166a6e2276a78c2d7fd8a8c1d2..afe6b7eb81d34dce277a292da491db8c5cd323b8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2009-03-25  Alexander Monakov  <amonakov@ispras.ru>
+
+        * gcc.target/ia64/20090324-1.c: New test.
+
 2009-03-25  Jakub Jelinek  <jakub@redhat.com>
 
 	PR c/27898
diff --git a/gcc/testsuite/gcc.target/ia64/20090324-1.c b/gcc/testsuite/gcc.target/ia64/20090324-1.c
new file mode 100644
index 0000000000000000000000000000000000000000..d9aff6a18b43722d8f8858e2110fc7373ef7088c
--- /dev/null
+++ b/gcc/testsuite/gcc.target/ia64/20090324-1.c
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -fmodulo-sched" } */
+
+static char *place_region_bounds_x, *place_region_bounds_y;
+static void read_place () {
+  char msg[300];
+  update_screen (msg);
+}
+static void alloc_and_load_placement_structs () {
+  int i, j;
+  for (j=0;
+      j<100;
+      j++) {
+    place_region_bounds_x[i] = place_region_bounds_x[i-1];
+    place_region_bounds_y[i] = place_region_bounds_y[i-1];
+  }
+}
+void place_and_route () {
+  read_place ();
+  alloc_and_load_placement_structs ();
+}