diff options
| author | Roger Sayle <roger@nextmovesoftware.com> | 2026-02-26 08:07:12 +0000 |
|---|---|---|
| committer | Roger Sayle <roger@nextmovesoftware.com> | 2026-02-26 08:09:10 +0000 |
| commit | 3275b86a822b23ad2e332d2425ac3d6abcb2105a (patch) | |
| tree | 4291d5fe42782293451d6904b9d6eb7f2d6ac963 /gcc/testsuite | |
| parent | 25e9d84d3218492125bb0a63f23034f1f8306dfb (diff) | |
| download | gcc-master.zip gcc-master.tar.gz gcc-master.tar.bz2 | |
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.c | 15 |
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" } } */ |
