[llvm] [X86] Replace custom AND/OR/XOR reduction pattern matching with ISD::VECREDUCE_AND/OR/XOR support (PR #199544)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 5 02:43:11 PDT 2026
================
@@ -244,26 +219,26 @@ define i32 @extract_last_active_v4i32_penryn(<4 x i32> %a, <4 x i1> %c) "target-
define i8 @extract_last_active_split(<32 x i8> %data, <32 x i8> %mask, i8 %passthru) {
----------------
Andarwinux wrote:
vector-extract-last-active.ll might need some avx512 codegen coverage:
before this PR:
```asm
<extract_last_active_split>:
pushp %rbp
movq %rsp, %rbp
andq $-0x20, %rsp
subq $0x40, %rsp
vptestmb %ymm1, %ymm1, %k1
vmovaps %ymm0, (%rsp)
kshiftrd $0x10, %k1, %k0
korw %k0, %k1, %k0
kshiftrw $0x8, %k0, %k2
korb %k2, %k0, %k0
kshiftrb $0x4, %k0, %k2
korw %k2, %k0, %k0
kshiftrb $0x2, %k0, %k2
korw %k2, %k0, %k0
kshiftrb $0x1, %k0, %k2
korw %k2, %k0, %k0
kmovd %k0, %eax
vmovdqu8 (%rip), %ymm0 {%k1} {z} # 0x359 <extract_last_active_split+0x59>
vextracti128 $0x1, %ymm0, %xmm1
vpmaxub %xmm1, %xmm0, %xmm0
vpternlogq $0xf, %xmm0, %xmm0, %xmm0 # xmm0 = ~xmm0
vpsrlw $0x8, %xmm0, %xmm1
vpminub %xmm1, %xmm0, %xmm0
vphminposuw %xmm0, %xmm0
vmovd %xmm0, %ecx
notb %cl
movzbl %cl, %ecx
andl $0x1f, %ecx
movzbl (%rsp,%rcx), %ecx
testb $0x1, %al
cmovnel %ecx, %edi, %eax
movq %rbp, %rsp
popp %rbp
vzeroupper
retq
```
after this PR:
```asm
<extract_last_active_split>:
pushp %rbp
movq %rsp, %rbp
andq $-0x20, %rsp
subq $0x40, %rsp
vptestmb %ymm1, %ymm1, %k1
vmovaps %ymm0, (%rsp)
vmovdqu8 (%rip), %ymm0 {%k1} {z} # 0x2a3 <extract_last_active_split+0x23>
vextracti128 $0x1, %ymm0, %xmm2
vpmaxub %xmm2, %xmm0, %xmm0
vpternlogq $0xf, %xmm0, %xmm0, %xmm0 # xmm0 = ~xmm0
vpsrlw $0x8, %xmm0, %xmm2
vpminub %xmm2, %xmm0, %xmm0
vphminposuw %xmm0, %xmm0
vmovd %xmm0, %eax
notb %al
movzbl %al, %eax
andl $0x1f, %eax
movzbl (%rsp,%rax), %eax
vptest %ymm1, %ymm1
cmovel %edi, %eax
movq %rbp, %rsp
popp %rbp
vzeroupper
retq
```
https://github.com/llvm/llvm-project/pull/199544
More information about the llvm-commits
mailing list