From 1cd45889fa225e0c49da5c9cd695a5706ebc5583 Mon Sep 17 00:00:00 2001 From: Jakob Botsch Nielsen Date: Sat, 31 Jan 2026 14:23:47 +0100 Subject: [PATCH 1/3] Avoid async thunks in `RuntimeHelpers.PrepareMethod` This function should JIT the method that has the user IL. --- src/coreclr/vm/reflectioninvocation.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/coreclr/vm/reflectioninvocation.cpp b/src/coreclr/vm/reflectioninvocation.cpp index 461dbf1a4a1d01..65c4c0fdde3c1b 100644 --- a/src/coreclr/vm/reflectioninvocation.cpp +++ b/src/coreclr/vm/reflectioninvocation.cpp @@ -1283,6 +1283,11 @@ static void PrepareMethodHelper(MethodDesc * pMD) pMD->EnsureActive(); + if (pMD->IsAsyncThunkMethod()) + { + pMD = pMD->GetAsyncVariant(); + } + if (pMD->ShouldCallPrestub()) pMD->DoPrestub(NULL); From ef1227eba8a989c846e21679d09ae76acaab7e6f Mon Sep 17 00:00:00 2001 From: Jakob Botsch Nielsen Date: Sat, 31 Jan 2026 15:14:34 +0100 Subject: [PATCH 2/3] Use Jan's suggestion --- src/coreclr/vm/reflectioninvocation.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/coreclr/vm/reflectioninvocation.cpp b/src/coreclr/vm/reflectioninvocation.cpp index 65c4c0fdde3c1b..7490f4870befd5 100644 --- a/src/coreclr/vm/reflectioninvocation.cpp +++ b/src/coreclr/vm/reflectioninvocation.cpp @@ -1283,20 +1283,22 @@ static void PrepareMethodHelper(MethodDesc * pMD) pMD->EnsureActive(); - if (pMD->IsAsyncThunkMethod()) + if (pMD->IsWrapperStub()) { - pMD = pMD->GetAsyncVariant(); + if (pMD->ShouldCallPrestub()) + pMD->DoPrestub(NULL); + pMD = pMD->GetWrappedMethodDesc(); } - if (pMD->ShouldCallPrestub()) - pMD->DoPrestub(NULL); - - if (pMD->IsWrapperStub()) + if (pMD->IsAsyncThunk()) { - pMD = pMD->GetWrappedMethodDesc(); if (pMD->ShouldCallPrestub()) pMD->DoPrestub(NULL); + pMD = pMD->GetAsyncVariant(); } + + if (pMD->ShouldCallPrestub()) + pMD->DoPrestub(NULL); } // This method triggers a given method to be jitted. CoreCLR implementation of this method triggers jiting of the given method only. From 03d794ba644788439c7a5eba4ea7c1273b316b2f Mon Sep 17 00:00:00 2001 From: Jan Kotas Date: Sat, 31 Jan 2026 09:40:49 -0800 Subject: [PATCH 3/3] Update src/coreclr/vm/reflectioninvocation.cpp --- src/coreclr/vm/reflectioninvocation.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/coreclr/vm/reflectioninvocation.cpp b/src/coreclr/vm/reflectioninvocation.cpp index 7490f4870befd5..ed82fba96fb8c4 100644 --- a/src/coreclr/vm/reflectioninvocation.cpp +++ b/src/coreclr/vm/reflectioninvocation.cpp @@ -1290,7 +1290,7 @@ static void PrepareMethodHelper(MethodDesc * pMD) pMD = pMD->GetWrappedMethodDesc(); } - if (pMD->IsAsyncThunk()) + if (pMD->IsAsyncThunkMethod()) { if (pMD->ShouldCallPrestub()) pMD->DoPrestub(NULL);