aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorRoger Sayle <roger@nextmovesoftware.com>2026-02-26 08:07:12 +0000
committerRoger Sayle <roger@nextmovesoftware.com>2026-02-26 08:09:10 +0000
commit3275b86a822b23ad2e332d2425ac3d6abcb2105a (patch)
tree4291d5fe42782293451d6904b9d6eb7f2d6ac963 /gcc/testsuite
parent25e9d84d3218492125bb0a63f23034f1f8306dfb (diff)
downloadgcc-master.zip
gcc-master.tar.gz
gcc-master.tar.bz2
PR target/124194: Fix __builtin_ia32_cmpd256_mask(op,op,TRUE)HEADtrunkmaster
This patch fixes the wrong code regression PR target/124194 on x86_64. The target implements a pre-reload splitter that recognizes that integer vector comparisons can be evaluated at compile-time when the operands being compared are the same (register). The (admittedly rare) case when the comparison operator is always-true, was incorrectly handled and folded to false instead of the correct value true. 2025-02-26 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog PR target/124194 * config/i386/sse.md (*<avx512>_cmp<mode>3_dup_op): Also return CONSTM1_RTX for the case cmp_imm == 7 (predicate TRUE). gcc/testsuite/ChangeLog PR target/124194 * gcc.target/i386/pr124194.c: New test case.
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/gcc.target/i386/pr124194.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/i386/pr124194.c b/gcc/testsuite/gcc.target/i386/pr124194.c
new file mode 100644
index 0000000..c295b69
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr124194.c
@@ -0,0 +1,15 @@
+/* PR target/124194 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -mavx512vl" } */
+typedef __attribute__((__vector_size__ (8 *sizeof (int)))) int V;
+
+int
+main ()
+{
+ unsigned char x = __builtin_ia32_cmpd256_mask ((V){}, (V){}, 7, 0xff);
+ if (x != 0xff)
+ __builtin_abort();
+ return 0;
+}
+/* { dg-final { scan-assembler-times "xorl" 1 } } */
+/* { dg-final { scan-assembler-not "vpcmpd" } } */