LTO je optimalizace navíc při linkování, kdy je vidět celý program, z toho plyne jednak zrychlení a jednak omezení velikosti nepoužívaných částí
Pokud ale jde jen o vyhození mrtvého kódu, tak je lepší CFLAGS="-ffunction-sections -fdata-sections" a LDFLAGS=-Wl,--gc-sections pro gcc. Jak to má llvm to nevím.
Tak to vypada ze LLVM si to LTO vyklada po svem:
http://johanengelen.github.io/ldc/2016/11/10/Link-Time-Optimization-LDC.html
v kratkosti: preklad do .o neni finalni kod, ale mezistupen, nad kterym jde lepe delat optimalizace. Ve vysledku je tedy preklad do .o jenom cast "parsovaci", zatimco linker dela pak onu "optimalizaci a preklad".
Nejde tedy ani tak o optimalizaci nad stavajicim/klasickem buildovacim procesu, ale o zcela jiny rezim prekladu.