Add a test for PR target/103750 fixed by r16-170-ga670ebde399548.

PR target/103750
* g++.target/i386/pr103750.C: New test.

I am checking in this.

-- 
H.J.
From 4ab36e8e56280d774d4b5ef07b0838020ba20a6a Mon Sep 17 00:00:00 2001
From: "H.J. Lu" <hjl.to...@gmail.com>
Date: Tue, 3 Jun 2025 17:17:57 +0800
Subject: [PATCH] x86: Add g++.target/i386/pr103750.C

Add a test for PR target/103750 fixed by r16-170-ga670ebde399548.

	PR target/103750
	* g++.target/i386/pr103750.C: New test.

Signed-off-by: H.J. Lu <hjl.to...@gmail.com>
---
 gcc/testsuite/g++.target/i386/pr103750.C | 39 ++++++++++++++++++++++++
 1 file changed, 39 insertions(+)
 create mode 100644 gcc/testsuite/g++.target/i386/pr103750.C

diff --git a/gcc/testsuite/g++.target/i386/pr103750.C b/gcc/testsuite/g++.target/i386/pr103750.C
new file mode 100644
index 00000000000..c82c10a6630
--- /dev/null
+++ b/gcc/testsuite/g++.target/i386/pr103750.C
@@ -0,0 +1,39 @@
+/* { dg-do compile } */
+/* { dg-options "-O3 -march=x86-64-v4 -std=c++17" } */
+/* Keep labels and directives ('.cfi_startproc', '.cfi_endproc').  */
+/* { dg-final { check-function-bodies "**" "" "" { target "*-*-*" } {^\t?\.}  } } */
+
+#include <x86intrin.h>
+
+/*
+**_Z8qustrchrPDsS_Ds:
+**...
+**.L[0-9]+:
+**	vpcmpeqw	\(%[a-x]+\), %ymm0, %k1
+**	vpcmpeqw	32\(%[a-x]+\), %ymm0, %k0
+**	kortestw	%k0, %k1
+**	je	.L[0-9]+
+**...
+*/
+
+const char16_t *
+qustrchr(char16_t *n, char16_t *e, char16_t c) noexcept
+{
+    __m256i mch256 = _mm256_set1_epi16(c);
+    for ( ; n < e; n += 32) {
+        __m256i data1 = _mm256_loadu_si256(reinterpret_cast<const __m256i *>(n));
+        __m256i data2 = _mm256_loadu_si256(reinterpret_cast<const __m256i *>(n) + 1);
+        __mmask16 mask1 = _mm256_cmpeq_epu16_mask(data1, mch256);
+        __mmask16 mask2 = _mm256_cmpeq_epu16_mask(data2, mch256);
+        if (_kortestz_mask16_u8(mask1, mask2))
+            continue;
+
+        unsigned idx = _tzcnt_u32(mask1);
+        if (mask1 == 0) {
+            idx = __tzcnt_u16(mask2);
+            n += 16;
+        }
+        return n + idx;
+    }
+    return e;
+}
-- 
2.49.0

Reply via email to