[llvm-bugs] [Bug 42025] New: [X86][AVX] v8i32 SETCC promotion causes unnecessary truncation/extensions

via llvm-bugs llvm-bugs at lists.llvm.org
Sun May 26 06:34:08 PDT 2019


https://bugs.llvm.org/show_bug.cgi?id=42025

            Bug ID: 42025
           Summary: [X86][AVX] v8i32 SETCC promotion causes unnecessary
                    truncation/extensions
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: Windows NT
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Backend: X86
          Assignee: unassignedbugs at nondot.org
          Reporter: llvm-dev at redking.me.uk
                CC: craig.topper at gmail.com, lebedev.ri at gmail.com,
                    llvm-bugs at lists.llvm.org, llvm-dev at redking.me.uk,
                    nikita.ppv at gmail.com, spatel+llvm at rotateright.com

define i8 @v8i32_or_and(<8 x i32> %a, <8 x i32> %b, <8 x i32> %c, <8 x i32> %d,
<8 x i32> %e, <8 x i32> %f) {
  %x0 = icmp sgt <8 x i32> %a, %b
  %x1 = icmp slt <8 x i32> %c, %d
  %x2 = icmp eq <8 x i32> %e, %f
  %y = or <8 x i1> %x0, %x1
  %z = and <8 x i1> %y, %x2
  %res = bitcast <8 x i1> %z to i8
  ret i8 %res
}

https://godbolt.org/z/Pn8KgQ

AVX2:

v8i32_or_and: # @v8i32_or_and
  vpcmpgtd %ymm1, %ymm0, %ymm0
  vpcmpgtd %ymm2, %ymm3, %ymm1
  vpor %ymm1, %ymm0, %ymm0
  vpcmpeqd %ymm5, %ymm4, %ymm1
  vextracti128 $1, %ymm1, %xmm2
  vpackssdw %xmm2, %xmm1, %xmm1
  vextracti128 $1, %ymm0, %xmm2
  vpackssdw %xmm2, %xmm0, %xmm0
  vpand %xmm1, %xmm0, %xmm0
  vpacksswb %xmm0, %xmm0, %xmm0
  vpmovmskb %xmm0, %eax
  vzeroupper
  retq

But should simplify to:

v8i32_or_and: # @v8i32_or_and
  vpcmpgtd %ymm1, %ymm0, %ymm0
  vpcmpgtd %ymm2, %ymm3, %ymm1
  vpor %ymm1, %ymm0, %ymm0
  vpcmpeqd %ymm5, %ymm4, %ymm1
  vpand %ymm0, %ymm0, %ymm0
  vmovmskps %ymm0, %eax
  vzeroupper
  retq

AVX1 is trickier but should be able to simplify in a similar manner (but via
xmm PCMPGT/PCMPEQ ops):

v8i32_or_and: # @v8i32_or_and
  vpcmpgtd %xmm1, %xmm0, %xmm6
  vextractf128 $1, %ymm1, %xmm1
  vextractf128 $1, %ymm0, %xmm0
  vpcmpgtd %xmm1, %xmm0, %xmm0
  vpcmpgtd %xmm2, %xmm3, %xmm1
  vextractf128 $1, %ymm2, %xmm2
  vextractf128 $1, %ymm3, %xmm3
  vpcmpgtd %xmm2, %xmm3, %xmm2
  vpor %xmm1, %xmm6, %xmm1
  vpcmpeqd %xmm5, %xmm4, %xmm3
  vpor %xmm2, %xmm0, %xmm0
  vextractf128 $1, %ymm4, %xmm2
  vpackssdw %xmm0, %xmm1, %xmm0
  vextractf128 $1, %ymm5, %xmm1
  vpcmpeqd %xmm1, %xmm2, %xmm1
  vpackssdw %xmm1, %xmm3, %xmm1
  vpand %xmm1, %xmm0, %xmm0
  vpacksswb %xmm0, %xmm0, %xmm0
  vpmovmskb %xmm0, %eax
  retq

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20190526/3249e323/attachment-0001.html>


More information about the llvm-bugs mailing list