https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117863
Bug ID: 117863 Summary: Missing pcmpeq splitters Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: hjl.tools at gmail dot com Target Milestone: --- Target: x86-64 $ cat vector_eq-2.c /* { dg-do compile { target { i?86-*-* x86_64-*-* } } } */ /* { dg-additional-options "-O2 -march=x86-64-v3" } */ typedef int v4si __attribute__((vector_size(16))); v4si __RTL (startwith ("vregs")) foo (void) { (function "foo" (insn-chain (block 2 (edge-from entry (flags "FALLTHRU")) (cnote 1 [bb 2] NOTE_INSN_BASIC_BLOCK) (cnote 2 NOTE_INSN_FUNCTION_BEG) (cinsn 3 (set (reg:V4SI <0>) (const_vector:V4SI [(const_int -1) (const_int -1) (const_int -1) (const_int -1)]))) (cinsn 4 (set (reg:V4SI <1>) (const_vector:V4SI [(const_int -1) (const_int -1) (const_int -1) (const_int -1)]))) (cinsn 5 (set (reg:V4SI <2>) (eq:V4SI (reg:V4SI <0>) (reg:V4SI <1>)))) (cinsn 6 (set (reg:V4SI <3>) (reg:V4SI <2>))) (cinsn 7 (set (reg:V4SI xmm0) (reg:V4SI <3>))) (edge-to exit (flags "FALLTHRU")) ) ) (crtl (return_rtx (reg/i:V4SI xmm0))) ) } /* { dg-final { scan-assembler-times "vpcmpeqd" 1 } } */ $ /export/build/gnu/tools-build/gcc-debug/build-x86_64-linux/gcc/xgcc -B/export/build/gnu/tools-build/gcc-debug/build-x86_64-linux/gcc/ -O2 -march=x86-64-v3 -S vector_eq-2.c $ cat vector_eq-2.s .file "vector_eq-2.c" .text .p2align 4 .globl foo .type foo, @function foo: .LFB0: .cfi_startproc vpcmpeqd %xmm0, %xmm0, %xmm0 vpcmpeqd %xmm0, %xmm0, %xmm0 ret .cfi_endproc .LFE0: .size foo, .-foo .ident "GCC: (GNU) 15.0.0 20241129 (experimental) [master r15-5113-g858912fa675]" .section .note.GNU-stack,"",@progbits $ (insn 5 3 7 2 (set (reg:V4SI 100) (eq:V4SI (reg:V4SI 98) (reg:V4SI 98))) 7910 {*sse2_eqv4si3} (expr_list:REG_DEAD (reg:V4SI 98) (expr_list:REG_EQUAL (eq:V4SI (const_vector:V4SI [ (const_int -1 [0xffffffffffffffff]) repeated x4 ]) (const_vector:V4SI [ (const_int -1 [0xffffffffffffffff]) repeated x4 ])) (nil)))) should be converted to (insn 5 10 12 2 (set (reg:V4SI 100) (const_vector:V4SI [ (const_int -1 [0xffffffffffffffff]) repeated x4 ])) 2363 {movv4si_internal} (nil))