aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2007-10-19 11:25:55 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2007-10-19 11:25:55 +0000
commit1a8076fc5ed412f28e469fecb567dd223070b19d (patch)
treeff0365f8e88da673e0d9256f770f8b1d474f827b /gcc
parent213ce6f2c0708ec60e77e0b91cbb5b51b824775c (diff)
downloadgcc-1a8076fc5ed412f28e469fecb567dd223070b19d.zip
gcc-1a8076fc5ed412f28e469fecb567dd223070b19d.tar.gz
gcc-1a8076fc5ed412f28e469fecb567dd223070b19d.tar.bz2
re PR tree-optimization/32921 (Revision 126326 causes 12% slowdown)
2007-10-19 Richard Guenther <rguenther@suse.de> PR middle-end/32921 * tree.c (build_array_type): Do not re-layout unbound array types. * gfortran.dg/pr32921.f: New testcase. From-SVN: r129484
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/pr32921.f49
-rw-r--r--gcc/tree.c2
4 files changed, 61 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f7454c5..5756ae8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2007-10-19 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/32921
+ * tree.c (build_array_type): Do not re-layout unbound array
+ types.
+
2007-10-19 Richard Sandiford <rsandifo@nildram.co.uk>
* config/mips/mips.c (mips_canonicalize_comparison): Check
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5cbf244..a22c812 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-10-19 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/32921
+ * gfortran.dg/pr32921.f: New testcase.
+
2007-10-18 Benjamin Kosnik <bkoz@redhat.com>
* g++.old-deja/g++.robertl/eb130.C: Adjust include paths.
diff --git a/gcc/testsuite/gfortran.dg/pr32921.f b/gcc/testsuite/gfortran.dg/pr32921.f
new file mode 100644
index 0000000..d110301
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr32921.f
@@ -0,0 +1,49 @@
+! { dg-do compile }
+! { dg-options "-O2 -fdump-tree-lim" }
+! gfortran -c -m32 -O2 -S junk.f
+!
+ MODULE LES3D_DATA
+
+ IMPLICIT REAL*8 (A-H,O-Z)
+
+ PARAMETER ( NSPECI = 1, ND = 7 + NSPECI )
+
+ INTEGER IMAX
+
+ DOUBLE PRECISION,ALLOCATABLE,DIMENSION(:,:,:) ::
+ > UAV,QAV
+
+
+ END MODULE LES3D_DATA
+!---------------------------------------------------------------------
+!------------------------------------------------------------------------
+ SUBROUTINE FLUXI()
+
+ USE LES3D_DATA
+ IMPLICIT REAL*8(A-H,O-Z)
+
+ ALLOCATABLE QS(:)
+
+ ALLOCATE( QS(0:IMAX))
+ QS=0D0
+
+ RETURN
+ END
+!------------------------------------------------------------------------
+!------------------------------------------------------------------------
+ SUBROUTINE EXTRAPI()
+
+ USE LES3D_DATA
+ IMPLICIT REAL*8(A-H,O-Z)
+
+ I1 = 0
+ I2 = IMAX - 1
+
+ DO I = I1, I2
+ UAV(I,1,2) = QAV(I,1,2)
+ END DO
+
+ RETURN
+ END
+! { dg-final { scan-tree-dump-times "stride" 6 "lim" } }
+! { dg-final { cleanup-tree-dump "lim" } }
diff --git a/gcc/tree.c b/gcc/tree.c
index 88ec29e..3cfa55d 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -5665,7 +5665,7 @@ build_array_type (tree elt_type, tree index_type)
hashcode = iterative_hash_object (TYPE_HASH (index_type), hashcode);
t = type_hash_canon (hashcode, t);
- if (!COMPLETE_TYPE_P (t))
+ if (!COMPLETE_OR_UNBOUND_ARRAY_TYPE_P (t))
layout_type (t);
if (TYPE_CANONICAL (t) == t)