]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
i386/testsuite: Correct AVX10.2 FP8 test mask usage
authorHaochen Jiang <haochen.jiang@intel.com>
Fri, 22 Nov 2024 07:57:47 +0000 (15:57 +0800)
committerHaochen Jiang <haochen.jiang@intel.com>
Tue, 26 Nov 2024 06:06:28 +0000 (14:06 +0800)
Under FP8, we should not use AVX512F_LEN_HALF to get the mask size since
it will get 16 instead of 8 and drop into wrong if condition. Correct
the usage for vcvtneph2[b,h]f8[,s] runtime test.

gcc/testsuite/ChangeLog:

* gcc.target/i386/avx10_2-512-vcvtneph2bf8-2.c: Correct 128bit
mask usage.
* gcc.target/i386/avx10_2-512-vcvtneph2bf8s-2.c: Ditto.
* gcc.target/i386/avx10_2-512-vcvtneph2hf8-2.c: Ditto.
* gcc.target/i386/avx10_2-512-vcvtneph2hf8s-2.c: Ditto.

gcc/testsuite/gcc.target/i386/avx10_2-512-vcvtneph2bf8-2.c
gcc/testsuite/gcc.target/i386/avx10_2-512-vcvtneph2bf8s-2.c
gcc/testsuite/gcc.target/i386/avx10_2-512-vcvtneph2hf8-2.c
gcc/testsuite/gcc.target/i386/avx10_2-512-vcvtneph2hf8s-2.c

index d5ba911334c86458a6ea9f5d49f8082cd85b67e5..96ca7e80c4d5970836e1033ddc7fc86cb8548e72 100644 (file)
@@ -11,8 +11,8 @@
 #include "avx10-helper.h"
 #include "fp8-helper.h"
 
-#define SIZE_SRC (AVX512F_LEN / 16)
-#define SIZE (AVX512F_LEN_HALF / 8)
+#define SIZE (AVX512F_LEN / 16)
+#define SIZE_DST (AVX512F_LEN_HALF / 8)
 #include "avx512f-mask-type.h"
 
 void
@@ -23,14 +23,14 @@ CALC (unsigned char *r, _Float16 *s)
   hf8_bf8 = 1;
   saturate = 0;
   
-  for (i = 0; i < SIZE; i++)
+  for (i = 0; i < SIZE_DST; i++)
     {
       r[i] = 0;
-      if (i < SIZE_SRC)
-        {
-          Float16Union usrc = {.f16 = s[i]};
-          r[i] = convert_fp16_to_fp8(usrc.f16, 0, hf8_bf8, saturate);
-        }
+      if (i < SIZE)
+       {
+         Float16Union usrc = {.f16 = s[i]};
+         r[i] = convert_fp16_to_fp8(usrc.f16, 0, hf8_bf8, saturate);
+       }
     }
 }
 
@@ -41,17 +41,22 @@ TEST (void)
   UNION_TYPE (AVX512F_LEN_HALF, i_b) res1, res2, res3; 
   UNION_TYPE (AVX512F_LEN, h) src;
   MASK_TYPE mask = MASK_VALUE;
-  unsigned char res_ref[SIZE];
+  unsigned char res_ref[SIZE_DST];
 
   sign = 1;
-  for (i = 0; i < SIZE_SRC; i++)
+  for (i = 0; i < SIZE; i++)
     {
       src.a[i] = (_Float16)(sign * (2.5 * (1 << (i % 3))));
       sign = -sign;
     }
 
+#if AVX512F_LEN > 128
+  for (i = 0; i < SIZE_DST; i++)
+    res2.a[i] = DEFAULT_VALUE;
+#else
   for (i = 0; i < SIZE; i++)
     res2.a[i] = DEFAULT_VALUE;
+#endif
 
   CALC(res_ref, src.a);
 
index 49e170aa42883c8f30de1f7bef56412e8991bd3e..c458f1ebb7793f3b335fd0ab9aba36044d00a495 100644 (file)
@@ -11,8 +11,8 @@
 #include "avx10-helper.h"
 #include "fp8-helper.h"
 
-#define SIZE_SRC (AVX512F_LEN / 16)
-#define SIZE (AVX512F_LEN_HALF / 8)
+#define SIZE (AVX512F_LEN / 16)
+#define SIZE_DST (AVX512F_LEN_HALF / 8)
 #include "avx512f-mask-type.h"
 
 void
@@ -23,14 +23,14 @@ CALC (unsigned char *r, _Float16 *s)
   hf8_bf8 = 1;
   saturate = 1;
   
-  for (i = 0; i < SIZE; i++)
+  for (i = 0; i < SIZE_DST; i++)
     {
       r[i] = 0;
-      if (i < SIZE_SRC)
-        {
-          Float16Union usrc = {.f16 = s[i]};
-          r[i] = convert_fp16_to_fp8(usrc.f16, 0, hf8_bf8, saturate);
-        }
+      if (i < SIZE)
+       {
+         Float16Union usrc = {.f16 = s[i]};
+         r[i] = convert_fp16_to_fp8(usrc.f16, 0, hf8_bf8, saturate);
+       }
     }
 }
 
@@ -41,17 +41,22 @@ TEST (void)
   UNION_TYPE (AVX512F_LEN_HALF, i_b) res1, res2, res3; 
   UNION_TYPE (AVX512F_LEN, h) src;
   MASK_TYPE mask = MASK_VALUE;
-  unsigned char res_ref[SIZE];
+  unsigned char res_ref[SIZE_DST];
 
   sign = 1;
-  for (i = 0; i < SIZE_SRC; i++)
+  for (i = 0; i < SIZE; i++)
     {
       src.a[i] = (_Float16)(sign * (2.5 * (1 << (i % 3))));
       sign = -sign;
     }
 
+#if AVX512F_LEN > 128
+  for (i = 0; i < SIZE_DST; i++)
+    res2.a[i] = DEFAULT_VALUE;
+#else
   for (i = 0; i < SIZE; i++)
     res2.a[i] = DEFAULT_VALUE;
+#endif
 
   CALC(res_ref, src.a);
 
index f481b72cc71f73f57ae6672316ce061ce5916280..cb9cdbb89c1d55edda2920970c4156268a80538d 100644 (file)
@@ -11,8 +11,8 @@
 #include "avx10-helper.h"
 #include "fp8-helper.h"
 
-#define SIZE_SRC (AVX512F_LEN / 16)
-#define SIZE (AVX512F_LEN_HALF / 8)
+#define SIZE (AVX512F_LEN / 16)
+#define SIZE_DST (AVX512F_LEN_HALF / 8)
 #include "avx512f-mask-type.h"
 
 void
@@ -23,14 +23,14 @@ CALC (unsigned char *r, _Float16 *s)
   hf8_bf8 = 0;
   saturate = 0;
   
-  for (i = 0; i < SIZE; i++)
+  for (i = 0; i < SIZE_DST; i++)
     {
       r[i] = 0;
-      if (i < SIZE_SRC)
-        {
-          Float16Union usrc = {.f16 = s[i]};
-          r[i] = convert_fp16_to_fp8(usrc.f16, 0, hf8_bf8, saturate);
-        }
+      if (i < SIZE)
+       {
+         Float16Union usrc = {.f16 = s[i]};
+         r[i] = convert_fp16_to_fp8(usrc.f16, 0, hf8_bf8, saturate);
+       }
     }
 }
 
@@ -44,14 +44,19 @@ TEST (void)
   unsigned char res_ref[SIZE];
 
   sign = 1;
-  for (i = 0; i < SIZE_SRC; i++)
+  for (i = 0; i < SIZE; i++)
     {
       src.a[i] = (_Float16)(sign * (2.5 * (1 << (i % 3))));
       sign = -sign;
     }
 
+#if AVX512F_LEN > 128
+  for (i = 0; i < SIZE_DST; i++)
+    res2.a[i] = DEFAULT_VALUE;
+#else
   for (i = 0; i < SIZE; i++)
     res2.a[i] = DEFAULT_VALUE;
+#endif
 
   CALC(res_ref, src.a);
 
index 4782b038f3b16521ad48380b1c7cf5084ea54606..4827af4df5339548bcb68ec603e4c19351ca6e99 100644 (file)
@@ -11,8 +11,8 @@
 #include "avx10-helper.h"
 #include "fp8-helper.h"
 
-#define SIZE_SRC (AVX512F_LEN / 16)
-#define SIZE (AVX512F_LEN_HALF / 8)
+#define SIZE (AVX512F_LEN / 16)
+#define SIZE_DST (AVX512F_LEN_HALF / 8)
 #include "avx512f-mask-type.h"
 
 void
@@ -23,14 +23,14 @@ CALC (unsigned char *r, _Float16 *s)
   hf8_bf8 = 0;
   saturate = 1;
   
-  for (i = 0; i < SIZE; i++)
+  for (i = 0; i < SIZE_DST; i++)
     {
       r[i] = 0;
-      if (i < SIZE_SRC)
-        {
-          Float16Union usrc = {.f16 = s[i]};
-          r[i] = convert_fp16_to_fp8(usrc.f16, 0, hf8_bf8, saturate);
-        }
+      if (i < SIZE)
+       {
+         Float16Union usrc = {.f16 = s[i]};
+         r[i] = convert_fp16_to_fp8(usrc.f16, 0, hf8_bf8, saturate);
+       }
     }
 }
 
@@ -44,14 +44,19 @@ TEST (void)
   unsigned char res_ref[SIZE];
 
   sign = 1;
-  for (i = 0; i < SIZE_SRC; i++)
+  for (i = 0; i < SIZE; i++)
     {
       src.a[i] = (_Float16)(sign * (2.5 * (1 << (i % 3))));
       sign = -sign;
     }
 
+#if AVX512F_LEN > 128
+  for (i = 0; i < SIZE_DST; i++)
+    res2.a[i] = DEFAULT_VALUE;
+#else
   for (i = 0; i < SIZE; i++)
     res2.a[i] = DEFAULT_VALUE;
+#endif
 
   CALC(res_ref, src.a);