Sto progettando e implementando un linguaggio di programmazione e sto utilizzando LLVM per la generazione di codice nativo. Tra le altre cose, le prestazioni sono una caratteristica chiave del linguaggio e, in quanto tale, sto cercando di implementare l'ottimizzazione del link-time. Sul sito ufficiale di LLVM , ho letto che
LLVM features powerful intermodular optimizations which can be used at link time.
Tuttavia, la pagina in questione non menziona in che modo un utente può richiedere l'ottimizzazione del link-time. In particolare, spiega solo la teoria (e alcune importanti decisioni di implementazione) di LTO, ma non fa riferimento a nessuna documentazione API né a un tutorial.
Ho eseguito una ricerca rapida sulla base di codice di Clang , ma il I risultati non sono neanche troppo informativi o pertinenti: non ho ancora trovato le impostazioni che l'interruttore -flto
attiva in Clang, per non parlare delle modifiche nella generazione del codice che consentono al linker di ottimizzare i file oggetto.
Ora, suppongo che fare LTO dovrebbe andare sulla falsariga di:
-
Generazione di una sorta di metadati nel file oggetto / codice bit in modo che il linker sappia che può utilizzare LTO. Forse questo deve contenere informazioni concrete sul modulo, le funzioni da ottimizzare, ecc. (Non ho proprio idea di cosa esattamente debba andare lì ...)
-
Quindi aggiustando la mia procedura di generazione del codice (ad esempio il modo in cui sto usando l'API LLVM) in un modo che "supporta" LTO. Dopo alcune ricerche su Internet, ho trovato questo file sorgente LLVM correlato , quindi presumo sia possibile automatizzare almeno parte di questo compito, ma - come sempre - la documentazione LLVM di autogen'd è scarso al meglio.
Quindi, la mia domanda è: la mia descrizione del processo di incorporare le caratteristiche LTO di LLVM nel mio compilatore è corretta, e se sì, mi può suggerire qualche tipo di documentazione o tutorial su cui potrei basare il mio progetto?