diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5e1b4669c14fb7a67a884ab9bd941a175c54781e..29a4002c2b7540c964e3d1faf23be0342c57d268 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-09-04  H.J. Lu  <hongjiu.lu@intel.com>
+
+	PR rtl-optimization/37243
+	* gfortran.dg/pr37243.f: New.
+
 2008-09-03  Jan Hubicka  <jh@suse.cz>
 
 	PR middle-end/37343
diff --git a/gcc/testsuite/gfortran.dg/pr37243.f b/gcc/testsuite/gfortran.dg/pr37243.f
new file mode 100644
index 0000000000000000000000000000000000000000..143800c5e75c035ad86c2db33b9b37da63da5beb
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr37243.f
@@ -0,0 +1,61 @@
+! PR rtl-optimization/37243
+! { dg-do run }
+! Check if register allocator handles IR flattening correctly.
+      SUBROUTINE SCHMD(V,M,N,LDV)
+      IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+      LOGICAL GOPARR,DSKWRK,MASWRK
+      DIMENSION V(LDV,N)
+      COMMON /IOFILE/ IR,IW,IP,IS,IPK,IDAF,NAV,IODA(400)
+      COMMON /PAR   / ME,MASTER,NPROC,IBTYP,IPTIM,GOPARR,DSKWRK,MASWRK
+      PARAMETER (ZERO=0.0D+00, ONE=1.0D+00, TOL=1.0D-10)
+      IF (M .EQ. 0) GO TO 180
+      DO 160 I = 1,M
+      DUMI = ZERO
+      DO 100 K = 1,N
+  100 DUMI = DUMI+V(K,I)*V(K,I)
+      DUMI = ONE/ SQRT(DUMI)
+      DO 120 K = 1,N
+  120 V(K,I) = V(K,I)*DUMI
+      IF (I .EQ. M) GO TO 160
+      I1 = I+1
+      DO 140 J = I1,M
+      DUM = -DDOT(N,V(1,J),1,V(1,I),1)
+      CALL DAXPY(N,DUM,V(1,I),1,V(1,J),1)
+  140 CONTINUE
+  160 CONTINUE
+      IF (M .EQ. N) RETURN
+  180 CONTINUE
+      I = M
+      J = 0
+  200 I0 = I
+      I = I+1
+      IF (I .GT. N) RETURN
+  220 J = J+1
+      IF (J .GT. N) GO TO 320
+      DO 240 K = 1,N
+  240 V(K,I) = ZERO
+      CALL DAXPY(N,DUM,V(1,II),1,V(1,I),1)
+  260 CONTINUE
+      DUMI = ZERO
+      DO 280 K = 1,N
+  280 DUMI = DUMI+V(K,I)*V(K,I)
+      IF ( ABS(DUMI) .LT. TOL) GO TO 220
+      DO 300 K = 1,N
+  300 V(K,I) = V(K,I)*DUMI
+      GO TO 200
+  320 END
+      program main
+      DOUBLE PRECISION V
+      DIMENSION V(18, 18)
+      common // v
+
+      call schmd(V, 1, 18, 18)
+      end
+
+      subroutine DAXPY
+      end
+
+      FUNCTION DDOT ()
+      DOUBLE PRECISION DDOT
+      DDOT = 1
+      end