diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cce04d58cab2afdb5ef43bb64a2b08a31b0f3d83..1745a365e8624a4cfd2e73484dd3b928e80416cd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2009-04-22  Andrey Belevantsev  <abel@ispras.ru>
+
+	PR rtl-optimization/39580
+	* sel-sched-ir.c (insert_in_history_vect): Remove incorrect gcc_assert. 
+	
 2009-04-22  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
 
 	* function.c (expand_function_end): Do not emit a jump to the "naked"
diff --git a/gcc/sel-sched-ir.c b/gcc/sel-sched-ir.c
index 6f16d751bee9fc1249e652b3d4138839ba7de9fb..45a50d9fef0681d68c9d268b3b68f6036175db88 100644
--- a/gcc/sel-sched-ir.c
+++ b/gcc/sel-sched-ir.c
@@ -1505,14 +1505,6 @@ insert_in_history_vect (VEC (expr_history_def, heap) **pvect,
     {
       expr_history_def *phist = VEC_index (expr_history_def, vect, ind);
 
-      /* When merging, either old vinsns are the *same* or, if not, both 
-         old and new vinsns are different pointers.  In the latter case, 
-         though, new vinsns should be equal.  */
-      gcc_assert (phist->old_expr_vinsn == old_expr_vinsn
-                  || (phist->new_expr_vinsn != new_expr_vinsn 
-                      && (vinsn_equal_p 
-                          (phist->old_expr_vinsn, old_expr_vinsn))));
-
       /* It is possible that speculation types of expressions that were 
          propagated through different paths will be different here.  In this
          case, merge the status to get the correct check later.  */