| 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