Improve multiple returns

When aspecting a multiple return method. we have multiple exit method called. We could improve it by calling aspect exit method only once time.

Remarks:

This seems to be only in release mode. There is no performance impact (only library size impact)

Current result:

// AssemblyToProcess.SimpleClass
[SimpleAspect]
public int TestWithMultipleResults()
{
	MethodBase methodFromHandle = MethodBase.GetMethodFromHandle(methodof(SimpleClass.TestWithMultipleResults()).MethodHandle, typeof(SimpleClass).TypeHandle);
	SimpleAspectAttribute simpleAspectAttribute = (SimpleAspectAttribute)Activator.CreateInstance(typeof(SimpleAspectAttribute));
	simpleAspectAttribute.Init(this, methodFromHandle, null, null);
	int num;
	try
	{
		simpleAspectAttribute.OnEntry();
		if (this.TestValue == 1)
		{
			num = 0;
			simpleAspectAttribute.OnExit(num);
		}
		else if (this.TestValue > 2)
		{
			num = 1;
			simpleAspectAttribute.OnExit(num);
		}
		else
		{
			num = 3;
			simpleAspectAttribute.OnExit(num);
		}
	}
	catch (Exception exception)
	{
		simpleAspectAttribute.OnException(exception);
		throw;
	}
	return num;
}

Expected result:

// AssemblyToProcess.SimpleClass
[SimpleAspect]
public int TestWithMultipleResults()
{
	MethodBase methodFromHandle = MethodBase.GetMethodFromHandle(methodof(SimpleClass.TestWithMultipleResults()).MethodHandle, typeof(SimpleClass).TypeHandle);
	SimpleAspectAttribute simpleAspectAttribute = (SimpleAspectAttribute)Activator.CreateInstance(typeof(SimpleAspectAttribute));
	simpleAspectAttribute.Init(this, methodFromHandle, null, null);
	int num;
	try
	{
		simpleAspectAttribute.OnEntry();
		if (this.TestValue == 1)
		{
			num = 0;
		}
		else if (this.TestValue > 2)
		{
			num = 1;
		}
		else
		{
			num = 3;
		}
	}
	catch (Exception exception)
	{
		simpleAspectAttribute.OnException(exception);
		throw;
	}
        simpleAspectAttribute.OnExit(num);
	return num;
}
Edited by Kevin BEAUGRAND