Issue 76698
Summary [clang] feature request: optimize multiple strcat() to stpcpy()
Labels clang
Assignees
Reporter IAKOBVS
    Since GCC 4.7.1,

void f(char *a, const char *b, const char *c)
{
 strcat(a, b);
    strcat(a, c);
}

is transformed into

f:
        mov     QWORD PTR [rsp-24], rbx
        mov QWORD PTR [rsp-16], rbp
        mov     rbx, rdi
        mov     QWORD PTR [rsp-8], r12
        sub     rsp, 24
        mov     rbp, rdx
 mov     r12, rsi
        call    strlen
        lea     rdi, [rbx+rax]
        mov     rsi, r12
        call    stpcpy
 mov     rsi, rbp
        mov     rbx, QWORD PTR [rsp]
        mov rbp, QWORD PTR [rsp+8]
        mov     r12, QWORD PTR [rsp+16]
 mov     rdi, rax
        add     rsp, 24
        jmp     strcpy
 
  whereas Clang (trunk) does no such optimization:
  
  f: # @f
        push    r14
        push rbx
        push    rax
        mov     rbx, rdx
        mov r14, rdi
        call    strcat@PLT
        mov     rdi, r14
 mov     rsi, rbx
        add     rsp, 8
        pop     rbx
 pop     r14
        jmp     strcat@PLT                      # TAILCALL  
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to