C:\git\runtime\artifacts\bin\coreclr\Windows_NT.x64.Debug>crossgen cse.dll Microsoft (R) CoreCLR Native Image Generator - Version 5.0.0-dev Copyright (c) Microsoft Corporation. All rights reserved. ****** START compiling Foo:TryGetDynamicRuntimeFieldHandleComponents(System.RuntimeFieldHandle,byref,byref):bool:this (MethodHash=ebed1cdb) Generating code for Windows x64 OPTIONS: compCodeOpt = BLENDED_CODE OPTIONS: compDbgCode = false OPTIONS: compDbgInfo = true OPTIONS: compDbgEnC = false OPTIONS: compProcedureSplitting = false OPTIONS: compProcedureSplittingEH = false OPTIONS: Jit invoked for ngen IL to import: IL_0000 0f 01 ldarga.s 0x1 IL_0002 e0 conv.u IL_0003 4d ldind.i IL_0004 0a stloc.0 IL_0005 06 ldloc.0 IL_0006 17 ldc.i4.1 IL_0007 28 06 00 00 0a call 0xA000006 IL_000c 0a stloc.0 IL_000d 12 00 ldloca.s 0x0 IL_000f 28 07 00 00 0a call 0xA000007 IL_0014 0b stloc.1 IL_0015 04 ldarg.2 IL_0016 07 ldloc.1 IL_0017 7c 01 00 00 04 ldflda 0x4000001 IL_001c e0 conv.u IL_001d 71 0b 00 00 01 ldobj 0x100000B IL_0022 81 0b 00 00 01 stobj 0x100000B IL_0027 07 ldloc.1 IL_0028 7b 02 00 00 04 ldfld 0x4000002 IL_002d 0c stloc.2 IL_002e 05 ldarg.3 IL_002f 02 ldarg.0 IL_0030 08 ldloc.2 IL_0031 28 01 00 00 06 call 0x6000001 IL_0036 51 stind.ref IL_0037 17 ldc.i4.1 IL_0038 2a ret lvaSetClass: setting class for V00 to (0000019CC7791518) Foo 'this' passed in register rcx Arg #1 passed in register(s) rdx Arg #2 passed in register(s) r8 Arg #3 passed in register(s) r9 lvaGrabTemp returning 7 (V07 tmp0) (a long lifetime temp) called for OutgoingArgSpace. ; Initial local variable assignments ; ; V00 this ref this class-hnd ; V01 arg1 struct ; V02 arg2 byref ; V03 arg3 byref ; V04 loc0 long ; V05 loc1 long ; V06 loc2 long ; V07 OutArgs lclBlk "OutgoingArgSpace" *************** In compInitDebuggingInfo() for Foo:TryGetDynamicRuntimeFieldHandleComponents(System.RuntimeFieldHandle,byref,byref):bool:this getVars() returned cVars = 0, extendOthers = true info.compVarScopesCount = 7 VarNum LVNum Name Beg End 0: 00h 00h V00 this 000h 039h 1: 01h 01h V01 arg1 000h 039h 2: 02h 02h V02 arg2 000h 039h 3: 03h 03h V03 arg3 000h 039h 4: 04h 04h V04 loc0 000h 039h 5: 05h 05h V05 loc1 000h 039h 6: 06h 06h V06 loc2 000h 039h info.compStmtOffsetsCount = 0 info.compStmtOffsetsImplicit = 0007h ( STACK_EMPTY NOP CALL_SITE ) *************** In fgFindBasicBlocks() for Foo:TryGetDynamicRuntimeFieldHandleComponents(System.RuntimeFieldHandle,byref,byref):bool:this weight= 77 : state 16 [ ldarga.s ] weight=-36 : state 165 [ conv.u ] weight=-110 : state 65 [ ldind.i ] weight= 20 : state 199 [ stloc.0 -> ldloc.0 ] weight= 28 : state 24 [ ldc.i4.1 ] weight= 79 : state 40 [ call ] weight= 6 : state 11 [ stloc.0 ] weight= 61 : state 19 [ ldloca.s ] weight= 79 : state 40 [ call ] weight= 34 : state 12 [ stloc.1 ] weight= 35 : state 5 [ ldarg.2 ] weight= 9 : state 8 [ ldloc.1 ] weight= 17 : state 110 [ ldflda ] weight=-36 : state 165 [ conv.u ] weight= 29 : state 101 [ ldobj ] weight= 36 : state 115 [ stobj ] weight= 9 : state 8 [ ldloc.1 ] weight= 18 : state 109 [ ldfld ] weight= 4 : state 13 [ stloc.2 ] weight= 28 : state 6 [ ldarg.3 ] weight= 10 : state 3 [ ldarg.0 ] weight= 22 : state 9 [ ldloc.2 ] weight= 79 : state 40 [ call ] weight= 60 : state 69 [ stind.ref ] weight= 28 : state 24 [ ldc.i4.1 ] weight= 19 : state 42 [ ret ] Marked V05 as a single def local Marked V06 as a single def local Jump targets: none New Basic Block BB01 [0000] created. BB01 [000..039) Inline candidate callsite is hot. Multiplier increased to 3. calleeNativeSizeEstimate=605 callsiteNativeSizeEstimate=175 benefit multiplier=3 threshold=525 Native estimate for function size exceeds threshold for inlining 60.5 > 52.5 (multiplier = 3) INLINER: during 'prejit' result 'failed this callee' reason 'unprofitable inline' for 'n/a' calling 'Foo:TryGetDynamicRuntimeFieldHandleComponents(System.RuntimeFieldHandle,byref,byref):bool:this' INLINER: Marking Foo:TryGetDynamicRuntimeFieldHandleComponents(System.RuntimeFieldHandle,byref,byref):bool:this as NOINLINE because of unprofitable inline INLINER: during 'prejit' result 'failed this callee' reason 'unprofitable inline' IL Code Size,Instr 57, 27, Basic Block count 1, Local Variable Num,Ref count 8, 13 for method Foo:TryGetDynamicRuntimeFieldHandleComponents(System.RuntimeFieldHandle,byref,byref):bool:this OPTIONS: opts.MinOpts() == false Basic block list for 'Foo:TryGetDynamicRuntimeFieldHandleComponents(System.RuntimeFieldHandle,byref,byref):bool:this' ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) ----------------------------------------------------------------------------------------------------------------------------------------- *************** Starting PHASE Pre-import *************** Finishing PHASE Pre-import *************** Starting PHASE Importation *************** In impImport() for Foo:TryGetDynamicRuntimeFieldHandleComponents(System.RuntimeFieldHandle,byref,byref):bool:this impImportBlockPending for BB01 Importing BB01 (PC=000) of 'Foo:TryGetDynamicRuntimeFieldHandleComponents(System.RuntimeFieldHandle,byref,byref):bool:this' [ 0] 0 (0x000) ldarga.s 1 [ 1] 2 (0x002) conv.u [ 1] 3 (0x003) ldind.i [ 1] 4 (0x004) stloc.0 STMT00000 (IL 0x000... ???) [000004] -A-XG------- * ASG long [000003] D------N---- +--* LCL_VAR long V04 loc0 [000002] *--XG------- \--* IND long [000001] ------------ \--* ADDR long [000000] -------N---- \--* LCL_VAR struct V01 arg1 [ 0] 5 (0x005) ldloc.0 [ 1] 6 (0x006) ldc.i4.1 1 [ 2] 7 (0x007) call 0A000006 In Compiler::impImportCall: opcode is call, kind=0, callRetType is long, structSize is 0 STMT00001 (IL 0x005... ???) [000007] I-C-G------- * CALL r2r_ind long System.IntPtr.op_Subtraction (exactContextHnd=0x0000019CC7751701) [000005] ------------ arg0 +--* LCL_VAR long V04 loc0 [000006] ------------ arg1 \--* CNS_INT int 1 [ 1] 12 (0x00c) stloc.0 STMT00002 (IL ???... ???) [000010] -AC--------- * ASG long [000009] D------N---- +--* LCL_VAR long V04 loc0 [000008] --C--------- \--* RET_EXPR long (inl return from call [000007]) [ 0] 13 (0x00d) ldloca.s 0 [ 1] 15 (0x00f) call 0A000007 In Compiler::impImportCall: opcode is call, kind=0, callRetType is long, structSize is 0 STMT00003 (IL 0x00D... ???) [000013] I-C-G------- * CALL r2r_ind long System.IntPtr.ToPointer (exactContextHnd=0x0000019CC7751701) [000012] ------------ this in rcx \--* ADDR byref [000011] -------N---- \--* LCL_VAR long V04 loc0 [ 1] 20 (0x014) stloc.1 STMT00004 (IL ???... ???) [000016] -AC--------- * ASG long [000015] D------N---- +--* LCL_VAR long V05 loc1 [000014] --C--------- \--* RET_EXPR long (inl return from call [000013]) [ 0] 21 (0x015) ldarg.2 [ 1] 22 (0x016) ldloc.1 [ 2] 23 (0x017) ldflda 04000001 [ 2] 28 (0x01c) conv.u [ 2] 29 (0x01d) ldobj 0100000B [ 2] 34 (0x022) stobj 0100000B STMT00005 (IL 0x015... ???) [000023] -A-XG------- * ASG struct (copy) [000022] ------------ +--* OBJ struct [000017] ------------ | \--* LCL_VAR byref V02 arg2 [000021] ---XG------- \--* OBJ struct [000020] ---XG------- \--* ADDR long [000019] ---XG--N---- \--* FIELD long DeclaringType [000018] ------------ \--* LCL_VAR long V05 loc1 [ 0] 39 (0x027) ldloc.1 [ 1] 40 (0x028) ldfld 04000002 [ 1] 45 (0x02d) stloc.2 STMT00006 (IL 0x027... ???) [000027] -A-XG------- * ASG long [000026] D------N---- +--* LCL_VAR long V06 loc2 [000025] ---XG------- \--* FIELD long FieldName [000024] ------------ \--* LCL_VAR long V05 loc1 [ 0] 46 (0x02e) ldarg.3 [ 1] 47 (0x02f) ldarg.0 [ 2] 48 (0x030) ldloc.2 [ 3] 49 (0x031) call 06000001 In Compiler::impImportCall: opcode is call, kind=0, callRetType is ref, structSize is 0 STMT00007 (IL 0x02E... ???) [000031] I-C-G------- * CALL r2r_ind ref Foo.GetStringFromMemoryInNativeFormat (exactContextHnd=0x0000019CC7791519) [000029] ------------ this in rcx +--* LCL_VAR ref V00 this [000030] ------------ arg1 \--* LCL_VAR long V06 loc2 [ 2] 54 (0x036) stind.ref STMT00008 (IL ???... ???) [000034] -ACXG------- * ASG ref [000033] *------N---- +--* IND ref [000028] ------------ | \--* LCL_VAR byref V03 arg3 [000032] --C--------- \--* RET_EXPR ref (inl return from call [000031]) [ 0] 55 (0x037) ldc.i4.1 1 [ 1] 56 (0x038) ret STMT00009 (IL 0x037... ???) [000036] ------------ * RETURN int [000035] ------------ \--* CNS_INT int 1 *************** Finishing PHASE Importation Trees after Importation ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..039) (return), preds={} succs={} ***** BB01 STMT00000 (IL 0x000...0x004) [000004] -A-XG------- * ASG long [000003] D------N---- +--* LCL_VAR long V04 loc0 [000002] *--XG------- \--* IND long [000001] ------------ \--* ADDR long [000000] -------N---- \--* LCL_VAR struct V01 arg1 ***** BB01 STMT00001 (IL 0x005...0x00C) [000007] I-C-G------- * CALL r2r_ind long System.IntPtr.op_Subtraction (exactContextHnd=0x0000019CC7751701) [000005] ------------ arg0 +--* LCL_VAR long V04 loc0 [000006] ------------ arg1 \--* CNS_INT int 1 ***** BB01 STMT00002 (IL ???... ???) [000010] -AC--------- * ASG long [000009] D------N---- +--* LCL_VAR long V04 loc0 [000008] --C--------- \--* RET_EXPR long (inl return from call [000007]) ***** BB01 STMT00003 (IL 0x00D...0x014) [000013] I-C-G------- * CALL r2r_ind long System.IntPtr.ToPointer (exactContextHnd=0x0000019CC7751701) [000012] ------------ this in rcx \--* ADDR byref [000011] -------N---- \--* LCL_VAR long V04 loc0 ***** BB01 STMT00004 (IL ???... ???) [000016] -AC--------- * ASG long [000015] D------N---- +--* LCL_VAR long V05 loc1 [000014] --C--------- \--* RET_EXPR long (inl return from call [000013]) ***** BB01 STMT00005 (IL 0x015...0x022) [000023] -A-XG------- * ASG struct (copy) [000022] ------------ +--* OBJ struct [000017] ------------ | \--* LCL_VAR byref V02 arg2 [000021] ---XG------- \--* OBJ struct [000020] ---XG------- \--* ADDR long [000019] ---XG--N---- \--* FIELD long DeclaringType [000018] ------------ \--* LCL_VAR long V05 loc1 ***** BB01 STMT00006 (IL 0x027...0x02D) [000027] -A-XG------- * ASG long [000026] D------N---- +--* LCL_VAR long V06 loc2 [000025] ---XG------- \--* FIELD long FieldName [000024] ------------ \--* LCL_VAR long V05 loc1 ***** BB01 STMT00007 (IL 0x02E...0x036) [000031] I-C-G------- * CALL r2r_ind ref Foo.GetStringFromMemoryInNativeFormat (exactContextHnd=0x0000019CC7791519) [000029] ------------ this in rcx +--* LCL_VAR ref V00 this [000030] ------------ arg1 \--* LCL_VAR long V06 loc2 ***** BB01 STMT00008 (IL ???... ???) [000034] -ACXG------- * ASG ref [000033] *------N---- +--* IND ref [000028] ------------ | \--* LCL_VAR byref V03 arg3 [000032] --C--------- \--* RET_EXPR ref (inl return from call [000031]) ***** BB01 STMT00009 (IL 0x037...0x038) [000036] ------------ * RETURN int [000035] ------------ \--* CNS_INT int 1 ------------------------------------------------------------------------------------------------------------------- *************** Starting PHASE Indirect call transform -- no candidates to transform *************** Finishing PHASE Indirect call transform [no changes] *************** Starting PHASE Expand patchpoints -- no patchpoints to transform *************** Finishing PHASE Expand patchpoints [no changes] *************** Starting PHASE Post-import *************** Finishing PHASE Post-import *************** Starting PHASE Morph - Init New BlockSet epoch 1, # of blocks (including unused BB00): 2, bitset array size: 1 (short) *************** In fgRemoveEmptyBlocks *************** Finishing PHASE Morph - Init *************** In fgDebugCheckBBlist *************** Starting PHASE Morph - Inlining Expanding INLINE_CANDIDATE in statement STMT00001 in BB01: STMT00001 (IL 0x005...0x00C) [000007] I-C-G------- * CALL r2r_ind long System.IntPtr.op_Subtraction (exactContextHnd=0x0000019CC7751701) [000005] ------------ arg0 +--* LCL_VAR long V04 loc0 [000006] ------------ arg1 \--* CNS_INT int 1 Argument #0: is a local var has caller local ref [000005] ------------ * LCL_VAR long V04 loc0 Argument #1: is a constant [000006] ------------ * CNS_INT int 1 INLINER: inlineInfo.tokenLookupContextHandle for System.IntPtr:op_Subtraction(long,int):long set to 0x0000019CC7751701: Invoking compiler for the inlinee method System.IntPtr:op_Subtraction(long,int):long : IL to import: IL_0000 0f 00 ldarga.s 0x0 IL_0002 7b 0d 04 00 04 ldfld 0x400040D IL_0007 28 d4 10 00 06 call 0x60010D4 IL_000c 03 ldarg.1 IL_000d d3 conv.i IL_000e 59 sub IL_000f 6a conv.i8 IL_0010 73 ca 10 00 06 newobj 0x60010CA IL_0015 2a ret INLINER impTokenLookupContextHandle for System.IntPtr:op_Subtraction(long,int):long is 0x0000019CC7751701. *************** In fgFindBasicBlocks() for System.IntPtr:op_Subtraction(long,int):long weight= 19 : state 197 [ ldarga.s.normed -> ldfld ] weight= 79 : state 40 [ call ] weight= 16 : state 4 [ ldarg.1 ] weight= 0 : state 157 [ conv.i ] weight=-15 : state 77 [ sub ] weight= 99 : state 94 [ conv.i8 ] weight=227 : state 103 [ newobj ] weight= 19 : state 42 [ ret ] multiplier in methods of promotable struct increased to 3. Inline candidate callsite is boring. Multiplier increased to 4.3. calleeNativeSizeEstimate=444 callsiteNativeSizeEstimate=115 benefit multiplier=4.3 threshold=494 Native estimate for function size is within threshold for inlining 44.4 <= 49.4 (multiplier = 4.3) Jump targets: none New Basic Block BB02 [0001] created. BB02 [000..016) Basic block list for 'System.IntPtr:op_Subtraction(long,int):long' ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB02 [0001] 1 1 [000..016) (return) ----------------------------------------------------------------------------------------------------------------------------------------- *************** Inline @[000007] Starting PHASE Pre-import *************** Inline @[000007] Finishing PHASE Pre-import *************** Inline @[000007] Starting PHASE Importation *************** In impImport() for System.IntPtr:op_Subtraction(long,int):long impImportBlockPending for BB02 Importing BB02 (PC=000) of 'System.IntPtr:op_Subtraction(long,int):long' [ 0] 0 (0x000) ldarga.s 0 lvaGrabTemp returning 8 (V08 tmp1) called for Inlining Arg. [ 1] 2 (0x002) ldfld 0400040D [ 1] 7 (0x007) call Inlining failed due to an exception during invoking the compiler for the inlinee method System.IntPtr:op_Subtraction(long,int):long. Inlining [000007] failed, so bashing STMT00001 to NOP INLINER: during 'fgInline' result 'failed this call site' reason 'compilation error' for 'Foo:TryGetDynamicRuntimeFieldHandleComponents(System.RuntimeFieldHandle,byref,byref):bool:this' calling 'System.IntPtr:op_Subtraction(long,int):long' INLINER: during 'fgInline' result 'failed this call site' reason 'compilation error' Replacing the return expression placeholder [000008] with [000007] [000008] --C--------- * RET_EXPR long (inl return from call [000007]) Inserting the inline return expression [000007] --C-G------- * CALL r2r_ind long System.IntPtr.op_Subtraction [000005] ------------ arg0 +--* LCL_VAR long V04 loc0 [000006] ------------ arg1 \--* CNS_INT int 1 Expanding INLINE_CANDIDATE in statement STMT00003 in BB01: STMT00003 (IL 0x00D...0x014) [000013] I-C-G------- * CALL r2r_ind long System.IntPtr.ToPointer (exactContextHnd=0x0000019CC7751701) [000012] ------------ this in rcx \--* ADDR byref [000011] -------N---- \--* LCL_VAR long V04 loc0 thisArg: is a constant [000012] ------------ * ADDR byref [000011] -------N---- \--* LCL_VAR long V04 loc0 INLINER: inlineInfo.tokenLookupContextHandle for System.IntPtr:ToPointer():long:this set to 0x0000019CC7751701: Invoking compiler for the inlinee method System.IntPtr:ToPointer():long:this : IL to import: IL_0000 02 ldarg.0 IL_0001 7b 0d 04 00 04 ldfld 0x400040D IL_0006 2a ret INLINER impTokenLookupContextHandle for System.IntPtr:ToPointer():long:this is 0x0000019CC7751701. *************** In fgFindBasicBlocks() for System.IntPtr:ToPointer():long:this Jump targets: none New Basic Block BB03 [0001] created. BB03 [000..007) Basic block list for 'System.IntPtr:ToPointer():long:this' ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB03 [0001] 1 1 [000..007) (return) ----------------------------------------------------------------------------------------------------------------------------------------- *************** Inline @[000013] Starting PHASE Pre-import *************** Inline @[000013] Finishing PHASE Pre-import *************** Inline @[000013] Starting PHASE Importation *************** In impImport() for System.IntPtr:ToPointer():long:this impImportBlockPending for BB03 Importing BB03 (PC=000) of 'System.IntPtr:ToPointer():long:this' [ 0] 0 (0x000) ldarg.0 [ 1] 1 (0x001) ldfld 0400040D [ 1] 6 (0x006) ret Inlinee Return expression (before normalization) => [000040] ----G------- * FIELD long _value [000038] ------------ \--* ADDR byref [000039] -------N---- \--* LCL_VAR long V04 loc0 Inlinee Return expression (after normalization) => [000040] ----G------- * FIELD long _value [000038] ------------ \--* ADDR byref [000039] -------N---- \--* LCL_VAR long V04 loc0 ** Note: inlinee IL was partially imported -- imported 0 of 7 bytes of method IL *************** Inline @[000013] Finishing PHASE Importation Trees after Importation ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB03 [0001] 1 1 [000..007) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB03 [000..007) (return), preds={} succs={} ------------------------------------------------------------------------------------------------------------------- *************** Inline @[000013] Starting PHASE Indirect call transform -- no candidates to transform *************** Inline @[000013] Finishing PHASE Indirect call transform [no changes] *************** Inline @[000013] Starting PHASE Expand patchpoints -- no patchpoints to transform *************** Inline @[000013] Finishing PHASE Expand patchpoints [no changes] *************** Inline @[000013] Starting PHASE Post-import *************** In fgRemoveEmptyBlocks *************** Inline @[000013] Finishing PHASE Post-import ----------- Statements (and blocks) added due to the inlining of call [000013] ----------- Arguments setup: Inlinee method body:fgInlineAppendStatements: no gc ref inline locals. Return expression for call at [000013] is [000040] ----G------- * FIELD long _value [000038] ------------ \--* ADDR byref [000039] -------N---- \--* LCL_VAR long V04 loc0 Successfully inlined System.IntPtr:ToPointer():long:this (7 IL bytes) (depth 1) [below ALWAYS_INLINE size] -------------------------------------------------------------------------------------------- INLINER: during 'fgInline' result 'success' reason 'below ALWAYS_INLINE size' for 'Foo:TryGetDynamicRuntimeFieldHandleComponents(System.RuntimeFieldHandle,byref,byref):bool:this' calling 'System.IntPtr:ToPointer():long:this' INLINER: during 'fgInline' result 'success' reason 'below ALWAYS_INLINE size' Replacing the return expression placeholder [000014] with [000040] [000014] --C--------- * RET_EXPR long (inl return from call [000040]) Inserting the inline return expression [000040] ----G------- * FIELD long _value [000038] ------------ \--* ADDR byref [000039] -------N---- \--* LCL_VAR long V04 loc0 Expanding INLINE_CANDIDATE in statement STMT00007 in BB01: STMT00007 (IL 0x02E...0x036) [000031] I-C-G------- * CALL r2r_ind ref Foo.GetStringFromMemoryInNativeFormat (exactContextHnd=0x0000019CC7791519) [000029] ------------ this in rcx +--* LCL_VAR ref V00 this [000030] ------------ arg1 \--* LCL_VAR long V06 loc2 thisArg: is a local var [000029] ------------ * LCL_VAR ref V00 this Argument #1: is a local var [000030] ------------ * LCL_VAR long V06 loc2 INLINER: inlineInfo.tokenLookupContextHandle for Foo:GetStringFromMemoryInNativeFormat(long):System.String:this set to 0x0000019CC7791519: Invoking compiler for the inlinee method Foo:GetStringFromMemoryInNativeFormat(long):System.String:this : IL to import: IL_0000 14 ldnull IL_0001 2a ret INLINER impTokenLookupContextHandle for Foo:GetStringFromMemoryInNativeFormat(long):System.String:this is 0x0000019CC7791519. *************** In fgFindBasicBlocks() for Foo:GetStringFromMemoryInNativeFormat(long):System.String:this Jump targets: none New Basic Block BB04 [0002] created. BB04 [000..002) Basic block list for 'Foo:GetStringFromMemoryInNativeFormat(long):System.String:this' ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB04 [0002] 1 1 [000..002) (return) ----------------------------------------------------------------------------------------------------------------------------------------- *************** Inline @[000031] Starting PHASE Pre-import *************** Inline @[000031] Finishing PHASE Pre-import *************** Inline @[000031] Starting PHASE Importation *************** In impImport() for Foo:GetStringFromMemoryInNativeFormat(long):System.String:this impImportBlockPending for BB04 Importing BB04 (PC=000) of 'Foo:GetStringFromMemoryInNativeFormat(long):System.String:this' [ 0] 0 (0x000) ldnull [ 1] 1 (0x001) ret Inlinee Return expression (before normalization) => [000042] ------------ * CNS_INT ref null Inlinee Return expression (after normalization) => [000042] ------------ * CNS_INT ref null ** Note: inlinee IL was partially imported -- imported 0 of 2 bytes of method IL *************** Inline @[000031] Finishing PHASE Importation Trees after Importation ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB04 [0002] 1 1 [000..002) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB04 [000..002) (return), preds={} succs={} ------------------------------------------------------------------------------------------------------------------- *************** Inline @[000031] Starting PHASE Indirect call transform -- no candidates to transform *************** Inline @[000031] Finishing PHASE Indirect call transform [no changes] *************** Inline @[000031] Starting PHASE Expand patchpoints -- no patchpoints to transform *************** Inline @[000031] Finishing PHASE Expand patchpoints [no changes] *************** Inline @[000031] Starting PHASE Post-import *************** In fgRemoveEmptyBlocks *************** Inline @[000031] Finishing PHASE Post-import ----------- Statements (and blocks) added due to the inlining of call [000031] ----------- Arguments setup: Inlinee method body:fgInlineAppendStatements: no gc ref inline locals. Return expression for call at [000031] is [000042] ------------ * CNS_INT ref null Successfully inlined Foo:GetStringFromMemoryInNativeFormat(long):System.String:this (2 IL bytes) (depth 1) [below ALWAYS_INLINE size] -------------------------------------------------------------------------------------------- INLINER: during 'fgInline' result 'success' reason 'below ALWAYS_INLINE size' for 'Foo:TryGetDynamicRuntimeFieldHandleComponents(System.RuntimeFieldHandle,byref,byref):bool:this' calling 'Foo:GetStringFromMemoryInNativeFormat(long):System.String:this' INLINER: during 'fgInline' result 'success' reason 'below ALWAYS_INLINE size' Replacing the return expression placeholder [000032] with [000042] [000032] --C--------- * RET_EXPR ref (inl return from call [000042]) Inserting the inline return expression [000042] ------------ * CNS_INT ref null **************** Inline Tree Inlines into 06000002 Foo:TryGetDynamicRuntimeFieldHandleComponents(System.RuntimeFieldHandle,byref,byref):bool:this [0 IL=0007 TR=000007 060010DD] [FAILED: compilation error] System.IntPtr:op_Subtraction(long,int):long [1 IL=0015 TR=000013 060010DF] [below ALWAYS_INLINE size] System.IntPtr:ToPointer():long:this [2 IL=0049 TR=000031 06000001] [below ALWAYS_INLINE size] Foo:GetStringFromMemoryInNativeFormat(long):System.String:this Budget: initialTime=231, finalTime=203, initialBudget=2310, currentBudget=2310 Budget: initialSize=1430, finalSize=1430 *************** Finishing PHASE Morph - Inlining Trees after Morph - Inlining ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..039) (return), preds={} succs={} ***** BB01 STMT00000 (IL 0x000...0x004) [000004] -A-XG------- * ASG long [000003] D------N---- +--* LCL_VAR long V04 loc0 [000002] *--XG------- \--* IND long [000001] ------------ \--* ADDR long [000000] -------N---- \--* LCL_VAR struct V01 arg1 ***** BB01 STMT00002 (IL ???... ???) [000010] -AC--------- * ASG long [000009] D------N---- +--* LCL_VAR long V04 loc0 [000007] --C-G------- \--* CALL r2r_ind long System.IntPtr.op_Subtraction [000005] ------------ arg0 +--* LCL_VAR long V04 loc0 [000006] ------------ arg1 \--* CNS_INT int 1 ***** BB01 STMT00004 (IL ???... ???) [000016] -AC--------- * ASG long [000015] D------N---- +--* LCL_VAR long V05 loc1 [000040] ----G------- \--* FIELD long _value [000038] ------------ \--* ADDR byref [000039] -------N---- \--* LCL_VAR long V04 loc0 ***** BB01 STMT00005 (IL 0x015...0x022) [000023] -A-XG------- * ASG struct (copy) [000022] ------------ +--* OBJ struct [000017] ------------ | \--* LCL_VAR byref V02 arg2 [000021] ---XG------- \--* OBJ struct [000020] ---XG------- \--* ADDR long [000019] ---XG--N---- \--* FIELD long DeclaringType [000018] ------------ \--* LCL_VAR long V05 loc1 ***** BB01 STMT00006 (IL 0x027...0x02D) [000027] -A-XG------- * ASG long [000026] D------N---- +--* LCL_VAR long V06 loc2 [000025] ---XG------- \--* FIELD long FieldName [000024] ------------ \--* LCL_VAR long V05 loc1 ***** BB01 STMT00008 (IL ???... ???) [000034] -ACXG------- * ASG ref [000033] *------N---- +--* IND ref [000028] ------------ | \--* LCL_VAR byref V03 arg3 [000042] ------------ \--* CNS_INT ref null ***** BB01 STMT00009 (IL 0x037...0x038) [000036] ------------ * RETURN int [000035] ------------ \--* CNS_INT int 1 ------------------------------------------------------------------------------------------------------------------- *************** Starting PHASE Allocate Objects no newobjs in this method; punting *************** Finishing PHASE Allocate Objects [no changes] *************** Starting PHASE Morph - Add internal blocks *************** After fgAddInternal() ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- *************** Exception Handling table is empty *************** Finishing PHASE Morph - Add internal blocks *************** Starting PHASE Remove empty try *************** In fgRemoveEmptyTry() No EH in this method, nothing to remove. *************** Finishing PHASE Remove empty try [no changes] *************** Starting PHASE Remove empty finally No EH in this method, nothing to remove. *************** Finishing PHASE Remove empty finally [no changes] *************** Starting PHASE Merge callfinally chains No EH in this method, nothing to merge. *************** Finishing PHASE Merge callfinally chains [no changes] *************** Starting PHASE Clone finally No EH in this method, no cloning. *************** Finishing PHASE Clone finally [no changes] *************** Starting PHASE Compute preds Renumbering the basic blocks for fgComputePred *************** Before renumbering the basic blocks ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- *************** Exception Handling table is empty *************** After renumbering the basic blocks =============== No blocks renumbered! New BlockSet epoch 2, # of blocks (including unused BB00): 2, bitset array size: 1 (short) *************** In fgComputePreds() ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- *************** After fgComputePreds() ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) i label target ----------------------------------------------------------------------------------------------------------------------------------------- *************** Finishing PHASE Compute preds *************** Starting PHASE Merge throw blocks *************** In fgTailMergeThrows Method does not have multiple noreturn calls. *************** Finishing PHASE Merge throw blocks [no changes] *************** Starting PHASE Update flow graph early pass *************** In fgUpdateFlowGraph() Before updating the flow graph: ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) i label target ----------------------------------------------------------------------------------------------------------------------------------------- *************** In fgDebugCheckBBlist *************** Finishing PHASE Update flow graph early pass *************** Starting PHASE Morph - Promote Structs *************** In fgResetImplicitByRefRefCount() *************** In fgPromoteStructs() lvaTable before fgPromoteStructs ; Initial local variable assignments ; ; V00 this ref this class-hnd ; V01 arg1 struct ld-addr-op ; V02 arg2 byref ; V03 arg3 byref ; V04 loc0 long ld-addr-op ; V05 loc1 long ; V06 loc2 long ; V07 OutArgs lclBlk "OutgoingArgSpace" Promoting struct local V01 (System.RuntimeFieldHandle): lvaGrabTemp returning 8 (V08 tmp1) (a long lifetime temp) called for field V01.m_ptr (fldOffset=0x0). lvaTable after fgPromoteStructs ; Initial local variable assignments ; ; V00 this ref this class-hnd ; V01 arg1 struct ld-addr-op ; V02 arg2 byref ; V03 arg3 byref ; V04 loc0 long ld-addr-op ; V05 loc1 long ; V06 loc2 long ; V07 OutArgs lclBlk "OutgoingArgSpace" ; V08 tmp1 ref V01.m_ptr(offs=0x00) P-INDEP "field V01.m_ptr (fldOffset=0x0)" *************** Finishing PHASE Morph - Promote Structs *************** Starting PHASE Morph - Structs/AddrExp *************** In fgMarkAddressExposedLocals() LocalAddressVisitor visiting statement: STMT00000 (IL 0x000...0x004) [000004] -A-XG------- * ASG long [000003] D------N---- +--* LCL_VAR long V04 loc0 [000002] *--XG------- \--* IND long [000001] ------------ \--* ADDR long [000000] -------N---- \--* LCL_VAR struct(P) V01 arg1 \--* ref V01.m_ptr (offs=0x00) -> V08 tmp1 LocalAddressVisitor visiting statement: STMT00002 (IL ???... ???) [000010] -AC--------- * ASG long [000009] D------N---- +--* LCL_VAR long V04 loc0 [000007] --C-G------- \--* CALL r2r_ind long System.IntPtr.op_Subtraction [000005] ------------ arg0 +--* LCL_VAR long V04 loc0 [000006] ------------ arg1 \--* CNS_INT int 1 LocalAddressVisitor visiting statement: STMT00004 (IL ???... ???) [000016] -AC--------- * ASG long [000015] D------N---- +--* LCL_VAR long V05 loc1 [000040] ----G------- \--* FIELD long _value [000038] ------------ \--* ADDR byref [000039] -------N---- \--* LCL_VAR long V04 loc0 Replacing the field in normed struct with local var V04 LocalAddressVisitor modified statement: STMT00004 (IL ???... ???) [000016] -AC--------- * ASG long [000015] D------N---- +--* LCL_VAR long V05 loc1 [000040] ------------ \--* LCL_VAR long V04 loc0 LocalAddressVisitor visiting statement: STMT00005 (IL 0x015...0x022) [000023] -A-XG------- * ASG struct (copy) [000022] ------------ +--* OBJ struct [000017] ------------ | \--* LCL_VAR byref V02 arg2 [000021] ---XG------- \--* OBJ struct [000020] ---XG------- \--* ADDR long [000019] ---XG--N---- \--* FIELD long DeclaringType [000018] ------------ \--* LCL_VAR long V05 loc1 LocalAddressVisitor visiting statement: STMT00006 (IL 0x027...0x02D) [000027] -A-XG------- * ASG long [000026] D------N---- +--* LCL_VAR long V06 loc2 [000025] ---XG------- \--* FIELD long FieldName [000024] ------------ \--* LCL_VAR long V05 loc1 LocalAddressVisitor visiting statement: STMT00008 (IL ???... ???) [000034] -ACXG------- * ASG ref [000033] *------N---- +--* IND ref [000028] ------------ | \--* LCL_VAR byref V03 arg3 [000042] ------------ \--* CNS_INT ref null LocalAddressVisitor visiting statement: STMT00009 (IL 0x037...0x038) [000036] ------------ * RETURN int [000035] ------------ \--* CNS_INT int 1 *************** Finishing PHASE Morph - Structs/AddrExp *************** Starting PHASE Morph - ByRefs *************** In fgRetypeImplicitByRefArgs() *************** Finishing PHASE Morph - ByRefs *************** Starting PHASE Morph - Global *************** In fgMorphBlocks() Morphing BB01 of 'Foo:TryGetDynamicRuntimeFieldHandleComponents(System.RuntimeFieldHandle,byref,byref):bool:this' fgMorphTree BB01, STMT00000 (before) [000004] -A-XG------- * ASG long [000003] D------N---- +--* LCL_VAR long V04 loc0 [000002] *--XG------- \--* IND long [000001] ------------ \--* ADDR long [000000] -------N---- \--* LCL_VAR struct(P) V01 arg1 \--* ref V01.m_ptr (offs=0x00) -> V08 tmp1 Local V01 should not be enregistered because: was accessed as a local field fgMorphTree BB01, STMT00000 (after) [000004] -A--G+------ * ASG long [000003] D----+-N---- +--* LCL_VAR long V04 loc0 [000000] -----+------ \--* LCL_FLD long V01 arg1 [+0] \--* ref V01.m_ptr (offs=0x00) -> V08 tmp1 fgMorphTree BB01, STMT00002 (before) [000010] -AC--------- * ASG long [000009] D------N---- +--* LCL_VAR long V04 loc0 [000007] --C-G------- \--* CALL r2r_ind long System.IntPtr.op_Subtraction [000005] ------------ arg0 +--* LCL_VAR long V04 loc0 [000006] ------------ arg1 \--* CNS_INT int 1 Initializing arg info for 7.CALL: ArgTable for 7.CALL after fgInitArgInfo: fgArgTabEntry[arg 0 5.LCL_VAR long (By ref), 1 reg: rcx, align=1] fgArgTabEntry[arg 1 6.CNS_INT int (By ref), 1 reg: rdx, align=1] Morphing args for 7.CALL: argSlots=2, preallocatedArgCount=4, nextSlotNum=4, outgoingArgSpaceSize=32 Sorting the arguments: Deferred argument ('rcx'): [000005] -----+------ * LCL_VAR long V04 loc0 Replaced with placeholder node: [000044] ----------L- * ARGPLACE long Deferred argument ('rdx'): [000006] -----+------ * CNS_INT int 1 Replaced with placeholder node: [000045] ----------L- * ARGPLACE int Shuffled argument table: rcx rdx ArgTable for 7.CALL after fgMorphArgs: fgArgTabEntry[arg 0 5.LCL_VAR long (By ref), 1 reg: rcx, align=1, lateArgInx=0, processed] fgArgTabEntry[arg 1 6.CNS_INT int (By ref), 1 reg: rdx, align=1, lateArgInx=1, processed] fgMorphTree BB01, STMT00002 (after) [000010] -ACXG+------ * ASG long [000009] D----+-N---- +--* LCL_VAR long V04 loc0 [000007] --CXG+------ \--* CALL r2r_ind long System.IntPtr.op_Subtraction [000005] -----+------ arg0 in rcx +--* LCL_VAR long V04 loc0 [000006] -----+------ arg1 in rdx \--* CNS_INT int 1 fgMorphTree BB01, STMT00004 (before) [000016] -AC--------- * ASG long [000015] D------N---- +--* LCL_VAR long V05 loc1 [000040] ------------ \--* LCL_VAR long V04 loc0 GenTreeNode creates assertion: [000016] -A---------- * ASG long In BB01 New Local Copy Assertion: V05 == V04 index=#01, mask=0000000000000001 fgMorphTree BB01, STMT00005 (before) [000023] -A-XG------- * ASG struct (copy) [000022] ------------ +--* OBJ struct [000017] ------------ | \--* LCL_VAR byref V02 arg2 [000021] ---XG------- \--* OBJ struct [000020] ---XG------- \--* ADDR long [000019] ---XG--N---- \--* FIELD long DeclaringType [000018] ------------ \--* LCL_VAR long V05 loc1 Before calling fgAddFieldSeqForZeroOffset: [000019] ---XG--N---- * IND long [000018] ------------ \--* LCL_VAR long V05 loc1 fgAddFieldSeqForZeroOffset for Fseq[DeclaringType] addr (Before) [000018] ------------ LCL_VAR long (After) [000018] ------------ LCL_VAR long Zero Fseq[DeclaringType] Assertion prop in BB01: Copy Assertion: V05 == V04 index=#01, mask=0000000000000001 [000018] ------------ * LCL_VAR long V04 loc0 Zero Fseq[DeclaringType] Final value of Compiler::fgMorphField after calling fgMorphSmpOp: [000019] ---XG--N---- * IND long [000018] -----+------ \--* LCL_VAR long V04 loc0 Zero Fseq[DeclaringType] fgMorphCopyBlock: fgMorphBlkNode for dst tree, before: [000022] ---X-+------ * OBJ struct [000017] -----+------ \--* LCL_VAR byref V02 arg2 fgMorphBlkNode after: [000022] ---X-+------ * OBJ struct [000017] -----+------ \--* LCL_VAR byref V02 arg2 fgMorphBlkNode for src tree, before: [000021] ---XG+------ * OBJ struct [000018] -----+------ \--* LCL_VAR long V04 loc0 Zero Fseq[DeclaringType] fgMorphBlkNode after: [000021] ---XG+------ * OBJ struct [000018] -----+------ \--* LCL_VAR long V04 loc0 Zero Fseq[DeclaringType] block assignment to morph: [000023] -A-XG------- * ASG struct (copy) [000022] ---X-+------ +--* OBJ struct [000017] -----+------ | \--* LCL_VAR byref V02 arg2 [000021] ---XG+------ \--* OBJ struct [000018] -----+------ \--* LCL_VAR long V04 loc0 Zero Fseq[DeclaringType] with no promoted structs this requires a CopyBlock. fgMorphCopyBlock (after): [000023] -A-XG------- * ASG struct (copy) [000022] ---X-+------ +--* OBJ struct [000017] -----+------ | \--* LCL_VAR byref V02 arg2 [000021] ---XG+------ \--* IND struct [000018] -----+------ \--* LCL_VAR long V04 loc0 Zero Fseq[DeclaringType] fgMorphTree BB01, STMT00005 (after) [000023] -A-XG+------ * ASG struct (copy) [000022] ---X-+------ +--* OBJ struct [000017] -----+------ | \--* LCL_VAR byref V02 arg2 [000021] ---XG+------ \--* IND struct [000018] -----+------ \--* LCL_VAR long V04 loc0 Zero Fseq[DeclaringType] fgMorphTree BB01, STMT00006 (before) [000027] -A-XG------- * ASG long [000026] D------N---- +--* LCL_VAR long V06 loc2 [000025] ---XG------- \--* FIELD long FieldName [000024] ------------ \--* LCL_VAR long V05 loc1 Assertion prop in BB01: Copy Assertion: V05 == V04 index=#01, mask=0000000000000001 [000024] ------------ * LCL_VAR long V04 loc0 Final value of Compiler::fgMorphField after calling fgMorphSmpOp: [000025] ---XG------- * IND long [000047] -----+------ \--* ADD long [000024] -----+------ +--* LCL_VAR long V04 loc0 [000046] -----+------ \--* CNS_INT long 8 field offset Fseq[FieldName] fgMorphTree BB01, STMT00006 (after) [000027] -A-XG+------ * ASG long [000026] D----+-N---- +--* LCL_VAR long V06 loc2 [000025] ---XG+------ \--* IND long [000047] -----+------ \--* ADD long [000024] -----+------ +--* LCL_VAR long V04 loc0 [000046] -----+------ \--* CNS_INT long 8 field offset Fseq[FieldName] fgMorphTree BB01, STMT00008 (before) [000034] -ACXG------- * ASG ref [000033] *------N---- +--* IND ref [000028] ------------ | \--* LCL_VAR byref V03 arg3 [000042] ------------ \--* CNS_INT ref null fgMorphTree BB01, STMT00009 (before) [000036] ------------ * RETURN int [000035] ------------ \--* CNS_INT int 1 *************** Finishing PHASE Morph - Global Trees after Morph - Global ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) i label target gcsafe ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..039) (return), preds={} succs={} ***** BB01 STMT00000 (IL 0x000...0x004) [000004] -A--G+------ * ASG long [000003] D----+-N---- +--* LCL_VAR long V04 loc0 [000000] -----+------ \--* LCL_FLD long V01 arg1 [+0] \--* ref V01.m_ptr (offs=0x00) -> V08 tmp1 ***** BB01 STMT00002 (IL ???... ???) [000010] -ACXG+------ * ASG long [000009] D----+-N---- +--* LCL_VAR long V04 loc0 [000007] --CXG+------ \--* CALL r2r_ind long System.IntPtr.op_Subtraction [000005] -----+------ arg0 in rcx +--* LCL_VAR long V04 loc0 [000006] -----+------ arg1 in rdx \--* CNS_INT int 1 ***** BB01 STMT00004 (IL ???... ???) [000016] -A---+------ * ASG long [000015] D----+-N---- +--* LCL_VAR long V05 loc1 [000040] -----+------ \--* LCL_VAR long V04 loc0 ***** BB01 STMT00005 (IL 0x015...0x022) [000023] -A-XG+------ * ASG struct (copy) [000022] ---X-+------ +--* OBJ struct [000017] -----+------ | \--* LCL_VAR byref V02 arg2 [000021] ---XG+------ \--* IND struct [000018] -----+------ \--* LCL_VAR long V04 loc0 Zero Fseq[DeclaringType] ***** BB01 STMT00006 (IL 0x027...0x02D) [000027] -A-XG+------ * ASG long [000026] D----+-N---- +--* LCL_VAR long V06 loc2 [000025] ---XG+------ \--* IND long [000047] -----+------ \--* ADD long [000024] -----+------ +--* LCL_VAR long V04 loc0 [000046] -----+------ \--* CNS_INT long 8 field offset Fseq[FieldName] ***** BB01 STMT00008 (IL ???... ???) [000034] -A-XG+------ * ASG ref [000033] *--X-+-N---- +--* IND ref [000028] -----+------ | \--* LCL_VAR byref V03 arg3 [000042] -----+------ \--* CNS_INT ref null ***** BB01 STMT00009 (IL 0x037...0x038) [000036] -----+------ * RETURN int [000035] -----+------ \--* CNS_INT int 1 ------------------------------------------------------------------------------------------------------------------- *************** In fgDebugCheckBBlist *************** Starting PHASE GS Cookie No GS security needed *************** Finishing PHASE GS Cookie *************** Starting PHASE Mark GC poll blocks *************** Before renumbering the basic blocks ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) i label target gcsafe ----------------------------------------------------------------------------------------------------------------------------------------- *************** Exception Handling table is empty *************** After renumbering the basic blocks =============== No blocks renumbered! *************** Finishing PHASE Mark GC poll blocks *************** Starting PHASE Compute edge weights (1, false) *************** In fgComputeBlockAndEdgeWeights() ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) i label target gcsafe ----------------------------------------------------------------------------------------------------------------------------------------- -- no profile data, so using default called count fgComputeEdgeWeights() was able to compute exact edge weights for all of the 0 edges, using 1 passes. *************** Finishing PHASE Compute edge weights (1, false) *************** Starting PHASE Create EH funclets *************** In fgCreateFunclets() After fgCreateFunclets() ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) i label target gcsafe ----------------------------------------------------------------------------------------------------------------------------------------- *************** Exception Handling table is empty *************** In fgDebugCheckBBlist *************** Finishing PHASE Create EH funclets *************** Starting PHASE Optimize layout *************** In optOptimizeLayout() *************** Exception Handling table is empty *************** In fgDebugCheckBBlist *************** In fgUpdateFlowGraph() Before updating the flow graph: ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) i label target gcsafe ----------------------------------------------------------------------------------------------------------------------------------------- *************** In fgDebugCheckBBlist *************** In fgUpdateFlowGraph() Before updating the flow graph: ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) i label target gcsafe ----------------------------------------------------------------------------------------------------------------------------------------- *************** In fgDebugCheckBBlist *************** Finishing PHASE Optimize layout *************** Starting PHASE Compute blocks reachability *************** In fgComputeReachability *************** In fgDebugCheckBBlist Renumbering the basic blocks for fgComputeReachability pass #1 *************** Before renumbering the basic blocks ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) i label target gcsafe ----------------------------------------------------------------------------------------------------------------------------------------- *************** Exception Handling table is empty *************** After renumbering the basic blocks =============== No blocks renumbered! Enter blocks: BB01 After computing reachability sets: ------------------------------------------------ BBnum Reachable by ------------------------------------------------ BB01 : BB01 After computing reachability: ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) i label target gcsafe ----------------------------------------------------------------------------------------------------------------------------------------- *************** In fgDebugCheckBBlist *************** In fgComputeDoms *************** In fgDebugCheckBBlist Dominator computation start blocks (those blocks with no incoming edges): BB01 ------------------------------------------------ BBnum Dominated by ------------------------------------------------ BB01: BB01 Inside fgBuildDomTree After computing the Dominance Tree: After numbering the dominator tree: BB01: pre=01, post=01 *************** Finishing PHASE Compute blocks reachability *************** Starting PHASE Optimize loops *************** In optOptimizeLoops() *************** In fgDebugCheckBBlist *************** Finishing PHASE Optimize loops *************** Starting PHASE Clone loops *************** In optCloneLoops() *************** Finishing PHASE Clone loops *************** Starting PHASE Unroll loops *************** Finishing PHASE Unroll loops *************** Starting PHASE Mark local vars *************** In lvaMarkLocalVars() *** lvaComputeRefCounts *** *** lvaComputeRefCounts -- explicit counts *** *** marking local variables in block BB01 (weight=1 ) STMT00000 (IL 0x000...0x004) [000004] -A--G+------ * ASG long [000003] D----+-N---- +--* LCL_VAR long V04 loc0 [000000] -----+------ \--* LCL_FLD long V01 arg1 [+0] \--* ref V01.m_ptr (offs=0x00) -> V08 tmp1 New refCnts for V04: refCnt = 1, refCntWtd = 1 New refCnts for V08: refCnt = 1, refCntWtd = 1 New refCnts for V01: refCnt = 1, refCntWtd = 1 STMT00002 (IL ???... ???) [000010] -ACXG+------ * ASG long [000009] D----+-N---- +--* LCL_VAR long V04 loc0 [000007] --CXG+------ \--* CALL r2r_ind long System.IntPtr.op_Subtraction [000005] -----+------ arg0 in rcx +--* LCL_VAR long V04 loc0 [000006] -----+------ arg1 in rdx \--* CNS_INT int 1 New refCnts for V04: refCnt = 2, refCntWtd = 2 New refCnts for V04: refCnt = 3, refCntWtd = 3 STMT00004 (IL ???... ???) [000016] -A---+------ * ASG long [000015] D----+-N---- +--* LCL_VAR long V05 loc1 [000040] -----+------ \--* LCL_VAR long V04 loc0 New refCnts for V05: refCnt = 1, refCntWtd = 1 New refCnts for V04: refCnt = 4, refCntWtd = 4 STMT00005 (IL 0x015...0x022) [000023] -A-XG+------ * ASG struct (copy) [000022] ---X-+------ +--* OBJ struct [000017] -----+------ | \--* LCL_VAR byref V02 arg2 [000021] ---XG+------ \--* IND struct [000018] -----+------ \--* LCL_VAR long V04 loc0 Zero Fseq[DeclaringType] New refCnts for V02: refCnt = 1, refCntWtd = 1 New refCnts for V04: refCnt = 5, refCntWtd = 5 STMT00006 (IL 0x027...0x02D) [000027] -A-XG+------ * ASG long [000026] D----+-N---- +--* LCL_VAR long V06 loc2 [000025] ---XG+------ \--* IND long [000047] -----+------ \--* ADD long [000024] -----+------ +--* LCL_VAR long V04 loc0 [000046] -----+------ \--* CNS_INT long 8 field offset Fseq[FieldName] New refCnts for V06: refCnt = 1, refCntWtd = 1 New refCnts for V04: refCnt = 6, refCntWtd = 6 STMT00008 (IL ???... ???) [000034] -A-XG+------ * ASG ref [000033] *--X-+-N---- +--* IND ref [000028] -----+------ | \--* LCL_VAR byref V03 arg3 [000042] -----+------ \--* CNS_INT ref null New refCnts for V03: refCnt = 1, refCntWtd = 1 STMT00009 (IL 0x037...0x038) [000036] -----+------ * RETURN int [000035] -----+------ \--* CNS_INT int 1 *** lvaComputeRefCounts -- implicit counts *** New refCnts for V08: refCnt = 2, refCntWtd = 2 New refCnts for V01: refCnt = 2, refCntWtd = 2 New refCnts for V08: refCnt = 3, refCntWtd = 3 New refCnts for V01: refCnt = 3, refCntWtd = 3 New refCnts for V02: refCnt = 2, refCntWtd = 2 New refCnts for V02: refCnt = 3, refCntWtd = 3 New refCnts for V03: refCnt = 2, refCntWtd = 2 New refCnts for V03: refCnt = 3, refCntWtd = 3 New refCnts for V01: refCnt = 4, refCntWtd = 4 New refCnts for V08: refCnt = 4, refCntWtd = 4 *************** In optAddCopies() *************** Finishing PHASE Mark local vars *************** Starting PHASE Optimize bools *************** In optOptimizeBools() *************** In fgDebugCheckBBlist *************** Finishing PHASE Optimize bools *************** Starting PHASE Find oper order *************** In fgFindOperOrder() *************** Finishing PHASE Find oper order *************** Starting PHASE Set block order *************** In fgSetBlockOrder() The biggest BB has 7 tree nodes *************** Finishing PHASE Set block order Trees before Build SSA representation ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) i label target gcsafe ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..039) (return), preds={} succs={} ***** BB01 STMT00000 (IL 0x000...0x004) N003 ( 3, 4) [000004] -A--G---R--- * ASG long N002 ( 1, 1) [000003] D------N---- +--* LCL_VAR long V04 loc0 N001 ( 3, 4) [000000] ------------ \--* LCL_FLD long V01 arg1 [+0] \--* ref V01.m_ptr (offs=0x00) -> V08 tmp1 ***** BB01 STMT00002 (IL ???... ???) N007 ( 16, 9) [000010] -ACXG---R--- * ASG long N006 ( 1, 1) [000009] D------N---- +--* LCL_VAR long V04 loc0 N005 ( 16, 9) [000007] --CXG------- \--* CALL r2r_ind long System.IntPtr.op_Subtraction N003 ( 1, 1) [000005] ------------ arg0 in rcx +--* LCL_VAR long V04 loc0 N004 ( 1, 1) [000006] ------------ arg1 in rdx \--* CNS_INT int 1 ***** BB01 STMT00004 (IL ???... ???) N003 ( 5, 4) [000016] -A------R--- * ASG long N002 ( 3, 2) [000015] D------N---- +--* LCL_VAR long V05 loc1 N001 ( 1, 1) [000040] ------------ \--* LCL_VAR long V04 loc0 ***** BB01 STMT00005 (IL 0x015...0x022) N005 ( 11, 8) [000023] -A-XG---R--- * ASG struct (copy) N004 ( 7, 5) [000022] ---X-------- +--* OBJ struct N003 ( 1, 1) [000017] ------------ | \--* LCL_VAR byref V02 arg2 N002 ( 3, 2) [000021] ---XG------- \--* IND struct N001 ( 1, 1) [000018] ------------ \--* LCL_VAR long V04 loc0 Zero Fseq[DeclaringType] ***** BB01 STMT00006 (IL 0x027...0x02D) N006 ( 8, 7) [000027] -A-XG---R--- * ASG long N005 ( 3, 2) [000026] D------N---- +--* LCL_VAR long V06 loc2 N004 ( 4, 4) [000025] ---XG------- \--* IND long N003 ( 2, 2) [000047] -------N---- \--* ADD long N001 ( 1, 1) [000024] ------------ +--* LCL_VAR long V04 loc0 N002 ( 1, 1) [000046] ------------ \--* CNS_INT long 8 field offset Fseq[FieldName] ***** BB01 STMT00008 (IL ???... ???) N004 ( 5, 4) [000034] -A-XG------- * ASG ref N002 ( 3, 2) [000033] *--X---N---- +--* IND ref N001 ( 1, 1) [000028] ------------ | \--* LCL_VAR byref V03 arg3 N003 ( 1, 1) [000042] ------------ \--* CNS_INT ref null ***** BB01 STMT00009 (IL 0x037...0x038) N002 ( 2, 2) [000036] ------------ * RETURN int N001 ( 1, 1) [000035] ------------ \--* CNS_INT int 1 ------------------------------------------------------------------------------------------------------------------- *************** Starting PHASE Build SSA representation *************** In SsaBuilder::Build() [SsaBuilder] Max block count is 2. ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) i label target gcsafe ----------------------------------------------------------------------------------------------------------------------------------------- *************** Exception Handling table is empty [SsaBuilder] Topologically sorted the graph. [SsaBuilder::ComputeImmediateDom] Inside fgBuildDomTree After computing the Dominance Tree: *************** In fgLocalVarLiveness() In fgLocalVarLivenessInit Local V08 should not be enregistered because: field of a dependently promoted struct Tracked variable (6 out of 9) table: V04 loc0 [ long]: refCnt = 6, refCntWtd = 6 V08 tmp1 [ ref]: refCnt = 4, refCntWtd = 4 V02 arg2 [ byref]: refCnt = 3, refCntWtd = 3 V03 arg3 [ byref]: refCnt = 3, refCntWtd = 3 V05 loc1 [ long]: refCnt = 1, refCntWtd = 1 V06 loc2 [ long]: refCnt = 1, refCntWtd = 1 *************** In fgPerBlockLocalVarLiveness() BB01 USE(3)={ V08 V02 V03 } + ByrefExposed + GcHeap DEF(3)={V04 V05 V06} + ByrefExposed* + GcHeap* ** Memory liveness computed, GcHeap states and ByrefExposed states match *************** In fgInterBlockLocalVarLiveness() BB liveness after fgLiveVarAnalysis(): BB01 IN (3)={V08 V02 V03} + ByrefExposed + GcHeap OUT(0)={ } BB01 - Dead assignment has side effects... N006 ( 8, 7) [000027] -A-XG---R--- * ASG long N005 ( 3, 2) [000026] D------N---- +--* LCL_VAR long V06 loc2 N004 ( 4, 4) [000025] ---XG------- \--* IND long N003 ( 2, 2) [000047] -------N---- \--* ADD long N001 ( 1, 1) [000024] ------------ +--* LCL_VAR long V04 loc0 N002 ( 1, 1) [000046] ------------ \--* CNS_INT long 8 field offset Fseq[FieldName] top level assign Extracted side effects list... N004 ( 4, 4) [000025] ---XG------- * IND long N003 ( 2, 2) [000047] -------N---- \--* ADD long N001 ( 1, 1) [000024] ------------ +--* LCL_VAR long V04 loc0 N002 ( 1, 1) [000046] ------------ \--* CNS_INT long 8 field offset Fseq[FieldName] fgComputeLife modified tree: N004 ( 4, 4) [000025] ---XG------- * IND long N003 ( 2, 2) [000047] -------N---- \--* ADD long N001 ( 1, 1) [000024] ------------ +--* LCL_VAR long V04 loc0 N002 ( 1, 1) [000046] ------------ \--* CNS_INT long 8 field offset Fseq[FieldName] top level assign removing stmt with no side effects Removing statement STMT00004 (IL ???... ???) N003 ( 5, 4) [000016] -A------R--- * ASG long N002 ( 3, 2) [000015] D------N---- +--* LCL_VAR long V05 loc1 N001 ( 1, 1) [000040] ------------ \--* LCL_VAR long V04 loc0 in BB01 as useless: *************** In optRemoveRedundantZeroInits() *************** In SsaBuilder::InsertPhiFunctions() Inserting phi functions: *************** In SsaBuilder::RenameVariables() After fgSsaBuild: ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) i label target gcsafe ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..039) (return), preds={} succs={} ***** BB01 STMT00000 (IL 0x000...0x004) N003 ( 3, 4) [000004] -A--G---R--- * ASG long N002 ( 1, 1) [000003] D------N---- +--* LCL_VAR long V04 loc0 d:2 N001 ( 3, 4) [000000] ------------ \--* LCL_FLD long V01 arg1 [+0] \--* ref V01.m_ptr (offs=0x00) -> V08 tmp1 ***** BB01 STMT00002 (IL ???... ???) N007 ( 16, 9) [000010] -ACXG---R--- * ASG long N006 ( 1, 1) [000009] D------N---- +--* LCL_VAR long V04 loc0 d:3 N005 ( 16, 9) [000007] --CXG------- \--* CALL r2r_ind long System.IntPtr.op_Subtraction N003 ( 1, 1) [000005] ------------ arg0 in rcx +--* LCL_VAR long V04 loc0 u:2 (last use) N004 ( 1, 1) [000006] ------------ arg1 in rdx \--* CNS_INT int 1 ***** BB01 STMT00005 (IL 0x015...0x022) N005 ( 11, 8) [000023] -A-XG---R--- * ASG struct (copy) N004 ( 7, 5) [000022] D--X-------- +--* OBJ struct N003 ( 1, 1) [000017] ------------ | \--* LCL_VAR byref V02 arg2 u:1 (last use) N002 ( 3, 2) [000021] ---XG------- \--* IND struct N001 ( 1, 1) [000018] ------------ \--* LCL_VAR long V04 loc0 u:3 Zero Fseq[DeclaringType] ***** BB01 STMT00006 (IL 0x027...0x02D) N004 ( 4, 4) [000025] ---XG------- * IND long N003 ( 2, 2) [000047] -------N---- \--* ADD long N001 ( 1, 1) [000024] ------------ +--* LCL_VAR long V04 loc0 u:3 (last use) N002 ( 1, 1) [000046] ------------ \--* CNS_INT long 8 field offset Fseq[FieldName] ***** BB01 STMT00008 (IL ???... ???) N004 ( 5, 4) [000034] -A-XG------- * ASG ref N002 ( 3, 2) [000033] *--X---N---- +--* IND ref N001 ( 1, 1) [000028] ------------ | \--* LCL_VAR byref V03 arg3 u:1 (last use) N003 ( 1, 1) [000042] ------------ \--* CNS_INT ref null ***** BB01 STMT00009 (IL 0x037...0x038) N002 ( 2, 2) [000036] ------------ * RETURN int N001 ( 1, 1) [000035] ------------ \--* CNS_INT int 1 ------------------------------------------------------------------------------------------------------------------- *************** Finishing PHASE Build SSA representation Trees after Build SSA representation ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) i label target gcsafe ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..039) (return), preds={} succs={} ***** BB01 STMT00000 (IL 0x000...0x004) N003 ( 3, 4) [000004] -A--G---R--- * ASG long N002 ( 1, 1) [000003] D------N---- +--* LCL_VAR long V04 loc0 d:2 N001 ( 3, 4) [000000] ------------ \--* LCL_FLD long V01 arg1 [+0] \--* ref V01.m_ptr (offs=0x00) -> V08 tmp1 ***** BB01 STMT00002 (IL ???... ???) N007 ( 16, 9) [000010] -ACXG---R--- * ASG long N006 ( 1, 1) [000009] D------N---- +--* LCL_VAR long V04 loc0 d:3 N005 ( 16, 9) [000007] --CXG------- \--* CALL r2r_ind long System.IntPtr.op_Subtraction N003 ( 1, 1) [000005] ------------ arg0 in rcx +--* LCL_VAR long V04 loc0 u:2 (last use) N004 ( 1, 1) [000006] ------------ arg1 in rdx \--* CNS_INT int 1 ***** BB01 STMT00005 (IL 0x015...0x022) N005 ( 11, 8) [000023] -A-XG---R--- * ASG struct (copy) N004 ( 7, 5) [000022] D--X-------- +--* OBJ struct N003 ( 1, 1) [000017] ------------ | \--* LCL_VAR byref V02 arg2 u:1 (last use) N002 ( 3, 2) [000021] ---XG------- \--* IND struct N001 ( 1, 1) [000018] ------------ \--* LCL_VAR long V04 loc0 u:3 Zero Fseq[DeclaringType] ***** BB01 STMT00006 (IL 0x027...0x02D) N004 ( 4, 4) [000025] ---XG------- * IND long N003 ( 2, 2) [000047] -------N---- \--* ADD long N001 ( 1, 1) [000024] ------------ +--* LCL_VAR long V04 loc0 u:3 (last use) N002 ( 1, 1) [000046] ------------ \--* CNS_INT long 8 field offset Fseq[FieldName] ***** BB01 STMT00008 (IL ???... ???) N004 ( 5, 4) [000034] -A-XG------- * ASG ref N002 ( 3, 2) [000033] *--X---N---- +--* IND ref N001 ( 1, 1) [000028] ------------ | \--* LCL_VAR byref V03 arg3 u:1 (last use) N003 ( 1, 1) [000042] ------------ \--* CNS_INT ref null ***** BB01 STMT00009 (IL 0x037...0x038) N002 ( 2, 2) [000036] ------------ * RETURN int N001 ( 1, 1) [000035] ------------ \--* CNS_INT int 1 ------------------------------------------------------------------------------------------------------------------- *************** In fgDebugCheckBBlist *************** Starting PHASE Early Value Propagation *************** In optEarlyProp() After optEarlyProp: ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) i label target gcsafe ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..039) (return), preds={} succs={} ***** BB01 STMT00000 (IL 0x000...0x004) N003 ( 3, 4) [000004] -A--G---R--- * ASG long N002 ( 1, 1) [000003] D------N---- +--* LCL_VAR long V04 loc0 d:2 N001 ( 3, 4) [000000] ------------ \--* LCL_FLD long V01 arg1 [+0] \--* ref V01.m_ptr (offs=0x00) -> V08 tmp1 ***** BB01 STMT00002 (IL ???... ???) N007 ( 16, 9) [000010] -ACXG---R--- * ASG long N006 ( 1, 1) [000009] D------N---- +--* LCL_VAR long V04 loc0 d:3 N005 ( 16, 9) [000007] --CXG------- \--* CALL r2r_ind long System.IntPtr.op_Subtraction N003 ( 1, 1) [000005] ------------ arg0 in rcx +--* LCL_VAR long V04 loc0 u:2 (last use) N004 ( 1, 1) [000006] ------------ arg1 in rdx \--* CNS_INT int 1 ***** BB01 STMT00005 (IL 0x015...0x022) N005 ( 11, 8) [000023] -A-XG---R--- * ASG struct (copy) N004 ( 7, 5) [000022] D--X-------- +--* OBJ struct N003 ( 1, 1) [000017] ------------ | \--* LCL_VAR byref V02 arg2 u:1 (last use) N002 ( 3, 2) [000021] ---XG------- \--* IND struct N001 ( 1, 1) [000018] ------------ \--* LCL_VAR long V04 loc0 u:3 Zero Fseq[DeclaringType] ***** BB01 STMT00006 (IL 0x027...0x02D) N004 ( 4, 4) [000025] ---XG------- * IND long N003 ( 2, 2) [000047] -------N---- \--* ADD long N001 ( 1, 1) [000024] ------------ +--* LCL_VAR long V04 loc0 u:3 (last use) N002 ( 1, 1) [000046] ------------ \--* CNS_INT long 8 field offset Fseq[FieldName] ***** BB01 STMT00008 (IL ???... ???) N004 ( 5, 4) [000034] -A-XG------- * ASG ref N002 ( 3, 2) [000033] *--X---N---- +--* IND ref N001 ( 1, 1) [000028] ------------ | \--* LCL_VAR byref V03 arg3 u:1 (last use) N003 ( 1, 1) [000042] ------------ \--* CNS_INT ref null ***** BB01 STMT00009 (IL 0x037...0x038) N002 ( 2, 2) [000036] ------------ * RETURN int N001 ( 1, 1) [000035] ------------ \--* CNS_INT int 1 ------------------------------------------------------------------------------------------------------------------- *************** Finishing PHASE Early Value Propagation *************** Starting PHASE Do value numbering *************** In fgValueNumber() Memory Initial Value in BB01 is: $100 The SSA definition for ByrefExposed (#1) at start of BB01 is $100 {InitVal($42)} The SSA definition for GcHeap (#1) at start of BB01 is $100 {InitVal($42)} ***** BB01, STMT00000(before) N003 ( 3, 4) [000004] -A--G---R--- * ASG long N002 ( 1, 1) [000003] D------N---- +--* LCL_VAR long V04 loc0 d:2 N001 ( 3, 4) [000000] ------------ \--* LCL_FLD long V01 arg1 [+0] \--* ref V01.m_ptr (offs=0x00) -> V08 tmp1 N001 [000000] LCL_FLD V01 arg1 [+0] ref V01.m_ptr (offs=0x00) -> V08 tmp1 => $140 {140} N002 [000003] LCL_VAR V04 loc0 d:2 => $140 {140} N003 [000004] ASG => $140 {140} ***** BB01, STMT00000(after) N003 ( 3, 4) [000004] -A--G---R--- * ASG long $140 N002 ( 1, 1) [000003] D------N---- +--* LCL_VAR long V04 loc0 d:2 $140 N001 ( 3, 4) [000000] ------------ \--* LCL_FLD long V01 arg1 [+0] \--* ref V01.m_ptr (offs=0x00) -> V08 tmp1 $140 --------- ***** BB01, STMT00002(before) N007 ( 16, 9) [000010] -ACXG---R--- * ASG long N006 ( 1, 1) [000009] D------N---- +--* LCL_VAR long V04 loc0 d:3 N005 ( 16, 9) [000007] --CXG------- \--* CALL r2r_ind long System.IntPtr.op_Subtraction N003 ( 1, 1) [000005] ------------ arg0 in rcx +--* LCL_VAR long V04 loc0 u:2 (last use) N004 ( 1, 1) [000006] ------------ arg1 in rdx \--* CNS_INT int 1 N001 [000044] ARGPLACE => $142 {142} N002 [000045] ARGPLACE => $180 {180} N003 [000005] LCL_VAR V04 loc0 u:2 (last use) => $140 {140} N004 [000006] CNS_INT 1 => $43 {IntCns 1} VN of ARGPLACE tree [000044] updated to $140 {140} VN of ARGPLACE tree [000045] updated to $43 {IntCns 1} fgCurMemoryVN[GcHeap] assigned for CALL at [000007] to VN: $1c0. N005 [000007] CALL r2r_ind => $143 {143} N006 [000009] LCL_VAR V04 loc0 d:3 => $143 {143} N007 [000010] ASG => $143 {143} ***** BB01, STMT00002(after) N007 ( 16, 9) [000010] -ACXG---R--- * ASG long $143 N006 ( 1, 1) [000009] D------N---- +--* LCL_VAR long V04 loc0 d:3 $143 N005 ( 16, 9) [000007] --CXG------- \--* CALL r2r_ind long System.IntPtr.op_Subtraction $143 N003 ( 1, 1) [000005] ------------ arg0 in rcx +--* LCL_VAR long V04 loc0 u:2 (last use) $140 N004 ( 1, 1) [000006] ------------ arg1 in rdx \--* CNS_INT int 1 $43 --------- ***** BB01, STMT00005(before) N005 ( 11, 8) [000023] -A-XG---R--- * ASG struct (copy) N004 ( 7, 5) [000022] D--X-------- +--* OBJ struct N003 ( 1, 1) [000017] ------------ | \--* LCL_VAR byref V02 arg2 u:1 (last use) N002 ( 3, 2) [000021] ---XG------- \--* IND struct N001 ( 1, 1) [000018] ------------ \--* LCL_VAR long V04 loc0 u:3 Zero Fseq[DeclaringType] N001 [000018] LCL_VAR V04 loc0 u:3 => $143 {143} N002 [000021] IND => N003 [000017] LCL_VAR V02 arg2 u:1 (last use) => $80 {InitVal($40)} N004 [000022] OBJ => $282 {norm=$3 {3}, exc=$281 {NullPtrExc($80)}} fgCurMemoryVN[GcHeap] assigned for COPYBLK - non local at [000023] to VN: $1c1. N005 [000023] ASG => $VN.Void ***** BB01, STMT00005(after) N005 ( 11, 8) [000023] -A-XG---R--- * ASG struct (copy) $VN.Void N004 ( 7, 5) [000022] D--X-------- +--* OBJ struct $282 N003 ( 1, 1) [000017] ------------ | \--* LCL_VAR byref V02 arg2 u:1 (last use) $80 N002 ( 3, 2) [000021] ---XG------- \--* IND struct N001 ( 1, 1) [000018] ------------ \--* LCL_VAR long V04 loc0 u:3 Zero Fseq[DeclaringType] $143 --------- ***** BB01, STMT00006(before) N004 ( 4, 4) [000025] ---XG------- * IND long N003 ( 2, 2) [000047] -------N---- \--* ADD long N001 ( 1, 1) [000024] ------------ +--* LCL_VAR long V04 loc0 u:3 (last use) N002 ( 1, 1) [000046] ------------ \--* CNS_INT long 8 field offset Fseq[FieldName] N001 [000024] LCL_VAR V04 loc0 u:3 (last use) => $143 {143} N002 [000046] CNS_INT 8 field offset Fseq[FieldName] => $c1 {LngCns: 8} N003 [000047] ADD => $300 {ADD($c1, $143)} N004 [000025] IND => ***** BB01, STMT00006(after) N004 ( 4, 4) [000025] ---XG------- * IND long N003 ( 2, 2) [000047] -------N---- \--* ADD long $300 N001 ( 1, 1) [000024] ------------ +--* LCL_VAR long V04 loc0 u:3 (last use) $143 N002 ( 1, 1) [000046] ------------ \--* CNS_INT long 8 field offset Fseq[FieldName] $c1 --------- ***** BB01, STMT00008(before) N004 ( 5, 4) [000034] -A-XG------- * ASG ref N002 ( 3, 2) [000033] *--X---N---- +--* IND ref N001 ( 1, 1) [000028] ------------ | \--* LCL_VAR byref V03 arg3 u:1 (last use) N003 ( 1, 1) [000042] ------------ \--* CNS_INT ref null N001 [000028] LCL_VAR V03 arg3 u:1 (last use) => $81 {InitVal($41)} N003 [000042] CNS_INT null => $VN.Null fgCurMemoryVN[GcHeap] assigned for assign-of-IND at [000034] to VN: $1c2. N004 [000034] ASG => $VN.Void ***** BB01, STMT00008(after) N004 ( 5, 4) [000034] -A-XG------- * ASG ref $VN.Void N002 ( 3, 2) [000033] *--X---N---- +--* IND ref $VN.Null N001 ( 1, 1) [000028] ------------ | \--* LCL_VAR byref V03 arg3 u:1 (last use) $81 N003 ( 1, 1) [000042] ------------ \--* CNS_INT ref null $VN.Null --------- ***** BB01, STMT00009(before) N002 ( 2, 2) [000036] ------------ * RETURN int N001 ( 1, 1) [000035] ------------ \--* CNS_INT int 1 N001 [000035] CNS_INT 1 => $43 {IntCns 1} N002 [000036] RETURN => $181 {181} ***** BB01, STMT00009(after) N002 ( 2, 2) [000036] ------------ * RETURN int $181 N001 ( 1, 1) [000035] ------------ \--* CNS_INT int 1 $43 finish(BB01). *************** Finishing PHASE Do value numbering *************** Starting PHASE Hoist loop code *************** Finishing PHASE Hoist loop code *************** Starting PHASE VN based copy prop *************** In optVnCopyProp() Copy Assertion for BB01 curSsaName stack: { } Live vars: {V02 V03 V08} => {V02 V03} Live vars: {V02 V03} => {V02 V03 V04} Live vars: {V02 V03 V04} => {V02 V03} Live vars: {V02 V03} => {V02 V03 V04} Live vars: {V02 V03 V04} => {V03 V04} Live vars: {V03 V04} => {V03} Live vars: {V03} => {} *************** Finishing PHASE VN based copy prop *************** Starting PHASE Optimize Valnum CSEs *************** In optOptimizeCSEs() Blocks/Trees at start of optOptimizeCSE phase ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..039) (return) i label target gcsafe ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..039) (return), preds={} succs={} ***** BB01 STMT00000 (IL 0x000...0x004) N003 ( 3, 4) [000004] -A--G---R--- * ASG long $140 N002 ( 1, 1) [000003] D------N---- +--* LCL_VAR long V04 loc0 d:2 $140 N001 ( 3, 4) [000000] ------------ \--* LCL_FLD long V01 arg1 [+0] \--* ref V01.m_ptr (offs=0x00) -> V08 tmp1 $140 ***** BB01 STMT00002 (IL ???... ???) N007 ( 16, 9) [000010] -ACXG---R--- * ASG long $143 N006 ( 1, 1) [000009] D------N---- +--* LCL_VAR long V04 loc0 d:3 $143 N005 ( 16, 9) [000007] --CXG------- \--* CALL r2r_ind long System.IntPtr.op_Subtraction $143 N003 ( 1, 1) [000005] ------------ arg0 in rcx +--* LCL_VAR long V04 loc0 u:2 (last use) $140 N004 ( 1, 1) [000006] ------------ arg1 in rdx \--* CNS_INT int 1 $43 ***** BB01 STMT00005 (IL 0x015...0x022) N005 ( 11, 8) [000023] -A-XG---R--- * ASG struct (copy) $VN.Void N004 ( 7, 5) [000022] D--X-------- +--* OBJ struct $282 N003 ( 1, 1) [000017] ------------ | \--* LCL_VAR byref V02 arg2 u:1 (last use) $80 N002 ( 3, 2) [000021] ---XG------- \--* IND struct N001 ( 1, 1) [000018] ------------ \--* LCL_VAR long V04 loc0 u:3 Zero Fseq[DeclaringType] $143 ***** BB01 STMT00006 (IL 0x027...0x02D) N004 ( 4, 4) [000025] ---XG------- * IND long N003 ( 2, 2) [000047] -------N---- \--* ADD long $300 N001 ( 1, 1) [000024] ------------ +--* LCL_VAR long V04 loc0 u:3 (last use) $143 N002 ( 1, 1) [000046] ------------ \--* CNS_INT long 8 field offset Fseq[FieldName] $c1 ***** BB01 STMT00008 (IL ???... ???) N004 ( 5, 4) [000034] -A-XG------- * ASG ref $VN.Void N002 ( 3, 2) [000033] *--X---N---- +--* IND ref $VN.Null N001 ( 1, 1) [000028] ------------ | \--* LCL_VAR byref V03 arg3 u:1 (last use) $81 N003 ( 1, 1) [000042] ------------ \--* CNS_INT ref null $VN.Null ***** BB01 STMT00009 (IL 0x037...0x038) N002 ( 2, 2) [000036] ------------ * RETURN int $181 N001 ( 1, 1) [000035] ------------ \--* CNS_INT int 1 $43 ------------------------------------------------------------------------------------------------------------------- *************** In optOptimizeValnumCSEs() Assert failure(PID 33540 [0x00008304], Thread: 6592 [0x19c0]): Assertion failed 'fieldCorType == CORINFO_TYPE_VALUECLASS' in 'Foo:TryGetDynamicRuntimeFieldHandleComponents(System.RuntimeFieldHandle,byref,byref):bool:this' during 'Optimize Valnum CSEs' (IL size 57) File: C:\git\runtime\src\coreclr\src\jit\gentree.cpp Line: 17312 Image: C:\git\runtime\artifacts\bin\coreclr\Windows_NT.x64.Debug\crossgen.exe