[llvm-bugs] [Bug 47431] New: Replace &a[x] - c * y with &a[x - y]

via llvm-bugs llvm-bugs at lists.llvm.org
Sat Sep 5 07:56:54 PDT 2020


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

            Bug ID: 47431
           Summary: Replace &a[x] - c * y with &a[x - y]
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Scalar Optimizations
          Assignee: unassignedbugs at nondot.org
          Reporter: david.bolvansky at gmail.com
                CC: llvm-bugs at lists.llvm.org

typedef __SIZE_TYPE__ size_t;
size_t a[64];
size_t* f(size_t b, size_t c)
{
  return &a[b] + 1 * c;
}

size_t* g(size_t b, size_t c)
{
  return &a[b + c];
}


size_t* fm(size_t b, size_t c)
{
  return &a[b] - 1 * c;
}

size_t* gm(size_t b, size_t c)
{
  return &a[b - c];
}


Clang:

f(unsigned long, unsigned long):                                 # @f(unsigned
long, unsigned long)
        shl     rsi, 3
        lea     rax, [rsi + 8*rdi]
        add     rax, offset a
        ret
g(unsigned long, unsigned long):                                 # @g(unsigned
long, unsigned long)
        add     rdi, rsi
        lea     rax, [8*rdi + a]
        ret
fm(unsigned long, unsigned long):                                # @fm(unsigned
long, unsigned long)
        lea     rax, [8*rdi + a]
        shl     rsi, 3
        sub     rax, rsi
        ret
gm(unsigned long, unsigned long):                                # @gm(unsigned
long, unsigned long)
        sub     rdi, rsi
        lea     rax, [8*rdi + a]
        ret



GCC:
f(unsigned long, unsigned long):
        add     rdi, rsi
        lea     rax, a[0+rdi*8]
        ret
g(unsigned long, unsigned long):
        add     rdi, rsi
        lea     rax, a[0+rdi*8]
        ret
fm(unsigned long, unsigned long):
        sub     rdi, rsi
        lea     rax, a[0+rdi*8]
        ret
gm(unsigned long, unsigned long):
        sub     rdi, rsi
        lea     rax, a[0+rdi*8]
        ret

ICC:
f(unsigned long, unsigned long):
        add       rdi, rsi                                      #5.11
        lea       rax, QWORD PTR [a+rdi*8]                      #5.11
        ret                                                     #5.11
g(unsigned long, unsigned long):
        add       rdi, rsi                                      #10.17
        lea       rax, QWORD PTR [a+rdi*8]                      #10.11
        ret  

Godbolt:
https://godbolt.org/z/6W3rKd

-- 
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/20200905/e29e1712/attachment.html>


More information about the llvm-bugs mailing list