Durante la compilazione di un'unità di traduzione il compilatore sta eseguendo molte ottimizzazioni: inlining, piegatura/propagazione costante, analisi alias, srotolamento del loop, eliminazione del codice morto e molti altri di cui non ho nemmeno sentito parlare. Sono tutti fatti quando si utilizza LTO/LTCG/WPO tra più unità di traduzione o solo un sottoinsieme (o una variante) di essi (ho sentito parlare di inlining)? Se non tutte le ottimizzazioni sono fatte considererei le build di unità superiori a LTO (o forse li useremo entrambi quando ci sono più di 1 file sorgente di unità).Le ottimizzazioni fatte in LTO sono le stesse della normale compilazione?
La mia ipotesi è che non è lo stesso (unità costruisce con il set completo di ottimizzazioni) e anche che varia molto tra i compilatori.
La documentazione su lto di ciascun compilatore non risponde precisamente a questo (o non riesco a capirlo).
Poiché lto implica il salvataggio della rappresentazione intermedia nei file oggetto, in teoria LTO potrebbe fare tutte le ottimizzazioni ... giusto?
Nota che non sto chiedendo informazioni sulla velocità di costruzione: si tratta di un problema separato.
EDIT: Sono principalmente interessato a gcc/llvm.
Come hai detto tu stesso, è probabile che vari notevolmente tra i compilatori. Potrebbe essere possibile rispondere sia per GCC che per LLVM, ma oltre a ciò è troppo ampio. Si prega di restringere l'ambito. –
Che cos'è "LTO" ?? –
@ BЈовић ottimizzazioni link-time (o generazione di un time code del collegamento o ottimizzazione dell'intero programma) – onqtam