我正在开发一个编译器,用于生成IL代码。 重要的是,最终生成的IL代码能够被Mono和Microsoft .NET JIT编译器JIT编译成最快的机器码。
我的问题是:
优化像以下这样的模式是否有意义:
'stloc.0; ldloc.0; ret' => 'ret' 'ldc.i4.0; conv.r8' => 'ldc.r8.0'
那么这些问题是否需要考虑,或者JIT编译器是否足够智能以解决这些问题?
是否有规范列出了Microsoft/Mono JIT编译器执行的优化列表?
有没有实用建议/最佳实践的好阅读材料,以优化IL,使得JIT编译器可以生成性能最优的机器码?
stloc.0; ldloc.0;
方面非常出色。对于 IronScheme,我尝试调整输出的 IL 使其更像基于 C# 的代码,因为我感觉 JIT 可能会更努力地优化已知的模式。但这只是一种感觉 :D 您可以随时创建一些微型基准测试来衡量它。 - leppie