[llvm-dev] Where's the optimiser gone? (part 5.b): missed tail calls, and more... (original) (raw)
Stefan Kanthak via llvm-dev llvm-dev at lists.llvm.org
Sat Dec 1 09:28:53 PST 2018
- Previous message: [llvm-dev] Where's the optimiser gone? (part 5.a): missed tail calls, and more...
- Next message: [llvm-dev] Where's the optimiser gone? (part 5.b): missed tail calls, and more...
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Compile the following functions with "-O3 -target i386" (see <https://godbolt.org/z/VmKlXL>):
long long div(long long foo, long long bar) { return foo / bar; }
On the left the generated code; on the right the expected, properly optimised code:
div: # @div push ebp | mov ebp, esp | push dword ptr [ebp + 20] | push dword ptr [ebp + 16] | push dword ptr [ebp + 12] | push dword ptr [ebp + 8] | call __divdi3 | jmp __divdi3 add esp, 16 | pop ebp | ret |
long long mod(long long foo, long long bar) { return foo % bar; }
mod: # @mod push ebp | mov ebp, esp | push dword ptr [ebp + 20] | push dword ptr [ebp + 16] | push dword ptr [ebp + 12] | push dword ptr [ebp + 8] | call __moddi3 | jmp __moddi3 add esp, 16 | pop ebp | ret |
long long mul(long long foo, long long bar) { return foo * bar; }
mul: # @mul push ebp mov ebp, esp push esi mov ecx, dword ptr [ebp + 16] mov esi, dword ptr [ebp + 8] mov eax, ecx imul ecx, dword ptr [ebp + 12] mul esi imul esi, dword ptr [ebp + 20] add edx, ecx add edx, esi pop esi pop ebp ret
- Previous message: [llvm-dev] Where's the optimiser gone? (part 5.a): missed tail calls, and more...
- Next message: [llvm-dev] Where's the optimiser gone? (part 5.b): missed tail calls, and more...
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]