[llvm-bugs] [Bug 39546] New: Improve alias analysis by checking for known callsites
    via llvm-bugs 
    llvm-bugs at lists.llvm.org
       
    Fri Nov  2 17:15:00 PDT 2018
    
    
  
https://bugs.llvm.org/show_bug.cgi?id=39546
            Bug ID: 39546
           Summary: Improve alias analysis by checking for known callsites
           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
#include <string.h>
void alias(char * s, char * p) {
    strcpy(s,p); // s,p cannot alias since it would be UB
    p[3] = *s;
    p[4] = *s;
}
GCC:
alias:
  push rbx
  mov rbx, rsi
  call strcpy
  movzx eax, BYTE PTR [rax]
  mov BYTE PTR [rbx+3], al
  mov BYTE PTR [rbx+4], al
  pop rbx
  ret
Clang -O3:
alias:                                  # @alias
        push    r14
        push    rbx
        push    rax
        mov     r14, rsi // btw, this is a weird issue
        mov     rbx, rdi
        call    strcpy
        mov     al, byte ptr [rbx]
        mov     byte ptr [r14 + 3], al
        mov     al, byte ptr [rbx]  // useless reload
        mov     byte ptr [r14 + 4], al
        add     rsp, 8
        pop     rbx
        pop     r14
        ret
So idea:
We have ptr P and Q. If P and Q are used as in a call site (*) where aliasing
would be UB, alias analysis can just bail out with noalias answer.
* strcpy, strncpy, memcpy, bcopy.. maybe even s(n)printf
-- 
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/20181103/22e3560b/attachment.html>
    
    
More information about the llvm-bugs
mailing list