いつの間にかと話題に。 去年の年末にちょこっと紹介したTryRoslynがJIT ASM (JITの結果がどういうネイティブコードになっているかを見れる)機能に対応してたみたいです。

TryRoslyn、今はSharpLabっていう名前に変わって、ドメインも取った見たいです:

ネイティブ コードの確認

例えばこんな感じのコードを書いて、

using static System.Math;

public class C
{
    public double M(double x, double y) => Exp(x) * Sin(y);
}

SharpLabに貼り付けて、 ページ内の「Decompiled」のコンボボックスで「JIT Asm」を選ぶと、以下のような結果が出ます (現時点での結果)。

; This is an experimental implementation.
; Please report any bugs to https://github.com/ashmind/TryRoslyn/issues.

; Desktop CLR v4.6.1590.00 (clr.dll) on x86.

C..ctor()
    L0000: ret

C.M(Double, Double)
    L0000: fld qword [esp+0xc]
    L0004: sub esp, 0x8
    L0007: fstp qword [esp]
    L000a: call System.Math.Exp(Double)
    L000f: fld qword [esp+0x4]
    L0013: fsin
    L0015: fmulp st1, st0
    L0017: ret 0x10

C#は、C# → IL にコンパイルする時点ではそこまで大きな最適化はしていなくて、 インライン展開とかの処理はIL → ネイティブコードに JIT コンパイルするタイミングで行っていたりします。 なので、本気で最適化に取り組みたかったらネイティブコードまで追わないと細かいところがわからなかったりします。

昔、Visual Studio上でネイティブコードまで追う方法とかも書きましたけど、 そこそこ面倒な手順だったりしますし。 さらっとオンラインで確認して見れるのは結構ありがたいかも。

中身

なんか流れを見るに、

という感じみたい。

ということで、最終的には.NETチームが作っているツールに行きつくみたいです。