Dennis Luehring
2012-Jul-05 09:23 UTC
[LLVMdev] clang optimizer does not remove unused/uneeded variables(and accesses) from global scope
hi llvmdev list im currently investigating a missing optimizer feature in VS2010 - and comparing the VS2010 results with the result of clang 3.1 i've downloaded clang from http://llvm.org/releases/download.html -> Experimental Clang Binaries for Mingw32/x86 clang --version clang version 3.1 (branches/release_31) Target: i686-pc-mingw32 Thread model: posix ----- test.c typedef unsigned char byte_t; typedef unsigned int dword_t; byte_t byte; dword_t dword; int main(int argc, char** argv) { dword_t random = (dword_t)argv; byte = (byte_t)random; dword = (dword_t)random; dword_t result = 3*(byte+dword); return result; } ------- compiled with "clang -O3 test.c" produces this code for the main .text:004012E0 sub_4012E0 proc near ; CODE XREF: sub_401020+91 .text:004012E0 .text:004012E0 arg_4 = dword ptr 0Ch .text:004012E0 .text:004012E0 push ebp .text:004012E1 mov ebp, esp .text:004012E3 call sub_4014C0 .text:004012E8 mov eax, [ebp+arg_4] ; dword_t random = (dword_t)argv; .text:004012EB mov byte_402000, al .text:004012F0 mov dword_402004, eax .text:004012F5 movzx ecx, al .text:004012F8 add ecx, eax .text:004012FA lea eax, [ecx+ecx*2] .text:004012FD pop ebp .text:004012FE retn .text:004012FE sub_4012E0 endp but why are these two lines not removed by the optimizer? .text:004012EB mov byte_402000, al .text:004012F0 mov dword_402004, eax no access before, no access after - even the main-code itself isn't using the variables for reading VS2010 behaves the same - but clang is still much better in other cases :)
Apparently Analagous Threads
- [PATCH] al175: updated driver, please restore it
- Driver removal notification: al175
- [LLVMdev] clang optimizer does not remove unused/uneeded variables(and accesses) from global scope
- [LLVMdev] clang optimizer does not remove unused/uneeded variables(and accesses) from global scope
- Uneeded ?