aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2025-12-08 13:29:59 +0800
committerH.J. Lu <hjl.tools@gmail.com>2025-12-08 15:17:40 +0800
commitf80829a9f98c99e751bc2b80cffbe599a117f430 (patch)
treef2f58837e51eae9a6c1754a93730c2fb0db64321
parent886a4bd0fee470e345e73d2ba5c968d5d7dc2ca9 (diff)
downloadgcc-f80829a9f98c99e751bc2b80cffbe599a117f430.zip
gcc-f80829a9f98c99e751bc2b80cffbe599a117f430.tar.gz
gcc-f80829a9f98c99e751bc2b80cffbe599a117f430.tar.bz2
x86: Don't allow 2 volatile memory references
Don't allow 2 volatile memory references in *<avx512>_cmp<mode>3_dup_op so that gcc.target/i386/avx2-vpcmpeqq-1.c will generate 2 loads when -march=cascadelake is used. PR target/122343 * config/i386/sse.md (*<avx512>_cmp<mode>3_dup_op): Don't allow 2 volatile memory references. Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
-rw-r--r--gcc/config/i386/sse.md3
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/config/i386/sse.md b/gcc/config/i386/sse.md
index 0be898c..fb79b2e 100644
--- a/gcc/config/i386/sse.md
+++ b/gcc/config/i386/sse.md
@@ -4900,7 +4900,8 @@
(match_operand:SI 3 "<cmp_imm_predicate>")]
UNSPEC_PCMP_ITER))]
"TARGET_AVX512F && ix86_pre_reload_split ()
- && rtx_equal_p (operands[1], operands[2])"
+ && rtx_equal_p (operands[1], operands[2])
+ && (!MEM_P (operands[1]) || !MEM_VOLATILE_P (operands[1]))"
"#"
"&& 1"
[(set (match_dup 0) (match_dup 4))]