]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - libgfortran/generated/matmulavx128_r16.c
re PR fortran/37802 (Improve wording for matmul bound checking)
[thirdparty/gcc.git] / libgfortran / generated / matmulavx128_r16.c
index 328e251a3a11769df77d9e40b2a4e2338719287e..fadff1d6d63aa012b273e3d425622c793ec51d4d 100644 (file)
@@ -109,8 +109,8 @@ matmul_r16_avx128_fma3 (gfc_array_r16 * const restrict retarray,
          arg_extent = GFC_DESCRIPTOR_EXTENT(b,1);
          ret_extent = GFC_DESCRIPTOR_EXTENT(retarray,0);
          if (arg_extent != ret_extent)
-           runtime_error ("Incorrect extent in return array in"
-                          " MATMUL intrinsic: is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -118,8 +118,8 @@ matmul_r16_avx128_fma3 (gfc_array_r16 * const restrict retarray,
          arg_extent = GFC_DESCRIPTOR_EXTENT(a,0);
          ret_extent = GFC_DESCRIPTOR_EXTENT(retarray,0);
          if (arg_extent != ret_extent)
-           runtime_error ("Incorrect extent in return array in"
-                          " MATMUL intrinsic: is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -127,17 +127,15 @@ matmul_r16_avx128_fma3 (gfc_array_r16 * const restrict retarray,
          arg_extent = GFC_DESCRIPTOR_EXTENT(a,0);
          ret_extent = GFC_DESCRIPTOR_EXTENT(retarray,0);
          if (arg_extent != ret_extent)
-           runtime_error ("Incorrect extent in return array in"
-                          " MATMUL intrinsic for dimension 1:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          arg_extent = GFC_DESCRIPTOR_EXTENT(b,1);
          ret_extent = GFC_DESCRIPTOR_EXTENT(retarray,1);
          if (arg_extent != ret_extent)
-           runtime_error ("Incorrect extent in return array in"
-                          " MATMUL intrinsic for dimension 2:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -178,7 +176,9 @@ matmul_r16_avx128_fma3 (gfc_array_r16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -223,7 +223,18 @@ matmul_r16_avx128_fma3 (gfc_array_r16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;
@@ -667,8 +678,8 @@ matmul_r16_avx128_fma4 (gfc_array_r16 * const restrict retarray,
          arg_extent = GFC_DESCRIPTOR_EXTENT(b,1);
          ret_extent = GFC_DESCRIPTOR_EXTENT(retarray,0);
          if (arg_extent != ret_extent)
-           runtime_error ("Incorrect extent in return array in"
-                          " MATMUL intrinsic: is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -676,8 +687,8 @@ matmul_r16_avx128_fma4 (gfc_array_r16 * const restrict retarray,
          arg_extent = GFC_DESCRIPTOR_EXTENT(a,0);
          ret_extent = GFC_DESCRIPTOR_EXTENT(retarray,0);
          if (arg_extent != ret_extent)
-           runtime_error ("Incorrect extent in return array in"
-                          " MATMUL intrinsic: is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
       else
@@ -685,17 +696,15 @@ matmul_r16_avx128_fma4 (gfc_array_r16 * const restrict retarray,
          arg_extent = GFC_DESCRIPTOR_EXTENT(a,0);
          ret_extent = GFC_DESCRIPTOR_EXTENT(retarray,0);
          if (arg_extent != ret_extent)
-           runtime_error ("Incorrect extent in return array in"
-                          " MATMUL intrinsic for dimension 1:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 1 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
 
          arg_extent = GFC_DESCRIPTOR_EXTENT(b,1);
          ret_extent = GFC_DESCRIPTOR_EXTENT(retarray,1);
          if (arg_extent != ret_extent)
-           runtime_error ("Incorrect extent in return array in"
-                          " MATMUL intrinsic for dimension 2:"
-                          " is %ld, should be %ld",
+           runtime_error ("Array bound mismatch for dimension 2 of "
+                          "array (%ld/%ld) ",
                           (long int) ret_extent, (long int) arg_extent);
        }
     }
@@ -736,7 +745,9 @@ matmul_r16_avx128_fma4 (gfc_array_r16 * const restrict retarray,
   if (count != GFC_DESCRIPTOR_EXTENT(b,0))
     {
       if (count > 0 || GFC_DESCRIPTOR_EXTENT(b,0) > 0)
-       runtime_error ("dimension of array B incorrect in MATMUL intrinsic");
+       runtime_error ("Incorrect extent in argument B in MATMUL intrinsic "
+                      "in dimension 1: is %ld, should be %ld",
+                      (long int) GFC_DESCRIPTOR_EXTENT(b,0), (long int) count);
     }
 
   if (GFC_DESCRIPTOR_RANK (b) == 1)
@@ -781,7 +792,18 @@ matmul_r16_avx128_fma4 (gfc_array_r16 * const restrict retarray,
       if (lda > 0 && ldb > 0 && ldc > 0 && m > 1 && n > 1 && k > 1)
        {
          assert (gemm != NULL);
-         gemm (axstride == 1 ? "N" : "T", bxstride == 1 ? "N" : "T", &m,
+         const char *transa, *transb;
+         if (try_blas & 2)
+           transa = "C";
+         else
+           transa = axstride == 1 ? "N" : "T";
+
+         if (try_blas & 4)
+           transb = "C";
+         else
+           transb = bxstride == 1 ? "N" : "T";
+
+         gemm (transa, transb , &m,
                &n, &k, &one, abase, &lda, bbase, &ldb, &zero, dest,
                &ldc, 1, 1);
          return;