Issue 120203
Summary [X86] AVX1 targets failure to recognise VPTEST YMM pattern
Labels backend:X86
Assignees
Reporter RKSimon
    ```ll
define i1 @both_equal_v32qi(<32 x i8> %a, <32 x i8> %b, <32 x i8> %v) {
entry:
 %0 = icmp ne <32 x i8> %v, %a
  %1 = icmp ne <32 x i8> %v, %b
  %2 = or <32 x i1> %0, %1
  %3 = bitcast <32 x i1> %2 to i32
  %cmp5 = icmp eq i32 %3, 0
  ret i1 %cmp5
}

define i1 @both_equal_v16qi(<16 x i8> %a, <16 x i8> %b, <16 x i8> %v) {
entry:
  %0 = icmp ne <16 x i8> %v, %a
  %1 = icmp ne <16 x i8> %v, %b
  %2 = or <16 x i1> %0, %1
  %3 = bitcast <16 x i1> %2 to i16
  %cmp5 = icmp eq i16 %3, 0
  ret i1 %cmp5
}
```
llc -mcpu=znver2
```asm
both_equal_v32qi:                       # @both_equal_v32qi
        vpxor   %ymm0, %ymm2, %ymm0
        vpxor %ymm1, %ymm2, %ymm1
        vpor    %ymm1, %ymm0, %ymm0
        vptest %ymm0, %ymm0
        sete    %al
        vzeroupper
 retq
both_equal_v16qi:                       # @both_equal_v16qi
 vpxor   %xmm0, %xmm2, %xmm0
        vpxor   %xmm1, %xmm2, %xmm1
 vpor    %xmm1, %xmm0, %xmm0
        vptest  %xmm0, %xmm0
        sete %al
        retq
```
llc -mcpu=btver2
```asm
both_equal_v32qi: # @both_equal_v32qi
        vpcmpeqb        %xmm0, %xmm2, %xmm3
        vextractf128    $1, %ymm2, %xmm4
        vpcmpeqb %xmm1, %xmm2, %xmm2
        vextractf128    $1, %ymm0, %xmm0
 vextractf128    $1, %ymm1, %xmm1
        vpcmpeqb        %xmm0, %xmm4, %xmm0
        vpcmpeqb        %xmm1, %xmm4, %xmm1
        vpand   %xmm2, %xmm3, %xmm2
        vpand   %xmm1, %xmm0, %xmm0
        vpand   %xmm0, %xmm2, %xmm0
        vpmovmskb       %xmm0, %eax
        xorl    $65535, %eax                    # imm = 0xFFFF
        sete    %al
 retq
both_equal_v16qi:                       # @both_equal_v16qi
 vpxor   %xmm0, %xmm2, %xmm0
        vpxor   %xmm1, %xmm2, %xmm1
 vpor    %xmm1, %xmm0, %xmm0
        vptest  %xmm0, %xmm0
        sete %al
        retq
```
The AVX2 codegen is legal on AVX1 (just replace vpxor/vpor with vxorps/vorps).
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to