]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR libfortran/80602 (Reduce stack usage for blocked matmul)
authorThomas Koenig <tkoenig@gcc.gnu.org>
Mon, 8 May 2017 17:56:13 +0000 (17:56 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Mon, 8 May 2017 17:56:13 +0000 (17:56 +0000)
2017-05-08  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/80602
* m4/matmul_internal.m4:  'matmul_name`:  Change
t1 to a VLA of the required size.
        * generated/matmul_c10.c: Regenerated.
        * generated/matmul_c16.c: Regenerated.
        * generated/matmul_c4.c: Regenerated.
        * generated/matmul_c8.c: Regenerated.
        * generated/matmul_i1.c: Regenerated.
        * generated/matmul_i16.c: Regenerated.
        * generated/matmul_i2.c: Regenerated.
        * generated/matmul_i4.c: Regenerated.
        * generated/matmul_i8.c: Regenerated.
        * generated/matmul_r10.c: Regenerated.
        * generated/matmul_r16.c: Regenerated.
        * generated/matmul_r4.c: Regenerated.
        * generated/matmul_r8.c: Regenerated.

2017-05-08  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/80602
* gfortran.dg/matmul_15.f90:  New test case.

From-SVN: r247753

18 files changed:
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/matmul_15.f90 [new file with mode: 0644]
libgfortran/ChangeLog
libgfortran/Makefile.in
libgfortran/generated/matmul_c10.c
libgfortran/generated/matmul_c16.c
libgfortran/generated/matmul_c4.c
libgfortran/generated/matmul_c8.c
libgfortran/generated/matmul_i1.c
libgfortran/generated/matmul_i16.c
libgfortran/generated/matmul_i2.c
libgfortran/generated/matmul_i4.c
libgfortran/generated/matmul_i8.c
libgfortran/generated/matmul_r10.c
libgfortran/generated/matmul_r16.c
libgfortran/generated/matmul_r4.c
libgfortran/generated/matmul_r8.c
libgfortran/m4/matmul_internal.m4

index 14f201b805795675632359fcde14323ade49e900..6e2e5993c3b5e571071b0f005e93368382c7bddf 100644 (file)
@@ -1,3 +1,8 @@
+2017-05-08  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/80602
+       * gfortran.dg/matmul_15.f90:  New test case.
+
 2017-05-08  Wilco Dijkstra  <wdijkstr@arm.com>
 
        * testsuite/gcc.dg/vect/vect-44.c: Add -fno-vect-cost-model.
diff --git a/gcc/testsuite/gfortran.dg/matmul_15.f90 b/gcc/testsuite/gfortran.dg/matmul_15.f90
new file mode 100644 (file)
index 0000000..9e731ed
--- /dev/null
@@ -0,0 +1,34 @@
+! { dg-do  run }
+! { dg-options "-finline-matmul-limit=0" }
+! Stress-test the matmul blocking code with sizes close to or
+! equal to powers ot two.
+
+program main
+  implicit none
+  integer, dimension(*), parameter :: nn = &
+       & [2,3,4,5, 7,8,9, 15,16,17, 31,32,33, 63,64,65, &
+       127 ,228,129,  255,256,257];
+  integer, parameter :: s = size(nn)
+  real, dimension(:,:),allocatable :: a, b, c
+  integer :: i1, i2, i3
+  integer :: nx, ny, count
+  real :: sm
+
+  sm = 0.0
+  do i1=1, s
+     nx = nn(i1)
+     do i2=1,s
+        ny = nn(i2)
+        do i3=1,s
+           count = nn(i3)
+           allocate (a(nx,ny), b(ny,count), c(nx,count))
+           call random_number(a)
+           call random_number(b)
+           c = matmul(a,b)
+           sm = sm + sum(c)
+           deallocate(a,b,c)
+        end do
+     end do
+  end do
+
+end program main
index ad8d95c1b192f8dc1295dad83f4ac7a66f33afa7..e29301a5d0ffe96bfa5e11c5806dc84fa1789112 100644 (file)
@@ -1,3 +1,22 @@
+2017-05-08  Thomas Koenig  <tkoenig@gcc.gnu.org>
+
+       PR fortran/80602
+       * m4/matmul_internal.m4:  'matmul_name`:  Change
+       t1 to a VLA of the required size.
+        * generated/matmul_c10.c: Regenerated.
+        * generated/matmul_c16.c: Regenerated.
+        * generated/matmul_c4.c: Regenerated.
+        * generated/matmul_c8.c: Regenerated.
+        * generated/matmul_i1.c: Regenerated.
+        * generated/matmul_i16.c: Regenerated.
+        * generated/matmul_i2.c: Regenerated.
+        * generated/matmul_i4.c: Regenerated.
+        * generated/matmul_i8.c: Regenerated.
+        * generated/matmul_r10.c: Regenerated.
+        * generated/matmul_r16.c: Regenerated.
+        * generated/matmul_r4.c: Regenerated.
+        * generated/matmul_r8.c: Regenerated.
+
 2017-04-11  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        * close.c: Fix white space in pointer declarations and comment
index 05b183dcadb0763498bef04adb92c15b9c50ca07..4914a6f323f284b0c3fdedf22025f31f7ea48169 100644 (file)
@@ -137,8 +137,9 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \
        $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \
        $(top_srcdir)/acinclude.m4 $(top_srcdir)/../config/acx.m4 \
        $(top_srcdir)/../config/no-executables.m4 \
-       $(top_srcdir)/../config/math.m4 $(top_srcdir)/../libtool.m4 \
-       $(top_srcdir)/configure.ac
+       $(top_srcdir)/../config/math.m4 \
+       $(top_srcdir)/../config/ax_check_define.m4 \
+       $(top_srcdir)/../libtool.m4 $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
index c8e7a6c37fbddd520c8fc635e213984e1bf289dd..55f8fe9ab5578527afe814f7222b17bed5a6d7df 100644 (file)
@@ -286,8 +286,7 @@ matmul_c10_avx (gfc_array_c10 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_COMPLEX_10 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_COMPLEX_10 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -311,6 +310,17 @@ matmul_c10_avx (gfc_array_c10 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_COMPLEX_10 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -829,8 +839,7 @@ matmul_c10_avx2 (gfc_array_c10 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_COMPLEX_10 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_COMPLEX_10 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -854,6 +863,17 @@ matmul_c10_avx2 (gfc_array_c10 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_COMPLEX_10 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1372,8 +1392,7 @@ matmul_c10_avx512f (gfc_array_c10 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_COMPLEX_10 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_COMPLEX_10 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1397,6 +1416,17 @@ matmul_c10_avx512f (gfc_array_c10 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_COMPLEX_10 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1911,8 +1941,7 @@ matmul_c10_vanilla (gfc_array_c10 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_COMPLEX_10 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_COMPLEX_10 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1936,6 +1965,17 @@ matmul_c10_vanilla (gfc_array_c10 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_COMPLEX_10 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -2508,8 +2548,7 @@ matmul_c10 (gfc_array_c10 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_COMPLEX_10 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_COMPLEX_10 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -2533,6 +2572,17 @@ matmul_c10 (gfc_array_c10 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_COMPLEX_10 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
index adbf1c81a7ae4b984efa3ee65b9c2e660acc1395..bc90296f5e7c46c295be40c0c40fca2720eace13 100644 (file)
@@ -286,8 +286,7 @@ matmul_c16_avx (gfc_array_c16 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_COMPLEX_16 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_COMPLEX_16 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -311,6 +310,17 @@ matmul_c16_avx (gfc_array_c16 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_COMPLEX_16 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -829,8 +839,7 @@ matmul_c16_avx2 (gfc_array_c16 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_COMPLEX_16 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_COMPLEX_16 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -854,6 +863,17 @@ matmul_c16_avx2 (gfc_array_c16 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_COMPLEX_16 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1372,8 +1392,7 @@ matmul_c16_avx512f (gfc_array_c16 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_COMPLEX_16 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_COMPLEX_16 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1397,6 +1416,17 @@ matmul_c16_avx512f (gfc_array_c16 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_COMPLEX_16 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1911,8 +1941,7 @@ matmul_c16_vanilla (gfc_array_c16 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_COMPLEX_16 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_COMPLEX_16 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1936,6 +1965,17 @@ matmul_c16_vanilla (gfc_array_c16 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_COMPLEX_16 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -2508,8 +2548,7 @@ matmul_c16 (gfc_array_c16 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_COMPLEX_16 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_COMPLEX_16 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -2533,6 +2572,17 @@ matmul_c16 (gfc_array_c16 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_COMPLEX_16 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
index ff0e76a9275ed4f71848a76dcac35aa8a45cd4cd..12418009c2e2b4268cc183d0a86f98d4b1df5148 100644 (file)
@@ -286,8 +286,7 @@ matmul_c4_avx (gfc_array_c4 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_COMPLEX_4 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_COMPLEX_4 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -311,6 +310,17 @@ matmul_c4_avx (gfc_array_c4 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_COMPLEX_4 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -829,8 +839,7 @@ matmul_c4_avx2 (gfc_array_c4 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_COMPLEX_4 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_COMPLEX_4 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -854,6 +863,17 @@ matmul_c4_avx2 (gfc_array_c4 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_COMPLEX_4 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1372,8 +1392,7 @@ matmul_c4_avx512f (gfc_array_c4 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_COMPLEX_4 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_COMPLEX_4 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1397,6 +1416,17 @@ matmul_c4_avx512f (gfc_array_c4 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_COMPLEX_4 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1911,8 +1941,7 @@ matmul_c4_vanilla (gfc_array_c4 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_COMPLEX_4 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_COMPLEX_4 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1936,6 +1965,17 @@ matmul_c4_vanilla (gfc_array_c4 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_COMPLEX_4 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -2508,8 +2548,7 @@ matmul_c4 (gfc_array_c4 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_COMPLEX_4 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_COMPLEX_4 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -2533,6 +2572,17 @@ matmul_c4 (gfc_array_c4 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_COMPLEX_4 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
index 483ebf114d718733534dfd598ee51e2980d96f2e..aafa3be182124ce444e6195367de57b880e4ca09 100644 (file)
@@ -286,8 +286,7 @@ matmul_c8_avx (gfc_array_c8 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_COMPLEX_8 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_COMPLEX_8 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -311,6 +310,17 @@ matmul_c8_avx (gfc_array_c8 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_COMPLEX_8 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -829,8 +839,7 @@ matmul_c8_avx2 (gfc_array_c8 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_COMPLEX_8 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_COMPLEX_8 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -854,6 +863,17 @@ matmul_c8_avx2 (gfc_array_c8 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_COMPLEX_8 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1372,8 +1392,7 @@ matmul_c8_avx512f (gfc_array_c8 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_COMPLEX_8 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_COMPLEX_8 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1397,6 +1416,17 @@ matmul_c8_avx512f (gfc_array_c8 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_COMPLEX_8 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1911,8 +1941,7 @@ matmul_c8_vanilla (gfc_array_c8 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_COMPLEX_8 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_COMPLEX_8 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1936,6 +1965,17 @@ matmul_c8_vanilla (gfc_array_c8 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_COMPLEX_8 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -2508,8 +2548,7 @@ matmul_c8 (gfc_array_c8 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_COMPLEX_8 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_COMPLEX_8 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -2533,6 +2572,17 @@ matmul_c8 (gfc_array_c8 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_COMPLEX_8 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
index 51cfcc05360728ebf1bfc9f95edfe607158ff223..bbf84a9c7dc837b88a79b18808d6a3adce4de760 100644 (file)
@@ -286,8 +286,7 @@ matmul_i1_avx (gfc_array_i1 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_1 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_1 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -311,6 +310,17 @@ matmul_i1_avx (gfc_array_i1 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_1 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -829,8 +839,7 @@ matmul_i1_avx2 (gfc_array_i1 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_1 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_1 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -854,6 +863,17 @@ matmul_i1_avx2 (gfc_array_i1 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_1 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1372,8 +1392,7 @@ matmul_i1_avx512f (gfc_array_i1 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_1 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_1 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1397,6 +1416,17 @@ matmul_i1_avx512f (gfc_array_i1 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_1 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1911,8 +1941,7 @@ matmul_i1_vanilla (gfc_array_i1 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_1 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_1 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1936,6 +1965,17 @@ matmul_i1_vanilla (gfc_array_i1 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_1 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -2508,8 +2548,7 @@ matmul_i1 (gfc_array_i1 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_1 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_1 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -2533,6 +2572,17 @@ matmul_i1 (gfc_array_i1 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_1 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
index 90a422f42900a914cb52a55c72c1eb010c75abb9..1394aba0aa72799bb2e5f481c3bb27582edcacef 100644 (file)
@@ -286,8 +286,7 @@ matmul_i16_avx (gfc_array_i16 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_16 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_16 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -311,6 +310,17 @@ matmul_i16_avx (gfc_array_i16 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_16 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -829,8 +839,7 @@ matmul_i16_avx2 (gfc_array_i16 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_16 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_16 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -854,6 +863,17 @@ matmul_i16_avx2 (gfc_array_i16 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_16 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1372,8 +1392,7 @@ matmul_i16_avx512f (gfc_array_i16 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_16 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_16 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1397,6 +1416,17 @@ matmul_i16_avx512f (gfc_array_i16 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_16 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1911,8 +1941,7 @@ matmul_i16_vanilla (gfc_array_i16 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_16 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_16 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1936,6 +1965,17 @@ matmul_i16_vanilla (gfc_array_i16 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_16 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -2508,8 +2548,7 @@ matmul_i16 (gfc_array_i16 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_16 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_16 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -2533,6 +2572,17 @@ matmul_i16 (gfc_array_i16 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_16 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
index 58be84fc9c82b43d46d798e7c8b06a18aa193dab..9ffe75bdff819f643029cfc6f340a1eb1cddbc31 100644 (file)
@@ -286,8 +286,7 @@ matmul_i2_avx (gfc_array_i2 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_2 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_2 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -311,6 +310,17 @@ matmul_i2_avx (gfc_array_i2 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_2 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -829,8 +839,7 @@ matmul_i2_avx2 (gfc_array_i2 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_2 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_2 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -854,6 +863,17 @@ matmul_i2_avx2 (gfc_array_i2 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_2 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1372,8 +1392,7 @@ matmul_i2_avx512f (gfc_array_i2 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_2 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_2 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1397,6 +1416,17 @@ matmul_i2_avx512f (gfc_array_i2 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_2 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1911,8 +1941,7 @@ matmul_i2_vanilla (gfc_array_i2 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_2 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_2 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1936,6 +1965,17 @@ matmul_i2_vanilla (gfc_array_i2 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_2 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -2508,8 +2548,7 @@ matmul_i2 (gfc_array_i2 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_2 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_2 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -2533,6 +2572,17 @@ matmul_i2 (gfc_array_i2 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_2 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
index 1e724d54ffafa1e8c78cf18502a67bd275668110..eab6c773d99a698f8bb84079398157841372fbe7 100644 (file)
@@ -286,8 +286,7 @@ matmul_i4_avx (gfc_array_i4 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_4 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_4 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -311,6 +310,17 @@ matmul_i4_avx (gfc_array_i4 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_4 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -829,8 +839,7 @@ matmul_i4_avx2 (gfc_array_i4 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_4 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_4 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -854,6 +863,17 @@ matmul_i4_avx2 (gfc_array_i4 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_4 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1372,8 +1392,7 @@ matmul_i4_avx512f (gfc_array_i4 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_4 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_4 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1397,6 +1416,17 @@ matmul_i4_avx512f (gfc_array_i4 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_4 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1911,8 +1941,7 @@ matmul_i4_vanilla (gfc_array_i4 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_4 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_4 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1936,6 +1965,17 @@ matmul_i4_vanilla (gfc_array_i4 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_4 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -2508,8 +2548,7 @@ matmul_i4 (gfc_array_i4 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_4 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_4 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -2533,6 +2572,17 @@ matmul_i4 (gfc_array_i4 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_4 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
index f5ed84fa2885fa98d90035c4dbe934ba9ed9e346..4dee0abbd7e716ae6bbd8a199489928a776c6bd6 100644 (file)
@@ -286,8 +286,7 @@ matmul_i8_avx (gfc_array_i8 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_8 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_8 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -311,6 +310,17 @@ matmul_i8_avx (gfc_array_i8 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_8 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -829,8 +839,7 @@ matmul_i8_avx2 (gfc_array_i8 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_8 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_8 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -854,6 +863,17 @@ matmul_i8_avx2 (gfc_array_i8 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_8 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1372,8 +1392,7 @@ matmul_i8_avx512f (gfc_array_i8 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_8 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_8 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1397,6 +1416,17 @@ matmul_i8_avx512f (gfc_array_i8 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_8 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1911,8 +1941,7 @@ matmul_i8_vanilla (gfc_array_i8 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_8 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_8 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1936,6 +1965,17 @@ matmul_i8_vanilla (gfc_array_i8 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_8 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -2508,8 +2548,7 @@ matmul_i8 (gfc_array_i8 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_INTEGER_8 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_INTEGER_8 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -2533,6 +2572,17 @@ matmul_i8 (gfc_array_i8 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_INTEGER_8 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
index 8f76faceabff6aa988b6f343dc3b7430e015989b..4b66a8494b36d97b538e27bdadc86883a03d0688 100644 (file)
@@ -286,8 +286,7 @@ matmul_r10_avx (gfc_array_r10 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_REAL_10 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_REAL_10 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -311,6 +310,17 @@ matmul_r10_avx (gfc_array_r10 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_REAL_10 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -829,8 +839,7 @@ matmul_r10_avx2 (gfc_array_r10 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_REAL_10 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_REAL_10 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -854,6 +863,17 @@ matmul_r10_avx2 (gfc_array_r10 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_REAL_10 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1372,8 +1392,7 @@ matmul_r10_avx512f (gfc_array_r10 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_REAL_10 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_REAL_10 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1397,6 +1416,17 @@ matmul_r10_avx512f (gfc_array_r10 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_REAL_10 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1911,8 +1941,7 @@ matmul_r10_vanilla (gfc_array_r10 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_REAL_10 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_REAL_10 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1936,6 +1965,17 @@ matmul_r10_vanilla (gfc_array_r10 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_REAL_10 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -2508,8 +2548,7 @@ matmul_r10 (gfc_array_r10 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_REAL_10 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_REAL_10 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -2533,6 +2572,17 @@ matmul_r10 (gfc_array_r10 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_REAL_10 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
index 6a7687fdc33731a304dcdd9926c8264783338e3f..fcef45b990530f522b1d108ac09716545b6da088 100644 (file)
@@ -286,8 +286,7 @@ matmul_r16_avx (gfc_array_r16 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_REAL_16 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_REAL_16 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -311,6 +310,17 @@ matmul_r16_avx (gfc_array_r16 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_REAL_16 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -829,8 +839,7 @@ matmul_r16_avx2 (gfc_array_r16 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_REAL_16 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_REAL_16 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -854,6 +863,17 @@ matmul_r16_avx2 (gfc_array_r16 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_REAL_16 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1372,8 +1392,7 @@ matmul_r16_avx512f (gfc_array_r16 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_REAL_16 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_REAL_16 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1397,6 +1416,17 @@ matmul_r16_avx512f (gfc_array_r16 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_REAL_16 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1911,8 +1941,7 @@ matmul_r16_vanilla (gfc_array_r16 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_REAL_16 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_REAL_16 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1936,6 +1965,17 @@ matmul_r16_vanilla (gfc_array_r16 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_REAL_16 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -2508,8 +2548,7 @@ matmul_r16 (gfc_array_r16 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_REAL_16 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_REAL_16 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -2533,6 +2572,17 @@ matmul_r16 (gfc_array_r16 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_REAL_16 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
index dbb31b05c3bc9d1139cbfc6f4e93b641e376878f..0996c69ad0479733512ba2b6038507a7abd21790 100644 (file)
@@ -286,8 +286,7 @@ matmul_r4_avx (gfc_array_r4 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_REAL_4 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_REAL_4 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -311,6 +310,17 @@ matmul_r4_avx (gfc_array_r4 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_REAL_4 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -829,8 +839,7 @@ matmul_r4_avx2 (gfc_array_r4 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_REAL_4 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_REAL_4 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -854,6 +863,17 @@ matmul_r4_avx2 (gfc_array_r4 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_REAL_4 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1372,8 +1392,7 @@ matmul_r4_avx512f (gfc_array_r4 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_REAL_4 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_REAL_4 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1397,6 +1416,17 @@ matmul_r4_avx512f (gfc_array_r4 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_REAL_4 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1911,8 +1941,7 @@ matmul_r4_vanilla (gfc_array_r4 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_REAL_4 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_REAL_4 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1936,6 +1965,17 @@ matmul_r4_vanilla (gfc_array_r4 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_REAL_4 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -2508,8 +2548,7 @@ matmul_r4 (gfc_array_r4 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_REAL_4 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_REAL_4 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -2533,6 +2572,17 @@ matmul_r4 (gfc_array_r4 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_REAL_4 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
index 23efed22e2ab91d9b164a3d1fba8a8eeb62988ec..1d75e5c9560efaa43001ef851910ad7036f5a9d0 100644 (file)
@@ -286,8 +286,7 @@ matmul_r8_avx (gfc_array_r8 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_REAL_8 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_REAL_8 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -311,6 +310,17 @@ matmul_r8_avx (gfc_array_r8 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_REAL_8 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -829,8 +839,7 @@ matmul_r8_avx2 (gfc_array_r8 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_REAL_8 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_REAL_8 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -854,6 +863,17 @@ matmul_r8_avx2 (gfc_array_r8 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_REAL_8 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1372,8 +1392,7 @@ matmul_r8_avx512f (gfc_array_r8 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_REAL_8 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_REAL_8 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1397,6 +1416,17 @@ matmul_r8_avx512f (gfc_array_r8 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_REAL_8 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -1911,8 +1941,7 @@ matmul_r8_vanilla (gfc_array_r8 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_REAL_8 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_REAL_8 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -1936,6 +1965,17 @@ matmul_r8_vanilla (gfc_array_r8 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_REAL_8 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
@@ -2508,8 +2548,7 @@ matmul_r8 (gfc_array_r8 * const restrict retarray,
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      GFC_REAL_8 t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      GFC_REAL_8 f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -2533,6 +2572,17 @@ matmul_r8 (gfc_array_r8 * const restrict retarray,
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      GFC_REAL_8 t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)
index d35968b3be57b4c6f9840c985277666d6270e85d..37839567168deab0f2f27a33dc1bf3e80ee22b76 100644 (file)
@@ -202,8 +202,7 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
                 i1, i2, i3, i4, i5, i6;
 
       /* Local variables */
-      'rtype_name` t1[65536], /* was [256][256] */
-                f11, f12, f21, f22, f31, f32, f41, f42,
+      'rtype_name` f11, f12, f21, f22, f31, f32, f41, f42,
                 f13, f14, f23, f24, f33, f34, f43, f44;
       index_type i, j, l, ii, jj, ll;
       index_type isec, jsec, lsec, uisec, ujsec, ulsec;
@@ -227,6 +226,17 @@ sinclude(`matmul_asm_'rtype_code`.m4')dnl
       if (m == 0 || n == 0 || k == 0)
        return;
 
+      /* Adjust size of t1 to what is needed.  */
+      index_type t1_dim;
+      t1_dim = (a_dim1-1) * 256 + b_dim1;
+      if (t1_dim > 65536)
+       t1_dim = 65536;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wvla"
+      'rtype_name` t1[t1_dim]; /* was [256][256] */
+#pragma GCC diagnostic pop
+
       /* Empty c first.  */
       for (j=1; j<=n; j++)
        for (i=1; i<=m; i++)