Skip to content

Commit e004ec6

Browse files
committed
Update Setup/Cleanup IL to match workload.
1 parent 9e7c339 commit e004ec6

File tree

1 file changed

+7
-30
lines changed

1 file changed

+7
-30
lines changed

src/BenchmarkDotNet/Toolchains/InProcess.Emit.Implementation/Emitters/RunnableEmitter.cs

Lines changed: 7 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -971,19 +971,15 @@ private void EmitAwaitableSetupTeardown(
971971
IL_0000: call string [BenchmarkDotNet]BenchmarkDotNet.Samples.SampleBenchmark::GlobalCleanup()
972972
IL_0005: pop
973973
*/
974-
LocalBuilder callResultLocal;
974+
ilBuilder.Emit(OpCodes.Ldarg_0);
975+
/*
976+
IL_0026: ldarg.0
977+
IL_0027: ldfld class BenchmarkDotNet.Helpers.AwaitHelper BenchmarkDotNet.Helpers.Runnable_0::awaitHelper
978+
*/
979+
ilBuilder.Emit(OpCodes.Ldarg_0);
980+
ilBuilder.Emit(OpCodes.Ldfld, awaitHelperField);
975981
if (targetMethod.IsStatic)
976982
{
977-
ilBuilder.Emit(OpCodes.Ldarg_0);
978-
var callResultType = returnTypeInfo.OriginMethodReturnType;
979-
980-
/*
981-
.locals init (
982-
[0] class [System.Private.CoreLib]System.Threading.Tasks.Task task
983-
)
984-
*/
985-
callResultLocal = ilBuilder.DeclareLocal(callResultType);
986-
987983
ilBuilder.Emit(OpCodes.Call, targetMethod);
988984

989985
}
@@ -994,33 +990,14 @@ [0] class [System.Private.CoreLib]System.Threading.Tasks.Task task
994990
}
995991
else
996992
{
997-
ilBuilder.Emit(OpCodes.Ldarg_0);
998-
var callResultType = returnTypeInfo.OriginMethodReturnType;
999-
1000-
/*
1001-
.locals init (
1002-
[0] class [System.Private.CoreLib]System.Threading.Tasks.Task task
1003-
)
1004-
*/
1005-
callResultLocal = ilBuilder.DeclareLocal(callResultType);
1006-
1007993
ilBuilder.Emit(OpCodes.Ldarg_0);
1008994
ilBuilder.Emit(OpCodes.Call, targetMethod);
1009995
}
1010996

1011997
/*
1012998
// awaitHelper.GetResult(...);
1013-
IL_0006: stloc.0
1014-
IL_0007: ldarg.0
1015-
IL_0008: ldfld class BenchmarkDotNet.Helpers.AwaitHelper BenchmarkDotNet.Helpers.Runnable_0::awaitHelper
1016-
IL_000d: ldloc.0
1017999
IL_000e: callvirt instance void BenchmarkDotNet.Helpers.AwaitHelper::GetResult(class [System.Private.CoreLib]System.Threading.Tasks.Task)
10181000
*/
1019-
1020-
ilBuilder.EmitStloc(callResultLocal);
1021-
ilBuilder.Emit(OpCodes.Ldarg_0);
1022-
ilBuilder.Emit(OpCodes.Ldfld, awaitHelperField);
1023-
ilBuilder.Emit(OpCodes.Ldloc_0);
10241001
ilBuilder.Emit(OpCodes.Callvirt, returnTypeInfo.GetResultMethod);
10251002

10261003
if (targetMethod.ReturnType != typeof(void))

0 commit comments

Comments
 (0)