[LLVMbugs] [Bug 20714] New: SLP vectorizer cost model should handle divide by power-of-two constants

bugzilla-daemon at llvm.org bugzilla-daemon at llvm.org
Wed Aug 20 13:28:36 PDT 2014


http://llvm.org/bugs/show_bug.cgi?id=20714

            Bug ID: 20714
           Summary: SLP vectorizer cost model should handle divide by
                    power-of-two constants
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: All
            Status: NEW
          Severity: normal
          Priority: P
         Component: Backend: AArch64
          Assignee: unassignedbugs at nondot.org
          Reporter: grosbach at apple.com
                CC: llvmbugs at cs.uiuc.edu
    Classification: Unclassified

Inspired by the equivalent X86 problem being handled in
http://reviews.llvm.org/D4971

Consider:

void f(int *restrict a, int *restrict b, int *restrict c) {
  a[0] = (b[0] + c[0]) / 2;
  a[1] = (b[1] + c[1]) / 2;
  a[2] = (b[2] + c[2]) / 2;
  a[3] = (b[3] + c[3]) / 2;
}


ARM64 can handle this via:

    ldr     q0, [x0]
    ldr     q1, [x1]
    add.4s    v0, v0, v1
    usra.4s    v0, v0, #31
    sshr.4s    v0, v0, #1
    str     q0, [x2]

Instead we generate the long scalarized sequence:
    ldp     w8, w9, [x1]
    ldp     w10, w11, [x2]
    add     w8, w10, w8
    cmp     w8, #0                 ; =0
    cinc     w8, w8, lt
    asr    w8, w8, #1
    str     w8, [x0]
    add     w8, w11, w9
    cmp     w8, #0                 ; =0
    cinc     w8, w8, lt
    asr    w8, w8, #1
    str    w8, [x0, #4]
    ldp    w8, w9, [x1, #8]
    ldp    w10, w11, [x2, #8]
    add     w8, w10, w8
    cmp     w8, #0                 ; =0
    cinc     w8, w8, lt
    asr    w8, w8, #1
    str    w8, [x0, #8]
    add     w8, w11, w9
    cmp     w8, #0                 ; =0
    cinc     w8, w8, lt
    asr    w8, w8, #1
    str    w8, [x0, #12]

-- 
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/20140820/14bb791b/attachment.html>


More information about the llvm-bugs mailing list