Sto sviluppando un compilatore che emette il codice IL. È importante che l'IL risultante sia JIT per i codici macchina più veloci possibili da compilatori JIT Mono e Microsoft .NET.Ottimizzazione IL per compilatori JIT
Le mie domande sono:
Ha senso per ottimizzare i modelli come:
'stloc.0; ldloc.0; ret' => 'ret' 'ldc.i4.0; conv.r8' => 'ldc.r8.0'
e simili, o sono del JIT abbastanza intelligente per prendersi cura di questi?
Esiste una specifica con l'elenco di ottimizzazioni eseguite dai compilatori JIT Microsoft/Mono?
C'è qualche buona lettura con consigli pratici/best practice per ottimizzare IL in modo che i compilatori JIT possano a loro volta generare il codice macchina più ottimale (prestazioni-saggio)?
Da quanto ho capito, la JIT è abbastanza buona nell'eliminare 'stloc.0; ldloc.0; '. Per IronScheme, ho provato a modificare l'output IL in modo che fosse molto simile a C# in base alla sensazione che il JIT probabilmente avrebbe cercato di ottimizzare i pattern conosciuti. Ma questa è solo una sensazione: D Potresti sempre creare dei microbenchmark per misurarlo. – leppie
.NET JITters non sono particolarmente intelligenti (dopo tutto, non hanno molto tempo). Perché ti interessa "il più veloce possibile"? – Luaan
@Luaan, mi interessa "il più veloce possibile" perché questo è il compilatore che ha bisogno di produrre codice per calcoli intensivi. Idealmente, dovrebbe produrre codice macchina nativo, ma sto considerando IL per una migliore portabilità e manutenibilità. Tuttavia, le prestazioni sono ancora una priorità assoluta. –