From b147df0bcf1b4a8c27d1f77d749d3aa154ca922e Mon Sep 17 00:00:00 2001
From: Sebastian Pop <sebastian.pop@amd.com>
Date: Wed, 23 Dec 2009 07:50:53 +0000
Subject: [PATCH] re PR middle-end/42180 (compiling induct.f90 with 
 -ffast-math -O2 -fgraphite-identity ICEs gfortran)

Fix PR42180.

2009-12-18  Sebastian Pop  <sebastian.pop@amd.com>

	PR middle-end/42180
	* graphite-sese-to-poly.c (split_reduction_stmt): Do not split blocks
	that contain only one statement.

From-SVN: r155422
---
 gcc/ChangeLog.graphite                        |  6 ++++++
 gcc/graphite-sese-to-poly.c                   |  3 +++
 .../gfortran.dg/graphite/pr42180.f90          | 20 +++++++++++++++++++
 3 files changed, 29 insertions(+)
 create mode 100644 gcc/testsuite/gfortran.dg/graphite/pr42180.f90

diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite
index 9f61066ad7ad..ae3369e834fa 100644
--- a/gcc/ChangeLog.graphite
+++ b/gcc/ChangeLog.graphite
@@ -1,3 +1,9 @@
+2009-12-18  Sebastian Pop  <sebastian.pop@amd.com>
+
+	PR middle-end/42180
+	* graphite-sese-to-poly.c (split_reduction_stmt): Do not split blocks
+	that contain only one statement.
+
 2009-12-17  Sebastian Pop  <sebastian.pop@amd.com>
 
 	PR middle-end/42393
diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c
index 7b61ed72a21c..5999a655aeb1 100644
--- a/gcc/graphite-sese-to-poly.c
+++ b/gcc/graphite-sese-to-poly.c
@@ -2450,6 +2450,9 @@ split_reduction_stmt (gimple stmt)
 
   split_block (bb, stmt);
 
+  if (gsi_one_before_end_p (gsi_start_bb (bb)))
+    return bb;
+
   gsi = gsi_last_bb (bb);
   gsi_prev (&gsi);
   e = split_block (bb, gsi_stmt (gsi));
diff --git a/gcc/testsuite/gfortran.dg/graphite/pr42180.f90 b/gcc/testsuite/gfortran.dg/graphite/pr42180.f90
new file mode 100644
index 000000000000..6c8daeaea608
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/graphite/pr42180.f90
@@ -0,0 +1,20 @@
+module mcc_m
+  integer, parameter, private :: longreal = selected_real_kind(15,90)
+contains
+  subroutine mutual_ind_cir_cir_coils (m, l12)
+    real (kind = longreal), intent(out) :: l12
+    real (kind = longreal), dimension(1:9), save :: zw
+    gauss:do i = 1, 9
+       theta_l12 = 0.0_longreal
+       theta1:   do n1 = 1, 2*m
+          theta_1 = pi*real(n1,longreal)/real(m,longreal)
+          theta2:       do n2 = 1, 2*m
+             numerator = -sin(theta_1)*tvx + cos(theta_1)*tvy
+             theta_l12 = theta_l12 + numerator/denominator
+          end do theta2
+       end do theta1
+       l12 = l12 + zw(i)*theta_l12
+    end do gauss
+    l12 = coefficient * l12
+  end subroutine mutual_ind_cir_cir_coils
+end module mcc_m
-- 
GitLab