https://bugs.llvm.org/show_bug.cgi?id=38327
Bug ID: 38327
Summary: Subtract stack pointer instead of push
Product: libraries
Version: trunk
Hardware: PC
OS: Linux
Status: NEW
Severity: enhancement
Priority: P
Component: Backend: X86
Assignee: [email protected]
Reporter: [email protected]
CC: [email protected]
Code:
int is_enabled(void);
int tobool(void) {
return !!is_enabled();
}
int tobool2(void) {
if(is_enabled())
return 9;
return 4;
}
Clang -O3:
tobool: # @tobool
push rax
call is_enabled
xor ecx, ecx
test eax, eax
setne cl
mov eax, ecx
pop rcx
ret
tobool2: # @tobool2
push rax
call is_enabled
xor ecx, ecx
test eax, eax
setne cl
lea eax, [rcx + 4*rcx]
add eax, 4
pop rcx
ret
GCC avoid push, it uses sub rsp, 8.
tobool:
sub rsp, 8
call is_enabled
test eax, eax
setne al
add rsp, 8
movzx eax, al
ret
tobool2:
sub rsp, 8
call is_enabled
cmp eax, 1
sbb eax, eax
add rsp, 8
and eax, -5
add eax, 9
ret
Maybe it could be worth (less instructions, register pressure) to follow GCC
decision, I think.
--
You are receiving this mail because:
You are on the CC list for the bug._______________________________________________
llvm-bugs mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs