- 
                Notifications
    
You must be signed in to change notification settings  - Fork 128
 
Closed
Labels
Milestone
Description
Sample code:
static void Optimizable ()
{
	if (IntPtr.Size == 8)
		Console.WriteLine ("64bit");
	else
		Console.WriteLine ("32bit");
}Substitution xml:
<linker>
  <assembly fullname="System.Private.CoreLib">
    <type fullname="System.IntPtr">
      <method signature="System.Int32 get_Size()" body="stub" value="8" />
    </type>
  </assembly>
</linker>Initial IL:
default void Optimizable ()  cil managed 
    {
	.maxstack 2
	.locals init (
		bool	V_0)
	IL_0000:  nop 
	IL_0001:  call int32 native int::get_Size()
	IL_0006:  ldc.i4.8 
	IL_0007:  ceq 
	IL_0009:  stloc.0 
	IL_000a:  ldloc.0 
	IL_000b:  brfalse.s IL_001a
	IL_000d:  ldstr "64bit"
	IL_0012:  call void class [mscorlib]System.Console::WriteLine(string)
	IL_0017:  nop 
	IL_0018:  br.s IL_0025
	IL_001a:  ldstr "32bit"
	IL_001f:  call void class [mscorlib]System.Console::WriteLine(string)
	IL_0024:  nop 
	IL_0025:  ret 
    } // end of method Application::Optimizable
Post-linked IL:
default void Optimizable ()  cil managed 
    {
	.maxstack 2
	.locals init (
		bool	V_0)
	IL_0000:  nop 
	IL_0001:  call int32 class [System.Private.CoreLib]System.IntPtr::get_Size()
	IL_0006:  ldc.i4.8 
	IL_0007:  ceq 
	IL_0009:  stloc.0 
	IL_000a:  ldloc.0 
	IL_000b:  pop 
	IL_000c:  ldstr "64bit"
	IL_0011:  call void class [mscorlib]System.Console::WriteLine(string)
	IL_0016:  nop 
	IL_0017:  br.s IL_0019
	IL_0019:  ret 
    } // end of method Application::Optimizable
it seems the optimized C# would be:
static void Optimizable ()
{
	if (IntPtr.Size == 8)
		Console.WriteLine ("64bit");
}But we can do better, I want the optimized C# to look like this:
static void Optimizable ()
{
	Console.WriteLine ("64bit");
}Desired IL:
default void Optimized ()  cil managed 
    {
	.maxstack 8
	IL_0000:  ldstr "64bit"
	IL_0005:  call void class [mscorlib]System.Console::WriteLine(string)
	IL_000c:  ret 
    } // end of method Application::Optimized
Therzok, spouliot, chamons and AmrAlSayed0Therzok