****** START compiling TestCovariantReturns:Run() (MethodHash=db0641c3) 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 73 de 00 00 06 newobj 0x60000DE IL_0005 0a stloc.0 IL_0006 06 ldloc.0 IL_0007 6f db 00 00 06 callvirt 0x60000DB IL_000c 74 5c 00 00 02 castclass 0x200005C IL_0011 7b 0e 00 00 04 ldfld 0x400000E IL_0016 72 1e 0b 00 70 ldstr 0x70000B1E IL_001b 28 1c 00 00 0a call 0xA00001C IL_0020 2c 06 brfalse.s 6 (IL_0028) IL_0022 73 2c 00 00 0a newobj 0xA00002C IL_0027 7a throw IL_0028 2a ret lvaSetClass: setting class for V00 to (4000000000420030) BringUpTest+TestCovariantReturns+Base lvaGrabTemp returning 1 (V01 tmp0) (a long lifetime temp) called for OutgoingArgSpace. ; Initial local variable assignments ; ; V00 loc0 ref class-hnd ; V01 OutArgs lclBlk "OutgoingArgSpace" *************** In compInitDebuggingInfo() for TestCovariantReturns:Run() getVars() returned cVars = 0, extendOthers = true info.compVarScopesCount = 1 VarNum LVNum Name Beg End 0: 00h 00h V00 loc0 000h 029h info.compStmtOffsetsCount = 0 info.compStmtOffsetsImplicit = 0007h ( STACK_EMPTY NOP CALL_SITE ) *************** In fgFindBasicBlocks() for TestCovariantReturns:Run() weight=227 : state 103 [ newobj ] weight= 20 : state 199 [ stloc.0 -> ldloc.0 ] weight= 83 : state 99 [ callvirt ] weight=261 : state 104 [ castclass ] weight= 18 : state 109 [ ldfld ] weight= 66 : state 102 [ ldstr ] weight= 79 : state 40 [ call ] weight= 27 : state 44 [ brfalse.s ] weight=227 : state 103 [ newobj ] weight=210 : state 108 [ throw ] weight= 19 : state 42 [ ret ] Marked V00 as a single def local Jump targets: IL_0028 New Basic Block BB01 [0000] created. BB01 [000..022) New Basic Block BB02 [0001] created. BB02 [022..028) New Basic Block BB03 [0002] created. BB03 [028..029) Inline candidate callsite is hot. Multiplier increased to 3. Callsite has profile data: 1. Multiplier limited to 12.6. calleeNativeSizeEstimate=1237 callsiteNativeSizeEstimate=55 benefit multiplier=12.6 threshold=693 Native estimate for function size exceeds threshold for inlining 123.7 > 69.3 (multiplier = 12.6) INLINER: during 'prejit' result 'failed this callee' reason 'unprofitable inline' for 'n/a' calling 'TestCovariantReturns:Run()' INLINER: Marking TestCovariantReturns:Run() as NOINLINE because of unprofitable inline INLINER: during 'prejit' result 'failed this callee' reason 'unprofitable inline' IL Code Size,Instr 41, 12, Basic Block count 3, Local Variable Num,Ref count 2, 2 for method TestCovariantReturns:Run() OPTIONS: opts.MinOpts() == false Basic block list for 'TestCovariantReturns:Run()' ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..022)-> BB03 ( cond ) BB02 [0001] 1 0 [022..028) (throw ) rare BB03 [0002] 1 1 [028..029) (return) ----------------------------------------------------------------------------------------------------------------------------------------- *************** Starting PHASE Pre-import *************** Finishing PHASE Pre-import *************** Starting PHASE Profile incorporation BBOPT not set *************** Finishing PHASE Profile incorporation [no changes] *************** Starting PHASE Importation *************** In impImport() for TestCovariantReturns:Run() impImportBlockPending for BB01 Importing BB01 (PC=000) of 'TestCovariantReturns:Run()' [ 0] 0 (0x000) newobj lvaGrabTemp returning 2 (V02 tmp1) called for NewObj constructor temp. STMT00000 ( 0x000[E-] ... ??? ) [000003] -A---------- * ASG ref [000002] D------N---- +--* LCL_VAR ref V02 tmp1 [000001] ------------ \--* ALLOCOBJ ref [000000] H----------- \--* CNS_INT(h) long 0x4000000000420070 method Marked V02 as a single def local lvaSetClass: setting class for V02 to (4000000000420058) BringUpTest+TestCovariantReturns+Derived [exact] 060000DE In Compiler::impImportCall: opcode is newobj, kind=0, callRetType is void, structSize is 0 STMT00001 ( ??? ... ??? ) [000005] I-C-G------- * CALL void Derived..ctor (exactContextHnd=0x4000000000420059) [000004] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 [ 1] 5 (0x005) stloc.0 lvaUpdateClass: Updating class for V00 from (4000000000420030) BringUpTest+TestCovariantReturns+Base to (4000000000420058) BringUpTest+TestCovariantReturns+Derived [exact] STMT00002 ( 0x005[--] ... ??? ) [000008] -A---------- * ASG ref [000007] D------N---- +--* LCL_VAR ref V00 loc0 [000006] ------------ \--* LCL_VAR ref V02 tmp1 [ 0] 6 (0x006) ldloc.0 [ 1] 7 (0x007) callvirt 060000DB In Compiler::impImportCall: opcode is callvirt, kind=4, callRetType is ref, structSize is 0 impDevirtualizeCall: Trying to devirtualize virtual call: class for 'this' is BringUpTest+TestCovariantReturns+Derived [exact] (attrib 20000010) base method is BringUpTest+TestCovariantReturns+Base::GetFoo --- no derived method: virtual method installed via explicit override Class not final or exact, and method not final Considering guarded devirtualization at IL offset 7 (0x7) Not guessing for class: no class profile pgo data, or pgo disabled INLINER: during 'impMarkInlineCandidate' result 'failed this call site' reason 'target not direct' for 'TestCovariantReturns:Run()' calling 'Base:GetFoo():BringUpTest+TestCovariantReturns+IFoo:this' INLINER: during 'impMarkInlineCandidate' result 'failed this call site' reason 'target not direct' [ 1] 12 (0x00c) castclass 0200005C Considering optimization of castclass from 4000000000420088 (BringUpTest+TestCovariantReturns+IFoo) to 4000000000420098 (BringUpTest+TestCovariantReturns+Foo) Can't optimize since fromClass is inexact Expanding castclass inline lvaGrabTemp returning 3 (V03 tmp2) called for CASTCLASS eval op1. STMT00003 ( 0x006[E-] ... ??? ) [000013] -AC-G------- * ASG ref [000012] D------N---- +--* LCL_VAR ref V03 tmp2 [000010] --C-G------- \--* CALLV vt-ind ref Base.GetFoo [000009] ------------ this in rcx \--* LCL_VAR ref V00 loc0 lvaGrabTemp returning 4 (V04 tmp3) called for fgInsertCommaFormTemp is creating a new local variable. lvaGrabTemp returning 5 (V05 tmp4) called for spilling QMark2. STMT00004 ( ??? ... ??? ) [000035] -ACXG------- * ASG ref [000034] D------N---- +--* LCL_VAR ref V05 tmp4 [000033] -ACXG------- \--* QMARK ref [000025] ------------ if +--* EQ int [000024] ------------ | +--* LCL_VAR ref V03 tmp2 [000023] ------------ | \--* CNS_INT ref null [000032] -ACXG------- if \--* COLON ref [000030] -ACXG------- else +--* QMARK ref [000022] -A-X-------- if | +--* NE int [000021] #--X-------- | | +--* IND long [000014] ------------ | | | \--* LCL_VAR ref V03 tmp2 [000019] -A---------- | | \--* COMMA long [000017] -A---------- | | +--* ASG long [000016] D------N---- | | | +--* LCL_VAR long V04 tmp3 [000011] H----------- | | | \--* CNS_INT(h) long 0x40000000004200a0 class [000018] ------------ | | \--* LCL_VAR long V04 tmp3 [000029] --CXG------- if | \--* COLON ref [000026] ------------ else | +--* LCL_VAR ref V03 tmp2 [000028] --CXG------- then | \--* CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL [000020] ------------ arg0 | +--* LCL_VAR long V04 tmp3 [000027] ------------ arg1 | \--* LCL_VAR ref V03 tmp2 [000031] ------------ then \--* LCL_VAR ref V03 tmp2 Marked V05 as a single def temp lvaSetClass: setting class for V05 to (4000000000420098) BringUpTest+TestCovariantReturns+Foo [ 1] 17 (0x011) ldfld 0400000E [ 1] 22 (0x016) ldstr 70000B1E [ 2] 27 (0x01b) call 0A00001C In Compiler::impImportCall: opcode is call, kind=0, callRetType is bool, structSize is 0 STMT00005 ( ??? ... ??? ) [000039] I-CXG------- * CALL int System.String.op_Inequality (exactContextHnd=0x4000000000420049) [000037] ---XG------- arg0 +--* FIELD ref State [000036] ------------ | \--* LCL_VAR ref V05 tmp4 [000038] ------------ arg1 \--* CNS_STR ref [ 1] 32 (0x020) brfalse.s STMT00006 ( ??? ... ??? ) [000044] --C--------- * JTRUE void [000043] --C--------- \--* EQ int [000041] --C--------- +--* CAST int <- bool <- int [000040] --C--------- | \--* RET_EXPR int (inl return expr [000039]) [000042] ------------ \--* CNS_INT int 0 impImportBlockPending for BB02 impImportBlockPending for BB03 Importing BB03 (PC=040) of 'TestCovariantReturns:Run()' [ 0] 40 (0x028) ret STMT00007 ( 0x028[E-] ... ??? ) [000045] ------------ * RETURN void Importing BB02 (PC=034) of 'TestCovariantReturns:Run()' [ 0] 34 (0x022) newobj lvaGrabTemp returning 6 (V06 tmp5) called for NewObj constructor temp. STMT00008 ( 0x022[E-] ... ??? ) [000049] -A---------- * ASG ref [000048] D------N---- +--* LCL_VAR ref V06 tmp5 [000047] ------------ \--* ALLOCOBJ ref [000046] H----------- \--* CNS_INT(h) long 0x40000000004200e8 token Marked V06 as a single def local lvaSetClass: setting class for V06 to (40000000004200D8) System.Exception [exact] 0A00002C In Compiler::impImportCall: opcode is newobj, kind=0, callRetType is void, structSize is 0 STMT00009 ( ??? ... ??? ) [000051] I-C-G------- * CALL void System.Exception..ctor (exactContextHnd=0x40000000004200D9) [000050] ------------ this in rcx \--* LCL_VAR ref V06 tmp5 [ 1] 39 (0x027) throw STMT00010 ( 0x027[--] ... ??? ) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW [000052] ------------ arg0 \--* LCL_VAR ref V06 tmp5 *************** Finishing PHASE Importation Trees after Importation ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..022)-> BB03 ( cond ) i newobj BB02 [0001] 1 0 [022..028) (throw ) i rare newobj BB03 [0002] 1 1 [028..029) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..022) -> BB03 (cond), preds={} succs={BB02,BB03} ***** BB01 STMT00000 ( 0x000[E-] ... 0x005 ) [000003] -A---------- * ASG ref [000002] D------N---- +--* LCL_VAR ref V02 tmp1 [000001] ------------ \--* ALLOCOBJ ref [000000] H----------- \--* CNS_INT(h) long 0x4000000000420070 method ***** BB01 STMT00001 ( ??? ... ??? ) [000005] I-C-G------- * CALL void Derived..ctor (exactContextHnd=0x4000000000420059) [000004] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 ***** BB01 STMT00002 ( 0x005[--] ... ??? ) [000008] -A---------- * ASG ref [000007] D------N---- +--* LCL_VAR ref V00 loc0 [000006] ------------ \--* LCL_VAR ref V02 tmp1 ***** BB01 STMT00003 ( 0x006[E-] ... 0x020 ) [000013] -AC-G------- * ASG ref [000012] D------N---- +--* LCL_VAR ref V03 tmp2 [000010] --C-G------- \--* CALLV vt-ind ref Base.GetFoo [000009] ------------ this in rcx \--* LCL_VAR ref V00 loc0 ***** BB01 STMT00004 ( ??? ... ??? ) [000035] -ACXG------- * ASG ref [000034] D------N---- +--* LCL_VAR ref V05 tmp4 [000033] -ACXG------- \--* QMARK ref [000025] ------------ if +--* EQ int [000024] ------------ | +--* LCL_VAR ref V03 tmp2 [000023] ------------ | \--* CNS_INT ref null [000032] -ACXG------- if \--* COLON ref [000030] -ACXG------- else +--* QMARK ref [000022] -A-X-------- if | +--* NE int [000021] #--X-------- | | +--* IND long [000014] ------------ | | | \--* LCL_VAR ref V03 tmp2 [000019] -A---------- | | \--* COMMA long [000017] -A---------- | | +--* ASG long [000016] D------N---- | | | +--* LCL_VAR long V04 tmp3 [000011] H----------- | | | \--* CNS_INT(h) long 0x40000000004200a0 class [000018] ------------ | | \--* LCL_VAR long V04 tmp3 [000029] --CXG------- if | \--* COLON ref [000026] ------------ else | +--* LCL_VAR ref V03 tmp2 [000028] --CXG------- then | \--* CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL [000020] ------------ arg0 | +--* LCL_VAR long V04 tmp3 [000027] ------------ arg1 | \--* LCL_VAR ref V03 tmp2 [000031] ------------ then \--* LCL_VAR ref V03 tmp2 ***** BB01 STMT00005 ( ??? ... ??? ) [000039] I-CXG------- * CALL int System.String.op_Inequality (exactContextHnd=0x4000000000420049) [000037] ---XG------- arg0 +--* FIELD ref State [000036] ------------ | \--* LCL_VAR ref V05 tmp4 [000038] ------------ arg1 \--* CNS_STR ref ***** BB01 STMT00006 ( ??? ... ??? ) [000044] --C--------- * JTRUE void [000043] --C--------- \--* EQ int [000041] --C--------- +--* CAST int <- bool <- int [000040] --C--------- | \--* RET_EXPR int (inl return expr [000039]) [000042] ------------ \--* CNS_INT int 0 ------------ BB02 [022..028) (throw), preds={} succs={} ***** BB02 STMT00008 ( 0x022[E-] ... 0x027 ) [000049] -A---------- * ASG ref [000048] D------N---- +--* LCL_VAR ref V06 tmp5 [000047] ------------ \--* ALLOCOBJ ref [000046] H----------- \--* CNS_INT(h) long 0x40000000004200e8 token ***** BB02 STMT00009 ( ??? ... ??? ) [000051] I-C-G------- * CALL void System.Exception..ctor (exactContextHnd=0x40000000004200D9) [000050] ------------ this in rcx \--* LCL_VAR ref V06 tmp5 ***** BB02 STMT00010 ( 0x027[--] ... ??? ) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW [000052] ------------ arg0 \--* LCL_VAR ref V06 tmp5 ------------ BB03 [028..029) (return), preds={} succs={} ***** BB03 STMT00007 ( 0x028[E-] ... 0x028 ) [000045] ------------ * RETURN void ------------------------------------------------------------------------------------------------------------------- *************** Starting PHASE Expand patchpoints -- no patchpoints to transform *************** Finishing PHASE Expand patchpoints [no changes] *************** Starting PHASE Indirect call transform -- no candidates to transform *************** Finishing PHASE Indirect call transform [no changes] *************** Starting PHASE Post-import *************** Finishing PHASE Post-import *************** Starting PHASE Morph - Init New BlockSet epoch 1, # of blocks (including unused BB00): 4, bitset array size: 1 (short) *************** In fgPostImportationCleanup *************** Finishing PHASE Morph - Init *************** In fgDebugCheckBBlist *************** Starting PHASE Morph - Inlining Expanding INLINE_CANDIDATE in statement STMT00001 in BB01: STMT00001 ( ??? ... ??? ) [000005] I-C-G------- * CALL void Derived..ctor (exactContextHnd=0x4000000000420059) [000004] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 thisArg: is a local var [000004] ------------ * LCL_VAR ref V02 tmp1 INLINER: inlineInfo.tokenLookupContextHandle for Derived:.ctor():this set to 0x4000000000420059: Invoking compiler for the inlinee method Derived:.ctor():this : IL to import: IL_0000 02 ldarg.0 IL_0001 28 dc 00 00 06 call 0x60000DC IL_0006 2a ret INLINER impTokenLookupContextHandle for Derived:.ctor():this is 0x4000000000420059. *************** In compInitDebuggingInfo() for Derived:.ctor():this info.compStmtOffsetsCount = 0 info.compStmtOffsetsImplicit = 0007h ( STACK_EMPTY NOP CALL_SITE ) *************** In fgFindBasicBlocks() for Derived:.ctor():this Jump targets: none New Basic Block BB04 [0003] created. BB04 [000..007) Basic block list for 'Derived:.ctor():this' ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB04 [0003] 1 1 [000..007) (return) ----------------------------------------------------------------------------------------------------------------------------------------- *************** Inline @[000005] Starting PHASE Pre-import *************** Inline @[000005] Finishing PHASE Pre-import *************** Inline @[000005] Starting PHASE Profile incorporation BBOPT not set Computing inlinee profile scale: ... no callee profile data, will use non-pgo weight to scale ... call site not profiled, will use non-pgo weight to scale call site count 100 callee entry count 100 scale 1 Scaling inlinee blocks *************** Inline @[000005] Finishing PHASE Profile incorporation Trees after Profile incorporation ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB04 [0003] 1 1 [000..007) (return) ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB04 [000..007) (return), preds={} succs={} ------------------------------------------------------------------------------------------------------------------- *************** Inline @[000005] Starting PHASE Importation *************** In impImport() for Derived:.ctor():this impImportBlockPending for BB04 Importing BB04 (PC=000) of 'Derived:.ctor():this' [ 0] 0 (0x000) ldarg.0 [ 1] 1 (0x001) call 060000DC In Compiler::impImportCall: opcode is call, kind=0, callRetType is void, structSize is 0 STMT00011 ( 0x000[E-] ... ??? ) <- INLRT @ ??? [000054] I-C-G------- * CALL void Base..ctor (exactContextHnd=0x4000000000420031) [000004] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 [ 0] 6 (0x006) ret *************** Inline @[000005] Finishing PHASE Importation Trees after Importation ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB04 [0003] 1 1 [000..007) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB04 [000..007) (return), preds={} succs={} ***** BB04 STMT00011 ( 0x000[E-] ... ??? ) <- INLRT @ ??? [000054] I-C-G------- * CALL void Base..ctor (exactContextHnd=0x4000000000420031) [000004] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 ------------------------------------------------------------------------------------------------------------------- *************** Inline @[000005] Starting PHASE Expand patchpoints -- no patchpoints to transform *************** Inline @[000005] Finishing PHASE Expand patchpoints [no changes] *************** Inline @[000005] Starting PHASE Indirect call transform -- no candidates to transform *************** Inline @[000005] Finishing PHASE Indirect call transform [no changes] *************** Inline @[000005] Starting PHASE Post-import *************** In fgPostImportationCleanup *************** Inline @[000005] Finishing PHASE Post-import ----------- Statements (and blocks) added due to the inlining of call [000005] ----------- Arguments setup: Inlinee method body: STMT00011 ( INL01 @ 0x000[E-] ... ??? ) <- INLRT @ ??? [000054] I-C-G------- * CALL void Base..ctor (exactContextHnd=0x4000000000420031) [000004] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 fgInlineAppendStatements: no gc ref inline locals. Successfully inlined Derived:.ctor():this (7 IL bytes) (depth 1) [below ALWAYS_INLINE size] -------------------------------------------------------------------------------------------- INLINER: during 'fgInline' result 'success' reason 'below ALWAYS_INLINE size' for 'TestCovariantReturns:Run()' calling 'Derived:.ctor():this' INLINER: during 'fgInline' result 'success' reason 'below ALWAYS_INLINE size' Expanding INLINE_CANDIDATE in statement STMT00011 in BB01: STMT00011 ( INL01 @ 0x000[E-] ... ??? ) <- INLRT @ ??? [000054] I-C-G------- * CALL void Base..ctor (exactContextHnd=0x4000000000420031) [000004] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 thisArg: is a local var [000004] ------------ * LCL_VAR ref V02 tmp1 INLINER: inlineInfo.tokenLookupContextHandle for Base:.ctor():this set to 0x4000000000420031: Invoking compiler for the inlinee method Base:.ctor():this : IL to import: IL_0000 02 ldarg.0 IL_0001 28 27 00 00 0a call 0xA000027 IL_0006 2a ret INLINER impTokenLookupContextHandle for Base:.ctor():this is 0x4000000000420031. *************** In compInitDebuggingInfo() for Base:.ctor():this info.compStmtOffsetsCount = 0 info.compStmtOffsetsImplicit = 0007h ( STACK_EMPTY NOP CALL_SITE ) *************** In fgFindBasicBlocks() for Base:.ctor():this Jump targets: none New Basic Block BB05 [0004] created. BB05 [000..007) Basic block list for 'Base:.ctor():this' ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB05 [0004] 1 1 [000..007) (return) ----------------------------------------------------------------------------------------------------------------------------------------- *************** Inline @[000054] Starting PHASE Pre-import *************** Inline @[000054] Finishing PHASE Pre-import *************** Inline @[000054] Starting PHASE Profile incorporation BBOPT not set Computing inlinee profile scale: ... no callee profile data, will use non-pgo weight to scale ... call site not profiled, will use non-pgo weight to scale call site count 100 callee entry count 100 scale 1 Scaling inlinee blocks *************** Inline @[000054] Finishing PHASE Profile incorporation Trees after Profile incorporation ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB05 [0004] 1 1 [000..007) (return) ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB05 [000..007) (return), preds={} succs={} ------------------------------------------------------------------------------------------------------------------- *************** Inline @[000054] Starting PHASE Importation *************** In impImport() for Base:.ctor():this impImportBlockPending for BB05 Importing BB05 (PC=000) of 'Base:.ctor():this' [ 0] 0 (0x000) ldarg.0 [ 1] 1 (0x001) call 0A000027 In Compiler::impImportCall: opcode is call, kind=0, callRetType is void, structSize is 0 STMT00012 ( 0x000[E-] ... ??? ) <- INL01 @ 0x000[E-] <- INLRT @ ??? [000056] I-C-G------- * CALL void System.Object..ctor (exactContextHnd=0x4000000000420119) [000004] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 [ 0] 6 (0x006) ret *************** Inline @[000054] Finishing PHASE Importation Trees after Importation ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB05 [0004] 1 1 [000..007) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB05 [000..007) (return), preds={} succs={} ***** BB05 STMT00012 ( 0x000[E-] ... ??? ) <- INL01 @ 0x000[E-] <- INLRT @ ??? [000056] I-C-G------- * CALL void System.Object..ctor (exactContextHnd=0x4000000000420119) [000004] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 ------------------------------------------------------------------------------------------------------------------- *************** Inline @[000054] Starting PHASE Expand patchpoints -- no patchpoints to transform *************** Inline @[000054] Finishing PHASE Expand patchpoints [no changes] *************** Inline @[000054] Starting PHASE Indirect call transform -- no candidates to transform *************** Inline @[000054] Finishing PHASE Indirect call transform [no changes] *************** Inline @[000054] Starting PHASE Post-import *************** In fgPostImportationCleanup *************** Inline @[000054] Finishing PHASE Post-import ----------- Statements (and blocks) added due to the inlining of call [000054] ----------- Arguments setup: Inlinee method body: STMT00012 ( INL02 @ 0x000[E-] ... ??? ) <- INL01 @ 0x000[E-] <- INLRT @ ??? [000056] I-C-G------- * CALL void System.Object..ctor (exactContextHnd=0x4000000000420119) [000004] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 fgInlineAppendStatements: no gc ref inline locals. Successfully inlined Base:.ctor():this (7 IL bytes) (depth 2) [below ALWAYS_INLINE size] -------------------------------------------------------------------------------------------- INLINER: during 'fgInline' result 'success' reason 'below ALWAYS_INLINE size' for 'TestCovariantReturns:Run()' calling 'Base:.ctor():this' INLINER: during 'fgInline' result 'success' reason 'below ALWAYS_INLINE size' Expanding INLINE_CANDIDATE in statement STMT00012 in BB01: STMT00012 ( INL02 @ 0x000[E-] ... ??? ) <- INL01 @ 0x000[E-] <- INLRT @ ??? [000056] I-C-G------- * CALL void System.Object..ctor (exactContextHnd=0x4000000000420119) [000004] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 thisArg: is a local var [000004] ------------ * LCL_VAR ref V02 tmp1 INLINER: inlineInfo.tokenLookupContextHandle for System.Object:.ctor():this set to 0x4000000000420119: Invoking compiler for the inlinee method System.Object:.ctor():this : IL to import: IL_0000 2a ret INLINER impTokenLookupContextHandle for System.Object:.ctor():this is 0x4000000000420119. *************** In compInitDebuggingInfo() for System.Object:.ctor():this info.compStmtOffsetsCount = 0 info.compStmtOffsetsImplicit = 0007h ( STACK_EMPTY NOP CALL_SITE ) *************** In fgFindBasicBlocks() for System.Object:.ctor():this Jump targets: none New Basic Block BB06 [0005] created. BB06 [000..001) Basic block list for 'System.Object:.ctor():this' ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB06 [0005] 1 1 [000..001) (return) ----------------------------------------------------------------------------------------------------------------------------------------- *************** Inline @[000056] Starting PHASE Pre-import *************** Inline @[000056] Finishing PHASE Pre-import *************** Inline @[000056] Starting PHASE Profile incorporation BBOPT not set Computing inlinee profile scale: ... no callee profile data, will use non-pgo weight to scale ... call site not profiled, will use non-pgo weight to scale call site count 100 callee entry count 100 scale 1 Scaling inlinee blocks *************** Inline @[000056] Finishing PHASE Profile incorporation Trees after Profile incorporation ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB06 [0005] 1 1 [000..001) (return) ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB06 [000..001) (return), preds={} succs={} ------------------------------------------------------------------------------------------------------------------- *************** Inline @[000056] Starting PHASE Importation *************** In impImport() for System.Object:.ctor():this impImportBlockPending for BB06 Importing BB06 (PC=000) of 'System.Object:.ctor():this' [ 0] 0 (0x000) ret ** Note: inlinee IL was partially imported -- imported 0 of 1 bytes of method IL *************** Inline @[000056] Finishing PHASE Importation Trees after Importation ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB06 [0005] 1 1 [000..001) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB06 [000..001) (return), preds={} succs={} ------------------------------------------------------------------------------------------------------------------- *************** Inline @[000056] Starting PHASE Expand patchpoints -- no patchpoints to transform *************** Inline @[000056] Finishing PHASE Expand patchpoints [no changes] *************** Inline @[000056] Starting PHASE Indirect call transform -- no candidates to transform *************** Inline @[000056] Finishing PHASE Indirect call transform [no changes] *************** Inline @[000056] Starting PHASE Post-import *************** In fgPostImportationCleanup *************** Inline @[000056] Finishing PHASE Post-import ----------- Statements (and blocks) added due to the inlining of call [000056] ----------- Arguments setup: Inlinee method body:fgInlineAppendStatements: no gc ref inline locals. Successfully inlined System.Object:.ctor():this (1 IL bytes) (depth 3) [below ALWAYS_INLINE size] -------------------------------------------------------------------------------------------- INLINER: during 'fgInline' result 'success' reason 'below ALWAYS_INLINE size' for 'TestCovariantReturns:Run()' calling 'System.Object:.ctor():this' INLINER: during 'fgInline' result 'success' reason 'below ALWAYS_INLINE size' **** Late devirt opportunity [000010] --C-G------- * CALLV vt-ind ref Base.GetFoo [000009] ------------ this in rcx \--* LCL_VAR ref V00 loc0 impDevirtualizeCall: Trying to devirtualize virtual call: class for 'this' is BringUpTest+TestCovariantReturns+Derived [exact] (attrib 20000010) base method is BringUpTest+TestCovariantReturns+Base::GetFoo --- no derived method: virtual method installed via explicit override Class not final or exact, and method not final No guarded devirt during late devirtualization Expanding INLINE_CANDIDATE in statement STMT00005 in BB01: STMT00005 ( ??? ... ??? ) [000039] I-CXG------- * CALL int System.String.op_Inequality (exactContextHnd=0x4000000000420049) [000037] ---XG------- arg0 +--* FIELD ref State [000036] ------------ | \--* LCL_VAR ref V05 tmp4 [000038] ------------ arg1 \--* CNS_STR ref Querying runtime about current class of field Foo.State (declared as System.String) Field's current class not available Argument #0: has global refs has side effects [000037] ---XG------- * FIELD ref State [000036] ------------ \--* LCL_VAR ref V05 tmp4 Argument #1: is a constant [000038] ------------ * CNS_STR ref INLINER: inlineInfo.tokenLookupContextHandle for System.String:op_Inequality(System.String,System.String):bool set to 0x4000000000420049: Invoking compiler for the inlinee method System.String:op_Inequality(System.String,System.String):bool : IL to import: IL_0000 02 ldarg.0 IL_0001 03 ldarg.1 IL_0002 28 76 02 00 06 call 0x6000276 IL_0007 16 ldc.i4.0 IL_0008 fe 01 ceq IL_000a 2a ret INLINER impTokenLookupContextHandle for System.String:op_Inequality(System.String,System.String):bool is 0x4000000000420049. *************** In compInitDebuggingInfo() for System.String:op_Inequality(System.String,System.String):bool info.compStmtOffsetsCount = 0 info.compStmtOffsetsImplicit = 0007h ( STACK_EMPTY NOP CALL_SITE ) *************** In fgFindBasicBlocks() for System.String:op_Inequality(System.String,System.String):bool Jump targets: none New Basic Block BB07 [0006] created. BB07 [000..00B) Basic block list for 'System.String:op_Inequality(System.String,System.String):bool' ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB07 [0006] 1 1 [000..00B) (return) ----------------------------------------------------------------------------------------------------------------------------------------- *************** Inline @[000039] Starting PHASE Pre-import *************** Inline @[000039] Finishing PHASE Pre-import *************** Inline @[000039] Starting PHASE Profile incorporation BBOPT not set Computing inlinee profile scale: ... no callee profile data, will use non-pgo weight to scale ... call site not profiled, will use non-pgo weight to scale call site count 100 callee entry count 100 scale 1 Scaling inlinee blocks *************** Inline @[000039] Finishing PHASE Profile incorporation Trees after Profile incorporation ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB07 [0006] 1 1 [000..00B) (return) ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB07 [000..00B) (return), preds={} succs={} ------------------------------------------------------------------------------------------------------------------- *************** Inline @[000039] Starting PHASE Importation *************** In impImport() for System.String:op_Inequality(System.String,System.String):bool impImportBlockPending for BB07 Importing BB07 (PC=000) of 'System.String:op_Inequality(System.String,System.String):bool' [ 0] 0 (0x000) ldarg.0 lvaGrabTemp returning 7 (V07 tmp6) called for Inlining Arg. Marked V07 as a single def temp Querying runtime about current class of field Foo.State (declared as System.String) Field's current class not available lvaSetClass: setting class for V07 to (4000000000420048) System.String [ 1] 1 (0x001) ldarg.1 [ 2] 2 (0x002) call 06000276 In Compiler::impImportCall: opcode is call, kind=0, callRetType is bool, structSize is 0 STMT00013 ( 0x000[E-] ... ??? ) <- INLRT @ ??? [000061] I-C-G------- * CALL int System.String.Equals (exactContextHnd=0x4000000000420049) [000059] ------------ arg0 +--* LCL_VAR ref V07 tmp6 [000060] ------------ arg1 \--* CNS_STR ref [ 1] 7 (0x007) ldc.i4.0 0 [ 2] 8 (0x008) ceq [ 1] 10 (0x00a) ret Inlinee Return expression (before normalization) => [000065] --C--------- * EQ int [000063] --C--------- +--* CAST int <- bool <- int [000062] --C--------- | \--* RET_EXPR int (inl return expr [000061]) [000064] ------------ \--* CNS_INT int 0 Inlinee Return expression (after normalization) => [000065] --C--------- * EQ int [000063] --C--------- +--* CAST int <- bool <- int [000062] --C--------- | \--* RET_EXPR int (inl return expr [000061]) [000064] ------------ \--* CNS_INT int 0 *************** Inline @[000039] Finishing PHASE Importation Trees after Importation ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB07 [0006] 1 1 [000..00B) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB07 [000..00B) (return), preds={} succs={} ***** BB07 STMT00013 ( 0x000[E-] ... ??? ) <- INLRT @ ??? [000061] I-C-G------- * CALL int System.String.Equals (exactContextHnd=0x4000000000420049) [000059] ------------ arg0 +--* LCL_VAR ref V07 tmp6 [000060] ------------ arg1 \--* CNS_STR ref ------------------------------------------------------------------------------------------------------------------- *************** Inline @[000039] Starting PHASE Expand patchpoints -- no patchpoints to transform *************** Inline @[000039] Finishing PHASE Expand patchpoints [no changes] *************** Inline @[000039] Starting PHASE Indirect call transform -- no candidates to transform *************** Inline @[000039] Finishing PHASE Indirect call transform [no changes] *************** Inline @[000039] Starting PHASE Post-import *************** In fgPostImportationCleanup *************** Inline @[000039] Finishing PHASE Post-import ----------- Statements (and blocks) added due to the inlining of call [000039] ----------- Arguments setup: STMT00014 ( ??? ... ??? ) [000067] -A-XG------- * ASG ref [000066] D------N---- +--* LCL_VAR ref V07 tmp6 [000037] ---XG------- \--* FIELD ref State [000036] ------------ \--* LCL_VAR ref V05 tmp4 Inlinee method body: STMT00013 ( INL04 @ 0x000[E-] ... ??? ) <- INLRT @ ??? [000061] I-C-G------- * CALL int System.String.Equals (exactContextHnd=0x4000000000420049) [000059] ------------ arg0 +--* LCL_VAR ref V07 tmp6 [000060] ------------ arg1 \--* CNS_STR ref fgInlineAppendStatements: no gc ref inline locals. Return expression for call at [000039] is [000065] --C--------- * EQ int [000063] --C--------- +--* CAST int <- bool <- int [000062] --C--------- | \--* RET_EXPR int (inl return expr [000061]) [000064] ------------ \--* CNS_INT int 0 Successfully inlined System.String:op_Inequality(System.String,System.String):bool (11 IL bytes) (depth 1) [below ALWAYS_INLINE size] -------------------------------------------------------------------------------------------- INLINER: during 'fgInline' result 'success' reason 'below ALWAYS_INLINE size' for 'TestCovariantReturns:Run()' calling 'System.String:op_Inequality(System.String,System.String):bool' INLINER: during 'fgInline' result 'success' reason 'below ALWAYS_INLINE size' Querying runtime about current class of field Foo.State (declared as System.String) Field's current class not available Expanding INLINE_CANDIDATE in statement STMT00013 in BB01: STMT00013 ( INL04 @ 0x000[E-] ... ??? ) <- INLRT @ ??? [000061] I-C-G------- * CALL int System.String.Equals (exactContextHnd=0x4000000000420049) [000059] ------------ arg0 +--* LCL_VAR ref V07 tmp6 [000060] ------------ arg1 \--* CNS_STR ref Argument #0: is a local var [000059] ------------ * LCL_VAR ref V07 tmp6 Argument #1: is a constant [000060] ------------ * CNS_STR ref INLINER: inlineInfo.tokenLookupContextHandle for System.String:Equals(System.String,System.String):bool set to 0x4000000000420049: Invoking compiler for the inlinee method System.String:Equals(System.String,System.String):bool : IL to import: IL_0000 02 ldarg.0 IL_0001 03 ldarg.1 IL_0002 33 02 bne.un.s 2 (IL_0006) IL_0004 17 ldc.i4.1 IL_0005 2a ret IL_0006 02 ldarg.0 IL_0007 2c 11 brfalse.s 17 (IL_001a) IL_0009 03 ldarg.1 IL_000a 2c 0e brfalse.s 14 (IL_001a) IL_000c 02 ldarg.0 IL_000d 6f ce 02 00 06 callvirt 0x60002CE IL_0012 03 ldarg.1 IL_0013 6f ce 02 00 06 callvirt 0x60002CE IL_0018 2e 02 beq.s 2 (IL_001c) IL_001a 16 ldc.i4.0 IL_001b 2a ret IL_001c 02 ldarg.0 IL_001d 03 ldarg.1 IL_001e 28 5b 02 00 06 call 0x600025B IL_0023 2a ret INLINER impTokenLookupContextHandle for System.String:Equals(System.String,System.String):bool is 0x4000000000420049. *************** In compInitDebuggingInfo() for System.String:Equals(System.String,System.String):bool info.compStmtOffsetsCount = 0 info.compStmtOffsetsImplicit = 0007h ( STACK_EMPTY NOP CALL_SITE ) *************** In fgFindBasicBlocks() for System.String:Equals(System.String,System.String):bool weight= 10 : state 3 [ ldarg.0 ] weight= 16 : state 4 [ ldarg.1 ] weight= 12 : state 51 [ bne.un.s ] weight= 28 : state 24 [ ldc.i4.1 ] weight= 19 : state 42 [ ret ] weight= 10 : state 3 [ ldarg.0 ] weight= 27 : state 44 [ brfalse.s ] weight= 16 : state 4 [ ldarg.1 ] weight= 27 : state 44 [ brfalse.s ] weight= 10 : state 3 [ ldarg.0 ] weight= 83 : state 99 [ callvirt ] weight= 16 : state 4 [ ldarg.1 ] weight= 83 : state 99 [ callvirt ] weight= 6 : state 46 [ beq.s ] weight= 15 : state 23 [ ldc.i4.0 ] weight= 19 : state 42 [ ret ] weight= 10 : state 3 [ ldarg.0 ] weight= 16 : state 4 [ ldarg.1 ] weight= 79 : state 40 [ call ] weight= 19 : state 42 [ ret ] Inline candidate looks like a wrapper method. Multiplier increased to 1. Inline candidate has an arg that feeds a constant test. Multiplier increased to 2. Inline candidate has const arg that feeds a conditional. Multiplier increased to 5. Inline candidate callsite is boring. Multiplier increased to 6.3. calleeNativeSizeEstimate=521 callsiteNativeSizeEstimate=115 benefit multiplier=6.3 threshold=724 Native estimate for function size is within threshold for inlining 52.1 <= 72.4 (multiplier = 6.3) Jump targets: IL_0006 IL_001a IL_001c New Basic Block BB08 [0007] created. BB08 [000..004) New Basic Block BB09 [0008] created. BB09 [004..006) New Basic Block BB10 [0009] created. BB10 [006..009) New Basic Block BB11 [0010] created. BB11 [009..00C) New Basic Block BB12 [0011] created. BB12 [00C..01A) New Basic Block BB13 [0012] created. BB13 [01A..01C) New Basic Block BB14 [0013] created. BB14 [01C..024) lvaGrabTemp returning 8 (V08 tmp7) (a long lifetime temp) called for Inline return value spill temp. Basic block list for 'System.String:Equals(System.String,System.String):bool' ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB08 [0007] 1 1 [000..004)-> BB10 ( cond ) BB09 [0008] 1 1 [004..006) (return) BB10 [0009] 1 1 [006..009)-> BB13 ( cond ) BB11 [0010] 1 1 [009..00C)-> BB13 ( cond ) BB12 [0011] 1 1 [00C..01A)-> BB14 ( cond ) BB13 [0012] 3 1 [01A..01C) (return) BB14 [0013] 1 1 [01C..024) (return) ----------------------------------------------------------------------------------------------------------------------------------------- Inlining [000061] failed, so bashing STMT00013 to NOP INLINER: during 'fgInline' result 'failed this callee' reason 'too many basic blocks' for 'TestCovariantReturns:Run()' calling 'System.String:Equals(System.String,System.String):bool' INLINER: Marking System.String:Equals(System.String,System.String):bool as NOINLINE because of too many basic blocks INLINER: during 'fgInline' result 'failed this callee' reason 'too many basic blocks' Replacing the return expression placeholder [000040] with [000065] [000040] --C--------- * RET_EXPR int (inl return expr [000065]) Inserting the inline return expression [000065] --C--------- * EQ int [000063] --C--------- +--* CAST int <- bool <- int [000062] --C--------- | \--* RET_EXPR int (inl return expr [000061]) [000064] ------------ \--* CNS_INT int 0 Replacing the return expression placeholder [000062] with [000061] [000062] --C--------- * RET_EXPR int (inl return expr [000061]) Inserting the inline return expression [000061] --C-G------- * CALL int System.String.Equals [000059] ------------ arg0 +--* LCL_VAR ref V07 tmp6 [000060] ------------ arg1 \--* CNS_STR ref Expanding INLINE_CANDIDATE in statement STMT00009 in BB02: STMT00009 ( ??? ... ??? ) [000051] I-C-G------- * CALL void System.Exception..ctor (exactContextHnd=0x40000000004200D9) [000050] ------------ this in rcx \--* LCL_VAR ref V06 tmp5 thisArg: is a local var [000050] ------------ * LCL_VAR ref V06 tmp5 INLINER: inlineInfo.tokenLookupContextHandle for System.Exception:.ctor():this set to 0x40000000004200D9: Invoking compiler for the inlinee method System.Exception:.ctor():this : IL to import: IL_0000 02 ldarg.0 IL_0001 28 4a 02 00 06 call 0x600024A IL_0006 02 ldarg.0 IL_0007 20 00 15 13 80 ldc.i4 0x80131500 IL_000c 7d d5 00 00 04 stfld 0x40000D5 IL_0011 2a ret INLINER impTokenLookupContextHandle for System.Exception:.ctor():this is 0x40000000004200D9. *************** In compInitDebuggingInfo() for System.Exception:.ctor():this info.compStmtOffsetsCount = 0 info.compStmtOffsetsImplicit = 0007h ( STACK_EMPTY NOP CALL_SITE ) *************** In fgFindBasicBlocks() for System.Exception:.ctor():this weight= 10 : state 3 [ ldarg.0 ] weight= 79 : state 40 [ call ] weight= 10 : state 3 [ ldarg.0 ] weight= 38 : state 33 [ ldc.i4 ] weight= 31 : state 111 [ stfld ] weight= 19 : state 42 [ ret ] multiplier in instance constructors increased to 1.5. Inline candidate is mostly loads and stores. Multiplier increased to 4.5. Inline candidate callsite is rare. Multiplier limited to 1.3. calleeNativeSizeEstimate=187 callsiteNativeSizeEstimate=85 benefit multiplier=1.3 threshold=110 Native estimate for function size exceeds threshold for inlining 18.7 > 11 (multiplier = 1.3) Inline expansion aborted, inline not profitable INLINER: during 'fgInline' result 'failed this call site' reason 'unprofitable inline' for 'TestCovariantReturns:Run()' calling 'System.Exception:.ctor():this' INLINER: during 'fgInline' result 'failed this call site' reason 'unprofitable inline' **************** Inline Tree Inlines into 060000BE [via ExtendedDefaultPolicy] TestCovariantReturns:Run(): [INL01 IL=0000 TR=000005 060000DE] [INLINED: callee: below ALWAYS_INLINE size] Derived:.ctor():this [INL02 IL=0001 TR=000054 060000DC] [INLINED: callee: below ALWAYS_INLINE size] Base:.ctor():this [INL03 IL=0001 TR=000056 0600024A] [INLINED: callee: below ALWAYS_INLINE size] System.Object:.ctor():this [INL00 IL=0007 TR=000010 060000DB] [FAILED: call site: target not direct] Base:GetFoo():BringUpTest+TestCovariantReturns+IFoo:this [INL04 IL=0027 TR=000039 06000279] [INLINED: callee: below ALWAYS_INLINE size] System.String:op_Inequality(System.String,System.String):bool [INL00 IL=0002 TR=000061 06000276] [FAILED: callee: too many basic blocks] System.String:Equals(System.String,System.String):bool [INL00 IL=0034 TR=000051 0600044B] [FAILED: call site: unprofitable inline] System.Exception:.ctor():this Budget: initialTime=183, finalTime=177, initialBudget=1830, currentBudget=1830 Budget: initialSize=1066, finalSize=1066 *************** 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..022)-> BB03 ( cond ) i newobj BB02 [0001] 1 0 [022..028) (throw ) i rare newobj BB03 [0002] 1 1 [028..029) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..022) -> BB03 (cond), preds={} succs={BB02,BB03} ***** BB01 STMT00000 ( 0x000[E-] ... 0x005 ) [000003] -A---------- * ASG ref [000002] D------N---- +--* LCL_VAR ref V02 tmp1 [000001] ------------ \--* ALLOCOBJ ref [000000] H----------- \--* CNS_INT(h) long 0x4000000000420070 method ***** BB01 STMT00002 ( 0x005[--] ... ??? ) [000008] -A---------- * ASG ref [000007] D------N---- +--* LCL_VAR ref V00 loc0 [000006] ------------ \--* LCL_VAR ref V02 tmp1 ***** BB01 STMT00003 ( 0x006[E-] ... 0x020 ) [000013] -AC-G------- * ASG ref [000012] D------N---- +--* LCL_VAR ref V03 tmp2 [000010] --C-G------- \--* CALLV vt-ind ref Base.GetFoo [000009] ------------ this in rcx \--* LCL_VAR ref V00 loc0 ***** BB01 STMT00004 ( ??? ... ??? ) [000035] -ACXG------- * ASG ref [000034] D------N---- +--* LCL_VAR ref V05 tmp4 [000033] -ACXG------- \--* QMARK ref [000025] ------------ if +--* EQ int [000024] ------------ | +--* LCL_VAR ref V03 tmp2 [000023] ------------ | \--* CNS_INT ref null [000032] -ACXG------- if \--* COLON ref [000030] -ACXG------- else +--* QMARK ref [000022] -A-X-------- if | +--* NE int [000021] #--X-------- | | +--* IND long [000014] ------------ | | | \--* LCL_VAR ref V03 tmp2 [000019] -A---------- | | \--* COMMA long [000017] -A---------- | | +--* ASG long [000016] D------N---- | | | +--* LCL_VAR long V04 tmp3 [000011] H----------- | | | \--* CNS_INT(h) long 0x40000000004200a0 class [000018] ------------ | | \--* LCL_VAR long V04 tmp3 [000029] --CXG------- if | \--* COLON ref [000026] ------------ else | +--* LCL_VAR ref V03 tmp2 [000028] --CXG------- then | \--* CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL [000020] ------------ arg0 | +--* LCL_VAR long V04 tmp3 [000027] ------------ arg1 | \--* LCL_VAR ref V03 tmp2 [000031] ------------ then \--* LCL_VAR ref V03 tmp2 ***** BB01 STMT00014 ( ??? ... ??? ) [000067] -A-XG------- * ASG ref [000066] D------N---- +--* LCL_VAR ref V07 tmp6 [000037] ---XG------- \--* FIELD ref State [000036] ------------ \--* LCL_VAR ref V05 tmp4 ***** BB01 STMT00006 ( ??? ... ??? ) [000044] --C--------- * JTRUE void [000043] --C--------- \--* EQ int [000041] --C--------- +--* CAST int <- bool <- int [000065] --C--------- | \--* EQ int [000063] --C--------- | +--* CAST int <- bool <- int [000061] --C-G------- | | \--* CALL int System.String.Equals [000059] ------------ arg0 | | +--* LCL_VAR ref V07 tmp6 [000060] ------------ arg1 | | \--* CNS_STR ref [000064] ------------ | \--* CNS_INT int 0 [000042] ------------ \--* CNS_INT int 0 ------------ BB02 [022..028) (throw), preds={} succs={} ***** BB02 STMT00008 ( 0x022[E-] ... 0x027 ) [000049] -A---------- * ASG ref [000048] D------N---- +--* LCL_VAR ref V06 tmp5 [000047] ------------ \--* ALLOCOBJ ref [000046] H----------- \--* CNS_INT(h) long 0x40000000004200e8 token ***** BB02 STMT00009 ( ??? ... ??? ) [000051] --C-G------- * CALL void System.Exception..ctor [000050] ------------ this in rcx \--* LCL_VAR ref V06 tmp5 ***** BB02 STMT00010 ( 0x027[--] ... ??? ) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW [000052] ------------ arg0 \--* LCL_VAR ref V06 tmp5 ------------ BB03 [028..029) (return), preds={} succs={} ***** BB03 STMT00007 ( 0x028[E-] ... 0x028 ) [000045] ------------ * RETURN void ------------------------------------------------------------------------------------------------------------------- *************** Starting PHASE Allocate Objects disabled, 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..022)-> BB03 ( cond ) i newobj BB02 [0001] 1 0 [022..028) (throw ) i rare newobj BB03 [0002] 1 1 [028..029) (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..022)-> BB03 ( cond ) i newobj BB02 [0001] 1 0 [022..028) (throw ) i rare newobj BB03 [0002] 1 1 [028..029) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- *************** Exception Handling table is empty *************** After renumbering the basic blocks =============== No blocks renumbered! New BlockSet epoch 2, # of blocks (including unused BB00): 4, 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..022)-> BB03 ( cond ) i newobj BB02 [0001] 1 0 [022..028) (throw ) i rare newobj BB03 [0002] 1 1 [028..029) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- Setting edge weights for BB01 -> BB03 to [0 .. 3.402823e+38] Setting edge weights for BB01 -> BB02 to [0 .. 3.402823e+38] *************** After fgComputePreds() ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..022)-> BB03 ( cond ) i newobj BB02 [0001] 1 BB01 0 [022..028) (throw ) i rare newobj BB03 [0002] 1 BB01 1 [028..029) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- *************** 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..022)-> BB03 ( cond ) i newobj BB02 [0001] 1 BB01 0 [022..028) (throw ) i rare newobj BB03 [0002] 1 BB01 1 [028..029) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- *************** 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 loc0 ref class-hnd exact ; V01 OutArgs lclBlk "OutgoingArgSpace" ; V02 tmp1 ref class-hnd exact "NewObj constructor temp" ; V03 tmp2 ref "CASTCLASS eval op1" ; V04 tmp3 long "fgInsertCommaFormTemp is creating a new local variable" ; V05 tmp4 ref class-hnd "spilling QMark2" ; V06 tmp5 ref class-hnd exact "NewObj constructor temp" ; V07 tmp6 ref class-hnd "Inlining Arg" lvaTable after fgPromoteStructs ; Initial local variable assignments ; ; V00 loc0 ref class-hnd exact ; V01 OutArgs lclBlk "OutgoingArgSpace" ; V02 tmp1 ref class-hnd exact "NewObj constructor temp" ; V03 tmp2 ref "CASTCLASS eval op1" ; V04 tmp3 long "fgInsertCommaFormTemp is creating a new local variable" ; V05 tmp4 ref class-hnd "spilling QMark2" ; V06 tmp5 ref class-hnd exact "NewObj constructor temp" ; V07 tmp6 ref class-hnd "Inlining Arg" *************** Finishing PHASE Morph - Promote Structs *************** Starting PHASE Morph - Structs/AddrExp *************** In fgMarkAddressExposedLocals() LocalAddressVisitor visiting statement: STMT00000 ( 0x000[E-] ... 0x005 ) [000003] -AC--------- * ASG ref [000002] D------N---- +--* LCL_VAR ref V02 tmp1 [000001] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST [000000] H----------- arg0 \--* CNS_INT(h) long 0x4000000000420070 method LocalAddressVisitor visiting statement: STMT00002 ( 0x005[--] ... ??? ) [000008] -A---------- * ASG ref [000007] D------N---- +--* LCL_VAR ref V00 loc0 [000006] ------------ \--* LCL_VAR ref V02 tmp1 LocalAddressVisitor visiting statement: STMT00003 ( 0x006[E-] ... 0x020 ) [000013] -AC-G------- * ASG ref [000012] D------N---- +--* LCL_VAR ref V03 tmp2 [000010] --C-G------- \--* CALLV vt-ind ref Base.GetFoo [000009] ------------ this in rcx \--* LCL_VAR ref V00 loc0 LocalAddressVisitor visiting statement: STMT00004 ( ??? ... ??? ) [000035] -ACXG------- * ASG ref [000034] D------N---- +--* LCL_VAR ref V05 tmp4 [000033] -ACXG------- \--* QMARK ref [000025] ------------ if +--* EQ int [000024] ------------ | +--* LCL_VAR ref V03 tmp2 [000023] ------------ | \--* CNS_INT ref null [000032] -ACXG------- if \--* COLON ref [000030] -ACXG------- else +--* QMARK ref [000022] -A-X-------- if | +--* NE int [000021] #--X-------- | | +--* IND long [000014] ------------ | | | \--* LCL_VAR ref V03 tmp2 [000019] -A---------- | | \--* COMMA long [000017] -A---------- | | +--* ASG long [000016] D------N---- | | | +--* LCL_VAR long V04 tmp3 [000011] H----------- | | | \--* CNS_INT(h) long 0x40000000004200a0 class [000018] ------------ | | \--* LCL_VAR long V04 tmp3 [000029] --CXG------- if | \--* COLON ref [000026] ------------ else | +--* LCL_VAR ref V03 tmp2 [000028] --CXG------- then | \--* CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL [000020] ------------ arg0 | +--* LCL_VAR long V04 tmp3 [000027] ------------ arg1 | \--* LCL_VAR ref V03 tmp2 [000031] ------------ then \--* LCL_VAR ref V03 tmp2 LocalAddressVisitor visiting statement: STMT00014 ( ??? ... ??? ) [000067] -A-XG------- * ASG ref [000066] D------N---- +--* LCL_VAR ref V07 tmp6 [000037] ---XG------- \--* FIELD ref State [000036] ------------ \--* LCL_VAR ref V05 tmp4 LocalAddressVisitor visiting statement: STMT00006 ( ??? ... ??? ) [000044] --C--------- * JTRUE void [000043] --C--------- \--* EQ int [000041] --C--------- +--* CAST int <- bool <- int [000065] --C--------- | \--* EQ int [000063] --C--------- | +--* CAST int <- bool <- int [000061] --C-G------- | | \--* CALL int System.String.Equals [000059] ------------ arg0 | | +--* LCL_VAR ref V07 tmp6 [000060] ------------ arg1 | | \--* CNS_STR ref [000064] ------------ | \--* CNS_INT int 0 [000042] ------------ \--* CNS_INT int 0 LocalAddressVisitor visiting statement: STMT00008 ( 0x022[E-] ... 0x027 ) [000049] -AC--------- * ASG ref [000048] D------N---- +--* LCL_VAR ref V06 tmp5 [000047] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST [000046] H----------- arg0 \--* CNS_INT(h) long 0x40000000004200e8 token LocalAddressVisitor visiting statement: STMT00009 ( ??? ... ??? ) [000051] --C-G------- * CALL void System.Exception..ctor [000050] ------------ this in rcx \--* LCL_VAR ref V06 tmp5 LocalAddressVisitor visiting statement: STMT00010 ( 0x027[--] ... ??? ) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW [000052] ------------ arg0 \--* LCL_VAR ref V06 tmp5 LocalAddressVisitor visiting statement: STMT00007 ( 0x028[E-] ... 0x028 ) [000045] ------------ * RETURN void *************** Finishing PHASE Morph - Structs/AddrExp *************** Starting PHASE Morph - ByRefs *************** In fgRetypeImplicitByRefArgs() *************** Finishing PHASE Morph - ByRefs *************** Starting PHASE Morph - Global *************** In fgMorphBlocks() Morphing BB01 of 'TestCovariantReturns:Run()' fgMorphTree BB01, STMT00000 (before) [000003] -AC--------- * ASG ref [000002] D------N---- +--* LCL_VAR ref V02 tmp1 [000001] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST [000000] H----------- arg0 \--* CNS_INT(h) long 0x4000000000420070 method Notify VM instruction set (SSE2) must be supported. Initializing arg info for 1.CALL: ArgTable for 1.CALL after fgInitArgInfo: fgArgTabEntry[arg 0 0.CNS_INT long (By ref), 1 reg: rcx, byteAlignment=8] Morphing args for 1.CALL: argSlots=1, preallocatedArgCount=4, nextSlotNum=4, nextSlotByteOffset=32, outgoingArgSpaceSize=32 Sorting the arguments: Deferred argument ('rcx'): [000000] H----+------ * CNS_INT(h) long 0x4000000000420070 method Replaced with placeholder node: [000070] ----------L- * ARGPLACE long Shuffled argument table: rcx ArgTable for 1.CALL after fgMorphArgs: fgArgTabEntry[arg 0 0.CNS_INT long (By ref), 1 reg: rcx, byteAlignment=8, lateArgInx=0, processed] fgMorphTree BB01, STMT00000 (after) [000003] -AC--+------ * ASG ref [000002] D----+-N---- +--* LCL_VAR ref V02 tmp1 [000001] --C--+------ \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST [000000] H----+------ arg0 in rcx \--* CNS_INT(h) long 0x4000000000420070 method fgMorphTree BB01, STMT00002 (before) [000008] -A---------- * ASG ref [000007] D------N---- +--* LCL_VAR ref V00 loc0 [000006] ------------ \--* LCL_VAR ref V02 tmp1 GenTreeNode creates assertion: [000008] -A---------- * ASG ref In BB01 New Local Copy Assertion: V00 == V02, index = #01 fgMorphTree BB01, STMT00003 (before) [000013] -AC-G------- * ASG ref [000012] D------N---- +--* LCL_VAR ref V03 tmp2 [000010] --C-G------- \--* CALLV vt-ind ref Base.GetFoo [000009] ------------ this in rcx \--* LCL_VAR ref V00 loc0 Initializing arg info for 10.CALL: ArgTable for 10.CALL after fgInitArgInfo: fgArgTabEntry[arg 0 9.LCL_VAR ref (By ref), 1 reg: rcx, byteAlignment=8] Morphing args for 10.CALL: Assertion prop in BB01: Copy Assertion: V00 == V02, index = #01 [000009] ------------ * LCL_VAR ref V02 tmp1 argSlots=1, preallocatedArgCount=4, nextSlotNum=4, nextSlotByteOffset=32, outgoingArgSpaceSize=32 Sorting the arguments: Deferred argument ('rcx'): [000009] -----+------ * LCL_VAR ref V02 tmp1 Replaced with placeholder node: [000071] ----------L- * ARGPLACE ref Shuffled argument table: rcx ArgTable for 10.CALL after fgMorphArgs: fgArgTabEntry[arg 0 9.LCL_VAR ref (By ref), 1 reg: rcx, byteAlignment=8, lateArgInx=0, processed] Expanding virtual call target for 10.CALL: GenTreeNode creates assertion: [000073] #--X-------- * IND long In BB01 New Local Constant Assertion: V02 != null, index = #02 fgMorphTree BB01, STMT00003 (after) [000013] -ACXG+------ * ASG ref [000012] D----+-N---- +--* LCL_VAR ref V03 tmp2 [000010] --CXG+------ \--* CALLV vt-ind ref Base.GetFoo [000076] n--X-+------ control expr \--* IND long [000075] ---X-+------ \--* ADD long [000073] #--X-+------ +--* IND long [000072] -----+------ | \--* LCL_VAR ref V02 tmp1 [000074] -----+------ \--* CNS_INT int 24 [000009] -----+------ this in rcx \--* LCL_VAR ref V02 tmp1 fgMorphTree BB01, STMT00004 (before) [000035] -ACXG------- * ASG ref [000034] D------N---- +--* LCL_VAR ref V05 tmp4 [000033] -ACXG------- \--* QMARK ref [000025] ------------ if +--* EQ int [000024] ------------ | +--* LCL_VAR ref V03 tmp2 [000023] ------------ | \--* CNS_INT ref null [000032] -ACXG------- if \--* COLON ref [000030] -ACXG------- else +--* QMARK ref [000022] -A-X-------- if | +--* NE int [000021] #--X-------- | | +--* IND long [000014] ------------ | | | \--* LCL_VAR ref V03 tmp2 [000019] -A---------- | | \--* COMMA long [000017] -A---------- | | +--* ASG long [000016] D------N---- | | | +--* LCL_VAR long V04 tmp3 [000011] H----------- | | | \--* CNS_INT(h) long 0x40000000004200a0 class [000018] ------------ | | \--* LCL_VAR long V04 tmp3 [000029] --CXG------- if | \--* COLON ref [000026] ------------ else | +--* LCL_VAR ref V03 tmp2 [000028] --CXG------- then | \--* CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL [000020] ------------ arg0 | +--* LCL_VAR long V04 tmp3 [000027] ------------ arg1 | \--* LCL_VAR ref V03 tmp2 [000031] ------------ then \--* LCL_VAR ref V03 tmp2 GenTreeNode creates assertion: [000021] #--X-------- * IND long In BB01 New Local Constant Assertion: V03 != null, index = #03 GenTreeNode creates assertion: [000017] -A---------- * ASG long In BB01 New Local Constant Assertion: V04 == [40000000004200A0], index = #04 Initializing arg info for 28.CALL: ArgTable for 28.CALL after fgInitArgInfo: fgArgTabEntry[arg 0 20.LCL_VAR long (By ref), 1 reg: rcx, byteAlignment=8] fgArgTabEntry[arg 1 27.LCL_VAR ref (By ref), 1 reg: rdx, byteAlignment=8] Morphing args for 28.CALL: argSlots=2, preallocatedArgCount=4, nextSlotNum=4, nextSlotByteOffset=32, outgoingArgSpaceSize=32 Sorting the arguments: Deferred argument ('rcx'): [000020] -----+------ * LCL_VAR long V04 tmp3 Replaced with placeholder node: [000077] ----------L- * ARGPLACE long Deferred argument ('rdx'): [000027] -----+------ * LCL_VAR ref V03 tmp2 Replaced with placeholder node: [000078] ----------L- * ARGPLACE ref Shuffled argument table: rcx rdx ArgTable for 28.CALL after fgMorphArgs: fgArgTabEntry[arg 0 20.LCL_VAR long (By ref), 1 reg: rcx, byteAlignment=8, lateArgInx=0, processed] fgArgTabEntry[arg 1 27.LCL_VAR ref (By ref), 1 reg: rdx, byteAlignment=8, lateArgInx=1, processed] fgMorphTree BB01, STMT00004 (after) [000035] -ACXG+------ * ASG ref [000034] D----+-N---- +--* LCL_VAR ref V05 tmp4 [000033] -ACXG+------ \--* QMARK ref [000025] J----+-N---- if +--* EQ int [000024] -----+------ | +--* LCL_VAR ref V03 tmp2 [000023] -----+------ | \--* CNS_INT ref null [000032] -ACXG+?----- if \--* COLON ref [000030] -ACXG+?----- else +--* QMARK ref [000022] JA-X-+?N---- if | +--* NE int [000021] #--X-+?----- | | +--* IND long [000014] -----+?----- | | | \--* LCL_VAR ref V03 tmp2 [000019] -A---+?----- | | \--* COMMA long [000017] -A---+?----- | | +--* ASG long [000016] D----+?N---- | | | +--* LCL_VAR long V04 tmp3 [000011] H----+?----- | | | \--* CNS_INT(h) long 0x40000000004200a0 class [000018] -----+?----- | | \--* LCL_VAR long V04 tmp3 [000029] --CXG+?----- if | \--* COLON ref [000026] -----+?----- else | +--* LCL_VAR ref V03 tmp2 [000028] --CXG+?----- then | \--* CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL [000020] -----+?----- arg0 in rcx | +--* LCL_VAR long V04 tmp3 [000027] -----+?----- arg1 in rdx | \--* LCL_VAR ref V03 tmp2 [000031] -----+?----- then \--* LCL_VAR ref V03 tmp2 fgMorphTree BB01, STMT00014 (before) [000067] -A-XG------- * ASG ref [000066] D------N---- +--* LCL_VAR ref V07 tmp6 [000037] ---XG------- \--* FIELD ref State [000036] ------------ \--* LCL_VAR ref V05 tmp4 Final value of Compiler::fgMorphField after calling fgMorphSmpOp: [000037] ---XG------- * IND ref [000080] -----+------ \--* ADD byref [000036] -----+------ +--* LCL_VAR ref V05 tmp4 [000079] -----+------ \--* CNS_INT long 8 field offset Fseq[State] GenTreeNode creates assertion: [000037] ---XG------- * IND ref In BB01 New Local Constant Assertion: V05 != null, index = #03 fgMorphTree BB01, STMT00014 (after) [000067] -A-XG+------ * ASG ref [000066] D----+-N---- +--* LCL_VAR ref V07 tmp6 [000037] ---XG+------ \--* IND ref [000080] -----+------ \--* ADD byref [000036] -----+------ +--* LCL_VAR ref V05 tmp4 [000079] -----+------ \--* CNS_INT long 8 field offset Fseq[State] fgMorphTree BB01, STMT00006 (before) [000044] --C--------- * JTRUE void [000043] --C--------- \--* EQ int [000041] --C--------- +--* CAST int <- bool <- int [000065] --C--------- | \--* EQ int [000063] --C--------- | +--* CAST int <- bool <- int [000061] --C-G------- | | \--* CALL int System.String.Equals [000059] ------------ arg0 | | +--* LCL_VAR ref V07 tmp6 [000060] ------------ arg1 | | \--* CNS_STR ref [000064] ------------ | \--* CNS_INT int 0 [000042] ------------ \--* CNS_INT int 0 Initializing arg info for 61.CALL: ArgTable for 61.CALL after fgInitArgInfo: fgArgTabEntry[arg 0 59.LCL_VAR ref (By ref), 1 reg: rcx, byteAlignment=8] fgArgTabEntry[arg 1 60.CNS_STR ref (By ref), 1 reg: rdx, byteAlignment=8] Morphing args for 61.CALL: argSlots=2, preallocatedArgCount=4, nextSlotNum=4, nextSlotByteOffset=32, outgoingArgSpaceSize=32 Sorting the arguments: Deferred argument ('rcx'): [000059] -----+------ * LCL_VAR ref V07 tmp6 Replaced with placeholder node: [000082] ----------L- * ARGPLACE ref Deferred argument ('rdx'): [000081] H----+------ * CNS_INT(h) ref 0x420148 [ICON_STR_HDL] Replaced with placeholder node: [000083] ----------L- * ARGPLACE ref Shuffled argument table: rcx rdx ArgTable for 61.CALL after fgMorphArgs: fgArgTabEntry[arg 0 59.LCL_VAR ref (By ref), 1 reg: rcx, byteAlignment=8, lateArgInx=0, processed] fgArgTabEntry[arg 1 81.CNS_INT ref (By ref), 1 reg: rdx, byteAlignment=8, lateArgInx=1, processed] fgMorphTree BB01, STMT00006 (after) [000044] --CXG+------ * JTRUE void [000065] J-CXG+-N---- \--* NE int [000061] --CXG+------ +--* CALL int System.String.Equals [000059] -----+------ arg0 in rcx | +--* LCL_VAR ref V07 tmp6 [000081] H----+------ arg1 in rdx | \--* CNS_INT(h) ref 0x420148 [ICON_STR_HDL] [000064] -----+------ \--* CNS_INT int 0 Morphing BB02 of 'TestCovariantReturns:Run()' fgMorphTree BB02, STMT00008 (before) [000049] -AC--------- * ASG ref [000048] D------N---- +--* LCL_VAR ref V06 tmp5 [000047] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST [000046] H----------- arg0 \--* CNS_INT(h) long 0x40000000004200e8 token Initializing arg info for 47.CALL: ArgTable for 47.CALL after fgInitArgInfo: fgArgTabEntry[arg 0 46.CNS_INT long (By ref), 1 reg: rcx, byteAlignment=8] Morphing args for 47.CALL: argSlots=1, preallocatedArgCount=4, nextSlotNum=4, nextSlotByteOffset=32, outgoingArgSpaceSize=32 Sorting the arguments: Deferred argument ('rcx'): [000046] H----+------ * CNS_INT(h) long 0x40000000004200e8 token Replaced with placeholder node: [000086] ----------L- * ARGPLACE long Shuffled argument table: rcx ArgTable for 47.CALL after fgMorphArgs: fgArgTabEntry[arg 0 46.CNS_INT long (By ref), 1 reg: rcx, byteAlignment=8, lateArgInx=0, processed] fgMorphTree BB02, STMT00008 (after) [000049] -AC--+------ * ASG ref [000048] D----+-N---- +--* LCL_VAR ref V06 tmp5 [000047] --C--+------ \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST [000046] H----+------ arg0 in rcx \--* CNS_INT(h) long 0x40000000004200e8 token fgMorphTree BB02, STMT00009 (before) [000051] --C-G------- * CALL void System.Exception..ctor [000050] ------------ this in rcx \--* LCL_VAR ref V06 tmp5 Initializing arg info for 51.CALL: ArgTable for 51.CALL after fgInitArgInfo: fgArgTabEntry[arg 0 50.LCL_VAR ref (By ref), 1 reg: rcx, byteAlignment=8] Morphing args for 51.CALL: argSlots=1, preallocatedArgCount=4, nextSlotNum=4, nextSlotByteOffset=32, outgoingArgSpaceSize=32 Sorting the arguments: Deferred argument ('rcx'): [000050] -----+------ * LCL_VAR ref V06 tmp5 Replaced with placeholder node: [000087] ----------L- * ARGPLACE ref Shuffled argument table: rcx ArgTable for 51.CALL after fgMorphArgs: fgArgTabEntry[arg 0 50.LCL_VAR ref (By ref), 1 reg: rcx, byteAlignment=8, lateArgInx=0, processed] fgMorphTree BB02, STMT00009 (after) [000051] --CXG+------ * CALL void System.Exception..ctor [000050] -----+------ this in rcx \--* LCL_VAR ref V06 tmp5 fgMorphTree BB02, STMT00010 (before) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW [000052] ------------ arg0 \--* LCL_VAR ref V06 tmp5 Initializing arg info for 53.CALL: ArgTable for 53.CALL after fgInitArgInfo: fgArgTabEntry[arg 0 52.LCL_VAR ref (By ref), 1 reg: rcx, byteAlignment=8] Morphing args for 53.CALL: argSlots=1, preallocatedArgCount=4, nextSlotNum=4, nextSlotByteOffset=32, outgoingArgSpaceSize=32 Sorting the arguments: Deferred argument ('rcx'): [000052] -----+------ * LCL_VAR ref V06 tmp5 Replaced with placeholder node: [000088] ----------L- * ARGPLACE ref Shuffled argument table: rcx ArgTable for 53.CALL after fgMorphArgs: fgArgTabEntry[arg 0 52.LCL_VAR ref (By ref), 1 reg: rcx, byteAlignment=8, lateArgInx=0, processed] fgMorphTree BB02, STMT00010 (after) [000053] --CXG+------ * CALL help void HELPER.CORINFO_HELP_THROW [000052] -----+------ arg0 in rcx \--* LCL_VAR ref V06 tmp5 Morphing BB03 of 'TestCovariantReturns:Run()' fgMorphTree BB03, STMT00007 (before) [000045] ------------ * RETURN void *************** In fgMarkDemotedImplicitByRefArgs() Expanding CastInstOf qmark in BB01 (before) ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..022)-> BB03 ( cond ) i hascall gcsafe newobj ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..022) -> BB03 (cond), preds={} succs={BB02,BB03} ***** BB01 STMT00000 ( 0x000[E-] ... 0x005 ) [000003] -AC--+------ * ASG ref [000002] D----+-N---- +--* LCL_VAR ref V02 tmp1 [000001] --C--+------ \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST [000000] H----+------ arg0 in rcx \--* CNS_INT(h) long 0x4000000000420070 method ***** BB01 STMT00002 ( 0x005[--] ... ??? ) [000008] -A---+------ * ASG ref [000007] D----+-N---- +--* LCL_VAR ref V00 loc0 [000006] -----+------ \--* LCL_VAR ref V02 tmp1 ***** BB01 STMT00003 ( 0x006[E-] ... 0x020 ) [000013] -ACXG+------ * ASG ref [000012] D----+-N---- +--* LCL_VAR ref V03 tmp2 [000010] --CXG+------ \--* CALLV vt-ind ref Base.GetFoo [000076] n--X-+------ control expr \--* IND long [000075] ---X-+------ \--* ADD long [000073] #--X-+------ +--* IND long [000072] -----+------ | \--* LCL_VAR ref V02 tmp1 [000074] -----+------ \--* CNS_INT int 24 [000009] -----+------ this in rcx \--* LCL_VAR ref V02 tmp1 ***** BB01 STMT00004 ( ??? ... ??? ) [000035] -ACXG+------ * ASG ref [000034] D----+-N---- +--* LCL_VAR ref V05 tmp4 [000033] -ACXG+------ \--* QMARK ref [000025] J----+-N---- if +--* EQ int [000024] -----+------ | +--* LCL_VAR ref V03 tmp2 [000023] -----+------ | \--* CNS_INT ref null [000032] -ACXG+?----- if \--* COLON ref [000030] -ACXG+?----- else +--* QMARK ref [000022] JA-X-+?N---- if | +--* NE int [000021] #--X-+?----- | | +--* IND long [000014] -----+?----- | | | \--* LCL_VAR ref V03 tmp2 [000019] -A---+?----- | | \--* COMMA long [000017] -A---+?----- | | +--* ASG long [000016] D----+?N---- | | | +--* LCL_VAR long V04 tmp3 [000011] H----+?----- | | | \--* CNS_INT(h) long 0x40000000004200a0 class [000018] -----+?----- | | \--* LCL_VAR long V04 tmp3 [000029] --CXG+?----- if | \--* COLON ref [000026] -----+?----- else | +--* LCL_VAR ref V03 tmp2 [000028] --CXG+?----- then | \--* CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL [000020] -----+?----- arg0 in rcx | +--* LCL_VAR long V04 tmp3 [000027] -----+?----- arg1 in rdx | \--* LCL_VAR ref V03 tmp2 [000031] -----+?----- then \--* LCL_VAR ref V03 tmp2 ***** BB01 STMT00014 ( ??? ... ??? ) [000067] -A-XG+------ * ASG ref [000066] D----+-N---- +--* LCL_VAR ref V07 tmp6 [000037] ---XG+------ \--* IND ref [000080] -----+------ \--* ADD byref [000036] -----+------ +--* LCL_VAR ref V05 tmp4 [000079] -----+------ \--* CNS_INT long 8 field offset Fseq[State] ***** BB01 STMT00006 ( ??? ... ??? ) [000044] --CXG+------ * JTRUE void [000065] J-CXG+-N---- \--* NE int [000061] --CXG+------ +--* CALL int System.String.Equals [000059] -----+------ arg0 in rcx | +--* LCL_VAR ref V07 tmp6 [000081] H----+------ arg1 in rdx | \--* CNS_INT(h) ref 0x420148 [ICON_STR_HDL] [000064] -----+------ \--* CNS_INT int 0 ------------------------------------------------------------------------------------------------------------------- New Basic Block BB04 [0007] created. BB02 previous predecessor was BB01, now is BB04 BB03 previous predecessor was BB01, now is BB04 Setting edge weights for BB01 -> BB04 to [0 .. 3.402823e+38] New Basic Block BB05 [0008] created. New Basic Block BB06 [0009] created. New Basic Block BB07 [0010] created. New Basic Block BB08 [0011] created. Setting edge weights for BB01 -> BB08 to [0 .. 3.402823e+38] Setting edge weights for BB08 -> BB07 to [0 .. 3.402823e+38] Setting edge weights for BB07 -> BB06 to [0 .. 3.402823e+38] Setting edge weights for BB06 -> BB05 to [0 .. 3.402823e+38] Setting edge weights for BB05 -> BB04 to [0 .. 3.402823e+38] Setting edge weights for BB07 -> BB04 to [0 .. 3.402823e+38] Setting edge weights for BB06 -> BB04 to [0 .. 3.402823e+38] removing useless STMT00004 ( ??? ... ??? ) [000035] -ACXG+------ * ASG ref [000034] D----+-N---- +--* LCL_VAR ref V05 tmp4 [000033] -ACXG+------ \--* QMARK ref [000025] J----+-N---- if +--* EQ int [000024] -----+------ | +--* LCL_VAR ref V03 tmp2 [000023] -----+------ | \--* CNS_INT ref null [000032] -ACXG+?----- if \--* COLON ref [000030] -ACXG+?----- else +--* QMARK ref [000022] JA-X-+?N---- if | +--* EQ int [000021] #--X-+?----- | | +--* IND long [000014] -----+?----- | | | \--* LCL_VAR ref V03 tmp2 [000019] -A---+?----- | | \--* COMMA long [000017] -A---+?----- | | +--* ASG long [000016] D----+?N---- | | | +--* LCL_VAR long V04 tmp3 [000011] H----+?----- | | | \--* CNS_INT(h) long 0x40000000004200a0 class [000018] -----+?----- | | \--* LCL_VAR long V04 tmp3 [000029] --CXG+?----- if | \--* COLON ref [000026] -----+?----- else | +--* LCL_VAR ref V03 tmp2 [000028] --CXG+?----- then | \--* CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL [000020] -----+?----- arg0 in rcx | +--* LCL_VAR long V04 tmp3 [000027] -----+?----- arg1 in rdx | \--* LCL_VAR ref V03 tmp2 [000031] -----+?----- then \--* LCL_VAR ref V03 tmp2 from BB01 Converting BB05 to BBJ_THROW Expanding CastInstOf qmark in BB01 (after) ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???) i hascall gcsafe newobj BB08 [0011] 1 BB01 1 [???..???) i BB07 [0010] 1 BB08 1 [???..???)-> BB04 ( cond ) i BB06 [0009] 1 BB07 0.50 [???..???)-> BB04 ( cond ) i BB05 [0008] 1 BB06 0 [???..???) (throw ) i rare BB04 [0007] 2 BB06,BB07 1 [???..022)-> BB03 ( cond ) i hascall gcsafe newobj ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..???), preds={} succs={BB08} ***** BB01 STMT00000 ( 0x000[E-] ... 0x005 ) [000003] -AC--+------ * ASG ref [000002] D----+-N---- +--* LCL_VAR ref V02 tmp1 [000001] --C--+------ \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST [000000] H----+------ arg0 in rcx \--* CNS_INT(h) long 0x4000000000420070 method ***** BB01 STMT00002 ( 0x005[--] ... ??? ) [000008] -A---+------ * ASG ref [000007] D----+-N---- +--* LCL_VAR ref V00 loc0 [000006] -----+------ \--* LCL_VAR ref V02 tmp1 ***** BB01 STMT00003 ( 0x006[E-] ... 0x020 ) [000013] -ACXG+------ * ASG ref [000012] D----+-N---- +--* LCL_VAR ref V03 tmp2 [000010] --CXG+------ \--* CALLV vt-ind ref Base.GetFoo [000076] n--X-+------ control expr \--* IND long [000075] ---X-+------ \--* ADD long [000073] #--X-+------ +--* IND long [000072] -----+------ | \--* LCL_VAR ref V02 tmp1 [000074] -----+------ \--* CNS_INT int 24 [000009] -----+------ this in rcx \--* LCL_VAR ref V02 tmp1 ------------ BB08 [???..???), preds={BB01} succs={BB07} ***** BB08 STMT00017 ( ??? ... ??? ) [000092] -A---------- * ASG ref [000091] D------N---- +--* LCL_VAR ref V05 tmp4 [000031] -----+?----- \--* LCL_VAR ref V03 tmp2 ------------ BB07 [???..???) -> BB04 (cond), preds={BB08} succs={BB06,BB04} ***** BB07 STMT00015 ( ??? ... ??? ) [000089] ------------ * JTRUE void [000025] J----+-N---- \--* EQ int [000024] -----+------ +--* LCL_VAR ref V03 tmp2 [000023] -----+------ \--* CNS_INT ref null ------------ BB06 [???..???) -> BB04 (cond), preds={BB07} succs={BB05,BB04} ***** BB06 STMT00016 ( ??? ... ??? ) [000090] -A-X-------- * JTRUE void [000022] JA-X-+?N---- \--* EQ int [000021] #--X-+?----- +--* IND long [000014] -----+?----- | \--* LCL_VAR ref V03 tmp2 [000019] -A---+?----- \--* COMMA long [000017] -A---+?----- +--* ASG long [000016] D----+?N---- | +--* LCL_VAR long V04 tmp3 [000011] H----+?----- | \--* CNS_INT(h) long 0x40000000004200a0 class [000018] -----+?----- \--* LCL_VAR long V04 tmp3 ------------ BB05 [???..???) (throw), preds={BB06} succs={} ***** BB05 STMT00018 ( ??? ... ??? ) [000094] -ACXG------- * ASG ref [000093] D------N---- +--* LCL_VAR ref V05 tmp4 [000028] --CXG+?----- \--* CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL [000020] -----+?----- arg0 in rcx +--* LCL_VAR long V04 tmp3 [000027] -----+?----- arg1 in rdx \--* LCL_VAR ref V03 tmp2 ------------ BB04 [???..022) -> BB03 (cond), preds={BB06,BB07} succs={BB02,BB03} ***** BB04 STMT00014 ( ??? ... ??? ) [000067] -A-XG+------ * ASG ref [000066] D----+-N---- +--* LCL_VAR ref V07 tmp6 [000037] ---XG+------ \--* IND ref [000080] -----+------ \--* ADD byref [000036] -----+------ +--* LCL_VAR ref V05 tmp4 [000079] -----+------ \--* CNS_INT long 8 field offset Fseq[State] ***** BB04 STMT00006 ( ??? ... ??? ) [000044] --CXG+------ * JTRUE void [000065] J-CXG+-N---- \--* NE int [000061] --CXG+------ +--* CALL int System.String.Equals [000059] -----+------ arg0 in rcx | +--* LCL_VAR ref V07 tmp6 [000081] H----+------ arg1 in rdx | \--* CNS_INT(h) ref 0x420148 [ICON_STR_HDL] [000064] -----+------ \--* CNS_INT int 0 ------------------------------------------------------------------------------------------------------------------- *************** Before renumbering the basic blocks ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???) i hascall gcsafe newobj BB08 [0011] 1 BB01 1 [???..???) i BB07 [0010] 1 BB08 1 [???..???)-> BB04 ( cond ) i BB06 [0009] 1 BB07 0.50 [???..???)-> BB04 ( cond ) i BB05 [0008] 1 BB06 0 [???..???) (throw ) i rare BB04 [0007] 2 BB06,BB07 1 [???..022)-> BB03 ( cond ) i hascall gcsafe newobj BB02 [0001] 1 BB04 0 [022..028) (throw ) i rare hascall gcsafe newobj BB03 [0002] 1 BB04 1 [028..029) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- *************** Exception Handling table is empty Renumber BB08 to BB02 Renumber BB07 to BB03 Renumber BB06 to BB04 Renumber BB04 to BB06 Renumber BB02 to BB07 Renumber BB03 to BB08 *************** After renumbering the basic blocks ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???) i hascall gcsafe newobj BB02 [0011] 1 BB01 1 [???..???) i BB03 [0010] 1 BB02 1 [???..???)-> BB06 ( cond ) i BB04 [0009] 1 BB03 0.50 [???..???)-> BB06 ( cond ) i BB05 [0008] 1 BB04 0 [???..???) (throw ) i rare BB06 [0007] 2 BB03,BB04 1 [???..022)-> BB08 ( cond ) i hascall gcsafe newobj BB07 [0001] 1 BB06 0 [022..028) (throw ) i rare hascall gcsafe newobj BB08 [0002] 1 BB06 1 [028..029) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- *************** Exception Handling table is empty New BlockSet epoch 3, # of blocks (including unused BB00): 9, bitset array size: 1 (short) *************** 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..???) i hascall gcsafe newobj BB02 [0011] 1 BB01 1 [???..???) i BB03 [0010] 1 BB02 1 [???..???)-> BB06 ( cond ) i BB04 [0009] 1 BB03 0.50 [???..???)-> BB06 ( cond ) i BB05 [0008] 1 BB04 0 [???..???) (throw ) i rare BB06 [0007] 2 BB03,BB04 1 [???..022)-> BB08 ( cond ) i hascall gcsafe newobj BB07 [0001] 1 BB06 0 [022..028) (throw ) i rare hascall gcsafe newobj BB08 [0002] 1 BB06 1 [028..029) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..???), preds={} succs={BB02} ***** BB01 STMT00000 ( 0x000[E-] ... 0x005 ) [000003] -AC--+------ * ASG ref [000002] D----+-N---- +--* LCL_VAR ref V02 tmp1 [000001] --C--+------ \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST [000000] H----+------ arg0 in rcx \--* CNS_INT(h) long 0x4000000000420070 method ***** BB01 STMT00002 ( 0x005[--] ... ??? ) [000008] -A---+------ * ASG ref [000007] D----+-N---- +--* LCL_VAR ref V00 loc0 [000006] -----+------ \--* LCL_VAR ref V02 tmp1 ***** BB01 STMT00003 ( 0x006[E-] ... 0x020 ) [000013] -ACXG+------ * ASG ref [000012] D----+-N---- +--* LCL_VAR ref V03 tmp2 [000010] --CXG+------ \--* CALLV vt-ind ref Base.GetFoo [000076] n--X-+------ control expr \--* IND long [000075] ---X-+------ \--* ADD long [000073] #--X-+------ +--* IND long [000072] -----+------ | \--* LCL_VAR ref V02 tmp1 [000074] -----+------ \--* CNS_INT int 24 [000009] -----+------ this in rcx \--* LCL_VAR ref V02 tmp1 ------------ BB02 [???..???), preds={BB01} succs={BB03} ***** BB02 STMT00017 ( ??? ... ??? ) [000092] -A---------- * ASG ref [000091] D------N---- +--* LCL_VAR ref V05 tmp4 [000031] -----+?----- \--* LCL_VAR ref V03 tmp2 ------------ BB03 [???..???) -> BB06 (cond), preds={BB02} succs={BB04,BB06} ***** BB03 STMT00015 ( ??? ... ??? ) [000089] ------------ * JTRUE void [000025] J----+-N---- \--* EQ int [000024] -----+------ +--* LCL_VAR ref V03 tmp2 [000023] -----+------ \--* CNS_INT ref null ------------ BB04 [???..???) -> BB06 (cond), preds={BB03} succs={BB05,BB06} ***** BB04 STMT00016 ( ??? ... ??? ) [000090] -A-X-------- * JTRUE void [000022] JA-X-+?N---- \--* EQ int [000021] #--X-+?----- +--* IND long [000014] -----+?----- | \--* LCL_VAR ref V03 tmp2 [000019] -A---+?----- \--* COMMA long [000017] -A---+?----- +--* ASG long [000016] D----+?N---- | +--* LCL_VAR long V04 tmp3 [000011] H----+?----- | \--* CNS_INT(h) long 0x40000000004200a0 class [000018] -----+?----- \--* LCL_VAR long V04 tmp3 ------------ BB05 [???..???) (throw), preds={BB04} succs={} ***** BB05 STMT00018 ( ??? ... ??? ) [000094] -ACXG------- * ASG ref [000093] D------N---- +--* LCL_VAR ref V05 tmp4 [000028] --CXG+?----- \--* CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL [000020] -----+?----- arg0 in rcx +--* LCL_VAR long V04 tmp3 [000027] -----+?----- arg1 in rdx \--* LCL_VAR ref V03 tmp2 ------------ BB06 [???..022) -> BB08 (cond), preds={BB03,BB04} succs={BB07,BB08} ***** BB06 STMT00014 ( ??? ... ??? ) [000067] -A-XG+------ * ASG ref [000066] D----+-N---- +--* LCL_VAR ref V07 tmp6 [000037] ---XG+------ \--* IND ref [000080] -----+------ \--* ADD byref [000036] -----+------ +--* LCL_VAR ref V05 tmp4 [000079] -----+------ \--* CNS_INT long 8 field offset Fseq[State] ***** BB06 STMT00006 ( ??? ... ??? ) [000044] --CXG+------ * JTRUE void [000065] J-CXG+-N---- \--* NE int [000061] --CXG+------ +--* CALL int System.String.Equals [000059] -----+------ arg0 in rcx | +--* LCL_VAR ref V07 tmp6 [000081] H----+------ arg1 in rdx | \--* CNS_INT(h) ref 0x420148 [ICON_STR_HDL] [000064] -----+------ \--* CNS_INT int 0 ------------ BB07 [022..028) (throw), preds={BB06} succs={} ***** BB07 STMT00008 ( 0x022[E-] ... 0x027 ) [000049] -AC--+------ * ASG ref [000048] D----+-N---- +--* LCL_VAR ref V06 tmp5 [000047] --C--+------ \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST [000046] H----+------ arg0 in rcx \--* CNS_INT(h) long 0x40000000004200e8 token ***** BB07 STMT00009 ( ??? ... ??? ) [000051] --CXG+------ * CALL void System.Exception..ctor [000050] -----+------ this in rcx \--* LCL_VAR ref V06 tmp5 ***** BB07 STMT00010 ( 0x027[--] ... ??? ) [000053] --CXG+------ * CALL help void HELPER.CORINFO_HELP_THROW [000052] -----+------ arg0 in rcx \--* LCL_VAR ref V06 tmp5 ------------ BB08 [028..029) (return), preds={BB06} succs={} ***** BB08 STMT00007 ( 0x028[E-] ... 0x028 ) [000045] -----+------ * RETURN void ------------------------------------------------------------------------------------------------------------------- *************** In fgDebugCheckBBlist *************** Starting PHASE GS Cookie No GS security needed *************** Finishing PHASE GS Cookie *************** 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..???) i hascall gcsafe newobj BB02 [0011] 1 BB01 1 [???..???) i BB03 [0010] 1 BB02 1 [???..???)-> BB06 ( cond ) i BB04 [0009] 1 BB03 0.50 [???..???)-> BB06 ( cond ) i BB05 [0008] 1 BB04 0 [???..???) (throw ) i rare BB06 [0007] 2 BB03,BB04 1 [???..022)-> BB08 ( cond ) i hascall gcsafe newobj BB07 [0001] 1 BB06 0 [022..028) (throw ) i rare hascall gcsafe newobj BB08 [0002] 1 BB06 1 [028..029) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- -- no profile data, so using default called count -- not optimizing or no profile data, so not computing edge weights *************** 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..???) i hascall gcsafe newobj BB02 [0011] 1 BB01 1 [???..???) i BB03 [0010] 1 BB02 1 [???..???)-> BB06 ( cond ) i BB04 [0009] 1 BB03 0.50 [???..???)-> BB06 ( cond ) i BB05 [0008] 1 BB04 0 [???..???) (throw ) i rare BB06 [0007] 2 BB03,BB04 1 [???..022)-> BB08 ( cond ) i hascall gcsafe newobj BB07 [0001] 1 BB06 0 [022..028) (throw ) i rare hascall gcsafe newobj BB08 [0002] 1 BB06 1 [028..029) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- *************** Exception Handling table is empty *************** In fgDebugCheckBBlist *************** Finishing PHASE Create EH funclets *************** Starting PHASE Invert loops *************** Finishing PHASE Invert loops [no changes] *************** Starting PHASE Optimize layout *************** 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..???) i hascall gcsafe newobj BB02 [0011] 1 BB01 1 [???..???) i BB03 [0010] 1 BB02 1 [???..???)-> BB06 ( cond ) i BB04 [0009] 1 BB03 0.50 [???..???)-> BB06 ( cond ) i BB05 [0008] 1 BB04 0 [???..???) (throw ) i rare BB06 [0007] 2 BB03,BB04 1 [???..022)-> BB08 ( cond ) i hascall gcsafe newobj BB07 [0001] 1 BB06 0 [022..028) (throw ) i rare hascall gcsafe newobj BB08 [0002] 1 BB06 1 [028..029) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- Considering uncond to cond BB01 -> BB02 Compacting blocks BB01 and BB02: *************** In fgDebugCheckBBlist Considering uncond to cond BB01 -> BB03 Compacting blocks BB01 and BB03: *************** In fgDebugCheckBBlist After updating the flow graph: ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB06 ( cond ) i hascall gcsafe newobj BB04 [0009] 1 BB01 0.50 [???..???)-> BB06 ( cond ) i BB05 [0008] 1 BB04 0 [???..???) (throw ) i rare BB06 [0007] 2 BB01,BB04 1 [???..022)-> BB08 ( cond ) i hascall gcsafe newobj BB07 [0001] 1 BB06 0 [022..028) (throw ) i rare hascall gcsafe newobj BB08 [0002] 1 BB06 1 [028..029) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- *************** Exception Handling table is empty *************** In fgDebugCheckBBlist *************** In fgExpandRarelyRunBlocks() *************** In fgReorderBlocks() Initial BasicBlocks ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB06 ( cond ) i hascall gcsafe newobj BB04 [0009] 1 BB01 0.50 [???..???)-> BB06 ( cond ) i BB05 [0008] 1 BB04 0 [???..???) (throw ) i rare BB06 [0007] 2 BB01,BB04 1 [???..022)-> BB08 ( cond ) i hascall gcsafe newobj BB07 [0001] 1 BB06 0 [022..028) (throw ) i rare hascall gcsafe newobj BB08 [0002] 1 BB06 1 [028..029) (return) i ----------------------------------------------------------------------------------------------------------------------------------------- Decided to reverse conditional branch at block BB04 branch to BB06 since it falls into a rarely run block Relocated rarely run block BB05 by reversing conditional jump at BB04 Relocated block [BB05..BB05] inserted after BB08 at the end of method After this change in fgReorderBlocks the BB graph is: ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB06 ( cond ) i hascall gcsafe newobj BB04 [0009] 1 BB01 0.50 [???..???)-> BB05 ( cond ) i BB06 [0007] 2 BB01,BB04 1 [???..022)-> BB08 ( cond ) i hascall gcsafe newobj BB07 [0001] 1 BB06 0 [022..028) (throw ) i rare hascall gcsafe newobj BB08 [0002] 1 BB06 1 [028..029) (return) i BB05 [0008] 1 BB04 0 [???..???) (throw ) i rare ----------------------------------------------------------------------------------------------------------------------------------------- Decided to reverse conditional branch at block BB06 branch to BB08 since it falls into a rarely run block Relocated rarely run block BB07 by reversing conditional jump at BB06 Relocated block [BB07..BB07] inserted after BB05 at the end of method After this change in fgReorderBlocks the BB graph is: ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB06 ( cond ) i hascall gcsafe newobj BB04 [0009] 1 BB01 0.50 [???..???)-> BB05 ( cond ) i BB06 [0007] 2 BB01,BB04 1 [???..022)-> BB07 ( cond ) i hascall gcsafe newobj BB08 [0002] 1 BB06 1 [028..029) (return) i BB05 [0008] 1 BB04 0 [???..???) (throw ) i rare BB07 [0001] 1 BB06 0 [022..028) (throw ) i rare hascall gcsafe newobj ----------------------------------------------------------------------------------------------------------------------------------------- *************** 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..???)-> BB06 ( cond ) i hascall gcsafe newobj BB04 [0009] 1 BB01 0.50 [???..???)-> BB05 ( cond ) i BB06 [0007] 2 BB01,BB04 1 [???..022)-> BB07 ( cond ) i hascall gcsafe newobj BB08 [0002] 1 BB06 1 [028..029) (return) i BB05 [0008] 1 BB04 0 [???..???) (throw ) i rare BB07 [0001] 1 BB06 0 [022..028) (throw ) i rare hascall gcsafe newobj ----------------------------------------------------------------------------------------------------------------------------------------- *************** In fgDebugCheckBBlist *************** Finishing PHASE Optimize layout Trees after Optimize layout ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB06 ( cond ) i hascall gcsafe newobj BB04 [0009] 1 BB01 0.50 [???..???)-> BB05 ( cond ) i BB06 [0007] 2 BB01,BB04 1 [???..022)-> BB07 ( cond ) i hascall gcsafe newobj BB08 [0002] 1 BB06 1 [028..029) (return) i BB05 [0008] 1 BB04 0 [???..???) (throw ) i rare BB07 [0001] 1 BB06 0 [022..028) (throw ) i rare hascall gcsafe newobj ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..???) -> BB06 (cond), preds={} succs={BB04,BB06} ***** BB01 STMT00000 ( 0x000[E-] ... 0x005 ) [000003] -AC--+------ * ASG ref [000002] D----+-N---- +--* LCL_VAR ref V02 tmp1 [000001] --C--+------ \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST [000000] H----+------ arg0 in rcx \--* CNS_INT(h) long 0x4000000000420070 method ***** BB01 STMT00002 ( 0x005[--] ... ??? ) [000008] -A---+------ * ASG ref [000007] D----+-N---- +--* LCL_VAR ref V00 loc0 [000006] -----+------ \--* LCL_VAR ref V02 tmp1 ***** BB01 STMT00003 ( 0x006[E-] ... 0x020 ) [000013] -ACXG+------ * ASG ref [000012] D----+-N---- +--* LCL_VAR ref V03 tmp2 [000010] --CXG+------ \--* CALLV vt-ind ref Base.GetFoo [000076] n--X-+------ control expr \--* IND long [000075] ---X-+------ \--* ADD long [000073] #--X-+------ +--* IND long [000072] -----+------ | \--* LCL_VAR ref V02 tmp1 [000074] -----+------ \--* CNS_INT int 24 [000009] -----+------ this in rcx \--* LCL_VAR ref V02 tmp1 ***** BB01 STMT00017 ( ??? ... ??? ) [000092] -A---------- * ASG ref [000091] D------N---- +--* LCL_VAR ref V05 tmp4 [000031] -----+?----- \--* LCL_VAR ref V03 tmp2 ***** BB01 STMT00015 ( ??? ... ??? ) [000089] ------------ * JTRUE void [000025] J----+-N---- \--* EQ int [000024] -----+------ +--* LCL_VAR ref V03 tmp2 [000023] -----+------ \--* CNS_INT ref null ------------ BB04 [???..???) -> BB05 (cond), preds={BB01} succs={BB06,BB05} ***** BB04 STMT00016 ( ??? ... ??? ) [000090] -A-X-------- * JTRUE void [000022] JA-X-+?N---- \--* NE int [000021] #--X-+?----- +--* IND long [000014] -----+?----- | \--* LCL_VAR ref V03 tmp2 [000019] -A---+?----- \--* COMMA long [000017] -A---+?----- +--* ASG long [000016] D----+?N---- | +--* LCL_VAR long V04 tmp3 [000011] H----+?----- | \--* CNS_INT(h) long 0x40000000004200a0 class [000018] -----+?----- \--* LCL_VAR long V04 tmp3 ------------ BB06 [???..022) -> BB07 (cond), preds={BB01,BB04} succs={BB08,BB07} ***** BB06 STMT00014 ( ??? ... ??? ) [000067] -A-XG+------ * ASG ref [000066] D----+-N---- +--* LCL_VAR ref V07 tmp6 [000037] ---XG+------ \--* IND ref [000080] -----+------ \--* ADD byref [000036] -----+------ +--* LCL_VAR ref V05 tmp4 [000079] -----+------ \--* CNS_INT long 8 field offset Fseq[State] ***** BB06 STMT00006 ( ??? ... ??? ) [000044] --CXG+------ * JTRUE void [000065] J-CXG+-N---- \--* EQ int [000061] --CXG+------ +--* CALL int System.String.Equals [000059] -----+------ arg0 in rcx | +--* LCL_VAR ref V07 tmp6 [000081] H----+------ arg1 in rdx | \--* CNS_INT(h) ref 0x420148 [ICON_STR_HDL] [000064] -----+------ \--* CNS_INT int 0 ------------ BB08 [028..029) (return), preds={BB06} succs={} ***** BB08 STMT00007 ( 0x028[E-] ... 0x028 ) [000045] -----+------ * RETURN void ------------ BB05 [???..???) (throw), preds={BB04} succs={} ***** BB05 STMT00018 ( ??? ... ??? ) [000094] -ACXG------- * ASG ref [000093] D------N---- +--* LCL_VAR ref V05 tmp4 [000028] --CXG+?----- \--* CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL [000020] -----+?----- arg0 in rcx +--* LCL_VAR long V04 tmp3 [000027] -----+?----- arg1 in rdx \--* LCL_VAR ref V03 tmp2 ------------ BB07 [022..028) (throw), preds={BB06} succs={} ***** BB07 STMT00008 ( 0x022[E-] ... 0x027 ) [000049] -AC--+------ * ASG ref [000048] D----+-N---- +--* LCL_VAR ref V06 tmp5 [000047] --C--+------ \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST [000046] H----+------ arg0 in rcx \--* CNS_INT(h) long 0x40000000004200e8 token ***** BB07 STMT00009 ( ??? ... ??? ) [000051] --CXG+------ * CALL void System.Exception..ctor [000050] -----+------ this in rcx \--* LCL_VAR ref V06 tmp5 ***** BB07 STMT00010 ( 0x027[--] ... ??? ) [000053] --CXG+------ * CALL help void HELPER.CORINFO_HELP_THROW [000052] -----+------ arg0 in rcx \--* LCL_VAR ref V06 tmp5 ------------------------------------------------------------------------------------------------------------------- *************** In fgDebugCheckBBlist *************** 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..???)-> BB06 ( cond ) i hascall gcsafe newobj BB04 [0009] 1 BB01 0.50 [???..???)-> BB05 ( cond ) i BB06 [0007] 2 BB01,BB04 1 [???..022)-> BB07 ( cond ) i hascall gcsafe newobj BB08 [0002] 1 BB06 1 [028..029) (return) i BB05 [0008] 1 BB04 0 [???..???) (throw ) i rare BB07 [0001] 1 BB06 0 [022..028) (throw ) i rare hascall gcsafe newobj ----------------------------------------------------------------------------------------------------------------------------------------- *************** Exception Handling table is empty Renumber BB04 to BB02 Renumber BB06 to BB03 Renumber BB08 to BB04 Renumber BB07 to BB06 *************** After renumbering the basic blocks ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB03 ( cond ) i hascall gcsafe newobj BB02 [0009] 1 BB01 0.50 [???..???)-> BB05 ( cond ) i BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj BB04 [0002] 1 BB03 1 [028..029) (return) i BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj ----------------------------------------------------------------------------------------------------------------------------------------- *************** Exception Handling table is empty New BlockSet epoch 4, # of blocks (including unused BB00): 7, bitset array size: 1 (short) Enter blocks: BB01 After computing reachability sets: ------------------------------------------------ BBnum Reachable by ------------------------------------------------ BB01 : BB01 BB02 : BB01 BB02 BB03 : BB01 BB02 BB03 BB04 : BB01 BB02 BB03 BB04 BB05 : BB01 BB02 BB05 BB06 : BB01 BB02 BB03 BB06 After computing reachability: ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB03 ( cond ) i hascall gcsafe newobj BB02 [0009] 1 BB01 0.50 [???..???)-> BB05 ( cond ) i gcsafe BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare gcsafe BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj ----------------------------------------------------------------------------------------------------------------------------------------- *************** In fgDebugCheckBBlist *************** In fgComputeDoms *************** In fgDebugCheckBBlist Dominator computation start blocks (those blocks with no incoming edges): BB01 ------------------------------------------------ BBnum Dominated by ------------------------------------------------ BB01: BB01 BB02: BB02 BB01 BB05: BB05 BB02 BB01 BB03: BB03 BB01 BB04: BB04 BB03 BB01 BB06: BB06 BB03 BB01 Inside fgBuildDomTree After computing the Dominance Tree: BB01 : BB03 BB02 BB02 : BB05 BB03 : BB06 BB04 After numbering the dominator tree: BB01: pre=01, post=06 BB02: pre=05, post=05 BB03: pre=02, post=03 BB04: pre=04, post=02 BB05: pre=06, post=04 BB06: pre=03, post=01 *************** Finishing PHASE Compute blocks reachability *************** Starting PHASE Find loops *************** In optFindLoops() *************** In optMarkLoopHeads() After optSetBlockWeights: ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB03 ( cond ) i hascall gcsafe newobj BB02 [0009] 1 BB01 0.25 [???..???)-> BB05 ( cond ) i gcsafe BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare gcsafe BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj ----------------------------------------------------------------------------------------------------------------------------------------- *************** In fgDebugCheckBBlist *************** Finishing PHASE Find loops Trees after Find loops ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB03 ( cond ) i hascall gcsafe newobj BB02 [0009] 1 BB01 0.25 [???..???)-> BB05 ( cond ) i gcsafe BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare gcsafe BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..???) -> BB03 (cond), preds={} succs={BB02,BB03} ***** BB01 STMT00000 ( 0x000[E-] ... 0x005 ) [000003] -AC--+------ * ASG ref [000002] D----+-N---- +--* LCL_VAR ref V02 tmp1 [000001] --C--+------ \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST [000000] H----+------ arg0 in rcx \--* CNS_INT(h) long 0x4000000000420070 method ***** BB01 STMT00002 ( 0x005[--] ... ??? ) [000008] -A---+------ * ASG ref [000007] D----+-N---- +--* LCL_VAR ref V00 loc0 [000006] -----+------ \--* LCL_VAR ref V02 tmp1 ***** BB01 STMT00003 ( 0x006[E-] ... 0x020 ) [000013] -ACXG+------ * ASG ref [000012] D----+-N---- +--* LCL_VAR ref V03 tmp2 [000010] --CXG+------ \--* CALLV vt-ind ref Base.GetFoo [000076] n--X-+------ control expr \--* IND long [000075] ---X-+------ \--* ADD long [000073] #--X-+------ +--* IND long [000072] -----+------ | \--* LCL_VAR ref V02 tmp1 [000074] -----+------ \--* CNS_INT int 24 [000009] -----+------ this in rcx \--* LCL_VAR ref V02 tmp1 ***** BB01 STMT00017 ( ??? ... ??? ) [000092] -A---------- * ASG ref [000091] D------N---- +--* LCL_VAR ref V05 tmp4 [000031] -----+?----- \--* LCL_VAR ref V03 tmp2 ***** BB01 STMT00015 ( ??? ... ??? ) [000089] ------------ * JTRUE void [000025] J----+-N---- \--* EQ int [000024] -----+------ +--* LCL_VAR ref V03 tmp2 [000023] -----+------ \--* CNS_INT ref null ------------ BB02 [???..???) -> BB05 (cond), preds={BB01} succs={BB03,BB05} ***** BB02 STMT00016 ( ??? ... ??? ) [000090] -A-X-------- * JTRUE void [000022] JA-X-+?N---- \--* NE int [000021] #--X-+?----- +--* IND long [000014] -----+?----- | \--* LCL_VAR ref V03 tmp2 [000019] -A---+?----- \--* COMMA long [000017] -A---+?----- +--* ASG long [000016] D----+?N---- | +--* LCL_VAR long V04 tmp3 [000011] H----+?----- | \--* CNS_INT(h) long 0x40000000004200a0 class [000018] -----+?----- \--* LCL_VAR long V04 tmp3 ------------ BB03 [???..022) -> BB06 (cond), preds={BB01,BB02} succs={BB04,BB06} ***** BB03 STMT00014 ( ??? ... ??? ) [000067] -A-XG+------ * ASG ref [000066] D----+-N---- +--* LCL_VAR ref V07 tmp6 [000037] ---XG+------ \--* IND ref [000080] -----+------ \--* ADD byref [000036] -----+------ +--* LCL_VAR ref V05 tmp4 [000079] -----+------ \--* CNS_INT long 8 field offset Fseq[State] ***** BB03 STMT00006 ( ??? ... ??? ) [000044] --CXG+------ * JTRUE void [000065] J-CXG+-N---- \--* EQ int [000061] --CXG+------ +--* CALL int System.String.Equals [000059] -----+------ arg0 in rcx | +--* LCL_VAR ref V07 tmp6 [000081] H----+------ arg1 in rdx | \--* CNS_INT(h) ref 0x420148 [ICON_STR_HDL] [000064] -----+------ \--* CNS_INT int 0 ------------ BB04 [028..029) (return), preds={BB03} succs={} ***** BB04 STMT00007 ( 0x028[E-] ... 0x028 ) [000045] -----+------ * RETURN void ------------ BB05 [???..???) (throw), preds={BB02} succs={} ***** BB05 STMT00018 ( ??? ... ??? ) [000094] -ACXG------- * ASG ref [000093] D------N---- +--* LCL_VAR ref V05 tmp4 [000028] --CXG+?----- \--* CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL [000020] -----+?----- arg0 in rcx +--* LCL_VAR long V04 tmp3 [000027] -----+?----- arg1 in rdx \--* LCL_VAR ref V03 tmp2 ------------ BB06 [022..028) (throw), preds={BB03} succs={} ***** BB06 STMT00008 ( 0x022[E-] ... 0x027 ) [000049] -AC--+------ * ASG ref [000048] D----+-N---- +--* LCL_VAR ref V06 tmp5 [000047] --C--+------ \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST [000046] H----+------ arg0 in rcx \--* CNS_INT(h) long 0x40000000004200e8 token ***** BB06 STMT00009 ( ??? ... ??? ) [000051] --CXG+------ * CALL void System.Exception..ctor [000050] -----+------ this in rcx \--* LCL_VAR ref V06 tmp5 ***** BB06 STMT00010 ( 0x027[--] ... ??? ) [000053] --CXG+------ * CALL help void HELPER.CORINFO_HELP_THROW [000052] -----+------ arg0 in rcx \--* LCL_VAR ref V06 tmp5 ------------------------------------------------------------------------------------------------------------------- *************** In fgDebugCheckBBlist *************** Starting PHASE Clone loops *************** In optCloneLoops() No loops to clone *************** Finishing PHASE Clone loops [no changes] *************** Starting PHASE Unroll loops *************** Finishing PHASE Unroll loops [no changes] *************** Starting PHASE Mark local vars *************** In lvaMarkLocalVars() *** lvaComputeRefCounts *** *** lvaComputeRefCounts -- explicit counts *** *** marking local variables in block BB01 (weight=1 ) STMT00000 ( 0x000[E-] ... 0x005 ) [000003] -AC--+------ * ASG ref [000002] D----+-N---- +--* LCL_VAR ref V02 tmp1 [000001] --C--+------ \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST [000000] H----+------ arg0 in rcx \--* CNS_INT(h) long 0x4000000000420070 method New refCnts for V02: refCnt = 1, refCntWtd = 2 Marking EH Var V02 as a register candidate. STMT00002 ( 0x005[--] ... ??? ) [000008] -A---+------ * ASG ref [000007] D----+-N---- +--* LCL_VAR ref V00 loc0 [000006] -----+------ \--* LCL_VAR ref V02 tmp1 New refCnts for V00: refCnt = 1, refCntWtd = 1 Marking EH Var V00 as a register candidate. New refCnts for V02: refCnt = 2, refCntWtd = 4 STMT00003 ( 0x006[E-] ... 0x020 ) [000013] -ACXG+------ * ASG ref [000012] D----+-N---- +--* LCL_VAR ref V03 tmp2 [000010] --CXG+------ \--* CALLV vt-ind ref Base.GetFoo [000076] n--X-+------ control expr \--* IND long [000075] ---X-+------ \--* ADD long [000073] #--X-+------ +--* IND long [000072] -----+------ | \--* LCL_VAR ref V02 tmp1 [000074] -----+------ \--* CNS_INT int 24 [000009] -----+------ this in rcx \--* LCL_VAR ref V02 tmp1 New refCnts for V03: refCnt = 1, refCntWtd = 2 Marking EH Var V03 as a register candidate. New refCnts for V02: refCnt = 3, refCntWtd = 6 New refCnts for V02: refCnt = 4, refCntWtd = 8 STMT00017 ( ??? ... ??? ) [000092] -A---------- * ASG ref [000091] D------N---- +--* LCL_VAR ref V05 tmp4 [000031] -----+?----- \--* LCL_VAR ref V03 tmp2 New refCnts for V05: refCnt = 1, refCntWtd = 2 Marking EH Var V05 as a register candidate. New refCnts for V03: refCnt = 2, refCntWtd = 4 STMT00015 ( ??? ... ??? ) [000089] ------------ * JTRUE void [000025] J----+-N---- \--* EQ int [000024] -----+------ +--* LCL_VAR ref V03 tmp2 [000023] -----+------ \--* CNS_INT ref null New refCnts for V03: refCnt = 3, refCntWtd = 6 *** marking local variables in block BB02 (weight=0.25) STMT00016 ( ??? ... ??? ) [000090] -A-X-------- * JTRUE void [000022] JA-X-+?N---- \--* NE int [000021] #--X-+?----- +--* IND long [000014] -----+?----- | \--* LCL_VAR ref V03 tmp2 [000019] -A---+?----- \--* COMMA long [000017] -A---+?----- +--* ASG long [000016] D----+?N---- | +--* LCL_VAR long V04 tmp3 [000011] H----+?----- | \--* CNS_INT(h) long 0x40000000004200a0 class [000018] -----+?----- \--* LCL_VAR long V04 tmp3 New refCnts for V03: refCnt = 4, refCntWtd = 6.50 New refCnts for V04: refCnt = 1, refCntWtd = 0.50 V04 needs explicit zero init. Disqualified as a single-def register candidate. New refCnts for V04: refCnt = 2, refCntWtd = 1 *** marking local variables in block BB03 (weight=1 ) STMT00014 ( ??? ... ??? ) [000067] -A-XG+------ * ASG ref [000066] D----+-N---- +--* LCL_VAR ref V07 tmp6 [000037] ---XG+------ \--* IND ref [000080] -----+------ \--* ADD byref [000036] -----+------ +--* LCL_VAR ref V05 tmp4 [000079] -----+------ \--* CNS_INT long 8 field offset Fseq[State] New refCnts for V07: refCnt = 1, refCntWtd = 2 Marking EH Var V07 as a register candidate. New refCnts for V05: refCnt = 2, refCntWtd = 4 STMT00006 ( ??? ... ??? ) [000044] --CXG+------ * JTRUE void [000065] J-CXG+-N---- \--* EQ int [000061] --CXG+------ +--* CALL int System.String.Equals [000059] -----+------ arg0 in rcx | +--* LCL_VAR ref V07 tmp6 [000081] H----+------ arg1 in rdx | \--* CNS_INT(h) ref 0x420148 [ICON_STR_HDL] [000064] -----+------ \--* CNS_INT int 0 New refCnts for V07: refCnt = 2, refCntWtd = 4 *** marking local variables in block BB04 (weight=1 ) STMT00007 ( 0x028[E-] ... 0x028 ) [000045] -----+------ * RETURN void *** marking local variables in block BB05 (weight=0 ) STMT00018 ( ??? ... ??? ) [000094] -ACXG------- * ASG ref [000093] D------N---- +--* LCL_VAR ref V05 tmp4 [000028] --CXG+?----- \--* CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL [000020] -----+?----- arg0 in rcx +--* LCL_VAR long V04 tmp3 [000027] -----+?----- arg1 in rdx \--* LCL_VAR ref V03 tmp2 New refCnts for V05: refCnt = 3, refCntWtd = 4 V05 has multiple definitions. Disqualified as a single-def register candidate. New refCnts for V04: refCnt = 3, refCntWtd = 1 New refCnts for V03: refCnt = 5, refCntWtd = 6.50 *** marking local variables in block BB06 (weight=0 ) STMT00008 ( 0x022[E-] ... 0x027 ) [000049] -AC--+------ * ASG ref [000048] D----+-N---- +--* LCL_VAR ref V06 tmp5 [000047] --C--+------ \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST [000046] H----+------ arg0 in rcx \--* CNS_INT(h) long 0x40000000004200e8 token New refCnts for V06: refCnt = 1, refCntWtd = 0 Marking EH Var V06 as a register candidate. STMT00009 ( ??? ... ??? ) [000051] --CXG+------ * CALL void System.Exception..ctor [000050] -----+------ this in rcx \--* LCL_VAR ref V06 tmp5 New refCnts for V06: refCnt = 2, refCntWtd = 0 STMT00010 ( 0x027[--] ... ??? ) [000053] --CXG+------ * CALL help void HELPER.CORINFO_HELP_THROW [000052] -----+------ arg0 in rcx \--* LCL_VAR ref V06 tmp5 New refCnts for V06: refCnt = 3, refCntWtd = 0 *** lvaComputeRefCounts -- implicit counts *** *************** 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 10 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..???)-> BB03 ( cond ) i hascall gcsafe newobj BB02 [0009] 1 BB01 0.25 [???..???)-> BB05 ( cond ) i gcsafe BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare gcsafe BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..???) -> BB03 (cond), preds={} succs={BB02,BB03} ***** BB01 STMT00000 ( 0x000[E-] ... 0x005 ) N005 ( 15, 10) [000003] -AC-----R--- * ASG ref N004 ( 1, 1) [000002] D------N---- +--* LCL_VAR ref V02 tmp1 N003 ( 15, 10) [000001] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST N002 ( 1, 4) [000000] H----------- arg0 in rcx \--* CNS_INT(h) long 0x4000000000420070 method ***** BB01 STMT00002 ( 0x005[--] ... ??? ) N003 ( 5, 4) [000008] -A------R--- * ASG ref N002 ( 3, 2) [000007] D------N---- +--* LCL_VAR ref V00 loc0 N001 ( 1, 1) [000006] ------------ \--* LCL_VAR ref V02 tmp1 ***** BB01 STMT00003 ( 0x006[E-] ... 0x020 ) N010 ( 27, 15) [000013] -ACXG---R--- * ASG ref N009 ( 1, 1) [000012] D------N---- +--* LCL_VAR ref V03 tmp2 N008 ( 27, 15) [000010] --CXG------- \--* CALLV vt-ind ref Base.GetFoo N007 ( 6, 5) [000076] n--X-------- control expr \--* IND long N006 ( 4, 3) [000075] ---X---N---- \--* ADD long N004 ( 3, 2) [000073] #--X-------- +--* IND long N003 ( 1, 1) [000072] ------------ | \--* LCL_VAR ref V02 tmp1 N005 ( 1, 1) [000074] ------------ \--* CNS_INT int 24 N002 ( 1, 1) [000009] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 ***** BB01 STMT00017 ( ??? ... ??? ) N003 ( 1, 3) [000092] -A------R--- * ASG ref N002 ( 1, 1) [000091] D------N---- +--* LCL_VAR ref V05 tmp4 N001 ( 1, 1) [000031] ------?----- \--* LCL_VAR ref V03 tmp2 ***** BB01 STMT00015 ( ??? ... ??? ) N004 ( 5, 5) [000089] ------------ * JTRUE void N003 ( 3, 3) [000025] J------N---- \--* EQ int N001 ( 1, 1) [000024] ------------ +--* LCL_VAR ref V03 tmp2 N002 ( 1, 1) [000023] ------------ \--* CNS_INT ref null ------------ BB02 [???..???) -> BB05 (cond), preds={BB01} succs={BB03,BB05} ***** BB02 STMT00016 ( ??? ... ??? ) N009 ( 14, 14) [000090] -A-X-------- * JTRUE void N008 ( 12, 12) [000022] JA-X--?N---- \--* NE int N002 ( 3, 2) [000021] #--X--?----- +--* IND long N001 ( 1, 1) [000014] ------?----- | \--* LCL_VAR ref V03 tmp2 N007 ( 8, 9) [000019] -A----?----- \--* COMMA long N005 ( 5, 7) [000017] -A----?-R--- +--* ASG long N004 ( 3, 2) [000016] D-----?N---- | +--* LCL_VAR long V04 tmp3 N003 ( 1, 4) [000011] H-----?----- | \--* CNS_INT(h) long 0x40000000004200a0 class N006 ( 3, 2) [000018] ------?----- \--* LCL_VAR long V04 tmp3 ------------ BB03 [???..022) -> BB06 (cond), preds={BB01,BB02} succs={BB04,BB06} ***** BB03 STMT00014 ( ??? ... ??? ) N006 ( 4, 4) [000067] -A-XG---R--- * ASG ref N005 ( 1, 1) [000066] D------N---- +--* LCL_VAR ref V07 tmp6 N004 ( 4, 4) [000037] ---XG------- \--* IND ref N003 ( 2, 2) [000080] -------N---- \--* ADD byref N001 ( 1, 1) [000036] ------------ +--* LCL_VAR ref V05 tmp4 N002 ( 1, 1) [000079] ------------ \--* CNS_INT long 8 field offset Fseq[State] ***** BB03 STMT00006 ( ??? ... ??? ) N008 ( 20, 16) [000044] --CXG------- * JTRUE void N007 ( 18, 14) [000065] J-CXG--N---- \--* EQ int N005 ( 16, 12) [000061] --CXG------- +--* CALL int System.String.Equals N003 ( 1, 1) [000059] ------------ arg0 in rcx | +--* LCL_VAR ref V07 tmp6 N004 ( 1, 4) [000081] H----------- arg1 in rdx | \--* CNS_INT(h) ref 0x420148 [ICON_STR_HDL] N006 ( 1, 1) [000064] ------------ \--* CNS_INT int 0 ------------ BB04 [028..029) (return), preds={BB03} succs={} ***** BB04 STMT00007 ( 0x028[E-] ... 0x028 ) N001 ( 0, 0) [000045] ------------ * RETURN void ------------ BB05 [???..???) (throw), preds={BB02} succs={} ***** BB05 STMT00018 ( ??? ... ??? ) N007 ( 18, 10) [000094] -ACXG---R--- * ASG ref N006 ( 1, 1) [000093] D------N---- +--* LCL_VAR ref V05 tmp4 N005 ( 18, 10) [000028] --CXG-?----- \--* CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL N003 ( 3, 2) [000020] ------?----- arg0 in rcx +--* LCL_VAR long V04 tmp3 N004 ( 1, 1) [000027] ------?----- arg1 in rdx \--* LCL_VAR ref V03 tmp2 ------------ BB06 [022..028) (throw), preds={BB03} succs={} ***** BB06 STMT00008 ( 0x022[E-] ... 0x027 ) N005 ( 19, 13) [000049] -AC-----R--- * ASG ref N004 ( 3, 2) [000048] D------N---- +--* LCL_VAR ref V06 tmp5 N003 ( 15, 10) [000047] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST N002 ( 1, 4) [000046] H----------- arg0 in rcx \--* CNS_INT(h) long 0x40000000004200e8 token ***** BB06 STMT00009 ( ??? ... ??? ) N003 ( 17, 9) [000051] --CXG------- * CALL void System.Exception..ctor N002 ( 3, 2) [000050] ------------ this in rcx \--* LCL_VAR ref V06 tmp5 ***** BB06 STMT00010 ( 0x027[--] ... ??? ) N003 ( 17, 8) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW N002 ( 3, 2) [000052] ------------ arg0 in rcx \--* LCL_VAR ref V06 tmp5 ------------------------------------------------------------------------------------------------------------------- *************** Starting PHASE Build SSA representation *************** In SsaBuilder::Build() [SsaBuilder] Max block count is 7. ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB03 ( cond ) i hascall gcsafe newobj BB02 [0009] 1 BB01 0.25 [???..???)-> BB05 ( cond ) i gcsafe BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare gcsafe BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj ----------------------------------------------------------------------------------------------------------------------------------------- *************** Exception Handling table is empty [SsaBuilder] Topologically sorted the graph. [SsaBuilder::ComputeImmediateDom] Inside fgBuildDomTree After computing the Dominance Tree: BB01 : BB03 BB02 BB02 : BB05 BB03 : BB06 BB04 *************** In fgLocalVarLiveness() In fgLocalVarLivenessInit Tracked variable (7 out of 8) table: V02 tmp1 [ ref]: refCnt = 4, refCntWtd = 8 V03 tmp2 [ ref]: refCnt = 5, refCntWtd = 6.50 V05 tmp4 [ ref]: refCnt = 3, refCntWtd = 4 V07 tmp6 [ ref]: refCnt = 2, refCntWtd = 4 V04 tmp3 [ long]: refCnt = 3, refCntWtd = 1 V00 loc0 [ ref]: refCnt = 1, refCntWtd = 1 V06 tmp5 [ ref]: refCnt = 3, refCntWtd = 0 *************** In fgPerBlockLocalVarLiveness() BB01 USE(0)={ } + ByrefExposed + GcHeap DEF(4)={V02 V03 V05 V00} + ByrefExposed* + GcHeap* BB02 USE(1)={V03 } + ByrefExposed + GcHeap DEF(1)={ V04} BB03 USE(1)={V05 } + ByrefExposed + GcHeap DEF(1)={ V07} + ByrefExposed* + GcHeap* BB04 USE(0)={} DEF(0)={} BB05 USE(2)={V03 V04} DEF(1)={ V05 } BB06 USE(0)={ } + ByrefExposed + GcHeap DEF(1)={V06} + ByrefExposed* + GcHeap* ** Memory liveness computed, GcHeap states and ByrefExposed states match *************** In fgInterBlockLocalVarLiveness() BB liveness after fgLiveVarAnalysis(): BB01 IN (0)={ } + ByrefExposed + GcHeap OUT(2)={V03 V05} + ByrefExposed + GcHeap BB02 IN (2)={V03 V05 } + ByrefExposed + GcHeap OUT(3)={V03 V05 V04} + ByrefExposed + GcHeap BB03 IN (1)={V05} + ByrefExposed + GcHeap OUT(0)={ } + ByrefExposed + GcHeap BB04 IN (0)={} OUT(0)={} BB05 IN (2)={V03 V04} OUT(0)={ } BB06 IN (0)={} + ByrefExposed + GcHeap OUT(0)={} top level assign removing stmt with no side effects removing useless STMT00002 ( 0x005[--] ... ??? ) N003 ( 5, 4) [000008] -A------R--- * ASG ref N002 ( 3, 2) [000007] D------N---- +--* LCL_VAR ref V00 loc0 N001 ( 1, 1) [000006] ------------ \--* LCL_VAR ref V02 tmp1 from BB01 BB05 - Dead assignment has side effects... N007 ( 18, 10) [000094] -ACXG---R--- * ASG ref N006 ( 1, 1) [000093] D------N---- +--* LCL_VAR ref V05 tmp4 N005 ( 18, 10) [000028] --CXG-?----- \--* CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL N003 ( 3, 2) [000020] ------?----- arg0 in rcx +--* LCL_VAR long V04 tmp3 N004 ( 1, 1) [000027] ------?----- arg1 in rdx \--* LCL_VAR ref V03 tmp2 top level assign Extracted side effects list... N005 ( 18, 10) [000028] --CXG-?----- * CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL N003 ( 3, 2) [000020] ------?----- arg0 in rcx +--* LCL_VAR long V04 tmp3 N004 ( 1, 1) [000027] ------?----- arg1 in rdx \--* LCL_VAR ref V03 tmp2 fgComputeLife modified tree: N005 ( 18, 10) [000028] --CXG-?----- * CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL N003 ( 3, 2) [000020] ------?----- arg0 in rcx +--* LCL_VAR long V04 tmp3 N004 ( 1, 1) [000027] ------?----- arg1 in rdx \--* LCL_VAR ref V03 tmp2 *************** 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..???)-> BB03 ( cond ) i hascall gcsafe newobj BB02 [0009] 1 BB01 0.25 [???..???)-> BB05 ( cond ) i gcsafe BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare gcsafe BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..???) -> BB03 (cond), preds={} succs={BB02,BB03} ***** BB01 STMT00000 ( 0x000[E-] ... 0x005 ) N005 ( 15, 10) [000003] -AC-----R--- * ASG ref N004 ( 1, 1) [000002] D------N---- +--* LCL_VAR ref V02 tmp1 d:2 N003 ( 15, 10) [000001] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST N002 ( 1, 4) [000000] H----------- arg0 in rcx \--* CNS_INT(h) long 0x4000000000420070 method ***** BB01 STMT00003 ( 0x006[E-] ... 0x020 ) N010 ( 27, 15) [000013] -ACXG---R--- * ASG ref N009 ( 1, 1) [000012] D------N---- +--* LCL_VAR ref V03 tmp2 d:2 N008 ( 27, 15) [000010] --CXG------- \--* CALLV vt-ind ref Base.GetFoo N007 ( 6, 5) [000076] n--X-------- control expr \--* IND long N006 ( 4, 3) [000075] ---X---N---- \--* ADD long N004 ( 3, 2) [000073] #--X-------- +--* IND long N003 ( 1, 1) [000072] ------------ | \--* LCL_VAR ref V02 tmp1 u:2 (last use) N005 ( 1, 1) [000074] ------------ \--* CNS_INT int 24 N002 ( 1, 1) [000009] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 u:2 ***** BB01 STMT00017 ( ??? ... ??? ) N003 ( 1, 3) [000092] -A------R--- * ASG ref N002 ( 1, 1) [000091] D------N---- +--* LCL_VAR ref V05 tmp4 d:2 N001 ( 1, 1) [000031] ------?----- \--* LCL_VAR ref V03 tmp2 u:2 ***** BB01 STMT00015 ( ??? ... ??? ) N004 ( 5, 5) [000089] ------------ * JTRUE void N003 ( 3, 3) [000025] J------N---- \--* EQ int N001 ( 1, 1) [000024] ------------ +--* LCL_VAR ref V03 tmp2 u:2 N002 ( 1, 1) [000023] ------------ \--* CNS_INT ref null ------------ BB02 [???..???) -> BB05 (cond), preds={BB01} succs={BB03,BB05} ***** BB02 STMT00016 ( ??? ... ??? ) N009 ( 14, 14) [000090] -A-X-------- * JTRUE void N008 ( 12, 12) [000022] JA-X--?N---- \--* NE int N002 ( 3, 2) [000021] #--X--?----- +--* IND long N001 ( 1, 1) [000014] ------?----- | \--* LCL_VAR ref V03 tmp2 u:2 N007 ( 8, 9) [000019] -A----?----- \--* COMMA long N005 ( 5, 7) [000017] -A----?-R--- +--* ASG long N004 ( 3, 2) [000016] D-----?N---- | +--* LCL_VAR long V04 tmp3 d:2 N003 ( 1, 4) [000011] H-----?----- | \--* CNS_INT(h) long 0x40000000004200a0 class N006 ( 3, 2) [000018] ------?----- \--* LCL_VAR long V04 tmp3 u:2 ------------ BB03 [???..022) -> BB06 (cond), preds={BB01,BB02} succs={BB04,BB06} ***** BB03 STMT00014 ( ??? ... ??? ) N006 ( 4, 4) [000067] -A-XG---R--- * ASG ref N005 ( 1, 1) [000066] D------N---- +--* LCL_VAR ref V07 tmp6 d:2 N004 ( 4, 4) [000037] ---XG------- \--* IND ref N003 ( 2, 2) [000080] -------N---- \--* ADD byref N001 ( 1, 1) [000036] ------------ +--* LCL_VAR ref V05 tmp4 u:2 (last use) N002 ( 1, 1) [000079] ------------ \--* CNS_INT long 8 field offset Fseq[State] ***** BB03 STMT00006 ( ??? ... ??? ) N008 ( 20, 16) [000044] --CXG------- * JTRUE void N007 ( 18, 14) [000065] J-CXG--N---- \--* EQ int N005 ( 16, 12) [000061] --CXG------- +--* CALL int System.String.Equals N003 ( 1, 1) [000059] ------------ arg0 in rcx | +--* LCL_VAR ref V07 tmp6 u:2 (last use) N004 ( 1, 4) [000081] H----------- arg1 in rdx | \--* CNS_INT(h) ref 0x420148 [ICON_STR_HDL] N006 ( 1, 1) [000064] ------------ \--* CNS_INT int 0 ------------ BB04 [028..029) (return), preds={BB03} succs={} ***** BB04 STMT00007 ( 0x028[E-] ... 0x028 ) N001 ( 0, 0) [000045] ------------ * RETURN void ------------ BB05 [???..???) (throw), preds={BB02} succs={} ***** BB05 STMT00018 ( ??? ... ??? ) N005 ( 18, 10) [000028] --CXG-?----- * CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL N003 ( 3, 2) [000020] ------?----- arg0 in rcx +--* LCL_VAR long V04 tmp3 u:2 (last use) N004 ( 1, 1) [000027] ------?----- arg1 in rdx \--* LCL_VAR ref V03 tmp2 u:2 (last use) ------------ BB06 [022..028) (throw), preds={BB03} succs={} ***** BB06 STMT00008 ( 0x022[E-] ... 0x027 ) N005 ( 19, 13) [000049] -AC-----R--- * ASG ref N004 ( 3, 2) [000048] D------N---- +--* LCL_VAR ref V06 tmp5 d:2 N003 ( 15, 10) [000047] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST N002 ( 1, 4) [000046] H----------- arg0 in rcx \--* CNS_INT(h) long 0x40000000004200e8 token ***** BB06 STMT00009 ( ??? ... ??? ) N003 ( 17, 9) [000051] --CXG------- * CALL void System.Exception..ctor N002 ( 3, 2) [000050] ------------ this in rcx \--* LCL_VAR ref V06 tmp5 u:2 ***** BB06 STMT00010 ( 0x027[--] ... ??? ) N003 ( 17, 8) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW N002 ( 3, 2) [000052] ------------ arg0 in rcx \--* LCL_VAR ref V06 tmp5 u:2 (last use) ------------------------------------------------------------------------------------------------------------------- *************** 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..???)-> BB03 ( cond ) i hascall gcsafe newobj BB02 [0009] 1 BB01 0.25 [???..???)-> BB05 ( cond ) i gcsafe BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare gcsafe BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..???) -> BB03 (cond), preds={} succs={BB02,BB03} ***** BB01 STMT00000 ( 0x000[E-] ... 0x005 ) N005 ( 15, 10) [000003] -AC-----R--- * ASG ref N004 ( 1, 1) [000002] D------N---- +--* LCL_VAR ref V02 tmp1 d:2 N003 ( 15, 10) [000001] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST N002 ( 1, 4) [000000] H----------- arg0 in rcx \--* CNS_INT(h) long 0x4000000000420070 method ***** BB01 STMT00003 ( 0x006[E-] ... 0x020 ) N010 ( 27, 15) [000013] -ACXG---R--- * ASG ref N009 ( 1, 1) [000012] D------N---- +--* LCL_VAR ref V03 tmp2 d:2 N008 ( 27, 15) [000010] --CXG------- \--* CALLV vt-ind ref Base.GetFoo N007 ( 6, 5) [000076] n--X-------- control expr \--* IND long N006 ( 4, 3) [000075] ---X---N---- \--* ADD long N004 ( 3, 2) [000073] #--X-------- +--* IND long N003 ( 1, 1) [000072] ------------ | \--* LCL_VAR ref V02 tmp1 u:2 (last use) N005 ( 1, 1) [000074] ------------ \--* CNS_INT int 24 N002 ( 1, 1) [000009] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 u:2 ***** BB01 STMT00017 ( ??? ... ??? ) N003 ( 1, 3) [000092] -A------R--- * ASG ref N002 ( 1, 1) [000091] D------N---- +--* LCL_VAR ref V05 tmp4 d:2 N001 ( 1, 1) [000031] ------?----- \--* LCL_VAR ref V03 tmp2 u:2 ***** BB01 STMT00015 ( ??? ... ??? ) N004 ( 5, 5) [000089] ------------ * JTRUE void N003 ( 3, 3) [000025] J------N---- \--* EQ int N001 ( 1, 1) [000024] ------------ +--* LCL_VAR ref V03 tmp2 u:2 N002 ( 1, 1) [000023] ------------ \--* CNS_INT ref null ------------ BB02 [???..???) -> BB05 (cond), preds={BB01} succs={BB03,BB05} ***** BB02 STMT00016 ( ??? ... ??? ) N009 ( 14, 14) [000090] -A-X-------- * JTRUE void N008 ( 12, 12) [000022] JA-X--?N---- \--* NE int N002 ( 3, 2) [000021] #--X--?----- +--* IND long N001 ( 1, 1) [000014] ------?----- | \--* LCL_VAR ref V03 tmp2 u:2 N007 ( 8, 9) [000019] -A----?----- \--* COMMA long N005 ( 5, 7) [000017] -A----?-R--- +--* ASG long N004 ( 3, 2) [000016] D-----?N---- | +--* LCL_VAR long V04 tmp3 d:2 N003 ( 1, 4) [000011] H-----?----- | \--* CNS_INT(h) long 0x40000000004200a0 class N006 ( 3, 2) [000018] ------?----- \--* LCL_VAR long V04 tmp3 u:2 ------------ BB03 [???..022) -> BB06 (cond), preds={BB01,BB02} succs={BB04,BB06} ***** BB03 STMT00014 ( ??? ... ??? ) N006 ( 4, 4) [000067] -A-XG---R--- * ASG ref N005 ( 1, 1) [000066] D------N---- +--* LCL_VAR ref V07 tmp6 d:2 N004 ( 4, 4) [000037] ---XG------- \--* IND ref N003 ( 2, 2) [000080] -------N---- \--* ADD byref N001 ( 1, 1) [000036] ------------ +--* LCL_VAR ref V05 tmp4 u:2 (last use) N002 ( 1, 1) [000079] ------------ \--* CNS_INT long 8 field offset Fseq[State] ***** BB03 STMT00006 ( ??? ... ??? ) N008 ( 20, 16) [000044] --CXG------- * JTRUE void N007 ( 18, 14) [000065] J-CXG--N---- \--* EQ int N005 ( 16, 12) [000061] --CXG------- +--* CALL int System.String.Equals N003 ( 1, 1) [000059] ------------ arg0 in rcx | +--* LCL_VAR ref V07 tmp6 u:2 (last use) N004 ( 1, 4) [000081] H----------- arg1 in rdx | \--* CNS_INT(h) ref 0x420148 [ICON_STR_HDL] N006 ( 1, 1) [000064] ------------ \--* CNS_INT int 0 ------------ BB04 [028..029) (return), preds={BB03} succs={} ***** BB04 STMT00007 ( 0x028[E-] ... 0x028 ) N001 ( 0, 0) [000045] ------------ * RETURN void ------------ BB05 [???..???) (throw), preds={BB02} succs={} ***** BB05 STMT00018 ( ??? ... ??? ) N005 ( 18, 10) [000028] --CXG-?----- * CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL N003 ( 3, 2) [000020] ------?----- arg0 in rcx +--* LCL_VAR long V04 tmp3 u:2 (last use) N004 ( 1, 1) [000027] ------?----- arg1 in rdx \--* LCL_VAR ref V03 tmp2 u:2 (last use) ------------ BB06 [022..028) (throw), preds={BB03} succs={} ***** BB06 STMT00008 ( 0x022[E-] ... 0x027 ) N005 ( 19, 13) [000049] -AC-----R--- * ASG ref N004 ( 3, 2) [000048] D------N---- +--* LCL_VAR ref V06 tmp5 d:2 N003 ( 15, 10) [000047] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST N002 ( 1, 4) [000046] H----------- arg0 in rcx \--* CNS_INT(h) long 0x40000000004200e8 token ***** BB06 STMT00009 ( ??? ... ??? ) N003 ( 17, 9) [000051] --CXG------- * CALL void System.Exception..ctor N002 ( 3, 2) [000050] ------------ this in rcx \--* LCL_VAR ref V06 tmp5 u:2 ***** BB06 STMT00010 ( 0x027[--] ... ??? ) N003 ( 17, 8) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW N002 ( 3, 2) [000052] ------------ arg0 in rcx \--* LCL_VAR ref V06 tmp5 u:2 (last use) ------------------------------------------------------------------------------------------------------------------- *************** 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..???)-> BB03 ( cond ) i hascall gcsafe newobj BB02 [0009] 1 BB01 0.25 [???..???)-> BB05 ( cond ) i gcsafe BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare gcsafe BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..???) -> BB03 (cond), preds={} succs={BB02,BB03} ***** BB01 STMT00000 ( 0x000[E-] ... 0x005 ) N005 ( 15, 10) [000003] -AC-----R--- * ASG ref N004 ( 1, 1) [000002] D------N---- +--* LCL_VAR ref V02 tmp1 d:2 N003 ( 15, 10) [000001] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST N002 ( 1, 4) [000000] H----------- arg0 in rcx \--* CNS_INT(h) long 0x4000000000420070 method ***** BB01 STMT00003 ( 0x006[E-] ... 0x020 ) N010 ( 27, 15) [000013] -ACXG---R--- * ASG ref N009 ( 1, 1) [000012] D------N---- +--* LCL_VAR ref V03 tmp2 d:2 N008 ( 27, 15) [000010] --CXG------- \--* CALLV vt-ind ref Base.GetFoo N007 ( 6, 5) [000076] n--X-------- control expr \--* IND long N006 ( 4, 3) [000075] ---X---N---- \--* ADD long N004 ( 3, 2) [000073] #--X-------- +--* IND long N003 ( 1, 1) [000072] ------------ | \--* LCL_VAR ref V02 tmp1 u:2 (last use) N005 ( 1, 1) [000074] ------------ \--* CNS_INT int 24 N002 ( 1, 1) [000009] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 u:2 ***** BB01 STMT00017 ( ??? ... ??? ) N003 ( 1, 3) [000092] -A------R--- * ASG ref N002 ( 1, 1) [000091] D------N---- +--* LCL_VAR ref V05 tmp4 d:2 N001 ( 1, 1) [000031] ------?----- \--* LCL_VAR ref V03 tmp2 u:2 ***** BB01 STMT00015 ( ??? ... ??? ) N004 ( 5, 5) [000089] ------------ * JTRUE void N003 ( 3, 3) [000025] J------N---- \--* EQ int N001 ( 1, 1) [000024] ------------ +--* LCL_VAR ref V03 tmp2 u:2 N002 ( 1, 1) [000023] ------------ \--* CNS_INT ref null ------------ BB02 [???..???) -> BB05 (cond), preds={BB01} succs={BB03,BB05} ***** BB02 STMT00016 ( ??? ... ??? ) N009 ( 14, 14) [000090] -A-X-------- * JTRUE void N008 ( 12, 12) [000022] JA-X--?N---- \--* NE int N002 ( 3, 2) [000021] #--X--?----- +--* IND long N001 ( 1, 1) [000014] ------?----- | \--* LCL_VAR ref V03 tmp2 u:2 N007 ( 8, 9) [000019] -A----?----- \--* COMMA long N005 ( 5, 7) [000017] -A----?-R--- +--* ASG long N004 ( 3, 2) [000016] D-----?N---- | +--* LCL_VAR long V04 tmp3 d:2 N003 ( 1, 4) [000011] H-----?----- | \--* CNS_INT(h) long 0x40000000004200a0 class N006 ( 3, 2) [000018] ------?----- \--* LCL_VAR long V04 tmp3 u:2 ------------ BB03 [???..022) -> BB06 (cond), preds={BB01,BB02} succs={BB04,BB06} ***** BB03 STMT00014 ( ??? ... ??? ) N006 ( 4, 4) [000067] -A-XG---R--- * ASG ref N005 ( 1, 1) [000066] D------N---- +--* LCL_VAR ref V07 tmp6 d:2 N004 ( 4, 4) [000037] ---XG------- \--* IND ref N003 ( 2, 2) [000080] -------N---- \--* ADD byref N001 ( 1, 1) [000036] ------------ +--* LCL_VAR ref V05 tmp4 u:2 (last use) N002 ( 1, 1) [000079] ------------ \--* CNS_INT long 8 field offset Fseq[State] ***** BB03 STMT00006 ( ??? ... ??? ) N008 ( 20, 16) [000044] --CXG------- * JTRUE void N007 ( 18, 14) [000065] J-CXG--N---- \--* EQ int N005 ( 16, 12) [000061] --CXG------- +--* CALL int System.String.Equals N003 ( 1, 1) [000059] ------------ arg0 in rcx | +--* LCL_VAR ref V07 tmp6 u:2 (last use) N004 ( 1, 4) [000081] H----------- arg1 in rdx | \--* CNS_INT(h) ref 0x420148 [ICON_STR_HDL] N006 ( 1, 1) [000064] ------------ \--* CNS_INT int 0 ------------ BB04 [028..029) (return), preds={BB03} succs={} ***** BB04 STMT00007 ( 0x028[E-] ... 0x028 ) N001 ( 0, 0) [000045] ------------ * RETURN void ------------ BB05 [???..???) (throw), preds={BB02} succs={} ***** BB05 STMT00018 ( ??? ... ??? ) N005 ( 18, 10) [000028] --CXG-?----- * CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL N003 ( 3, 2) [000020] ------?----- arg0 in rcx +--* LCL_VAR long V04 tmp3 u:2 (last use) N004 ( 1, 1) [000027] ------?----- arg1 in rdx \--* LCL_VAR ref V03 tmp2 u:2 (last use) ------------ BB06 [022..028) (throw), preds={BB03} succs={} ***** BB06 STMT00008 ( 0x022[E-] ... 0x027 ) N005 ( 19, 13) [000049] -AC-----R--- * ASG ref N004 ( 3, 2) [000048] D------N---- +--* LCL_VAR ref V06 tmp5 d:2 N003 ( 15, 10) [000047] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST N002 ( 1, 4) [000046] H----------- arg0 in rcx \--* CNS_INT(h) long 0x40000000004200e8 token ***** BB06 STMT00009 ( ??? ... ??? ) N003 ( 17, 9) [000051] --CXG------- * CALL void System.Exception..ctor N002 ( 3, 2) [000050] ------------ this in rcx \--* LCL_VAR ref V06 tmp5 u:2 ***** BB06 STMT00010 ( 0x027[--] ... ??? ) N003 ( 17, 8) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW N002 ( 3, 2) [000052] ------------ arg0 in rcx \--* LCL_VAR ref V06 tmp5 u:2 (last use) ------------------------------------------------------------------------------------------------------------------- *************** Finishing PHASE Early Value Propagation *************** Starting PHASE Do value numbering *************** In fgValueNumber() Memory Initial Value in BB01 is: $c0 The SSA definition for ByrefExposed (#1) at start of BB01 is $c0 {InitVal($80)} The SSA definition for GcHeap (#1) at start of BB01 is $c0 {InitVal($80)} ***** BB01, STMT00000(before) N005 ( 15, 10) [000003] -AC-----R--- * ASG ref N004 ( 1, 1) [000002] D------N---- +--* LCL_VAR ref V02 tmp1 d:2 N003 ( 15, 10) [000001] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST N002 ( 1, 4) [000000] H----------- arg0 in rcx \--* CNS_INT(h) long 0x4000000000420070 method N001 [000070] ARGPLACE => $100 {MemOpaque:NotInLoop} N002 [000000] CNS_INT(h) 0x4000000000420070 method => $140 {Hnd const: 0x4000000000420070} VN of ARGPLACE tree [000070] updated to $140 {Hnd const: 0x4000000000420070} N003 [000001] CALL help => $180 {JitNew($140, $c1)} N004 [000002] LCL_VAR V02 tmp1 d:2 => $180 {JitNew($140, $c1)} N005 [000003] ASG => $180 {JitNew($140, $c1)} ***** BB01, STMT00000(after) N005 ( 15, 10) [000003] -AC-----R--- * ASG ref $180 N004 ( 1, 1) [000002] D------N---- +--* LCL_VAR ref V02 tmp1 d:2 $180 N003 ( 15, 10) [000001] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST $180 N002 ( 1, 4) [000000] H----------- arg0 in rcx \--* CNS_INT(h) long 0x4000000000420070 method $140 --------- ***** BB01, STMT00003(before) N010 ( 27, 15) [000013] -ACXG---R--- * ASG ref N009 ( 1, 1) [000012] D------N---- +--* LCL_VAR ref V03 tmp2 d:2 N008 ( 27, 15) [000010] --CXG------- \--* CALLV vt-ind ref Base.GetFoo N007 ( 6, 5) [000076] n--X-------- control expr \--* IND long N006 ( 4, 3) [000075] ---X---N---- \--* ADD long N004 ( 3, 2) [000073] #--X-------- +--* IND long N003 ( 1, 1) [000072] ------------ | \--* LCL_VAR ref V02 tmp1 u:2 (last use) N005 ( 1, 1) [000074] ------------ \--* CNS_INT int 24 N002 ( 1, 1) [000009] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 u:2 N001 [000071] ARGPLACE => $c3 {MemOpaque:NotInLoop} N002 [000009] LCL_VAR V02 tmp1 u:2 => $180 {JitNew($140, $c1)} N003 [000072] LCL_VAR V02 tmp1 u:2 (last use) => $180 {JitNew($140, $c1)} N004 [000073] IND => $1c0 {norm=$140 {Hnd const: 0x4000000000420070}, exc=$181 {NullPtrExc($180)}} N005 [000074] CNS_INT 24 => $81 {IntCns 24} N006 [000075] ADD => $1c1 {norm=$41 {LngCns: 0x4000000000420088}, exc=$181 {NullPtrExc($180)}} N007 [000076] IND => fgCurMemoryVN[GcHeap] assigned for CALL at [000010] to VN: $c6. N008 [000010] CALLV vt-ind => $c5 {MemOpaque:NotInLoop} N009 [000012] LCL_VAR V03 tmp2 d:2 => $c5 {MemOpaque:NotInLoop} N010 [000013] ASG => $c5 {MemOpaque:NotInLoop} ***** BB01, STMT00003(after) N010 ( 27, 15) [000013] -ACXG---R--- * ASG ref $c5 N009 ( 1, 1) [000012] D------N---- +--* LCL_VAR ref V03 tmp2 d:2 $c5 N008 ( 27, 15) [000010] --CXG------- \--* CALLV vt-ind ref Base.GetFoo $c5 N007 ( 6, 5) [000076] n--X-------- control expr \--* IND long N006 ( 4, 3) [000075] ---X---N---- \--* ADD long $1c1 N004 ( 3, 2) [000073] #--X-------- +--* IND long $1c0 N003 ( 1, 1) [000072] ------------ | \--* LCL_VAR ref V02 tmp1 u:2 (last use) $180 N005 ( 1, 1) [000074] ------------ \--* CNS_INT int 24 $81 N002 ( 1, 1) [000009] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 u:2 $180 --------- ***** BB01, STMT00017(before) N003 ( 1, 3) [000092] -A------R--- * ASG ref N002 ( 1, 1) [000091] D------N---- +--* LCL_VAR ref V05 tmp4 d:2 N001 ( 1, 1) [000031] ------?----- \--* LCL_VAR ref V03 tmp2 u:2 N001 [000031] LCL_VAR V03 tmp2 u:2 => $c5 {MemOpaque:NotInLoop} N002 [000091] LCL_VAR V05 tmp4 d:2 => $c5 {MemOpaque:NotInLoop} N003 [000092] ASG => $c5 {MemOpaque:NotInLoop} ***** BB01, STMT00017(after) N003 ( 1, 3) [000092] -A------R--- * ASG ref $c5 N002 ( 1, 1) [000091] D------N---- +--* LCL_VAR ref V05 tmp4 d:2 $c5 N001 ( 1, 1) [000031] ------?----- \--* LCL_VAR ref V03 tmp2 u:2 $c5 --------- ***** BB01, STMT00015(before) N004 ( 5, 5) [000089] ------------ * JTRUE void N003 ( 3, 3) [000025] J------N---- \--* EQ int N001 ( 1, 1) [000024] ------------ +--* LCL_VAR ref V03 tmp2 u:2 N002 ( 1, 1) [000023] ------------ \--* CNS_INT ref null N001 [000024] LCL_VAR V03 tmp2 u:2 => $c5 {MemOpaque:NotInLoop} N002 [000023] CNS_INT null => $VN.Null N003 [000025] EQ => $240 {EQ($c5, $0)} ***** BB01, STMT00015(after) N004 ( 5, 5) [000089] ------------ * JTRUE void N003 ( 3, 3) [000025] J------N---- \--* EQ int $240 N001 ( 1, 1) [000024] ------------ +--* LCL_VAR ref V03 tmp2 u:2 $c5 N002 ( 1, 1) [000023] ------------ \--* CNS_INT ref null $VN.Null finish(BB01). Succ(BB02). Not yet completed. All preds complete, adding to allDone. Succ(BB03). Not yet completed. Not all preds complete Adding to notallDone, if necessary... Was necessary. The SSA definition for ByrefExposed (#2) at start of BB02 is $c6 {MemOpaque:NotInLoop} The SSA definition for GcHeap (#2) at start of BB02 is $c6 {MemOpaque:NotInLoop} ***** BB02, STMT00016(before) N009 ( 14, 14) [000090] -A-X-------- * JTRUE void N008 ( 12, 12) [000022] JA-X--?N---- \--* NE int N002 ( 3, 2) [000021] #--X--?----- +--* IND long N001 ( 1, 1) [000014] ------?----- | \--* LCL_VAR ref V03 tmp2 u:2 N007 ( 8, 9) [000019] -A----?----- \--* COMMA long N005 ( 5, 7) [000017] -A----?-R--- +--* ASG long N004 ( 3, 2) [000016] D-----?N---- | +--* LCL_VAR long V04 tmp3 d:2 N003 ( 1, 4) [000011] H-----?----- | \--* CNS_INT(h) long 0x40000000004200a0 class N006 ( 3, 2) [000018] ------?----- \--* LCL_VAR long V04 tmp3 u:2 N001 [000014] LCL_VAR V03 tmp2 u:2 => $c5 {MemOpaque:NotInLoop} VNForMapSelect($1, $c5):ref returns $182 {$VN.ReadOnlyHeap[$c5]} VNForMapSelect($1, $c5):ref returns $182 {$VN.ReadOnlyHeap[$c5]} N002 [000021] IND => $184 {norm=$182 {$VN.ReadOnlyHeap[$c5]}, exc=$183 {NullPtrExc($c5)}} N003 [000011] CNS_INT(h) 0x40000000004200a0 class => $141 {Hnd const: 0x40000000004200A0} N004 [000016] LCL_VAR V04 tmp3 d:2 => $141 {Hnd const: 0x40000000004200A0} N005 [000017] ASG => $141 {Hnd const: 0x40000000004200A0} N006 [000018] LCL_VAR V04 tmp3 u:2 => $141 {Hnd const: 0x40000000004200A0} N007 [000019] COMMA => $141 {Hnd const: 0x40000000004200A0} N008 [000022] NE => $242 {norm=$241 {NE($182, $141)}, exc=$183 {NullPtrExc($c5)}} ***** BB02, STMT00016(after) N009 ( 14, 14) [000090] -A-X-------- * JTRUE void N008 ( 12, 12) [000022] JA-X--?N---- \--* NE int $242 N002 ( 3, 2) [000021] #--X--?----- +--* IND long $184 N001 ( 1, 1) [000014] ------?----- | \--* LCL_VAR ref V03 tmp2 u:2 $c5 N007 ( 8, 9) [000019] -A----?----- \--* COMMA long $141 N005 ( 5, 7) [000017] -A----?-R--- +--* ASG long $141 N004 ( 3, 2) [000016] D-----?N---- | +--* LCL_VAR long V04 tmp3 d:2 $141 N003 ( 1, 4) [000011] H-----?----- | \--* CNS_INT(h) long 0x40000000004200a0 class $141 N006 ( 3, 2) [000018] ------?----- \--* LCL_VAR long V04 tmp3 u:2 $141 finish(BB02). Succ(BB03). Not yet completed. All preds complete, adding to allDone. Succ(BB05). Not yet completed. All preds complete, adding to allDone. The SSA definition for ByrefExposed (#2) at start of BB05 is $c6 {MemOpaque:NotInLoop} The SSA definition for GcHeap (#2) at start of BB05 is $c6 {MemOpaque:NotInLoop} ***** BB05, STMT00018(before) N005 ( 18, 10) [000028] --CXG-?----- * CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL N003 ( 3, 2) [000020] ------?----- arg0 in rcx +--* LCL_VAR long V04 tmp3 u:2 (last use) N004 ( 1, 1) [000027] ------?----- arg1 in rdx \--* LCL_VAR ref V03 tmp2 u:2 (last use) N001 [000077] ARGPLACE => $103 {MemOpaque:NotInLoop} N002 [000078] ARGPLACE => $ca {MemOpaque:NotInLoop} N003 [000020] LCL_VAR V04 tmp3 u:2 (last use) => $141 {Hnd const: 0x40000000004200A0} N004 [000027] LCL_VAR V03 tmp2 u:2 (last use) => $c5 {MemOpaque:NotInLoop} VN of ARGPLACE tree [000077] updated to $141 {Hnd const: 0x40000000004200A0} VN of ARGPLACE tree [000078] updated to $c5 {MemOpaque:NotInLoop} N005 [000028] CALL help => $18a {norm=$c5 {MemOpaque:NotInLoop}, exc=$189( {InvalidCastExc($c5, $141)}, {HelperMultipleExc()})} ***** BB05, STMT00018(after) N005 ( 18, 10) [000028] --CXG-?----- * CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL $18a N003 ( 3, 2) [000020] ------?----- arg0 in rcx +--* LCL_VAR long V04 tmp3 u:2 (last use) $141 N004 ( 1, 1) [000027] ------?----- arg1 in rdx \--* LCL_VAR ref V03 tmp2 u:2 (last use) $c5 finish(BB05). The SSA definition for ByrefExposed (#2) at start of BB03 is $c6 {MemOpaque:NotInLoop} The SSA definition for GcHeap (#2) at start of BB03 is $c6 {MemOpaque:NotInLoop} ***** BB03, STMT00014(before) N006 ( 4, 4) [000067] -A-XG---R--- * ASG ref N005 ( 1, 1) [000066] D------N---- +--* LCL_VAR ref V07 tmp6 d:2 N004 ( 4, 4) [000037] ---XG------- \--* IND ref N003 ( 2, 2) [000080] -------N---- \--* ADD byref N001 ( 1, 1) [000036] ------------ +--* LCL_VAR ref V05 tmp4 u:2 (last use) N002 ( 1, 1) [000079] ------------ \--* CNS_INT long 8 field offset Fseq[State] N001 [000036] LCL_VAR V05 tmp4 u:2 (last use) => $c5 {MemOpaque:NotInLoop} N002 [000079] CNS_INT 8 field offset Fseq[State] => $42 {LngCns: 8} N003 [000080] ADD => $2c0 {ADD($42, $c5)} VNForHandle(State) is $142, fieldType is ref VNForMapSelect($c6, $142):ref returns $18b {$c6[$142]} VNForMapSelect($18b, $c5):ref returns $18c {$18b[$c5]} N004 [000037] IND => N005 [000066] LCL_VAR V07 tmp6 d:2 => N006 [000067] ASG => ***** BB03, STMT00014(after) N006 ( 4, 4) [000067] -A-XG---R--- * ASG ref N005 ( 1, 1) [000066] D------N---- +--* LCL_VAR ref V07 tmp6 d:2 N004 ( 4, 4) [000037] ---XG------- \--* IND ref N003 ( 2, 2) [000080] -------N---- \--* ADD byref $2c0 N001 ( 1, 1) [000036] ------------ +--* LCL_VAR ref V05 tmp4 u:2 (last use) $c5 N002 ( 1, 1) [000079] ------------ \--* CNS_INT long 8 field offset Fseq[State] $42 --------- ***** BB03, STMT00006(before) N008 ( 20, 16) [000044] --CXG------- * JTRUE void N007 ( 18, 14) [000065] J-CXG--N---- \--* EQ int N005 ( 16, 12) [000061] --CXG------- +--* CALL int System.String.Equals N003 ( 1, 1) [000059] ------------ arg0 in rcx | +--* LCL_VAR ref V07 tmp6 u:2 (last use) N004 ( 1, 4) [000081] H----------- arg1 in rdx | \--* CNS_INT(h) ref 0x420148 [ICON_STR_HDL] N006 ( 1, 1) [000064] ------------ \--* CNS_INT int 0 N001 [000082] ARGPLACE => $cd {MemOpaque:NotInLoop} N002 [000083] ARGPLACE => $ce {MemOpaque:NotInLoop} N003 [000059] LCL_VAR V07 tmp6 u:2 (last use) => N004 [000081] CNS_INT(h) 0x420148 [ICON_STR_HDL] => $143 {Hnd const: 0x4000000000420148} VN of ARGPLACE tree [000082] updated to VN of ARGPLACE tree [000083] updated to $143 {Hnd const: 0x4000000000420148} fgCurMemoryVN[GcHeap] assigned for CALL at [000061] to VN: $cf. N005 [000061] CALL => $300 {MemOpaque:NotInLoop} N006 [000064] CNS_INT 0 => $83 {IntCns 0} N007 [000065] EQ => $243 {EQ($300, $83)} ***** BB03, STMT00006(after) N008 ( 20, 16) [000044] --CXG------- * JTRUE void N007 ( 18, 14) [000065] J-CXG--N---- \--* EQ int $243 N005 ( 16, 12) [000061] --CXG------- +--* CALL int System.String.Equals $300 N003 ( 1, 1) [000059] ------------ arg0 in rcx | +--* LCL_VAR ref V07 tmp6 u:2 (last use) N004 ( 1, 4) [000081] H----------- arg1 in rdx | \--* CNS_INT(h) ref 0x420148 [ICON_STR_HDL] $143 N006 ( 1, 1) [000064] ------------ \--* CNS_INT int 0 $83 finish(BB03). Succ(BB04). Not yet completed. All preds complete, adding to allDone. Succ(BB06). Not yet completed. All preds complete, adding to allDone. The SSA definition for ByrefExposed (#3) at start of BB06 is $cf {MemOpaque:NotInLoop} The SSA definition for GcHeap (#3) at start of BB06 is $cf {MemOpaque:NotInLoop} ***** BB06, STMT00008(before) N005 ( 19, 13) [000049] -AC-----R--- * ASG ref N004 ( 3, 2) [000048] D------N---- +--* LCL_VAR ref V06 tmp5 d:2 N003 ( 15, 10) [000047] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST N002 ( 1, 4) [000046] H----------- arg0 in rcx \--* CNS_INT(h) long 0x40000000004200e8 token N001 [000086] ARGPLACE => $104 {MemOpaque:NotInLoop} N002 [000046] CNS_INT(h) 0x40000000004200e8 token => $144 {Hnd const: 0x40000000004200E8} VN of ARGPLACE tree [000086] updated to $144 {Hnd const: 0x40000000004200E8} N003 [000047] CALL help => $18f {JitNew($144, $d0)} N004 [000048] LCL_VAR V06 tmp5 d:2 => $18f {JitNew($144, $d0)} N005 [000049] ASG => $18f {JitNew($144, $d0)} ***** BB06, STMT00008(after) N005 ( 19, 13) [000049] -AC-----R--- * ASG ref $18f N004 ( 3, 2) [000048] D------N---- +--* LCL_VAR ref V06 tmp5 d:2 $18f N003 ( 15, 10) [000047] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST $18f N002 ( 1, 4) [000046] H----------- arg0 in rcx \--* CNS_INT(h) long 0x40000000004200e8 token $144 --------- ***** BB06, STMT00009(before) N003 ( 17, 9) [000051] --CXG------- * CALL void System.Exception..ctor N002 ( 3, 2) [000050] ------------ this in rcx \--* LCL_VAR ref V06 tmp5 u:2 N001 [000087] ARGPLACE => $d2 {MemOpaque:NotInLoop} N002 [000050] LCL_VAR V06 tmp5 u:2 => $18f {JitNew($144, $d0)} fgCurMemoryVN[GcHeap] assigned for CALL at [000051] to VN: $d3. N003 [000051] CALL => $VN.Void ***** BB06, STMT00009(after) N003 ( 17, 9) [000051] --CXG------- * CALL void System.Exception..ctor $VN.Void N002 ( 3, 2) [000050] ------------ this in rcx \--* LCL_VAR ref V06 tmp5 u:2 $18f --------- ***** BB06, STMT00010(before) N003 ( 17, 8) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW N002 ( 3, 2) [000052] ------------ arg0 in rcx \--* LCL_VAR ref V06 tmp5 u:2 (last use) N001 [000088] ARGPLACE => $d4 {MemOpaque:NotInLoop} N002 [000052] LCL_VAR V06 tmp5 u:2 (last use) => $18f {JitNew($144, $d0)} VN of ARGPLACE tree [000088] updated to $18f {JitNew($144, $d0)} N003 [000053] CALL help => $190 {norm=$2 {2}, exc=$185 {HelperMultipleExc()}} ***** BB06, STMT00010(after) N003 ( 17, 8) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW $190 N002 ( 3, 2) [000052] ------------ arg0 in rcx \--* LCL_VAR ref V06 tmp5 u:2 (last use) $18f finish(BB06). The SSA definition for ByrefExposed (#3) at start of BB04 is $cf {MemOpaque:NotInLoop} The SSA definition for GcHeap (#3) at start of BB04 is $cf {MemOpaque:NotInLoop} ***** BB04, STMT00007(before) N001 ( 0, 0) [000045] ------------ * RETURN void N001 [000045] RETURN => $340 {MemOpaque:NotInLoop} ***** BB04, STMT00007(after) N001 ( 0, 0) [000045] ------------ * RETURN void $340 finish(BB04). *************** Finishing PHASE Do value numbering *************** Starting PHASE Hoist loop code No loops; no hoisting *************** Finishing PHASE Hoist loop code *************** Starting PHASE VN based copy prop *************** In optVnCopyProp() Copy Assertion for BB01 curSsaName stack: { } Live vars: {} => {V02} Live vars: {V02} => {} Live vars: {} => {V03} Live vars: {V03} => {V03 V05} VN based copy assertion for [000024] V03 $c5 by [000091] V05 $c5. N001 ( 1, 1) [000024] ------------ * LCL_VAR ref V03 tmp2 u:2 $c5 copy propagated to: N001 ( 1, 1) [000024] ------------ * LCL_VAR ref V05 tmp4 u:2 $c5 Copy Assertion for BB03 curSsaName stack: { 2-[000002]:V02 3-[000012]:V03 5-[000091]:V05 } Live vars: {V05} => {} Live vars: {} => {V07} Live vars: {V07} => {} Copy Assertion for BB06 curSsaName stack: { 2-[000002]:V02 3-[000012]:V03 5-[000091]:V05 7-[000066]:V07 } Live vars: {} => {V06} Live vars: {V06} => {} Copy Assertion for BB04 curSsaName stack: { 2-[000002]:V02 3-[000012]:V03 5-[000091]:V05 7-[000066]:V07 } Copy Assertion for BB02 curSsaName stack: { 2-[000002]:V02 3-[000012]:V03 5-[000091]:V05 } VN based copy assertion for [000014] V03 $c5 by [000091] V05 $c5. N001 ( 1, 1) [000014] ------?----- * LCL_VAR ref V03 tmp2 u:2 $c5 copy propagated to: N001 ( 1, 1) [000014] ------?----- * LCL_VAR ref V05 tmp4 u:2 $c5 Live vars: {V03 V05} => {V03 V04 V05} Copy Assertion for BB05 curSsaName stack: { 2-[000002]:V02 3-[000012]:V03 4-[000016]:V04 5-[000091]:V05 } Live vars: {V03 V04} => {V03} Live vars: {V03} => {} *************** Finishing PHASE VN based copy prop *************** Starting PHASE Redundant branch opts ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB03 ( cond ) i hascall gcsafe newobj BB02 [0009] 1 BB01 0.25 [???..???)-> BB05 ( cond ) i gcsafe BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare gcsafe BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj ----------------------------------------------------------------------------------------------------------------------------------------- -- no, no prior stmt optRedundantRelop in BB01; jump tree is N004 ( 5, 5) [000089] ------------ * JTRUE void N003 ( 3, 3) [000025] J------N---- \--* EQ int $240 N001 ( 1, 1) [000024] ------------ +--* LCL_VAR ref V05 tmp4 u:2 $c5 N002 ( 1, 1) [000023] ------------ \--* CNS_INT ref null $VN.Null ... checking previous tree N003 ( 1, 3) [000092] -A------R--- * ASG ref $c5 N002 ( 1, 1) [000091] D------N---- +--* LCL_VAR ref V05 tmp4 d:2 $c5 N001 ( 1, 1) [000031] ------?----- \--* LCL_VAR ref V03 tmp2 u:2 $c5 -- prev tree VN is not related ... checking previous tree N010 ( 27, 15) [000013] -ACXG---R--- * ASG ref $c5 N009 ( 1, 1) [000012] D------N---- +--* LCL_VAR ref V03 tmp2 d:2 $c5 N008 ( 27, 15) [000010] --CXG------- \--* CALLV vt-ind ref Base.GetFoo $c5 N007 ( 6, 5) [000076] n--X-------- control expr \--* IND long N006 ( 4, 3) [000075] ---X---N---- \--* ADD long $1c1 N004 ( 3, 2) [000073] #--X-------- +--* IND long $1c0 N003 ( 1, 1) [000072] ------------ | \--* LCL_VAR ref V02 tmp1 u:2 (last use) $180 N005 ( 1, 1) [000074] ------------ \--* CNS_INT int 24 $81 N002 ( 1, 1) [000009] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 u:2 $180 -- prev tree has side effects and is not next to jumpTree *************** Finishing PHASE Redundant branch opts [no changes] Trees before Optimize Valnum CSEs ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB03 ( cond ) i hascall gcsafe newobj BB02 [0009] 1 BB01 0.25 [???..???)-> BB05 ( cond ) i gcsafe BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare gcsafe BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..???) -> BB03 (cond), preds={} succs={BB02,BB03} ***** BB01 STMT00000 ( 0x000[E-] ... 0x005 ) N005 ( 15, 10) [000003] -AC-----R--- * ASG ref $180 N004 ( 1, 1) [000002] D------N---- +--* LCL_VAR ref V02 tmp1 d:2 $180 N003 ( 15, 10) [000001] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST $180 N002 ( 1, 4) [000000] H----------- arg0 in rcx \--* CNS_INT(h) long 0x4000000000420070 method $140 ***** BB01 STMT00003 ( 0x006[E-] ... 0x020 ) N010 ( 27, 15) [000013] -ACXG---R--- * ASG ref $c5 N009 ( 1, 1) [000012] D------N---- +--* LCL_VAR ref V03 tmp2 d:2 $c5 N008 ( 27, 15) [000010] --CXG------- \--* CALLV vt-ind ref Base.GetFoo $c5 N007 ( 6, 5) [000076] n--X-------- control expr \--* IND long N006 ( 4, 3) [000075] ---X---N---- \--* ADD long $1c1 N004 ( 3, 2) [000073] #--X-------- +--* IND long $1c0 N003 ( 1, 1) [000072] ------------ | \--* LCL_VAR ref V02 tmp1 u:2 (last use) $180 N005 ( 1, 1) [000074] ------------ \--* CNS_INT int 24 $81 N002 ( 1, 1) [000009] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 u:2 $180 ***** BB01 STMT00017 ( ??? ... ??? ) N003 ( 1, 3) [000092] -A------R--- * ASG ref $c5 N002 ( 1, 1) [000091] D------N---- +--* LCL_VAR ref V05 tmp4 d:2 $c5 N001 ( 1, 1) [000031] ------?----- \--* LCL_VAR ref V03 tmp2 u:2 $c5 ***** BB01 STMT00015 ( ??? ... ??? ) N004 ( 5, 5) [000089] ------------ * JTRUE void N003 ( 3, 3) [000025] J------N---- \--* EQ int $240 N001 ( 1, 1) [000024] ------------ +--* LCL_VAR ref V05 tmp4 u:2 $c5 N002 ( 1, 1) [000023] ------------ \--* CNS_INT ref null $VN.Null ------------ BB02 [???..???) -> BB05 (cond), preds={BB01} succs={BB03,BB05} ***** BB02 STMT00016 ( ??? ... ??? ) N009 ( 14, 14) [000090] -A-X-------- * JTRUE void N008 ( 12, 12) [000022] JA-X--?N---- \--* NE int $242 N002 ( 3, 2) [000021] #--X--?----- +--* IND long $184 N001 ( 1, 1) [000014] ------?----- | \--* LCL_VAR ref V05 tmp4 u:2 $c5 N007 ( 8, 9) [000019] -A----?----- \--* COMMA long $141 N005 ( 5, 7) [000017] -A----?-R--- +--* ASG long $141 N004 ( 3, 2) [000016] D-----?N---- | +--* LCL_VAR long V04 tmp3 d:2 $141 N003 ( 1, 4) [000011] H-----?----- | \--* CNS_INT(h) long 0x40000000004200a0 class $141 N006 ( 3, 2) [000018] ------?----- \--* LCL_VAR long V04 tmp3 u:2 $141 ------------ BB03 [???..022) -> BB06 (cond), preds={BB01,BB02} succs={BB04,BB06} ***** BB03 STMT00014 ( ??? ... ??? ) N006 ( 4, 4) [000067] -A-XG---R--- * ASG ref N005 ( 1, 1) [000066] D------N---- +--* LCL_VAR ref V07 tmp6 d:2 N004 ( 4, 4) [000037] ---XG------- \--* IND ref N003 ( 2, 2) [000080] -------N---- \--* ADD byref $2c0 N001 ( 1, 1) [000036] ------------ +--* LCL_VAR ref V05 tmp4 u:2 (last use) $c5 N002 ( 1, 1) [000079] ------------ \--* CNS_INT long 8 field offset Fseq[State] $42 ***** BB03 STMT00006 ( ??? ... ??? ) N008 ( 20, 16) [000044] --CXG------- * JTRUE void N007 ( 18, 14) [000065] J-CXG--N---- \--* EQ int $243 N005 ( 16, 12) [000061] --CXG------- +--* CALL int System.String.Equals $300 N003 ( 1, 1) [000059] ------------ arg0 in rcx | +--* LCL_VAR ref V07 tmp6 u:2 (last use) N004 ( 1, 4) [000081] H----------- arg1 in rdx | \--* CNS_INT(h) ref 0x420148 [ICON_STR_HDL] $143 N006 ( 1, 1) [000064] ------------ \--* CNS_INT int 0 $83 ------------ BB04 [028..029) (return), preds={BB03} succs={} ***** BB04 STMT00007 ( 0x028[E-] ... 0x028 ) N001 ( 0, 0) [000045] ------------ * RETURN void $340 ------------ BB05 [???..???) (throw), preds={BB02} succs={} ***** BB05 STMT00018 ( ??? ... ??? ) N005 ( 18, 10) [000028] --CXG-?----- * CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL $18a N003 ( 3, 2) [000020] ------?----- arg0 in rcx +--* LCL_VAR long V04 tmp3 u:2 (last use) $141 N004 ( 1, 1) [000027] ------?----- arg1 in rdx \--* LCL_VAR ref V03 tmp2 u:2 (last use) $c5 ------------ BB06 [022..028) (throw), preds={BB03} succs={} ***** BB06 STMT00008 ( 0x022[E-] ... 0x027 ) N005 ( 19, 13) [000049] -AC-----R--- * ASG ref $18f N004 ( 3, 2) [000048] D------N---- +--* LCL_VAR ref V06 tmp5 d:2 $18f N003 ( 15, 10) [000047] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST $18f N002 ( 1, 4) [000046] H----------- arg0 in rcx \--* CNS_INT(h) long 0x40000000004200e8 token $144 ***** BB06 STMT00009 ( ??? ... ??? ) N003 ( 17, 9) [000051] --CXG------- * CALL void System.Exception..ctor $VN.Void N002 ( 3, 2) [000050] ------------ this in rcx \--* LCL_VAR ref V06 tmp5 u:2 $18f ***** BB06 STMT00010 ( 0x027[--] ... ??? ) N003 ( 17, 8) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW $190 N002 ( 3, 2) [000052] ------------ arg0 in rcx \--* LCL_VAR ref V06 tmp5 u:2 (last use) $18f ------------------------------------------------------------------------------------------------------------------- *************** Starting PHASE Optimize Valnum CSEs *************** Finishing PHASE Optimize Valnum CSEs *************** Starting PHASE Assertion prop *************** In optAssertionPropMain() Blocks/Trees at start of phase ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB03 ( cond ) i hascall gcsafe newobj BB02 [0009] 1 BB01 0.25 [???..???)-> BB05 ( cond ) i gcsafe BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare gcsafe BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..???) -> BB03 (cond), preds={} succs={BB02,BB03} ***** BB01 STMT00000 ( 0x000[E-] ... 0x005 ) N005 ( 15, 10) [000003] -AC-----R--- * ASG ref $180 N004 ( 1, 1) [000002] D------N---- +--* LCL_VAR ref V02 tmp1 d:2 $180 N003 ( 15, 10) [000001] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST $180 N002 ( 1, 4) [000000] H----------- arg0 in rcx \--* CNS_INT(h) long 0x4000000000420070 method $140 ***** BB01 STMT00003 ( 0x006[E-] ... 0x020 ) N010 ( 27, 15) [000013] -ACXG---R--- * ASG ref $c5 N009 ( 1, 1) [000012] D------N---- +--* LCL_VAR ref V03 tmp2 d:2 $c5 N008 ( 27, 15) [000010] --CXG------- \--* CALLV vt-ind ref Base.GetFoo $c5 N007 ( 6, 5) [000076] n--X-------- control expr \--* IND long N006 ( 4, 3) [000075] ---X---N---- \--* ADD long $1c1 N004 ( 3, 2) [000073] #--X-------- +--* IND long $1c0 N003 ( 1, 1) [000072] ------------ | \--* LCL_VAR ref V02 tmp1 u:2 (last use) $180 N005 ( 1, 1) [000074] ------------ \--* CNS_INT int 24 $81 N002 ( 1, 1) [000009] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 u:2 $180 ***** BB01 STMT00017 ( ??? ... ??? ) N003 ( 1, 3) [000092] -A------R--- * ASG ref $c5 N002 ( 1, 1) [000091] D------N---- +--* LCL_VAR ref V05 tmp4 d:2 $c5 N001 ( 1, 1) [000031] ------?----- \--* LCL_VAR ref V03 tmp2 u:2 $c5 ***** BB01 STMT00015 ( ??? ... ??? ) N004 ( 5, 5) [000089] ------------ * JTRUE void N003 ( 3, 3) [000025] J------N---- \--* EQ int $240 N001 ( 1, 1) [000024] ------------ +--* LCL_VAR ref V05 tmp4 u:2 $c5 N002 ( 1, 1) [000023] ------------ \--* CNS_INT ref null $VN.Null ------------ BB02 [???..???) -> BB05 (cond), preds={BB01} succs={BB03,BB05} ***** BB02 STMT00016 ( ??? ... ??? ) N009 ( 14, 14) [000090] -A-X-------- * JTRUE void N008 ( 12, 12) [000022] JA-X--?N---- \--* NE int $242 N002 ( 3, 2) [000021] #--X--?----- +--* IND long $184 N001 ( 1, 1) [000014] ------?----- | \--* LCL_VAR ref V05 tmp4 u:2 $c5 N007 ( 8, 9) [000019] -A----?----- \--* COMMA long $141 N005 ( 5, 7) [000017] -A----?-R--- +--* ASG long $141 N004 ( 3, 2) [000016] D-----?N---- | +--* LCL_VAR long V04 tmp3 d:2 $141 N003 ( 1, 4) [000011] H-----?----- | \--* CNS_INT(h) long 0x40000000004200a0 class $141 N006 ( 3, 2) [000018] ------?----- \--* LCL_VAR long V04 tmp3 u:2 $141 ------------ BB03 [???..022) -> BB06 (cond), preds={BB01,BB02} succs={BB04,BB06} ***** BB03 STMT00014 ( ??? ... ??? ) N006 ( 4, 4) [000067] -A-XG---R--- * ASG ref N005 ( 1, 1) [000066] D------N---- +--* LCL_VAR ref V07 tmp6 d:2 N004 ( 4, 4) [000037] ---XG------- \--* IND ref N003 ( 2, 2) [000080] -------N---- \--* ADD byref $2c0 N001 ( 1, 1) [000036] ------------ +--* LCL_VAR ref V05 tmp4 u:2 (last use) $c5 N002 ( 1, 1) [000079] ------------ \--* CNS_INT long 8 field offset Fseq[State] $42 ***** BB03 STMT00006 ( ??? ... ??? ) N008 ( 20, 16) [000044] --CXG------- * JTRUE void N007 ( 18, 14) [000065] J-CXG--N---- \--* EQ int $243 N005 ( 16, 12) [000061] --CXG------- +--* CALL int System.String.Equals $300 N003 ( 1, 1) [000059] ------------ arg0 in rcx | +--* LCL_VAR ref V07 tmp6 u:2 (last use) N004 ( 1, 4) [000081] H----------- arg1 in rdx | \--* CNS_INT(h) ref 0x420148 [ICON_STR_HDL] $143 N006 ( 1, 1) [000064] ------------ \--* CNS_INT int 0 $83 ------------ BB04 [028..029) (return), preds={BB03} succs={} ***** BB04 STMT00007 ( 0x028[E-] ... 0x028 ) N001 ( 0, 0) [000045] ------------ * RETURN void $340 ------------ BB05 [???..???) (throw), preds={BB02} succs={} ***** BB05 STMT00018 ( ??? ... ??? ) N005 ( 18, 10) [000028] --CXG-?----- * CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL $18a N003 ( 3, 2) [000020] ------?----- arg0 in rcx +--* LCL_VAR long V04 tmp3 u:2 (last use) $141 N004 ( 1, 1) [000027] ------?----- arg1 in rdx \--* LCL_VAR ref V03 tmp2 u:2 (last use) $c5 ------------ BB06 [022..028) (throw), preds={BB03} succs={} ***** BB06 STMT00008 ( 0x022[E-] ... 0x027 ) N005 ( 19, 13) [000049] -AC-----R--- * ASG ref $18f N004 ( 3, 2) [000048] D------N---- +--* LCL_VAR ref V06 tmp5 d:2 $18f N003 ( 15, 10) [000047] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST $18f N002 ( 1, 4) [000046] H----------- arg0 in rcx \--* CNS_INT(h) long 0x40000000004200e8 token $144 ***** BB06 STMT00009 ( ??? ... ??? ) N003 ( 17, 9) [000051] --CXG------- * CALL void System.Exception..ctor $VN.Void N002 ( 3, 2) [000050] ------------ this in rcx \--* LCL_VAR ref V06 tmp5 u:2 $18f ***** BB06 STMT00010 ( 0x027[--] ... ??? ) N003 ( 17, 8) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW $190 N002 ( 3, 2) [000052] ------------ arg0 in rcx \--* LCL_VAR ref V06 tmp5 u:2 (last use) $18f ------------------------------------------------------------------------------------------------------------------- Extracted side effects from a constant tree [000075]: N004 ( 3, 2) [000073] #--X-------- * IND long $1c0 N003 ( 1, 1) [000072] ------------ \--* LCL_VAR ref V02 tmp1 u:2 (last use) $180 After constant propagation on [000075]: STMT00003 ( 0x006[E-] ... 0x020 ) N010 ( 27, 15) [000013] -ACXG---R--- * ASG ref $c5 N009 ( 1, 1) [000012] D------N---- +--* LCL_VAR ref V03 tmp2 d:2 $c5 N008 ( 27, 15) [000010] --CXG------- \--* CALLV vt-ind ref Base.GetFoo $c5 N007 ( 6, 5) [000076] n--X-------- control expr \--* IND long [000096] ---X-------- \--* COMMA long N004 ( 3, 2) [000073] #--X-------- +--* IND long $1c0 N003 ( 1, 1) [000072] ------------ | \--* LCL_VAR ref V02 tmp1 u:2 (last use) $180 [000095] ------------ \--* CNS_INT long 0x4000000000420088 $1c1 N002 ( 1, 1) [000009] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 u:2 $180 ReMorphing args for 10.CALL: argSlots=1, preallocatedArgCount=4, nextSlotNum=4, nextSlotByteOffset=32, outgoingArgSpaceSize=32 ArgTable for 10.CALL after fgMorphArgs: fgArgTabEntry[arg 0 9.LCL_VAR ref (By ref), 1 reg: rcx, byteAlignment=8, lateArgInx=0, processed] optVNAssertionPropCurStmt morphed tree: N010 ( 29, 24) [000013] -ACXG---R--- * ASG ref $c5 N009 ( 1, 1) [000012] D------N---- +--* LCL_VAR ref V03 tmp2 d:2 $c5 N008 ( 29, 24) [000010] --CXG------- \--* CALLV vt-ind ref Base.GetFoo $c5 N007 ( 8, 14) [000076] n--X-------- control expr \--* IND long N006 ( 5, 12) [000096] ---X-------- \--* COMMA long N004 ( 3, 2) [000073] #--X-------- +--* IND long $1c0 N003 ( 1, 1) [000072] ------------ | \--* LCL_VAR ref V02 tmp1 u:2 (last use) $180 N005 ( 2, 10) [000095] ------------ \--* CNS_INT long 0x4000000000420088 $1c1 N002 ( 1, 1) [000009] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 u:2 $180 GenTreeNode creates assertion: N004 ( 3, 2) [000073] #--X-------- * IND long $1c0 In BB01 New Global Constant Assertion: ($180,$0) V02.02 != null, index = #01 GenTreeNode creates assertion: N004 ( 5, 5) [000089] ------------ * JTRUE void In BB01 New Global Constant Assertion: ($c5,$0) V05.02 == null, index = #02 GenTreeNode creates assertion: N004 ( 5, 5) [000089] ------------ * JTRUE void In BB01 New Global Constant Assertion: ($c5,$0) V05.02 != null, index = #03 GenTreeNode creates assertion: N002 ( 3, 2) [000021] #--X--?----- * IND long $184 In BB02 New Global Constant Assertion: ($c5,$0) V05.02 != null, index = #04 GenTreeNode creates assertion: N009 ( 14, 14) [000090] -A-X-------- * JTRUE void In BB02 New Global Type Assertion: ($c5,$141) V05.02 is not Exact Type MT(004200A0), index = #05 GenTreeNode creates assertion: N009 ( 14, 14) [000090] -A-X-------- * JTRUE void In BB02 New Global Type Assertion: ($c5,$141) V05.02 is Exact Type MT(004200A0), index = #06 BB01 valueGen = #01 #03 => BB03 valueGen = #01 #02 BB02 valueGen = #04 #06 => BB05 valueGen = #04 #05 BB03 valueGen = #04 => BB06 valueGen = #04 BB04 valueGen = #NA BB05 valueGen = #NA BB06 valueGen = #NA BB01: in = #NA out = #01 #03 BB03 = #01 #02 BB02: in = #01 #03 out = #01 #03 #04 #06 BB05 = #01 #03 #04 #05 BB03: in = #01 out = #01 #04 BB06 = #01 #04 BB04: in = #01 #04 out = #01 #04 BB05: in = #01 #03 #04 #05 out = #01 #03 #04 #05 BB06: in = #01 #04 out = #01 #04 Propagating #NA for BB01, stmt STMT00000, tree [000070], tree -> #NA Propagating #NA for BB01, stmt STMT00000, tree [000000], tree -> #NA Propagating #NA for BB01, stmt STMT00000, tree [000001], tree -> #NA Propagating #NA for BB01, stmt STMT00000, tree [000002], tree -> #NA Propagating #NA for BB01, stmt STMT00000, tree [000003], tree -> #NA Propagating #NA for BB01, stmt STMT00003, tree [000071], tree -> #NA Propagating #NA for BB01, stmt STMT00003, tree [000009], tree -> #NA Propagating #NA for BB01, stmt STMT00003, tree [000072], tree -> #NA Propagating #NA for BB01, stmt STMT00003, tree [000073], tree -> #01 VN based non-null prop in BB01: N004 ( 3, 2) [000073] #--X-------- * IND long $1c0 Propagating #01 for BB01, stmt STMT00003, tree [000095], tree -> #NA Propagating #01 for BB01, stmt STMT00003, tree [000096], tree -> #NA Propagating #01 for BB01, stmt STMT00003, tree [000076], tree -> #NA Propagating #01 for BB01, stmt STMT00003, tree [000010], tree -> #01 Propagating #01 for BB01, stmt STMT00003, tree [000012], tree -> #NA Propagating #01 for BB01, stmt STMT00003, tree [000013], tree -> #NA Re-morphing this stmt: STMT00003 ( 0x006[E-] ... 0x020 ) N010 ( 29, 24) [000013] -ACXG---R--- * ASG ref $c5 N009 ( 1, 1) [000012] D------N---- +--* LCL_VAR ref V03 tmp2 d:2 $c5 N008 ( 29, 24) [000010] --CXG------- \--* CALLV vt-ind ref Base.GetFoo $c5 N007 ( 8, 14) [000076] n--X-------- control expr \--* IND long N006 ( 5, 12) [000096] ---X-------- \--* COMMA long N004 ( 3, 2) [000073] #----O------ +--* IND long $1c0 N003 ( 1, 1) [000072] ------------ | \--* LCL_VAR ref V02 tmp1 u:2 (last use) $180 N005 ( 2, 10) [000095] ------------ \--* CNS_INT long 0x4000000000420088 $1c1 N002 ( 1, 1) [000009] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 u:2 $180 ReMorphing args for 10.CALL: argSlots=1, preallocatedArgCount=4, nextSlotNum=4, nextSlotByteOffset=32, outgoingArgSpaceSize=32 ArgTable for 10.CALL after fgMorphArgs: fgArgTabEntry[arg 0 9.LCL_VAR ref (By ref), 1 reg: rcx, byteAlignment=8, lateArgInx=0, processed] optAssertionPropMain morphed tree: N007 ( 25, 22) [000013] -ACXG---R--- * ASG ref $c5 N006 ( 1, 1) [000012] D------N---- +--* LCL_VAR ref V03 tmp2 d:2 $c5 N005 ( 25, 22) [000010] --CXG------- \--* CALLV vt-ind ref Base.GetFoo $c5 N004 ( 4, 12) [000076] n----------- control expr \--* IND long N003 ( 2, 10) [000095] ------------ \--* CNS_INT long 0x4000000000420088 $1c1 N002 ( 1, 1) [000009] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 u:2 $180 Propagating #01 for BB01, stmt STMT00017, tree [000031], tree -> #NA Propagating #01 for BB01, stmt STMT00017, tree [000091], tree -> #NA Propagating #01 for BB01, stmt STMT00017, tree [000092], tree -> #NA Propagating #01 for BB01, stmt STMT00015, tree [000024], tree -> #NA Propagating #01 for BB01, stmt STMT00015, tree [000023], tree -> #NA Propagating #01 for BB01, stmt STMT00015, tree [000025], tree -> #NA Propagating #01 for BB01, stmt STMT00015, tree [000089], tree -> #02 Propagating #01 #03 for BB02, stmt STMT00016, tree [000014], tree -> #NA Propagating #01 #03 for BB02, stmt STMT00016, tree [000021], tree -> #04 VN based non-null prop in BB02: N002 ( 3, 2) [000021] #--X--?----- * IND long $184 Propagating #01 #03 #04 for BB02, stmt STMT00016, tree [000011], tree -> #NA Propagating #01 #03 #04 for BB02, stmt STMT00016, tree [000016], tree -> #NA Propagating #01 #03 #04 for BB02, stmt STMT00016, tree [000017], tree -> #NA Propagating #01 #03 #04 for BB02, stmt STMT00016, tree [000018], tree -> #NA Propagating #01 #03 #04 for BB02, stmt STMT00016, tree [000019], tree -> #NA Propagating #01 #03 #04 for BB02, stmt STMT00016, tree [000022], tree -> #NA Propagating #01 #03 #04 for BB02, stmt STMT00016, tree [000090], tree -> #05 Re-morphing this stmt: STMT00016 ( ??? ... ??? ) N009 ( 14, 14) [000090] -A-X-------- * JTRUE void N008 ( 12, 12) [000022] JA-X--?N---- \--* NE int $242 N002 ( 3, 2) [000021] #----O?----- +--* IND long $184 N001 ( 1, 1) [000014] ------?----- | \--* LCL_VAR ref V05 tmp4 u:2 $c5 N007 ( 8, 9) [000019] -A----?----- \--* COMMA long $141 N005 ( 5, 7) [000017] -A----?-R--- +--* ASG long $141 N004 ( 3, 2) [000016] D-----?N---- | +--* LCL_VAR long V04 tmp3 d:2 $141 N003 ( 1, 4) [000011] H-----?----- | \--* CNS_INT(h) long 0x40000000004200a0 class $141 N006 ( 3, 2) [000018] ------?----- \--* LCL_VAR long V04 tmp3 u:2 $141 optAssertionPropMain morphed tree: N009 ( 14, 14) [000090] -A---O------ * JTRUE void N008 ( 12, 12) [000022] JA---O?N---- \--* NE int $242 N002 ( 3, 2) [000021] #----O?----- +--* IND long $184 N001 ( 1, 1) [000014] ------?----- | \--* LCL_VAR ref V05 tmp4 u:2 $c5 N007 ( 8, 9) [000019] -A----?----- \--* COMMA long $141 N005 ( 5, 7) [000017] -A----?-R--- +--* ASG long $141 N004 ( 3, 2) [000016] D-----?N---- | +--* LCL_VAR long V04 tmp3 d:2 $141 N003 ( 1, 4) [000011] H-----?----- | \--* CNS_INT(h) long 0x40000000004200a0 class $141 N006 ( 3, 2) [000018] ------?----- \--* LCL_VAR long V04 tmp3 u:2 $141 Propagating #01 for BB03, stmt STMT00014, tree [000036], tree -> #NA Propagating #01 for BB03, stmt STMT00014, tree [000079], tree -> #NA Propagating #01 for BB03, stmt STMT00014, tree [000080], tree -> #NA Propagating #01 for BB03, stmt STMT00014, tree [000037], tree -> #04 Propagating #01 #04 for BB03, stmt STMT00014, tree [000066], tree -> #NA Propagating #01 #04 for BB03, stmt STMT00014, tree [000067], tree -> #NA Propagating #01 #04 for BB03, stmt STMT00006, tree [000082], tree -> #NA Propagating #01 #04 for BB03, stmt STMT00006, tree [000083], tree -> #NA Propagating #01 #04 for BB03, stmt STMT00006, tree [000059], tree -> #NA Propagating #01 #04 for BB03, stmt STMT00006, tree [000081], tree -> #NA Propagating #01 #04 for BB03, stmt STMT00006, tree [000061], tree -> #NA Propagating #01 #04 for BB03, stmt STMT00006, tree [000064], tree -> #NA Propagating #01 #04 for BB03, stmt STMT00006, tree [000065], tree -> #NA Propagating #01 #04 for BB03, stmt STMT00006, tree [000044], tree -> #NA Propagating #01 #04 for BB04, stmt STMT00007, tree [000045], tree -> #NA Propagating #01 #03 #04 #05 for BB05, stmt STMT00018, tree [000077], tree -> #NA Propagating #01 #03 #04 #05 for BB05, stmt STMT00018, tree [000078], tree -> #NA Propagating #01 #03 #04 #05 for BB05, stmt STMT00018, tree [000020], tree -> #NA Propagating #01 #03 #04 #05 for BB05, stmt STMT00018, tree [000027], tree -> #NA Propagating #01 #03 #04 #05 for BB05, stmt STMT00018, tree [000028], tree -> #NA Propagating #01 #04 for BB06, stmt STMT00008, tree [000086], tree -> #NA Propagating #01 #04 for BB06, stmt STMT00008, tree [000046], tree -> #NA Propagating #01 #04 for BB06, stmt STMT00008, tree [000047], tree -> #NA Propagating #01 #04 for BB06, stmt STMT00008, tree [000048], tree -> #NA Propagating #01 #04 for BB06, stmt STMT00008, tree [000049], tree -> #NA Propagating #01 #04 for BB06, stmt STMT00009, tree [000087], tree -> #NA Propagating #01 #04 for BB06, stmt STMT00009, tree [000050], tree -> #NA Propagating #01 #04 for BB06, stmt STMT00009, tree [000051], tree -> #NA Propagating #01 #04 for BB06, stmt STMT00010, tree [000088], tree -> #NA Propagating #01 #04 for BB06, stmt STMT00010, tree [000052], tree -> #NA Propagating #01 #04 for BB06, stmt STMT00010, tree [000053], tree -> #NA *************** In fgDebugCheckBBlist *************** Finishing PHASE Assertion prop *************** Starting PHASE Optimize index checks *************** In OptimizeRangeChecks() Blocks/trees before phase ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB03 ( cond ) i hascall gcsafe newobj BB02 [0009] 1 BB01 0.25 [???..???)-> BB05 ( cond ) i gcsafe BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare gcsafe BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..???) -> BB03 (cond), preds={} succs={BB02,BB03} ***** BB01 STMT00000 ( 0x000[E-] ... 0x005 ) N005 ( 15, 10) [000003] -AC-----R--- * ASG ref $180 N004 ( 1, 1) [000002] D------N---- +--* LCL_VAR ref V02 tmp1 d:2 $180 N003 ( 15, 10) [000001] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST $180 N002 ( 1, 4) [000000] H----------- arg0 in rcx \--* CNS_INT(h) long 0x4000000000420070 method $140 ***** BB01 STMT00003 ( 0x006[E-] ... 0x020 ) N007 ( 25, 22) [000013] -ACXG---R--- * ASG ref $c5 N006 ( 1, 1) [000012] D------N---- +--* LCL_VAR ref V03 tmp2 d:2 $c5 N005 ( 25, 22) [000010] --CXG------- \--* CALLV vt-ind ref Base.GetFoo $c5 N004 ( 4, 12) [000076] n----------- control expr \--* IND long N003 ( 2, 10) [000095] ------------ \--* CNS_INT long 0x4000000000420088 $1c1 N002 ( 1, 1) [000009] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 u:2 $180 ***** BB01 STMT00017 ( ??? ... ??? ) N003 ( 1, 3) [000092] -A------R--- * ASG ref $c5 N002 ( 1, 1) [000091] D------N---- +--* LCL_VAR ref V05 tmp4 d:2 $c5 N001 ( 1, 1) [000031] ------?----- \--* LCL_VAR ref V03 tmp2 u:2 $c5 ***** BB01 STMT00015 ( ??? ... ??? ) N004 ( 5, 5) [000089] ------------ * JTRUE void N003 ( 3, 3) [000025] J------N---- \--* EQ int $240 N001 ( 1, 1) [000024] ------------ +--* LCL_VAR ref V05 tmp4 u:2 $c5 N002 ( 1, 1) [000023] ------------ \--* CNS_INT ref null $VN.Null ------------ BB02 [???..???) -> BB05 (cond), preds={BB01} succs={BB03,BB05} ***** BB02 STMT00016 ( ??? ... ??? ) N009 ( 14, 14) [000090] -A---O------ * JTRUE void N008 ( 12, 12) [000022] JA---O?N---- \--* NE int $242 N002 ( 3, 2) [000021] #----O?----- +--* IND long $184 N001 ( 1, 1) [000014] ------?----- | \--* LCL_VAR ref V05 tmp4 u:2 $c5 N007 ( 8, 9) [000019] -A----?----- \--* COMMA long $141 N005 ( 5, 7) [000017] -A----?-R--- +--* ASG long $141 N004 ( 3, 2) [000016] D-----?N---- | +--* LCL_VAR long V04 tmp3 d:2 $141 N003 ( 1, 4) [000011] H-----?----- | \--* CNS_INT(h) long 0x40000000004200a0 class $141 N006 ( 3, 2) [000018] ------?----- \--* LCL_VAR long V04 tmp3 u:2 $141 ------------ BB03 [???..022) -> BB06 (cond), preds={BB01,BB02} succs={BB04,BB06} ***** BB03 STMT00014 ( ??? ... ??? ) N006 ( 4, 4) [000067] -A-XG---R--- * ASG ref N005 ( 1, 1) [000066] D------N---- +--* LCL_VAR ref V07 tmp6 d:2 N004 ( 4, 4) [000037] ---XG------- \--* IND ref N003 ( 2, 2) [000080] -------N---- \--* ADD byref $2c0 N001 ( 1, 1) [000036] ------------ +--* LCL_VAR ref V05 tmp4 u:2 (last use) $c5 N002 ( 1, 1) [000079] ------------ \--* CNS_INT long 8 field offset Fseq[State] $42 ***** BB03 STMT00006 ( ??? ... ??? ) N008 ( 20, 16) [000044] --CXG------- * JTRUE void N007 ( 18, 14) [000065] J-CXG--N---- \--* EQ int $243 N005 ( 16, 12) [000061] --CXG------- +--* CALL int System.String.Equals $300 N003 ( 1, 1) [000059] ------------ arg0 in rcx | +--* LCL_VAR ref V07 tmp6 u:2 (last use) N004 ( 1, 4) [000081] H----------- arg1 in rdx | \--* CNS_INT(h) ref 0x420148 [ICON_STR_HDL] $143 N006 ( 1, 1) [000064] ------------ \--* CNS_INT int 0 $83 ------------ BB04 [028..029) (return), preds={BB03} succs={} ***** BB04 STMT00007 ( 0x028[E-] ... 0x028 ) N001 ( 0, 0) [000045] ------------ * RETURN void $340 ------------ BB05 [???..???) (throw), preds={BB02} succs={} ***** BB05 STMT00018 ( ??? ... ??? ) N005 ( 18, 10) [000028] --CXG-?----- * CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL $18a N003 ( 3, 2) [000020] ------?----- arg0 in rcx +--* LCL_VAR long V04 tmp3 u:2 (last use) $141 N004 ( 1, 1) [000027] ------?----- arg1 in rdx \--* LCL_VAR ref V03 tmp2 u:2 (last use) $c5 ------------ BB06 [022..028) (throw), preds={BB03} succs={} ***** BB06 STMT00008 ( 0x022[E-] ... 0x027 ) N005 ( 19, 13) [000049] -AC-----R--- * ASG ref $18f N004 ( 3, 2) [000048] D------N---- +--* LCL_VAR ref V06 tmp5 d:2 $18f N003 ( 15, 10) [000047] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST $18f N002 ( 1, 4) [000046] H----------- arg0 in rcx \--* CNS_INT(h) long 0x40000000004200e8 token $144 ***** BB06 STMT00009 ( ??? ... ??? ) N003 ( 17, 9) [000051] --CXG------- * CALL void System.Exception..ctor $VN.Void N002 ( 3, 2) [000050] ------------ this in rcx \--* LCL_VAR ref V06 tmp5 u:2 $18f ***** BB06 STMT00010 ( 0x027[--] ... ??? ) N003 ( 17, 8) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW $190 N002 ( 3, 2) [000052] ------------ arg0 in rcx \--* LCL_VAR ref V06 tmp5 u:2 (last use) $18f ------------------------------------------------------------------------------------------------------------------- *************** Finishing PHASE Optimize index checks *************** Starting PHASE Insert GC Polls *************** Finishing PHASE Insert GC Polls [no changes] *************** Starting PHASE Determine first cold block *************** In fgDetermineFirstColdBlock() No procedure splitting will be done for this method *************** Finishing PHASE Determine first cold block Trees before Rationalize IR ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB03 ( cond ) i hascall gcsafe newobj BB02 [0009] 1 BB01 0.25 [???..???)-> BB05 ( cond ) i gcsafe BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare gcsafe BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..???) -> BB03 (cond), preds={} succs={BB02,BB03} ***** BB01 STMT00000 ( 0x000[E-] ... 0x005 ) N005 ( 15, 10) [000003] -AC-----R--- * ASG ref $180 N004 ( 1, 1) [000002] D------N---- +--* LCL_VAR ref V02 tmp1 d:2 $180 N003 ( 15, 10) [000001] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST $180 N002 ( 1, 4) [000000] H----------- arg0 in rcx \--* CNS_INT(h) long 0x4000000000420070 method $140 ***** BB01 STMT00003 ( 0x006[E-] ... 0x020 ) N007 ( 25, 22) [000013] -ACXG---R--- * ASG ref $c5 N006 ( 1, 1) [000012] D------N---- +--* LCL_VAR ref V03 tmp2 d:2 $c5 N005 ( 25, 22) [000010] --CXG------- \--* CALLV vt-ind ref Base.GetFoo $c5 N004 ( 4, 12) [000076] n----------- control expr \--* IND long N003 ( 2, 10) [000095] ------------ \--* CNS_INT long 0x4000000000420088 $1c1 N002 ( 1, 1) [000009] ------------ this in rcx \--* LCL_VAR ref V02 tmp1 u:2 $180 ***** BB01 STMT00017 ( ??? ... ??? ) N003 ( 1, 3) [000092] -A------R--- * ASG ref $c5 N002 ( 1, 1) [000091] D------N---- +--* LCL_VAR ref V05 tmp4 d:2 $c5 N001 ( 1, 1) [000031] ------?----- \--* LCL_VAR ref V03 tmp2 u:2 $c5 ***** BB01 STMT00015 ( ??? ... ??? ) N004 ( 5, 5) [000089] ------------ * JTRUE void N003 ( 3, 3) [000025] J------N---- \--* EQ int $240 N001 ( 1, 1) [000024] ------------ +--* LCL_VAR ref V05 tmp4 u:2 $c5 N002 ( 1, 1) [000023] ------------ \--* CNS_INT ref null $VN.Null ------------ BB02 [???..???) -> BB05 (cond), preds={BB01} succs={BB03,BB05} ***** BB02 STMT00016 ( ??? ... ??? ) N009 ( 14, 14) [000090] -A---O------ * JTRUE void N008 ( 12, 12) [000022] JA---O?N---- \--* NE int $242 N002 ( 3, 2) [000021] #----O?----- +--* IND long $184 N001 ( 1, 1) [000014] ------?----- | \--* LCL_VAR ref V05 tmp4 u:2 $c5 N007 ( 8, 9) [000019] -A----?----- \--* COMMA long $141 N005 ( 5, 7) [000017] -A----?-R--- +--* ASG long $141 N004 ( 3, 2) [000016] D-----?N---- | +--* LCL_VAR long V04 tmp3 d:2 $141 N003 ( 1, 4) [000011] H-----?----- | \--* CNS_INT(h) long 0x40000000004200a0 class $141 N006 ( 3, 2) [000018] ------?----- \--* LCL_VAR long V04 tmp3 u:2 $141 ------------ BB03 [???..022) -> BB06 (cond), preds={BB01,BB02} succs={BB04,BB06} ***** BB03 STMT00014 ( ??? ... ??? ) N006 ( 4, 4) [000067] -A-XG---R--- * ASG ref N005 ( 1, 1) [000066] D------N---- +--* LCL_VAR ref V07 tmp6 d:2 N004 ( 4, 4) [000037] ---XG------- \--* IND ref N003 ( 2, 2) [000080] -------N---- \--* ADD byref $2c0 N001 ( 1, 1) [000036] ------------ +--* LCL_VAR ref V05 tmp4 u:2 (last use) $c5 N002 ( 1, 1) [000079] ------------ \--* CNS_INT long 8 field offset Fseq[State] $42 ***** BB03 STMT00006 ( ??? ... ??? ) N008 ( 20, 16) [000044] --CXG------- * JTRUE void N007 ( 18, 14) [000065] J-CXG--N---- \--* EQ int $243 N005 ( 16, 12) [000061] --CXG------- +--* CALL int System.String.Equals $300 N003 ( 1, 1) [000059] ------------ arg0 in rcx | +--* LCL_VAR ref V07 tmp6 u:2 (last use) N004 ( 1, 4) [000081] H----------- arg1 in rdx | \--* CNS_INT(h) ref 0x420148 [ICON_STR_HDL] $143 N006 ( 1, 1) [000064] ------------ \--* CNS_INT int 0 $83 ------------ BB04 [028..029) (return), preds={BB03} succs={} ***** BB04 STMT00007 ( 0x028[E-] ... 0x028 ) N001 ( 0, 0) [000045] ------------ * RETURN void $340 ------------ BB05 [???..???) (throw), preds={BB02} succs={} ***** BB05 STMT00018 ( ??? ... ??? ) N005 ( 18, 10) [000028] --CXG-?----- * CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL $18a N003 ( 3, 2) [000020] ------?----- arg0 in rcx +--* LCL_VAR long V04 tmp3 u:2 (last use) $141 N004 ( 1, 1) [000027] ------?----- arg1 in rdx \--* LCL_VAR ref V03 tmp2 u:2 (last use) $c5 ------------ BB06 [022..028) (throw), preds={BB03} succs={} ***** BB06 STMT00008 ( 0x022[E-] ... 0x027 ) N005 ( 19, 13) [000049] -AC-----R--- * ASG ref $18f N004 ( 3, 2) [000048] D------N---- +--* LCL_VAR ref V06 tmp5 d:2 $18f N003 ( 15, 10) [000047] --C--------- \--* CALL help ref HELPER.CORINFO_HELP_NEWSFAST $18f N002 ( 1, 4) [000046] H----------- arg0 in rcx \--* CNS_INT(h) long 0x40000000004200e8 token $144 ***** BB06 STMT00009 ( ??? ... ??? ) N003 ( 17, 9) [000051] --CXG------- * CALL void System.Exception..ctor $VN.Void N002 ( 3, 2) [000050] ------------ this in rcx \--* LCL_VAR ref V06 tmp5 u:2 $18f ***** BB06 STMT00010 ( 0x027[--] ... ??? ) N003 ( 17, 8) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW $190 N002 ( 3, 2) [000052] ------------ arg0 in rcx \--* LCL_VAR ref V06 tmp5 u:2 (last use) $18f ------------------------------------------------------------------------------------------------------------------- *************** Starting PHASE Rationalize IR rewriting asg(LCL_VAR, X) to STORE_LCL_VAR(X) N005 ( 15, 10) [000003] DAC--------- * STORE_LCL_VAR ref V02 tmp1 d:2 rewriting asg(LCL_VAR, X) to STORE_LCL_VAR(X) N007 ( 25, 22) [000013] DACXG------- * STORE_LCL_VAR ref V03 tmp2 d:2 rewriting asg(LCL_VAR, X) to STORE_LCL_VAR(X) N003 ( 1, 3) [000092] DA---------- * STORE_LCL_VAR ref V05 tmp4 d:2 rewriting asg(LCL_VAR, X) to STORE_LCL_VAR(X) N005 ( 5, 7) [000017] DA----?----- * STORE_LCL_VAR long V04 tmp3 d:2 rewriting asg(LCL_VAR, X) to STORE_LCL_VAR(X) N006 ( 4, 4) [000067] DA-XG------- * STORE_LCL_VAR ref V07 tmp6 d:2 rewriting asg(LCL_VAR, X) to STORE_LCL_VAR(X) N005 ( 19, 13) [000049] DAC--------- * STORE_LCL_VAR ref V06 tmp5 d:2 *************** Finishing PHASE Rationalize IR Trees after Rationalize IR ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB03 ( cond ) i hascall gcsafe newobj LIR BB02 [0009] 1 BB01 0.25 [???..???)-> BB05 ( cond ) i gcsafe LIR BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj LIR BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe LIR BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare gcsafe LIR BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj LIR ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..???) -> BB03 (cond), preds={} succs={BB02,BB03} [000097] ------------ IL_OFFSET void INLRT @ 0x000[E-] N002 ( 1, 4) [000000] H----------- t0 = CNS_INT(h) long 0x4000000000420070 method $140 /--* t0 long arg0 in rcx N003 ( 15, 10) [000001] --C--------- t1 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST $180 /--* t1 ref N005 ( 15, 10) [000003] DA---------- * STORE_LCL_VAR ref V02 tmp1 d:2 [000098] ------------ IL_OFFSET void INLRT @ 0x006[E-] N002 ( 1, 1) [000009] ------------ t9 = LCL_VAR ref V02 tmp1 u:2 $180 N003 ( 2, 10) [000095] ------------ t95 = CNS_INT long 0x4000000000420088 $1c1 /--* t95 long N004 ( 4, 12) [000076] n----------- t76 = * IND long /--* t9 ref this in rcx +--* t76 long control expr N005 ( 25, 22) [000010] --CXG------- t10 = * CALLV vt-ind ref Base.GetFoo $c5 /--* t10 ref N007 ( 25, 22) [000013] DA-XG------- * STORE_LCL_VAR ref V03 tmp2 d:2 N001 ( 1, 1) [000031] ------?----- t31 = LCL_VAR ref V03 tmp2 u:2 $c5 /--* t31 ref N003 ( 1, 3) [000092] DA---------- * STORE_LCL_VAR ref V05 tmp4 d:2 N001 ( 1, 1) [000024] ------------ t24 = LCL_VAR ref V05 tmp4 u:2 $c5 N002 ( 1, 1) [000023] ------------ t23 = CNS_INT ref null $VN.Null /--* t24 ref +--* t23 ref N003 ( 3, 3) [000025] J------N---- t25 = * EQ int $240 /--* t25 int N004 ( 5, 5) [000089] ------------ * JTRUE void ------------ BB02 [???..???) -> BB05 (cond), preds={BB01} succs={BB03,BB05} N001 ( 1, 1) [000014] ------?----- t14 = LCL_VAR ref V05 tmp4 u:2 $c5 /--* t14 ref N002 ( 3, 2) [000021] #----O?----- t21 = * IND long $184 N003 ( 1, 4) [000011] H-----?----- t11 = CNS_INT(h) long 0x40000000004200a0 class $141 /--* t11 long N005 ( 5, 7) [000017] DA----?----- * STORE_LCL_VAR long V04 tmp3 d:2 N006 ( 3, 2) [000018] ------?----- t18 = LCL_VAR long V04 tmp3 u:2 $141 /--* t21 long +--* t18 long N008 ( 12, 12) [000022] J----O?N---- t22 = * NE int $242 /--* t22 int N009 ( 14, 14) [000090] -----O------ * JTRUE void ------------ BB03 [???..022) -> BB06 (cond), preds={BB01,BB02} succs={BB04,BB06} N001 ( 1, 1) [000036] ------------ t36 = LCL_VAR ref V05 tmp4 u:2 (last use) $c5 N002 ( 1, 1) [000079] ------------ t79 = CNS_INT long 8 field offset Fseq[State] $42 /--* t36 ref +--* t79 long N003 ( 2, 2) [000080] -------N---- t80 = * ADD byref $2c0 /--* t80 byref N004 ( 4, 4) [000037] ---XG------- t37 = * IND ref /--* t37 ref N006 ( 4, 4) [000067] DA-XG------- * STORE_LCL_VAR ref V07 tmp6 d:2 N003 ( 1, 1) [000059] ------------ t59 = LCL_VAR ref V07 tmp6 u:2 (last use) N004 ( 1, 4) [000081] H----------- t81 = CNS_INT(h) ref 0x420148 [ICON_STR_HDL] $143 /--* t59 ref arg0 in rcx +--* t81 ref arg1 in rdx N005 ( 16, 12) [000061] --CXG------- t61 = * CALL int System.String.Equals $300 N006 ( 1, 1) [000064] ------------ t64 = CNS_INT int 0 $83 /--* t61 int +--* t64 int N007 ( 18, 14) [000065] J--XG--N---- t65 = * EQ int $243 /--* t65 int N008 ( 20, 16) [000044] ---XG------- * JTRUE void ------------ BB04 [028..029) (return), preds={BB03} succs={} [000099] ------------ IL_OFFSET void INLRT @ 0x028[E-] N001 ( 0, 0) [000045] ------------ RETURN void $340 ------------ BB05 [???..???) (throw), preds={BB02} succs={} N003 ( 3, 2) [000020] ------?----- t20 = LCL_VAR long V04 tmp3 u:2 (last use) $141 N004 ( 1, 1) [000027] ------?----- t27 = LCL_VAR ref V03 tmp2 u:2 (last use) $c5 /--* t20 long arg0 in rcx +--* t27 ref arg1 in rdx N005 ( 18, 10) [000028] --CXG-?----- t28 = * CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL $18a ------------ BB06 [022..028) (throw), preds={BB03} succs={} [000100] ------------ IL_OFFSET void INLRT @ 0x022[E-] N002 ( 1, 4) [000046] H----------- t46 = CNS_INT(h) long 0x40000000004200e8 token $144 /--* t46 long arg0 in rcx N003 ( 15, 10) [000047] --C--------- t47 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST $18f /--* t47 ref N005 ( 19, 13) [000049] DA---------- * STORE_LCL_VAR ref V06 tmp5 d:2 N002 ( 3, 2) [000050] ------------ t50 = LCL_VAR ref V06 tmp5 u:2 $18f /--* t50 ref this in rcx N003 ( 17, 9) [000051] --CXG------- * CALL void System.Exception..ctor $VN.Void [000101] ------------ IL_OFFSET void INLRT @ 0x027[--] N002 ( 3, 2) [000052] ------------ t52 = LCL_VAR ref V06 tmp5 u:2 (last use) $18f /--* t52 ref arg0 in rcx N003 ( 17, 8) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW $190 ------------------------------------------------------------------------------------------------------------------- *************** In fgDebugCheckBBlist *************** Starting PHASE Do 'simple' lowering Bumping outgoingArgSpaceSize from 0 to 32 for call [000001] outgoingArgSpaceSize 32 sufficient for call [000010], which needs 32 outgoingArgSpaceSize 32 sufficient for call [000061], which needs 32 outgoingArgSpaceSize 32 sufficient for call [000028], which needs 32 outgoingArgSpaceSize 32 sufficient for call [000047], which needs 32 outgoingArgSpaceSize 32 sufficient for call [000051], which needs 32 outgoingArgSpaceSize 32 sufficient for call [000053], which needs 32 *************** Finishing PHASE Do 'simple' lowering *************** In fgDebugCheckBBlist Trees before Lowering nodeinfo ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB03 ( cond ) i hascall gcsafe newobj LIR BB02 [0009] 1 BB01 0.25 [???..???)-> BB05 ( cond ) i gcsafe LIR BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj LIR BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe LIR BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare gcsafe LIR BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj LIR ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..???) -> BB03 (cond), preds={} succs={BB02,BB03} [000097] ------------ IL_OFFSET void INLRT @ 0x000[E-] N002 ( 1, 4) [000000] H----------- t0 = CNS_INT(h) long 0x4000000000420070 method $140 /--* t0 long arg0 in rcx N003 ( 15, 10) [000001] --C--------- t1 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST $180 /--* t1 ref N005 ( 15, 10) [000003] DA---------- * STORE_LCL_VAR ref V02 tmp1 d:2 [000098] ------------ IL_OFFSET void INLRT @ 0x006[E-] N002 ( 1, 1) [000009] ------------ t9 = LCL_VAR ref V02 tmp1 u:2 $180 N003 ( 2, 10) [000095] ------------ t95 = CNS_INT long 0x4000000000420088 $1c1 /--* t95 long N004 ( 4, 12) [000076] n----------- t76 = * IND long /--* t9 ref this in rcx +--* t76 long control expr N005 ( 25, 22) [000010] --CXG------- t10 = * CALLV vt-ind ref Base.GetFoo $c5 /--* t10 ref N007 ( 25, 22) [000013] DA-XG------- * STORE_LCL_VAR ref V03 tmp2 d:2 N001 ( 1, 1) [000031] ------?----- t31 = LCL_VAR ref V03 tmp2 u:2 $c5 /--* t31 ref N003 ( 1, 3) [000092] DA---------- * STORE_LCL_VAR ref V05 tmp4 d:2 N001 ( 1, 1) [000024] ------------ t24 = LCL_VAR ref V05 tmp4 u:2 $c5 N002 ( 1, 1) [000023] ------------ t23 = CNS_INT ref null $VN.Null /--* t24 ref +--* t23 ref N003 ( 3, 3) [000025] J------N---- t25 = * EQ int $240 /--* t25 int N004 ( 5, 5) [000089] ------------ * JTRUE void ------------ BB02 [???..???) -> BB05 (cond), preds={BB01} succs={BB03,BB05} N001 ( 1, 1) [000014] ------?----- t14 = LCL_VAR ref V05 tmp4 u:2 $c5 /--* t14 ref N002 ( 3, 2) [000021] #----O?----- t21 = * IND long $184 N003 ( 1, 4) [000011] H-----?----- t11 = CNS_INT(h) long 0x40000000004200a0 class $141 /--* t11 long N005 ( 5, 7) [000017] DA----?----- * STORE_LCL_VAR long V04 tmp3 d:2 N006 ( 3, 2) [000018] ------?----- t18 = LCL_VAR long V04 tmp3 u:2 $141 /--* t21 long +--* t18 long N008 ( 12, 12) [000022] J----O?N---- t22 = * NE int $242 /--* t22 int N009 ( 14, 14) [000090] -----O------ * JTRUE void ------------ BB03 [???..022) -> BB06 (cond), preds={BB01,BB02} succs={BB04,BB06} N001 ( 1, 1) [000036] ------------ t36 = LCL_VAR ref V05 tmp4 u:2 (last use) $c5 N002 ( 1, 1) [000079] ------------ t79 = CNS_INT long 8 field offset Fseq[State] $42 /--* t36 ref +--* t79 long N003 ( 2, 2) [000080] -------N---- t80 = * ADD byref $2c0 /--* t80 byref N004 ( 4, 4) [000037] ---XG------- t37 = * IND ref /--* t37 ref N006 ( 4, 4) [000067] DA-XG------- * STORE_LCL_VAR ref V07 tmp6 d:2 N003 ( 1, 1) [000059] ------------ t59 = LCL_VAR ref V07 tmp6 u:2 (last use) N004 ( 1, 4) [000081] H----------- t81 = CNS_INT(h) ref 0x420148 [ICON_STR_HDL] $143 /--* t59 ref arg0 in rcx +--* t81 ref arg1 in rdx N005 ( 16, 12) [000061] --CXG------- t61 = * CALL int System.String.Equals $300 N006 ( 1, 1) [000064] ------------ t64 = CNS_INT int 0 $83 /--* t61 int +--* t64 int N007 ( 18, 14) [000065] J--XG--N---- t65 = * EQ int $243 /--* t65 int N008 ( 20, 16) [000044] ---XG------- * JTRUE void ------------ BB04 [028..029) (return), preds={BB03} succs={} [000099] ------------ IL_OFFSET void INLRT @ 0x028[E-] N001 ( 0, 0) [000045] ------------ RETURN void $340 ------------ BB05 [???..???) (throw), preds={BB02} succs={} N003 ( 3, 2) [000020] ------?----- t20 = LCL_VAR long V04 tmp3 u:2 (last use) $141 N004 ( 1, 1) [000027] ------?----- t27 = LCL_VAR ref V03 tmp2 u:2 (last use) $c5 /--* t20 long arg0 in rcx +--* t27 ref arg1 in rdx N005 ( 18, 10) [000028] --CXG-?----- t28 = * CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL $18a ------------ BB06 [022..028) (throw), preds={BB03} succs={} [000100] ------------ IL_OFFSET void INLRT @ 0x022[E-] N002 ( 1, 4) [000046] H----------- t46 = CNS_INT(h) long 0x40000000004200e8 token $144 /--* t46 long arg0 in rcx N003 ( 15, 10) [000047] --C--------- t47 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST $18f /--* t47 ref N005 ( 19, 13) [000049] DA---------- * STORE_LCL_VAR ref V06 tmp5 d:2 N002 ( 3, 2) [000050] ------------ t50 = LCL_VAR ref V06 tmp5 u:2 $18f /--* t50 ref this in rcx N003 ( 17, 9) [000051] --CXG------- * CALL void System.Exception..ctor $VN.Void [000101] ------------ IL_OFFSET void INLRT @ 0x027[--] N002 ( 3, 2) [000052] ------------ t52 = LCL_VAR ref V06 tmp5 u:2 (last use) $18f /--* t52 ref arg0 in rcx N003 ( 17, 8) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW $190 ------------------------------------------------------------------------------------------------------------------- *************** Starting PHASE Lowering nodeinfo lowering call (before): N002 ( 1, 4) [000000] H----------- t0 = CNS_INT(h) long 0x4000000000420070 method $140 /--* t0 long arg0 in rcx N003 ( 15, 10) [000001] --C--------- t1 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST $180 objp: ====== args: ====== lowering arg : N001 ( 0, 0) [000070] ----------L- * ARGPLACE long $140 late: ====== lowering arg : N002 ( 1, 4) [000000] H----------- * CNS_INT(h) long 0x4000000000420070 method $140 new node is : [000102] ------------ * PUTARG_REG long REG rcx lowering call (after): N002 ( 1, 4) [000000] H----------- t0 = CNS_INT(h) long 0x4000000000420070 method $140 /--* t0 long [000102] ------------ t102 = * PUTARG_REG long REG rcx /--* t102 long arg0 in rcx N003 ( 15, 10) [000001] --C--------- t1 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST $180 lowering store lcl var/field (before): N002 ( 1, 4) [000000] H----------- t0 = CNS_INT(h) long 0x4000000000420070 method $140 /--* t0 long [000102] ------------ t102 = * PUTARG_REG long REG rcx /--* t102 long arg0 in rcx N003 ( 15, 10) [000001] --C--------- t1 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST $180 /--* t1 ref N005 ( 15, 10) [000003] DA---------- * STORE_LCL_VAR ref V02 tmp1 d:2 lowering store lcl var/field (after): N002 ( 1, 4) [000000] H----------- t0 = CNS_INT(h) long 0x4000000000420070 method $140 /--* t0 long [000102] ------------ t102 = * PUTARG_REG long REG rcx /--* t102 long arg0 in rcx N003 ( 15, 10) [000001] --C--------- t1 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST $180 /--* t1 ref N005 ( 15, 10) [000003] DA---------- * STORE_LCL_VAR ref V02 tmp1 d:2 lowering call (before): N002 ( 1, 1) [000009] ------------ t9 = LCL_VAR ref V02 tmp1 u:2 $180 N003 ( 2, 10) [000095] ------------ t95 = CNS_INT long 0x4000000000420088 $1c1 /--* t95 long N004 ( 4, 12) [000076] n----------- t76 = * IND long /--* t9 ref this in rcx +--* t76 long control expr N005 ( 25, 22) [000010] --CXG------- t10 = * CALLV vt-ind ref Base.GetFoo $c5 objp: ====== lowering arg : N001 ( 0, 0) [000071] ----------L- * ARGPLACE ref $c3 args: ====== late: ====== lowering arg : N002 ( 1, 1) [000009] ------------ * LCL_VAR ref V02 tmp1 u:2 $180 new node is : [000103] ------------ * PUTARG_REG ref REG rcx lowering call (after): N002 ( 1, 1) [000009] ------------ t9 = LCL_VAR ref V02 tmp1 u:2 $180 /--* t9 ref [000103] ------------ t103 = * PUTARG_REG ref REG rcx N003 ( 2, 10) [000095] ------------ t95 = CNS_INT long 0x4000000000420088 $1c1 /--* t95 long N004 ( 4, 12) [000076] nc---------- t76 = * IND long REG NA /--* t103 ref this in rcx +--* t76 long control expr N005 ( 25, 22) [000010] --CXG------- t10 = * CALLV vt-ind ref Base.GetFoo $c5 lowering store lcl var/field (before): N002 ( 1, 1) [000009] ------------ t9 = LCL_VAR ref V02 tmp1 u:2 $180 /--* t9 ref [000103] ------------ t103 = * PUTARG_REG ref REG rcx N003 ( 2, 10) [000095] ------------ t95 = CNS_INT long 0x4000000000420088 $1c1 /--* t95 long N004 ( 4, 12) [000076] nc---------- t76 = * IND long REG NA /--* t103 ref this in rcx +--* t76 long control expr N005 ( 25, 22) [000010] --CXG------- t10 = * CALLV vt-ind ref Base.GetFoo $c5 /--* t10 ref N007 ( 25, 22) [000013] DA-XG------- * STORE_LCL_VAR ref V03 tmp2 d:2 lowering store lcl var/field (after): N002 ( 1, 1) [000009] ------------ t9 = LCL_VAR ref V02 tmp1 u:2 $180 /--* t9 ref [000103] ------------ t103 = * PUTARG_REG ref REG rcx N003 ( 2, 10) [000095] ------------ t95 = CNS_INT long 0x4000000000420088 $1c1 /--* t95 long N004 ( 4, 12) [000076] nc---------- t76 = * IND long REG NA /--* t103 ref this in rcx +--* t76 long control expr N005 ( 25, 22) [000010] --CXG------- t10 = * CALLV vt-ind ref Base.GetFoo $c5 /--* t10 ref N007 ( 25, 22) [000013] DA-XG------- * STORE_LCL_VAR ref V03 tmp2 d:2 lowering store lcl var/field (before): N001 ( 1, 1) [000031] ------?----- t31 = LCL_VAR ref V03 tmp2 u:2 $c5 /--* t31 ref N003 ( 1, 3) [000092] DA---------- * STORE_LCL_VAR ref V05 tmp4 d:2 lowering store lcl var/field (after): N001 ( 1, 1) [000031] ------?----- t31 = LCL_VAR ref V03 tmp2 u:2 $c5 /--* t31 ref N003 ( 1, 3) [000092] DA---------- * STORE_LCL_VAR ref V05 tmp4 d:2 lowering store lcl var/field (before): N003 ( 1, 4) [000011] H-----?----- t11 = CNS_INT(h) long 0x40000000004200a0 class $141 /--* t11 long N005 ( 5, 7) [000017] DA----?----- * STORE_LCL_VAR long V04 tmp3 d:2 lowering store lcl var/field (after): N003 ( 1, 4) [000011] H-----?----- t11 = CNS_INT(h) long 0x40000000004200a0 class $141 /--* t11 long N005 ( 5, 7) [000017] DA----?----- * STORE_LCL_VAR long V04 tmp3 d:2 Addressing mode: Base N001 ( 1, 1) [000036] ------------ * LCL_VAR ref V05 tmp4 u:2 (last use) $c5 + 8 Removing unused node: N002 ( 1, 1) [000079] -c---------- * CNS_INT long 8 field offset Fseq[State] $42 New addressing mode node: N003 ( 2, 2) [000080] ------------ * LEA(b+8) byref lowering store lcl var/field (before): N001 ( 1, 1) [000036] ------------ t36 = LCL_VAR ref V05 tmp4 u:2 (last use) $c5 /--* t36 ref N003 ( 2, 2) [000080] -c---------- t80 = * LEA(b+8) byref /--* t80 byref N004 ( 4, 4) [000037] ---XG------- t37 = * IND ref /--* t37 ref N006 ( 4, 4) [000067] DA-XG------- * STORE_LCL_VAR ref V07 tmp6 d:2 lowering store lcl var/field (after): N001 ( 1, 1) [000036] ------------ t36 = LCL_VAR ref V05 tmp4 u:2 (last use) $c5 /--* t36 ref N003 ( 2, 2) [000080] -c---------- t80 = * LEA(b+8) byref /--* t80 byref N004 ( 4, 4) [000037] ---XG------- t37 = * IND ref /--* t37 ref N006 ( 4, 4) [000067] DA-XG------- * STORE_LCL_VAR ref V07 tmp6 d:2 lowering call (before): N003 ( 1, 1) [000059] ------------ t59 = LCL_VAR ref V07 tmp6 u:2 (last use) N004 ( 1, 4) [000081] H----------- t81 = CNS_INT(h) ref 0x420148 [ICON_STR_HDL] $143 /--* t59 ref arg0 in rcx +--* t81 ref arg1 in rdx N005 ( 16, 12) [000061] --CXG------- t61 = * CALL int System.String.Equals $300 objp: ====== args: ====== lowering arg : N001 ( 0, 0) [000082] ----------L- * ARGPLACE ref lowering arg : N002 ( 0, 0) [000083] ----------L- * ARGPLACE ref $143 late: ====== lowering arg : N003 ( 1, 1) [000059] ------------ * LCL_VAR ref V07 tmp6 u:2 (last use) new node is : [000104] ------------ * PUTARG_REG ref REG rcx lowering arg : N004 ( 1, 4) [000081] H----------- * CNS_INT(h) ref 0x420148 [ICON_STR_HDL] $143 new node is : [000105] ------------ * PUTARG_REG ref REG rdx lowering call (after): N003 ( 1, 1) [000059] ------------ t59 = LCL_VAR ref V07 tmp6 u:2 (last use) /--* t59 ref [000104] ------------ t104 = * PUTARG_REG ref REG rcx N004 ( 1, 4) [000081] H----------- t81 = CNS_INT(h) ref 0x420148 [ICON_STR_HDL] $143 /--* t81 ref [000105] ------------ t105 = * PUTARG_REG ref REG rdx /--* t104 ref arg0 in rcx +--* t105 ref arg1 in rdx N005 ( 16, 12) [000061] --CXG------- t61 = * CALL int System.String.Equals $300 lowering GT_RETURN N001 ( 0, 0) [000045] ------------ * RETURN void $340 ============lowering call (before): N003 ( 3, 2) [000020] ------?----- t20 = LCL_VAR long V04 tmp3 u:2 (last use) $141 N004 ( 1, 1) [000027] ------?----- t27 = LCL_VAR ref V03 tmp2 u:2 (last use) $c5 /--* t20 long arg0 in rcx +--* t27 ref arg1 in rdx N005 ( 18, 10) [000028] --CXG-?----- t28 = * CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL $18a objp: ====== args: ====== lowering arg : N001 ( 0, 0) [000077] ------?---L- * ARGPLACE long $141 lowering arg : N002 ( 0, 0) [000078] ------?---L- * ARGPLACE ref $c5 late: ====== lowering arg : N003 ( 3, 2) [000020] ------?----- * LCL_VAR long V04 tmp3 u:2 (last use) $141 new node is : [000106] ------------ * PUTARG_REG long REG rcx lowering arg : N004 ( 1, 1) [000027] ------?----- * LCL_VAR ref V03 tmp2 u:2 (last use) $c5 new node is : [000107] ------------ * PUTARG_REG ref REG rdx lowering call (after): N003 ( 3, 2) [000020] ------?----- t20 = LCL_VAR long V04 tmp3 u:2 (last use) $141 /--* t20 long [000106] ------------ t106 = * PUTARG_REG long REG rcx N004 ( 1, 1) [000027] ------?----- t27 = LCL_VAR ref V03 tmp2 u:2 (last use) $c5 /--* t27 ref [000107] ------------ t107 = * PUTARG_REG ref REG rdx /--* t106 long arg0 in rcx +--* t107 ref arg1 in rdx N005 ( 18, 10) [000028] --CXG-?----- t28 = * CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL $18a lowering call (before): N002 ( 1, 4) [000046] H----------- t46 = CNS_INT(h) long 0x40000000004200e8 token $144 /--* t46 long arg0 in rcx N003 ( 15, 10) [000047] --C--------- t47 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST $18f objp: ====== args: ====== lowering arg : N001 ( 0, 0) [000086] ----------L- * ARGPLACE long $144 late: ====== lowering arg : N002 ( 1, 4) [000046] H----------- * CNS_INT(h) long 0x40000000004200e8 token $144 new node is : [000108] ------------ * PUTARG_REG long REG rcx lowering call (after): N002 ( 1, 4) [000046] H----------- t46 = CNS_INT(h) long 0x40000000004200e8 token $144 /--* t46 long [000108] ------------ t108 = * PUTARG_REG long REG rcx /--* t108 long arg0 in rcx N003 ( 15, 10) [000047] --C--------- t47 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST $18f lowering store lcl var/field (before): N002 ( 1, 4) [000046] H----------- t46 = CNS_INT(h) long 0x40000000004200e8 token $144 /--* t46 long [000108] ------------ t108 = * PUTARG_REG long REG rcx /--* t108 long arg0 in rcx N003 ( 15, 10) [000047] --C--------- t47 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST $18f /--* t47 ref N005 ( 19, 13) [000049] DA---------- * STORE_LCL_VAR ref V06 tmp5 d:2 lowering store lcl var/field (after): N002 ( 1, 4) [000046] H----------- t46 = CNS_INT(h) long 0x40000000004200e8 token $144 /--* t46 long [000108] ------------ t108 = * PUTARG_REG long REG rcx /--* t108 long arg0 in rcx N003 ( 15, 10) [000047] --C--------- t47 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST $18f /--* t47 ref N005 ( 19, 13) [000049] DA---------- * STORE_LCL_VAR ref V06 tmp5 d:2 lowering call (before): N002 ( 3, 2) [000050] ------------ t50 = LCL_VAR ref V06 tmp5 u:2 $18f /--* t50 ref this in rcx N003 ( 17, 9) [000051] --CXG------- * CALL void System.Exception..ctor $VN.Void objp: ====== lowering arg : N001 ( 0, 0) [000087] ----------L- * ARGPLACE ref $d2 args: ====== late: ====== lowering arg : N002 ( 3, 2) [000050] ------------ * LCL_VAR ref V06 tmp5 u:2 $18f new node is : [000109] ------------ * PUTARG_REG ref REG rcx lowering call (after): N002 ( 3, 2) [000050] ------------ t50 = LCL_VAR ref V06 tmp5 u:2 $18f /--* t50 ref [000109] ------------ t109 = * PUTARG_REG ref REG rcx /--* t109 ref this in rcx N003 ( 17, 9) [000051] --CXG------- * CALL void System.Exception..ctor $VN.Void lowering call (before): N002 ( 3, 2) [000052] ------------ t52 = LCL_VAR ref V06 tmp5 u:2 (last use) $18f /--* t52 ref arg0 in rcx N003 ( 17, 8) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW $190 objp: ====== args: ====== lowering arg : N001 ( 0, 0) [000088] ----------L- * ARGPLACE ref $18f late: ====== lowering arg : N002 ( 3, 2) [000052] ------------ * LCL_VAR ref V06 tmp5 u:2 (last use) $18f new node is : [000110] ------------ * PUTARG_REG ref REG rcx lowering call (after): N002 ( 3, 2) [000052] ------------ t52 = LCL_VAR ref V06 tmp5 u:2 (last use) $18f /--* t52 ref [000110] ------------ t110 = * PUTARG_REG ref REG rcx /--* t110 ref arg0 in rcx N003 ( 17, 8) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW $190 Lower has completed modifying nodes. ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB03 ( cond ) i hascall gcsafe newobj LIR BB02 [0009] 1 BB01 0.25 [???..???)-> BB05 ( cond ) i gcsafe LIR BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj LIR BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe LIR BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare gcsafe LIR BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj LIR ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..???) -> BB03 (cond), preds={} succs={BB02,BB03} [000097] ------------ IL_OFFSET void INLRT @ 0x000[E-] N002 ( 1, 4) [000000] H----------- t0 = CNS_INT(h) long 0x4000000000420070 method $140 /--* t0 long [000102] ------------ t102 = * PUTARG_REG long REG rcx /--* t102 long arg0 in rcx N003 ( 15, 10) [000001] --C--------- t1 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST $180 /--* t1 ref N005 ( 15, 10) [000003] DA---------- * STORE_LCL_VAR ref V02 tmp1 d:2 [000098] ------------ IL_OFFSET void INLRT @ 0x006[E-] N002 ( 1, 1) [000009] ------------ t9 = LCL_VAR ref V02 tmp1 u:2 $180 /--* t9 ref [000103] ------------ t103 = * PUTARG_REG ref REG rcx N003 ( 2, 10) [000095] ------------ t95 = CNS_INT long 0x4000000000420088 $1c1 /--* t95 long N004 ( 4, 12) [000076] nc---------- t76 = * IND long REG NA /--* t103 ref this in rcx +--* t76 long control expr N005 ( 25, 22) [000010] --CXG------- t10 = * CALLV vt-ind ref Base.GetFoo $c5 /--* t10 ref N007 ( 25, 22) [000013] DA-XG------- * STORE_LCL_VAR ref V03 tmp2 d:2 N001 ( 1, 1) [000031] ------?----- t31 = LCL_VAR ref V03 tmp2 u:2 $c5 /--* t31 ref N003 ( 1, 3) [000092] DA---------- * STORE_LCL_VAR ref V05 tmp4 d:2 N001 ( 1, 1) [000024] ------------ t24 = LCL_VAR ref V05 tmp4 u:2 $c5 N002 ( 1, 1) [000023] -c---------- t23 = CNS_INT ref null $VN.Null /--* t24 ref +--* t23 ref N003 ( 3, 3) [000025] J------N---- * EQ void $240 N004 ( 5, 5) [000089] ------------ * JTRUE void ------------ BB02 [???..???) -> BB05 (cond), preds={BB01} succs={BB03,BB05} N001 ( 1, 1) [000014] ------?----- t14 = LCL_VAR ref V05 tmp4 u:2 $c5 /--* t14 ref N002 ( 3, 2) [000021] #c---O?----- t21 = * IND long $184 N003 ( 1, 4) [000011] H-----?----- t11 = CNS_INT(h) long 0x40000000004200a0 class $141 /--* t11 long N005 ( 5, 7) [000017] DA----?----- * STORE_LCL_VAR long V04 tmp3 d:2 N006 ( 3, 2) [000018] ------?----- t18 = LCL_VAR long V04 tmp3 u:2 $141 /--* t21 long +--* t18 long N008 ( 12, 12) [000022] J----O?N---- * NE void $242 N009 ( 14, 14) [000090] -----O------ * JTRUE void ------------ BB03 [???..022) -> BB06 (cond), preds={BB01,BB02} succs={BB04,BB06} N001 ( 1, 1) [000036] ------------ t36 = LCL_VAR ref V05 tmp4 u:2 (last use) $c5 /--* t36 ref N003 ( 2, 2) [000080] -c---------- t80 = * LEA(b+8) byref /--* t80 byref N004 ( 4, 4) [000037] ---XG------- t37 = * IND ref /--* t37 ref N006 ( 4, 4) [000067] DA-XG------- * STORE_LCL_VAR ref V07 tmp6 d:2 N003 ( 1, 1) [000059] ------------ t59 = LCL_VAR ref V07 tmp6 u:2 (last use) /--* t59 ref [000104] ------------ t104 = * PUTARG_REG ref REG rcx N004 ( 1, 4) [000081] H----------- t81 = CNS_INT(h) ref 0x420148 [ICON_STR_HDL] $143 /--* t81 ref [000105] ------------ t105 = * PUTARG_REG ref REG rdx /--* t104 ref arg0 in rcx +--* t105 ref arg1 in rdx N005 ( 16, 12) [000061] --CXG------- t61 = * CALL int System.String.Equals $300 N006 ( 1, 1) [000064] -c---------- t64 = CNS_INT int 0 $83 /--* t61 int +--* t64 int N007 ( 18, 14) [000065] J--XG--N---- * EQ void $243 N008 ( 20, 16) [000044] ---XG------- * JTRUE void ------------ BB04 [028..029) (return), preds={BB03} succs={} [000099] ------------ IL_OFFSET void INLRT @ 0x028[E-] N001 ( 0, 0) [000045] ------------ RETURN void $340 ------------ BB05 [???..???) (throw), preds={BB02} succs={} N003 ( 3, 2) [000020] ------?----- t20 = LCL_VAR long V04 tmp3 u:2 (last use) $141 /--* t20 long [000106] ------------ t106 = * PUTARG_REG long REG rcx N004 ( 1, 1) [000027] ------?----- t27 = LCL_VAR ref V03 tmp2 u:2 (last use) $c5 /--* t27 ref [000107] ------------ t107 = * PUTARG_REG ref REG rdx /--* t106 long arg0 in rcx +--* t107 ref arg1 in rdx N005 ( 18, 10) [000028] --CXG-?----- t28 = * CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL $18a ------------ BB06 [022..028) (throw), preds={BB03} succs={} [000100] ------------ IL_OFFSET void INLRT @ 0x022[E-] N002 ( 1, 4) [000046] H----------- t46 = CNS_INT(h) long 0x40000000004200e8 token $144 /--* t46 long [000108] ------------ t108 = * PUTARG_REG long REG rcx /--* t108 long arg0 in rcx N003 ( 15, 10) [000047] --C--------- t47 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST $18f /--* t47 ref N005 ( 19, 13) [000049] DA---------- * STORE_LCL_VAR ref V06 tmp5 d:2 N002 ( 3, 2) [000050] ------------ t50 = LCL_VAR ref V06 tmp5 u:2 $18f /--* t50 ref [000109] ------------ t109 = * PUTARG_REG ref REG rcx /--* t109 ref this in rcx N003 ( 17, 9) [000051] --CXG------- * CALL void System.Exception..ctor $VN.Void [000101] ------------ IL_OFFSET void INLRT @ 0x027[--] N002 ( 3, 2) [000052] ------------ t52 = LCL_VAR ref V06 tmp5 u:2 (last use) $18f /--* t52 ref [000110] ------------ t110 = * PUTARG_REG ref REG rcx /--* t110 ref arg0 in rcx N003 ( 17, 8) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW $190 ------------------------------------------------------------------------------------------------------------------- *** lvaComputeRefCounts *** *** lvaComputeRefCounts -- explicit counts *** New refCnts for V02: refCnt = 1, refCntWtd = 2 New refCnts for V02: refCnt = 2, refCntWtd = 4 New refCnts for V03: refCnt = 1, refCntWtd = 2 New refCnts for V03: refCnt = 2, refCntWtd = 4 New refCnts for V05: refCnt = 1, refCntWtd = 2 New refCnts for V05: refCnt = 2, refCntWtd = 4 New refCnts for V05: refCnt = 3, refCntWtd = 4.50 New refCnts for V04: refCnt = 1, refCntWtd = 0.50 New refCnts for V04: refCnt = 2, refCntWtd = 1 New refCnts for V05: refCnt = 4, refCntWtd = 6.50 New refCnts for V07: refCnt = 1, refCntWtd = 2 New refCnts for V07: refCnt = 2, refCntWtd = 4 New refCnts for V04: refCnt = 3, refCntWtd = 1 New refCnts for V03: refCnt = 3, refCntWtd = 4 New refCnts for V06: refCnt = 1, refCntWtd = 0 New refCnts for V06: refCnt = 2, refCntWtd = 0 New refCnts for V06: refCnt = 3, refCntWtd = 0 *** lvaComputeRefCounts -- implicit counts *** *************** In fgLocalVarLiveness() ; Initial local variable assignments ; ; V00 loc0 ref class-hnd exact single-def ; V01 OutArgs lclBlk <32> "OutgoingArgSpace" ; V02 tmp1 ref class-hnd exact single-def "NewObj constructor temp" ; V03 tmp2 ref single-def "CASTCLASS eval op1" ; V04 tmp3 long "fgInsertCommaFormTemp is creating a new local variable" ; V05 tmp4 ref class-hnd "spilling QMark2" ; V06 tmp5 ref class-hnd exact single-def "NewObj constructor temp" ; V07 tmp6 ref class-hnd single-def "Inlining Arg" In fgLocalVarLivenessInit Tracked variable (6 out of 8) table: V05 tmp4 [ ref]: refCnt = 4, refCntWtd = 6.50 V03 tmp2 [ ref]: refCnt = 3, refCntWtd = 4 V02 tmp1 [ ref]: refCnt = 2, refCntWtd = 4 V07 tmp6 [ ref]: refCnt = 2, refCntWtd = 4 V04 tmp3 [ long]: refCnt = 3, refCntWtd = 1 V06 tmp5 [ ref]: refCnt = 3, refCntWtd = 0 *************** In fgPerBlockLocalVarLiveness() BB01 USE(0)={ } + ByrefExposed + GcHeap DEF(3)={V05 V03 V02} + ByrefExposed* + GcHeap* BB02 USE(1)={V05 } + ByrefExposed + GcHeap DEF(1)={ V04} BB03 USE(1)={V05 } + ByrefExposed + GcHeap DEF(1)={ V07} + ByrefExposed* + GcHeap* BB04 USE(0)={} DEF(0)={} BB05 USE(2)={V03 V04} DEF(0)={ } BB06 USE(0)={ } + ByrefExposed + GcHeap DEF(1)={V06} + ByrefExposed* + GcHeap* ** Memory liveness computed, GcHeap states and ByrefExposed states match *************** In fgInterBlockLocalVarLiveness() BB liveness after fgLiveVarAnalysis(): BB01 IN (0)={ } + ByrefExposed + GcHeap OUT(2)={V05 V03} + ByrefExposed + GcHeap BB02 IN (2)={V05 V03 } + ByrefExposed + GcHeap OUT(3)={V05 V03 V04} + ByrefExposed + GcHeap BB03 IN (1)={V05} + ByrefExposed + GcHeap OUT(0)={ } + ByrefExposed + GcHeap BB04 IN (0)={} OUT(0)={} BB05 IN (2)={V03 V04} OUT(0)={ } BB06 IN (0)={} + ByrefExposed + GcHeap OUT(0)={} *************** 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..???)-> BB03 ( cond ) i hascall gcsafe newobj LIR BB02 [0009] 1 BB01 0.25 [???..???)-> BB05 ( cond ) i gcsafe LIR BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj LIR BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe LIR BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare gcsafe LIR BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj LIR ----------------------------------------------------------------------------------------------------------------------------------------- *************** In fgDebugCheckBBlist *** lvaComputeRefCounts *** *** lvaComputeRefCounts -- explicit counts *** New refCnts for V02: refCnt = 1, refCntWtd = 2 New refCnts for V02: refCnt = 2, refCntWtd = 4 New refCnts for V03: refCnt = 1, refCntWtd = 2 New refCnts for V03: refCnt = 2, refCntWtd = 4 New refCnts for V05: refCnt = 1, refCntWtd = 2 New refCnts for V05: refCnt = 2, refCntWtd = 4 New refCnts for V05: refCnt = 3, refCntWtd = 4.50 New refCnts for V04: refCnt = 1, refCntWtd = 0.50 New refCnts for V04: refCnt = 2, refCntWtd = 1 New refCnts for V05: refCnt = 4, refCntWtd = 6.50 New refCnts for V07: refCnt = 1, refCntWtd = 2 New refCnts for V07: refCnt = 2, refCntWtd = 4 New refCnts for V04: refCnt = 3, refCntWtd = 1 New refCnts for V03: refCnt = 3, refCntWtd = 4 New refCnts for V06: refCnt = 1, refCntWtd = 0 New refCnts for V06: refCnt = 2, refCntWtd = 0 New refCnts for V06: refCnt = 3, refCntWtd = 0 *** lvaComputeRefCounts -- implicit counts *** *************** Finishing PHASE Lowering nodeinfo Trees after Lowering nodeinfo ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB03 ( cond ) i hascall gcsafe newobj LIR BB02 [0009] 1 BB01 0.25 [???..???)-> BB05 ( cond ) i gcsafe LIR BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj LIR BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe LIR BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare gcsafe LIR BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj LIR ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..???) -> BB03 (cond), preds={} succs={BB02,BB03} [000097] ------------ IL_OFFSET void INLRT @ 0x000[E-] N002 ( 1, 4) [000000] H----------- t0 = CNS_INT(h) long 0x4000000000420070 method $140 /--* t0 long [000102] ------------ t102 = * PUTARG_REG long REG rcx /--* t102 long arg0 in rcx N003 ( 15, 10) [000001] --C--------- t1 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST $180 /--* t1 ref N005 ( 15, 10) [000003] DA---------- * STORE_LCL_VAR ref V02 tmp1 d:2 [000098] ------------ IL_OFFSET void INLRT @ 0x006[E-] N002 ( 1, 1) [000009] ------------ t9 = LCL_VAR ref V02 tmp1 u:2 (last use) $180 /--* t9 ref [000103] ------------ t103 = * PUTARG_REG ref REG rcx N003 ( 2, 10) [000095] ------------ t95 = CNS_INT long 0x4000000000420088 $1c1 /--* t95 long N004 ( 4, 12) [000076] nc---------- t76 = * IND long REG NA /--* t103 ref this in rcx +--* t76 long control expr N005 ( 25, 22) [000010] --CXG------- t10 = * CALLV vt-ind ref Base.GetFoo $c5 /--* t10 ref N007 ( 25, 22) [000013] DA-XG------- * STORE_LCL_VAR ref V03 tmp2 d:2 N001 ( 1, 1) [000031] ------?----- t31 = LCL_VAR ref V03 tmp2 u:2 $c5 /--* t31 ref N003 ( 1, 3) [000092] DA---------- * STORE_LCL_VAR ref V05 tmp4 d:2 N001 ( 1, 1) [000024] ------------ t24 = LCL_VAR ref V05 tmp4 u:2 $c5 N002 ( 1, 1) [000023] -c---------- t23 = CNS_INT ref null $VN.Null /--* t24 ref +--* t23 ref N003 ( 3, 3) [000025] J------N---- * EQ void $240 N004 ( 5, 5) [000089] ------------ * JTRUE void ------------ BB02 [???..???) -> BB05 (cond), preds={BB01} succs={BB03,BB05} N001 ( 1, 1) [000014] ------?----- t14 = LCL_VAR ref V05 tmp4 u:2 $c5 /--* t14 ref N002 ( 3, 2) [000021] #c---O?----- t21 = * IND long $184 N003 ( 1, 4) [000011] H-----?----- t11 = CNS_INT(h) long 0x40000000004200a0 class $141 /--* t11 long N005 ( 5, 7) [000017] DA----?----- * STORE_LCL_VAR long V04 tmp3 d:2 N006 ( 3, 2) [000018] ------?----- t18 = LCL_VAR long V04 tmp3 u:2 $141 /--* t21 long +--* t18 long N008 ( 12, 12) [000022] J----O?N---- * NE void $242 N009 ( 14, 14) [000090] -----O------ * JTRUE void ------------ BB03 [???..022) -> BB06 (cond), preds={BB01,BB02} succs={BB04,BB06} N001 ( 1, 1) [000036] ------------ t36 = LCL_VAR ref V05 tmp4 u:2 (last use) $c5 /--* t36 ref N003 ( 2, 2) [000080] -c---------- t80 = * LEA(b+8) byref /--* t80 byref N004 ( 4, 4) [000037] ---XG------- t37 = * IND ref /--* t37 ref N006 ( 4, 4) [000067] DA-XG------- * STORE_LCL_VAR ref V07 tmp6 d:2 N003 ( 1, 1) [000059] ------------ t59 = LCL_VAR ref V07 tmp6 u:2 (last use) /--* t59 ref [000104] ------------ t104 = * PUTARG_REG ref REG rcx N004 ( 1, 4) [000081] H----------- t81 = CNS_INT(h) ref 0x420148 [ICON_STR_HDL] $143 /--* t81 ref [000105] ------------ t105 = * PUTARG_REG ref REG rdx /--* t104 ref arg0 in rcx +--* t105 ref arg1 in rdx N005 ( 16, 12) [000061] --CXG------- t61 = * CALL int System.String.Equals $300 N006 ( 1, 1) [000064] -c---------- t64 = CNS_INT int 0 $83 /--* t61 int +--* t64 int N007 ( 18, 14) [000065] J--XG--N---- * EQ void $243 N008 ( 20, 16) [000044] ---XG------- * JTRUE void ------------ BB04 [028..029) (return), preds={BB03} succs={} [000099] ------------ IL_OFFSET void INLRT @ 0x028[E-] N001 ( 0, 0) [000045] ------------ RETURN void $340 ------------ BB05 [???..???) (throw), preds={BB02} succs={} N003 ( 3, 2) [000020] ------?----- t20 = LCL_VAR long V04 tmp3 u:2 (last use) $141 /--* t20 long [000106] ------------ t106 = * PUTARG_REG long REG rcx N004 ( 1, 1) [000027] ------?----- t27 = LCL_VAR ref V03 tmp2 u:2 (last use) $c5 /--* t27 ref [000107] ------------ t107 = * PUTARG_REG ref REG rdx /--* t106 long arg0 in rcx +--* t107 ref arg1 in rdx N005 ( 18, 10) [000028] --CXG-?----- t28 = * CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL $18a ------------ BB06 [022..028) (throw), preds={BB03} succs={} [000100] ------------ IL_OFFSET void INLRT @ 0x022[E-] N002 ( 1, 4) [000046] H----------- t46 = CNS_INT(h) long 0x40000000004200e8 token $144 /--* t46 long [000108] ------------ t108 = * PUTARG_REG long REG rcx /--* t108 long arg0 in rcx N003 ( 15, 10) [000047] --C--------- t47 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST $18f /--* t47 ref N005 ( 19, 13) [000049] DA---------- * STORE_LCL_VAR ref V06 tmp5 d:2 N002 ( 3, 2) [000050] ------------ t50 = LCL_VAR ref V06 tmp5 u:2 $18f /--* t50 ref [000109] ------------ t109 = * PUTARG_REG ref REG rcx /--* t109 ref this in rcx N003 ( 17, 9) [000051] --CXG------- * CALL void System.Exception..ctor $VN.Void [000101] ------------ IL_OFFSET void INLRT @ 0x027[--] N002 ( 3, 2) [000052] ------------ t52 = LCL_VAR ref V06 tmp5 u:2 (last use) $18f /--* t52 ref [000110] ------------ t110 = * PUTARG_REG ref REG rcx /--* t110 ref arg0 in rcx N003 ( 17, 8) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW $190 ------------------------------------------------------------------------------------------------------------------- *************** In fgDebugCheckBBlist Trees before Calculate stack level slots ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB03 ( cond ) i hascall gcsafe newobj LIR BB02 [0009] 1 BB01 0.25 [???..???)-> BB05 ( cond ) i gcsafe LIR BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj LIR BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe LIR BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare gcsafe LIR BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj LIR ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..???) -> BB03 (cond), preds={} succs={BB02,BB03} [000097] ------------ IL_OFFSET void INLRT @ 0x000[E-] N002 ( 1, 4) [000000] H----------- t0 = CNS_INT(h) long 0x4000000000420070 method $140 /--* t0 long [000102] ------------ t102 = * PUTARG_REG long REG rcx /--* t102 long arg0 in rcx N003 ( 15, 10) [000001] --C--------- t1 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST $180 /--* t1 ref N005 ( 15, 10) [000003] DA---------- * STORE_LCL_VAR ref V02 tmp1 d:2 [000098] ------------ IL_OFFSET void INLRT @ 0x006[E-] N002 ( 1, 1) [000009] ------------ t9 = LCL_VAR ref V02 tmp1 u:2 (last use) $180 /--* t9 ref [000103] ------------ t103 = * PUTARG_REG ref REG rcx N003 ( 2, 10) [000095] ------------ t95 = CNS_INT long 0x4000000000420088 $1c1 /--* t95 long N004 ( 4, 12) [000076] nc---------- t76 = * IND long REG NA /--* t103 ref this in rcx +--* t76 long control expr N005 ( 25, 22) [000010] --CXG------- t10 = * CALLV vt-ind ref Base.GetFoo $c5 /--* t10 ref N007 ( 25, 22) [000013] DA-XG------- * STORE_LCL_VAR ref V03 tmp2 d:2 N001 ( 1, 1) [000031] ------?----- t31 = LCL_VAR ref V03 tmp2 u:2 $c5 /--* t31 ref N003 ( 1, 3) [000092] DA---------- * STORE_LCL_VAR ref V05 tmp4 d:2 N001 ( 1, 1) [000024] ------------ t24 = LCL_VAR ref V05 tmp4 u:2 $c5 N002 ( 1, 1) [000023] -c---------- t23 = CNS_INT ref null $VN.Null /--* t24 ref +--* t23 ref N003 ( 3, 3) [000025] J------N---- * EQ void $240 N004 ( 5, 5) [000089] ------------ * JTRUE void ------------ BB02 [???..???) -> BB05 (cond), preds={BB01} succs={BB03,BB05} N001 ( 1, 1) [000014] ------?----- t14 = LCL_VAR ref V05 tmp4 u:2 $c5 /--* t14 ref N002 ( 3, 2) [000021] #c---O?----- t21 = * IND long $184 N003 ( 1, 4) [000011] H-----?----- t11 = CNS_INT(h) long 0x40000000004200a0 class $141 /--* t11 long N005 ( 5, 7) [000017] DA----?----- * STORE_LCL_VAR long V04 tmp3 d:2 N006 ( 3, 2) [000018] ------?----- t18 = LCL_VAR long V04 tmp3 u:2 $141 /--* t21 long +--* t18 long N008 ( 12, 12) [000022] J----O?N---- * NE void $242 N009 ( 14, 14) [000090] -----O------ * JTRUE void ------------ BB03 [???..022) -> BB06 (cond), preds={BB01,BB02} succs={BB04,BB06} N001 ( 1, 1) [000036] ------------ t36 = LCL_VAR ref V05 tmp4 u:2 (last use) $c5 /--* t36 ref N003 ( 2, 2) [000080] -c---------- t80 = * LEA(b+8) byref /--* t80 byref N004 ( 4, 4) [000037] ---XG------- t37 = * IND ref /--* t37 ref N006 ( 4, 4) [000067] DA-XG------- * STORE_LCL_VAR ref V07 tmp6 d:2 N003 ( 1, 1) [000059] ------------ t59 = LCL_VAR ref V07 tmp6 u:2 (last use) /--* t59 ref [000104] ------------ t104 = * PUTARG_REG ref REG rcx N004 ( 1, 4) [000081] H----------- t81 = CNS_INT(h) ref 0x420148 [ICON_STR_HDL] $143 /--* t81 ref [000105] ------------ t105 = * PUTARG_REG ref REG rdx /--* t104 ref arg0 in rcx +--* t105 ref arg1 in rdx N005 ( 16, 12) [000061] --CXG------- t61 = * CALL int System.String.Equals $300 N006 ( 1, 1) [000064] -c---------- t64 = CNS_INT int 0 $83 /--* t61 int +--* t64 int N007 ( 18, 14) [000065] J--XG--N---- * EQ void $243 N008 ( 20, 16) [000044] ---XG------- * JTRUE void ------------ BB04 [028..029) (return), preds={BB03} succs={} [000099] ------------ IL_OFFSET void INLRT @ 0x028[E-] N001 ( 0, 0) [000045] ------------ RETURN void $340 ------------ BB05 [???..???) (throw), preds={BB02} succs={} N003 ( 3, 2) [000020] ------?----- t20 = LCL_VAR long V04 tmp3 u:2 (last use) $141 /--* t20 long [000106] ------------ t106 = * PUTARG_REG long REG rcx N004 ( 1, 1) [000027] ------?----- t27 = LCL_VAR ref V03 tmp2 u:2 (last use) $c5 /--* t27 ref [000107] ------------ t107 = * PUTARG_REG ref REG rdx /--* t106 long arg0 in rcx +--* t107 ref arg1 in rdx N005 ( 18, 10) [000028] --CXG-?----- t28 = * CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL $18a ------------ BB06 [022..028) (throw), preds={BB03} succs={} [000100] ------------ IL_OFFSET void INLRT @ 0x022[E-] N002 ( 1, 4) [000046] H----------- t46 = CNS_INT(h) long 0x40000000004200e8 token $144 /--* t46 long [000108] ------------ t108 = * PUTARG_REG long REG rcx /--* t108 long arg0 in rcx N003 ( 15, 10) [000047] --C--------- t47 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST $18f /--* t47 ref N005 ( 19, 13) [000049] DA---------- * STORE_LCL_VAR ref V06 tmp5 d:2 N002 ( 3, 2) [000050] ------------ t50 = LCL_VAR ref V06 tmp5 u:2 $18f /--* t50 ref [000109] ------------ t109 = * PUTARG_REG ref REG rcx /--* t109 ref this in rcx N003 ( 17, 9) [000051] --CXG------- * CALL void System.Exception..ctor $VN.Void [000101] ------------ IL_OFFSET void INLRT @ 0x027[--] N002 ( 3, 2) [000052] ------------ t52 = LCL_VAR ref V06 tmp5 u:2 (last use) $18f /--* t52 ref [000110] ------------ t110 = * PUTARG_REG ref REG rcx /--* t110 ref arg0 in rcx N003 ( 17, 8) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW $190 ------------------------------------------------------------------------------------------------------------------- *************** Starting PHASE Calculate stack level slots *************** Finishing PHASE Calculate stack level slots [no changes] *************** Starting PHASE Linear scan register alloc Clearing modified regs. buildIntervals ======== ----------------- LIVENESS: ----------------- BB01 use def in out {} {V02 V03 V05} {} {V03 V05} BB02 use def in out {V05} {V04} {V03 V05} {V03 V04 V05} BB03 use def in out {V05} {V07} {V05} {} BB04 use def in out {} {} {} {} BB05 use def in out {V03 V04} {} {V03 V04} {} BB06 use def in out {} {V06} {} {} Interval 0: ref RefPositions {} physReg:NA Preferences=[allInt] Interval 0: (V02) ref RefPositions {} physReg:NA Preferences=[allInt] Interval 1: ref RefPositions {} physReg:NA Preferences=[allInt] Interval 1: (V03) ref RefPositions {} physReg:NA Preferences=[allInt] Interval 2: long RefPositions {} physReg:NA Preferences=[allInt] Interval 2: (V04) long RefPositions {} physReg:NA Preferences=[allInt] Interval 3: ref RefPositions {} physReg:NA Preferences=[allInt] Interval 3: (V05) ref RefPositions {} physReg:NA Preferences=[allInt] Interval 4: ref RefPositions {} physReg:NA Preferences=[allInt] Interval 4: (V06) ref RefPositions {} physReg:NA Preferences=[allInt] Interval 5: ref RefPositions {} physReg:NA Preferences=[allInt] Interval 5: (V07) ref RefPositions {} physReg:NA Preferences=[allInt] FP callee save candidate vars: None floatVarCount = 0; hasLoops = false, singleExit = true TUPLE STYLE DUMP BEFORE LSRA Start LSRA Block Sequence: Current block: BB01 Succ block: BB02, Criteria: weight, Worklist: [BB02 ] Succ block: BB03, Criteria: weight, Worklist: [BB02 BB03 ] Current block: BB02 Succ block: BB05, Criteria: weight, Worklist: [BB03 BB05 ] Current block: BB03 Succ block: BB04, Criteria: bbNum, Worklist: [BB04 BB05 ] Succ block: BB06, Criteria: weight, Worklist: [BB04 BB05 BB06 ] Current block: BB04 Current block: BB05 Current block: BB06 Final LSRA Block Sequence: BB01( 1 ) BB02( 0.25) BB03( 1 ) BB04( 1 ) BB05( 0 ) BB06( 0 ) BB01 [000..???) -> BB03 (cond), preds={} succs={BB02,BB03} ===== N000. IL_OFFSET INLRT @ 0x000[E-] N002. t0 = CNS_INT(h) 0x4000000000420070 method N000. t102 = PUTARG_REG; t0 N003. t1 = CALL help; t102 N005. V02(t3); t1 N000. IL_OFFSET INLRT @ 0x006[E-] N002. V02(t9*) N000. t103 = PUTARG_REG; t9* N003. t95 = CNS_INT 0x4000000000420088 N004. t76 = IND ; t95 N005. t10 = CALLV vt-ind; t103,t76 N007. V03(t13); t10 N001. V03(t31) N003. V05(t92); t31 N001. V05(t24) N002. CNS_INT null N003. EQ ; t24 N004. JTRUE BB02 [???..???) -> BB05 (cond), preds={BB01} succs={BB03,BB05} ===== N001. V05(t14) N002. t21 = IND ; t14 N003. t11 = CNS_INT(h) 0x40000000004200a0 class N005. V04(t17); t11 N006. V04(t18) N008. NE ; t21,t18 N009. JTRUE BB03 [???..022) -> BB06 (cond), preds={BB01,BB02} succs={BB04,BB06} ===== N001. V05(t36*) N003. t80 = LEA(b+8) ; t36* N004. t37 = IND ; t80 N006. V07(t67); t37 N003. V07(t59*) N000. t104 = PUTARG_REG; t59* N004. t81 = CNS_INT(h) 0x420148 [ICON_STR_HDL] N000. t105 = PUTARG_REG; t81 N005. t61 = CALL ; t104,t105 N006. CNS_INT 0 N007. EQ ; t61 N008. JTRUE BB04 [028..029) (return), preds={BB03} succs={} ===== N000. IL_OFFSET INLRT @ 0x028[E-] N001. RETURN BB05 [???..???) (throw), preds={BB02} succs={} ===== N003. V04(t20*) N000. t106 = PUTARG_REG; t20* N004. V03(t27*) N000. t107 = PUTARG_REG; t27* N005. CALL help; t106,t107 BB06 [022..028) (throw), preds={BB03} succs={} ===== N000. IL_OFFSET INLRT @ 0x022[E-] N002. t46 = CNS_INT(h) 0x40000000004200e8 token N000. t108 = PUTARG_REG; t46 N003. t47 = CALL help; t108 N005. V06(t49); t47 N002. V06(t50) N000. t109 = PUTARG_REG; t50 N003. CALL ; t109 N000. IL_OFFSET INLRT @ 0x027[--] N002. V06(t52*) N000. t110 = PUTARG_REG; t52* N003. CALL help; t110 buildIntervals second part ======== NEW BLOCK BB01 DefList: { } N003 (???,???) [000097] ------------ * IL_OFFSET void INLRT @ 0x000[E-] REG NA DefList: { } N005 ( 1, 4) [000000] H----------- * CNS_INT(h) long 0x4000000000420070 method REG NA $140 Interval 6: long RefPositions {} physReg:NA Preferences=[allInt] CNS_INT BB01 regmask=[allInt] minReg=1 wt=400.00> DefList: { N005.t0. CNS_INT } N007 (???,???) [000102] ------------ * PUTARG_REG long REG rcx BB01 regmask=[rcx] minReg=1 wt=100.00> BB01 regmask=[rcx] minReg=1 last fixed wt=100.00> Interval 7: long RefPositions {} physReg:NA Preferences=[allInt] BB01 regmask=[rcx] minReg=1 wt=100.00> PUTARG_REG BB01 regmask=[rcx] minReg=1 fixed wt=400.00> DefList: { N007.t102. PUTARG_REG } N009 ( 15, 10) [000001] --C--------- * CALL help ref HELPER.CORINFO_HELP_NEWSFAST REG NA $180 BB01 regmask=[rcx] minReg=1 wt=100.00> BB01 regmask=[rcx] minReg=1 last fixed wt=100.00> BB01 regmask=[rax] minReg=1 wt=100.00> BB01 regmask=[rcx] minReg=1 wt=100.00> BB01 regmask=[rdx] minReg=1 wt=100.00> BB01 regmask=[r8] minReg=1 wt=100.00> BB01 regmask=[r9] minReg=1 wt=100.00> BB01 regmask=[r10] minReg=1 wt=100.00> BB01 regmask=[r11] minReg=1 wt=100.00> Interval 8: ref RefPositions {} physReg:NA Preferences=[allInt] BB01 regmask=[rax] minReg=1 wt=100.00> CALL BB01 regmask=[rax] minReg=1 fixed wt=400.00> DefList: { N009.t1. CALL } N011 ( 15, 10) [000003] DA---------- * STORE_LCL_VAR ref V02 tmp1 d:2 NA REG NA BB01 regmask=[allInt] minReg=1 last wt=100.00> Assigning related to STORE_LCL_VAR BB01 regmask=[allInt] minReg=1 last wt=400.00> DefList: { } N013 (???,???) [000098] ------------ * IL_OFFSET void INLRT @ 0x006[E-] REG NA DefList: { } N015 ( 1, 1) [000009] ------------ * LCL_VAR ref V02 tmp1 u:2 NA (last use) REG NA $180 DefList: { } N017 (???,???) [000103] ------------ * PUTARG_REG ref REG rcx BB01 regmask=[rcx] minReg=1 wt=100.00> LCL_VAR BB01 regmask=[rcx] minReg=1 last fixed wt=400.00> Interval 9: ref RefPositions {} physReg:NA Preferences=[allInt] BB01 regmask=[rcx] minReg=1 wt=100.00> PUTARG_REG BB01 regmask=[rcx] minReg=1 fixed wt=400.00> DefList: { N017.t103. PUTARG_REG } N019 ( 2, 10) [000095] ------------ * CNS_INT long 0x4000000000420088 REG NA $1c1 Interval 10: long RefPositions {} physReg:NA Preferences=[allInt] CNS_INT BB01 regmask=[allInt] minReg=1 wt=400.00> DefList: { N017.t103. PUTARG_REG; N019.t95. CNS_INT } N021 ( 4, 12) [000076] nc---------- * IND long REG NA Contained DefList: { N017.t103. PUTARG_REG; N019.t95. CNS_INT } N023 ( 25, 22) [000010] --CXG------- * CALLV vt-ind ref Base.GetFoo REG NA $c5 BB01 regmask=[rcx] minReg=1 wt=100.00> BB01 regmask=[rcx] minReg=1 last fixed wt=100.00> BB01 regmask=[allInt] minReg=1 last wt=100.00> BB01 regmask=[rax] minReg=1 wt=100.00> BB01 regmask=[rcx] minReg=1 wt=100.00> BB01 regmask=[rdx] minReg=1 wt=100.00> BB01 regmask=[r8] minReg=1 wt=100.00> BB01 regmask=[r9] minReg=1 wt=100.00> BB01 regmask=[r10] minReg=1 wt=100.00> BB01 regmask=[r11] minReg=1 wt=100.00> Interval 11: ref RefPositions {} physReg:NA Preferences=[allInt] BB01 regmask=[rax] minReg=1 wt=100.00> CALL BB01 regmask=[rax] minReg=1 fixed wt=400.00> DefList: { N023.t10. CALL } N025 ( 25, 22) [000013] DA-XG------- * STORE_LCL_VAR ref V03 tmp2 d:2 NA REG NA BB01 regmask=[allInt] minReg=1 last wt=100.00> Assigning related to STORE_LCL_VAR BB01 regmask=[allInt] minReg=1 last wt=400.00> DefList: { } N027 ( 1, 1) [000031] ------?----- * LCL_VAR ref V03 tmp2 u:2 NA REG NA $c5 DefList: { } N029 ( 1, 3) [000092] DA---------- * STORE_LCL_VAR ref V05 tmp4 d:2 NA REG NA LCL_VAR BB01 regmask=[allInt] minReg=1 last wt=400.00> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1 last wt=650.00> DefList: { } N031 ( 1, 1) [000024] ------------ * LCL_VAR ref V05 tmp4 u:2 NA REG NA $c5 DefList: { } N033 ( 1, 1) [000023] -c---------- * CNS_INT ref null REG NA $VN.Null Contained DefList: { } N035 ( 3, 3) [000025] J------N---- * EQ void REG NA $240 LCL_VAR BB01 regmask=[allInt] minReg=1 last wt=650.00> DefList: { } N037 ( 5, 5) [000089] ------------ * JTRUE void REG NA CHECKING LAST USES for BB01, liveout={V03 V05} ============================== use: {} def: {V02 V03 V05} NEW BLOCK BB02 Setting BB01 as the predecessor for determining incoming variable registers of BB02 DefList: { } N041 ( 1, 1) [000014] ------?----- * LCL_VAR ref V05 tmp4 u:2 NA REG NA $c5 DefList: { } N043 ( 3, 2) [000021] #c---O?----- * IND long REG NA $184 Contained DefList: { } N045 ( 1, 4) [000011] H-----?----- * CNS_INT(h) long 0x40000000004200a0 class REG NA $141 Interval 12: long RefPositions {} physReg:NA Preferences=[allInt] CNS_INT BB02 regmask=[allInt] minReg=1 wt=100.00> DefList: { N045.t11. CNS_INT } N047 ( 5, 7) [000017] DA----?----- * STORE_LCL_VAR long V04 tmp3 d:2 NA REG NA BB02 regmask=[allInt] minReg=1 last wt=25.00> Assigning related to STORE_LCL_VAR BB02 regmask=[allInt] minReg=1 last wt=100.00> DefList: { } N049 ( 3, 2) [000018] ------?----- * LCL_VAR long V04 tmp3 u:2 NA REG NA $141 DefList: { } N051 ( 12, 12) [000022] J----O?N---- * NE void REG NA $242 LCL_VAR BB02 regmask=[allInt] minReg=1 last wt=650.00> LCL_VAR BB02 regmask=[allInt] minReg=1 last wt=100.00> DefList: { } N053 ( 14, 14) [000090] -----O------ * JTRUE void REG NA CHECKING LAST USES for BB02, liveout={V03 V04 V05} ============================== use: {V05} def: {V04} NEW BLOCK BB03 Setting BB01 as the predecessor for determining incoming variable registers of BB03 DefList: { } N057 ( 1, 1) [000036] ------------ * LCL_VAR ref V05 tmp4 u:2 NA (last use) REG NA $c5 DefList: { } N059 ( 2, 2) [000080] -c---------- * LEA(b+8) byref REG NA Contained DefList: { } N061 ( 4, 4) [000037] ---XG------- * IND ref REG NA LCL_VAR BB03 regmask=[allInt] minReg=1 last wt=650.00> Interval 13: ref RefPositions {} physReg:NA Preferences=[allInt] IND BB03 regmask=[allInt] minReg=1 wt=400.00> DefList: { N061.t37. IND } N063 ( 4, 4) [000067] DA-XG------- * STORE_LCL_VAR ref V07 tmp6 d:2 NA REG NA BB03 regmask=[allInt] minReg=1 last wt=100.00> Assigning related to STORE_LCL_VAR BB03 regmask=[allInt] minReg=1 last wt=400.00> DefList: { } N065 ( 1, 1) [000059] ------------ * LCL_VAR ref V07 tmp6 u:2 NA (last use) REG NA DefList: { } N067 (???,???) [000104] ------------ * PUTARG_REG ref REG rcx BB03 regmask=[rcx] minReg=1 wt=100.00> LCL_VAR BB03 regmask=[rcx] minReg=1 last fixed wt=400.00> Interval 14: ref RefPositions {} physReg:NA Preferences=[allInt] BB03 regmask=[rcx] minReg=1 wt=100.00> PUTARG_REG BB03 regmask=[rcx] minReg=1 fixed wt=400.00> DefList: { N067.t104. PUTARG_REG } N069 ( 1, 4) [000081] H----------- * CNS_INT(h) ref 0x420148 [ICON_STR_HDL] REG NA $143 Interval 15: ref RefPositions {} physReg:NA Preferences=[allInt] CNS_INT BB03 regmask=[allInt] minReg=1 wt=400.00> DefList: { N067.t104. PUTARG_REG; N069.t81. CNS_INT } N071 (???,???) [000105] ------------ * PUTARG_REG ref REG rdx BB03 regmask=[rdx] minReg=1 wt=100.00> BB03 regmask=[rdx] minReg=1 last fixed wt=100.00> Interval 16: ref RefPositions {} physReg:NA Preferences=[allInt] BB03 regmask=[rdx] minReg=1 wt=100.00> PUTARG_REG BB03 regmask=[rdx] minReg=1 fixed wt=400.00> DefList: { N067.t104. PUTARG_REG; N071.t105. PUTARG_REG } N073 ( 16, 12) [000061] --CXG------- * CALL int System.String.Equals REG NA $300 BB03 regmask=[rcx] minReg=1 wt=100.00> BB03 regmask=[rcx] minReg=1 last fixed wt=100.00> BB03 regmask=[rdx] minReg=1 wt=100.00> BB03 regmask=[rdx] minReg=1 last fixed wt=100.00> BB03 regmask=[rax] minReg=1 wt=100.00> BB03 regmask=[rcx] minReg=1 wt=100.00> BB03 regmask=[rdx] minReg=1 wt=100.00> BB03 regmask=[r8] minReg=1 wt=100.00> BB03 regmask=[r9] minReg=1 wt=100.00> BB03 regmask=[r10] minReg=1 wt=100.00> BB03 regmask=[r11] minReg=1 wt=100.00> Interval 17: int RefPositions {} physReg:NA Preferences=[allInt] BB03 regmask=[rax] minReg=1 wt=100.00> CALL BB03 regmask=[rax] minReg=1 fixed wt=400.00> DefList: { N073.t61. CALL } N075 ( 1, 1) [000064] -c---------- * CNS_INT int 0 REG NA $83 Contained DefList: { N073.t61. CALL } N077 ( 18, 14) [000065] J--XG--N---- * EQ void REG NA $243 BB03 regmask=[allInt] minReg=1 last wt=100.00> DefList: { } N079 ( 20, 16) [000044] ---XG------- * JTRUE void REG NA CHECKING LAST USES for BB03, liveout={} ============================== use: {V05} def: {V07} NEW BLOCK BB04 Setting BB03 as the predecessor for determining incoming variable registers of BB04 DefList: { } N083 (???,???) [000099] ------------ * IL_OFFSET void INLRT @ 0x028[E-] REG NA DefList: { } N085 ( 0, 0) [000045] ------------ * RETURN void REG NA $340 CHECKING LAST USES for BB04, liveout={} ============================== use: {} def: {} NEW BLOCK BB05 Setting BB01 as the predecessor for determining incoming variable registers of BB05 Creating dummy definitions BB05 regmask=[allInt] minReg=1 last wt=0.00> Finished creating dummy definitions firstColdLoc = 89 DefList: { } N089 ( 3, 2) [000020] ------?----- * LCL_VAR long V04 tmp3 u:2 NA (last use) REG NA $141 DefList: { } N091 (???,???) [000106] ------------ * PUTARG_REG long REG rcx BB05 regmask=[rcx] minReg=1 wt=0.00> LCL_VAR BB05 regmask=[rcx] minReg=1 last fixed wt=100.00> Interval 18: long RefPositions {} physReg:NA Preferences=[allInt] BB05 regmask=[rcx] minReg=1 wt=0.00> PUTARG_REG BB05 regmask=[rcx] minReg=1 fixed wt=0.00> DefList: { N091.t106. PUTARG_REG } N093 ( 1, 1) [000027] ------?----- * LCL_VAR ref V03 tmp2 u:2 NA (last use) REG NA $c5 DefList: { N091.t106. PUTARG_REG } N095 (???,???) [000107] ------------ * PUTARG_REG ref REG rdx BB05 regmask=[rdx] minReg=1 wt=0.00> LCL_VAR BB05 regmask=[rdx] minReg=1 last fixed wt=400.00> Interval 19: ref RefPositions {} physReg:NA Preferences=[allInt] BB05 regmask=[rdx] minReg=1 wt=0.00> PUTARG_REG BB05 regmask=[rdx] minReg=1 fixed wt=0.00> DefList: { N091.t106. PUTARG_REG; N095.t107. PUTARG_REG } N097 ( 18, 10) [000028] --CXG-?----- * CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL REG NA $18a BB05 regmask=[rcx] minReg=1 wt=0.00> BB05 regmask=[rcx] minReg=1 last fixed wt=0.00> BB05 regmask=[rdx] minReg=1 wt=0.00> BB05 regmask=[rdx] minReg=1 last fixed wt=0.00> BB05 regmask=[rax] minReg=1 wt=0.00> BB05 regmask=[rcx] minReg=1 wt=0.00> BB05 regmask=[rdx] minReg=1 wt=0.00> BB05 regmask=[r8] minReg=1 wt=0.00> BB05 regmask=[r9] minReg=1 wt=0.00> BB05 regmask=[r10] minReg=1 wt=0.00> BB05 regmask=[r11] minReg=1 wt=0.00> Interval 20: ref RefPositions {} physReg:NA Preferences=[allInt] BB05 regmask=[rax] minReg=1 wt=0.00> CALL BB05 regmask=[rax] minReg=1 fixed wt=0.00> CHECKING LAST USES for BB05, liveout={} ============================== use: {V03 V04} def: {} NEW BLOCK BB06 Setting BB03 as the predecessor for determining incoming variable registers of BB06 DefList: { } N101 (???,???) [000100] ------------ * IL_OFFSET void INLRT @ 0x022[E-] REG NA DefList: { } N103 ( 1, 4) [000046] H----------- * CNS_INT(h) long 0x40000000004200e8 token REG NA $144 Interval 21: long RefPositions {} physReg:NA Preferences=[allInt] CNS_INT BB06 regmask=[allInt] minReg=1 wt=0.00> DefList: { N103.t46. CNS_INT } N105 (???,???) [000108] ------------ * PUTARG_REG long REG rcx BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> Interval 22: long RefPositions {} physReg:NA Preferences=[allInt] BB06 regmask=[rcx] minReg=1 wt=0.00> PUTARG_REG BB06 regmask=[rcx] minReg=1 fixed wt=0.00> DefList: { N105.t108. PUTARG_REG } N107 ( 15, 10) [000047] --C--------- * CALL help ref HELPER.CORINFO_HELP_NEWSFAST REG NA $18f BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> BB06 regmask=[rax] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rdx] minReg=1 wt=0.00> BB06 regmask=[r8] minReg=1 wt=0.00> BB06 regmask=[r9] minReg=1 wt=0.00> BB06 regmask=[r10] minReg=1 wt=0.00> BB06 regmask=[r11] minReg=1 wt=0.00> Interval 23: ref RefPositions {} physReg:NA Preferences=[allInt] BB06 regmask=[rax] minReg=1 wt=0.00> CALL BB06 regmask=[rax] minReg=1 fixed wt=0.00> DefList: { N107.t47. CALL } N109 ( 19, 13) [000049] DA---------- * STORE_LCL_VAR ref V06 tmp5 d:2 NA REG NA BB06 regmask=[allInt] minReg=1 last wt=0.00> Assigning related to STORE_LCL_VAR BB06 regmask=[allInt] minReg=1 last wt=0.00> DefList: { } N111 ( 3, 2) [000050] ------------ * LCL_VAR ref V06 tmp5 u:2 NA REG NA $18f DefList: { } N113 (???,???) [000109] ------------ * PUTARG_REG ref REG rcx BB06 regmask=[rcx] minReg=1 wt=0.00> LCL_VAR BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> Setting putarg_reg as a pass-through of a non-last use lclVar Interval 24: ref RefPositions {} physReg:NA Preferences=[allInt] BB06 regmask=[rcx] minReg=1 wt=0.00> PUTARG_REG BB06 regmask=[rcx] minReg=1 fixed wt=0.00> Assigning related to DefList: { N113.t109. PUTARG_REG } N115 ( 17, 9) [000051] --CXG------- * CALL void System.Exception..ctor REG NA $VN.Void BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> BB06 regmask=[rax] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rdx] minReg=1 wt=0.00> BB06 regmask=[r8] minReg=1 wt=0.00> BB06 regmask=[r9] minReg=1 wt=0.00> BB06 regmask=[r10] minReg=1 wt=0.00> BB06 regmask=[r11] minReg=1 wt=0.00> DefList: { } N117 (???,???) [000101] ------------ * IL_OFFSET void INLRT @ 0x027[--] REG NA DefList: { } N119 ( 3, 2) [000052] ------------ * LCL_VAR ref V06 tmp5 u:2 NA (last use) REG NA $18f DefList: { } N121 (???,???) [000110] ------------ * PUTARG_REG ref REG rcx BB06 regmask=[rcx] minReg=1 wt=0.00> LCL_VAR BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> Interval 25: ref RefPositions {} physReg:NA Preferences=[allInt] BB06 regmask=[rcx] minReg=1 wt=0.00> PUTARG_REG BB06 regmask=[rcx] minReg=1 fixed wt=0.00> DefList: { N121.t110. PUTARG_REG } N123 ( 17, 8) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW REG NA $190 BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> BB06 regmask=[rax] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rdx] minReg=1 wt=0.00> BB06 regmask=[r8] minReg=1 wt=0.00> BB06 regmask=[r9] minReg=1 wt=0.00> BB06 regmask=[r10] minReg=1 wt=0.00> BB06 regmask=[r11] minReg=1 wt=0.00> CHECKING LAST USES for BB06, liveout={} ============================== use: {} def: {V06} Linear scan intervals BEFORE VALIDATING INTERVALS: Interval 0: (V02) ref RefPositions {#18@12 #20@17} physReg:NA Preferences=[rcx] Interval 1: (V03) ref RefPositions {#37@26 #38@29 #83@95} physReg:NA Preferences=[rdx] Interval 2: (V04) long RefPositions {#44@48 #46@51 #76@87 #79@91} physReg:NA Preferences=[rcx] Interval 3: (V05) ref RefPositions {#39@30 #40@35 #45@51 #48@61} physReg:NA Preferences=[allInt] Interval 4: (V06) ref RefPositions {#117@110 #119@113 #132@121} physReg:NA Preferences=[rbx rbp rsi rdi r12-r15] Interval 5: (V07) ref RefPositions {#51@64 #53@67} physReg:NA Preferences=[rcx] Interval 6: long (constant) RefPositions {#1@6 #3@7} physReg:NA Preferences=[rcx] Interval 7: long RefPositions {#5@8 #7@9} physReg:NA Preferences=[rcx] Interval 8: ref RefPositions {#16@10 #17@11} physReg:NA Preferences=[rax] RelatedInterval Interval 9: ref RefPositions {#22@18 #25@23} physReg:NA Preferences=[rcx] Interval 10: long (constant) RefPositions {#23@20 #26@23} physReg:NA Preferences=[allInt] Interval 11: ref RefPositions {#35@24 #36@25} physReg:NA Preferences=[rax] RelatedInterval Interval 12: long (constant) RefPositions {#42@46 #43@47} physReg:NA Preferences=[allInt] RelatedInterval Interval 13: ref RefPositions {#49@62 #50@63} physReg:NA Preferences=[allInt] RelatedInterval Interval 14: ref RefPositions {#55@68 #62@73} physReg:NA Preferences=[rcx] Interval 15: ref (constant) RefPositions {#56@70 #58@71} physReg:NA Preferences=[rdx] Interval 16: ref RefPositions {#60@72 #64@73} physReg:NA Preferences=[rdx] Interval 17: int RefPositions {#73@74 #74@77} physReg:NA Preferences=[rax] Interval 18: long RefPositions {#81@92 #87@97} physReg:NA Preferences=[rcx] Interval 19: ref RefPositions {#85@96 #89@97} physReg:NA Preferences=[rdx] Interval 20: ref RefPositions {#98@98} physReg:NA Preferences=[rax] Interval 21: long (constant) RefPositions {#100@104 #102@105} physReg:NA Preferences=[rcx] Interval 22: long RefPositions {#104@106 #106@107} physReg:NA Preferences=[rcx] Interval 23: ref RefPositions {#115@108 #116@109} physReg:NA Preferences=[rax] RelatedInterval Interval 24: ref (specialPutArg) RefPositions {#121@114 #123@115} physReg:NA Preferences=[rcx] RelatedInterval Interval 25: ref RefPositions {#134@122 #136@123} physReg:NA Preferences=[rcx] ------------ REFPOSITIONS BEFORE VALIDATING INTERVALS: ------------ CNS_INT BB01 regmask=[rcx] minReg=1 wt=400.00> BB01 regmask=[rcx] minReg=1 wt=100.00> BB01 regmask=[rcx] minReg=1 last fixed wt=100.00> BB01 regmask=[rcx] minReg=1 wt=100.00> PUTARG_REG BB01 regmask=[rcx] minReg=1 fixed wt=400.00> BB01 regmask=[rcx] minReg=1 wt=100.00> BB01 regmask=[rcx] minReg=1 last fixed wt=100.00> BB01 regmask=[rax] minReg=1 last wt=100.00> BB01 regmask=[rcx] minReg=1 last wt=100.00> BB01 regmask=[rdx] minReg=1 last wt=100.00> BB01 regmask=[r8] minReg=1 last wt=100.00> BB01 regmask=[r9] minReg=1 last wt=100.00> BB01 regmask=[r10] minReg=1 last wt=100.00> BB01 regmask=[r11] minReg=1 last wt=100.00> BB01 regmask=[rax] minReg=1 wt=100.00> CALL BB01 regmask=[rax] minReg=1 fixed wt=400.00> BB01 regmask=[allInt] minReg=1 last wt=100.00> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1 wt=400.00> BB01 regmask=[rcx] minReg=1 wt=100.00> LCL_VAR BB01 regmask=[rcx] minReg=1 last fixed wt=400.00> BB01 regmask=[rcx] minReg=1 wt=100.00> PUTARG_REG BB01 regmask=[rcx] minReg=1 fixed wt=400.00> CNS_INT BB01 regmask=[allInt] minReg=1 wt=400.00> BB01 regmask=[rcx] minReg=1 wt=100.00> BB01 regmask=[rcx] minReg=1 last fixed wt=100.00> BB01 regmask=[allInt] minReg=1 last wt=100.00> BB01 regmask=[rax] minReg=1 last wt=100.00> BB01 regmask=[rcx] minReg=1 last wt=100.00> BB01 regmask=[rdx] minReg=1 last wt=100.00> BB01 regmask=[r8] minReg=1 last wt=100.00> BB01 regmask=[r9] minReg=1 last wt=100.00> BB01 regmask=[r10] minReg=1 last wt=100.00> BB01 regmask=[r11] minReg=1 last wt=100.00> BB01 regmask=[rax] minReg=1 wt=100.00> CALL BB01 regmask=[rax] minReg=1 fixed wt=400.00> BB01 regmask=[allInt] minReg=1 last wt=100.00> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1 wt=400.00> LCL_VAR BB01 regmask=[allInt] minReg=1 wt=400.00> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1 wt=650.00> LCL_VAR BB01 regmask=[allInt] minReg=1 regOptional wt=650.00> CNS_INT BB02 regmask=[allInt] minReg=1 wt=100.00> BB02 regmask=[allInt] minReg=1 last wt=25.00> STORE_LCL_VAR BB02 regmask=[allInt] minReg=1 wt=100.00> LCL_VAR BB02 regmask=[allInt] minReg=1 wt=650.00> LCL_VAR BB02 regmask=[allInt] minReg=1 wt=100.00> LCL_VAR BB03 regmask=[allInt] minReg=1 last wt=650.00> IND BB03 regmask=[allInt] minReg=1 wt=400.00> BB03 regmask=[allInt] minReg=1 last wt=100.00> STORE_LCL_VAR BB03 regmask=[allInt] minReg=1 wt=400.00> BB03 regmask=[rcx] minReg=1 wt=100.00> LCL_VAR BB03 regmask=[rcx] minReg=1 last fixed wt=400.00> BB03 regmask=[rcx] minReg=1 wt=100.00> PUTARG_REG BB03 regmask=[rcx] minReg=1 fixed wt=400.00> CNS_INT BB03 regmask=[rdx] minReg=1 wt=400.00> BB03 regmask=[rdx] minReg=1 wt=100.00> BB03 regmask=[rdx] minReg=1 last fixed wt=100.00> BB03 regmask=[rdx] minReg=1 wt=100.00> PUTARG_REG BB03 regmask=[rdx] minReg=1 fixed wt=400.00> BB03 regmask=[rcx] minReg=1 wt=100.00> BB03 regmask=[rcx] minReg=1 last fixed wt=100.00> BB03 regmask=[rdx] minReg=1 wt=100.00> BB03 regmask=[rdx] minReg=1 last fixed wt=100.00> BB03 regmask=[rax] minReg=1 last wt=100.00> BB03 regmask=[rcx] minReg=1 last wt=100.00> BB03 regmask=[rdx] minReg=1 last wt=100.00> BB03 regmask=[r8] minReg=1 last wt=100.00> BB03 regmask=[r9] minReg=1 last wt=100.00> BB03 regmask=[r10] minReg=1 last wt=100.00> BB03 regmask=[r11] minReg=1 last wt=100.00> BB03 regmask=[rax] minReg=1 wt=100.00> CALL BB03 regmask=[rax] minReg=1 fixed wt=400.00> BB03 regmask=[allInt] minReg=1 last regOptional wt=100.00> BB05 regmask=[allInt] minReg=1 regOptional wt=0.00> BB05 regmask=[rcx] minReg=1 wt=0.00> LCL_VAR BB05 regmask=[rcx] minReg=1 last fixed wt=100.00> BB05 regmask=[rcx] minReg=1 wt=0.00> PUTARG_REG BB05 regmask=[rcx] minReg=1 fixed wt=0.00> BB05 regmask=[rdx] minReg=1 wt=0.00> LCL_VAR BB05 regmask=[rdx] minReg=1 last fixed wt=400.00> BB05 regmask=[rdx] minReg=1 wt=0.00> PUTARG_REG BB05 regmask=[rdx] minReg=1 fixed wt=0.00> BB05 regmask=[rcx] minReg=1 wt=0.00> BB05 regmask=[rcx] minReg=1 last fixed wt=0.00> BB05 regmask=[rdx] minReg=1 wt=0.00> BB05 regmask=[rdx] minReg=1 last fixed wt=0.00> BB05 regmask=[rax] minReg=1 last wt=0.00> BB05 regmask=[rcx] minReg=1 last wt=0.00> BB05 regmask=[rdx] minReg=1 last wt=0.00> BB05 regmask=[r8] minReg=1 last wt=0.00> BB05 regmask=[r9] minReg=1 last wt=0.00> BB05 regmask=[r10] minReg=1 last wt=0.00> BB05 regmask=[r11] minReg=1 last wt=0.00> BB05 regmask=[rax] minReg=1 wt=0.00> CALL BB05 regmask=[rax] minReg=1 last fixed local wt=0.00> CNS_INT BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> PUTARG_REG BB06 regmask=[rcx] minReg=1 fixed wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> BB06 regmask=[rax] minReg=1 last wt=0.00> BB06 regmask=[rcx] minReg=1 last wt=0.00> BB06 regmask=[rdx] minReg=1 last wt=0.00> BB06 regmask=[r8] minReg=1 last wt=0.00> BB06 regmask=[r9] minReg=1 last wt=0.00> BB06 regmask=[r10] minReg=1 last wt=0.00> BB06 regmask=[r11] minReg=1 last wt=0.00> BB06 regmask=[rax] minReg=1 wt=0.00> CALL BB06 regmask=[rax] minReg=1 fixed wt=0.00> BB06 regmask=[allInt] minReg=1 last wt=0.00> STORE_LCL_VAR BB06 regmask=[allInt] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> LCL_VAR BB06 regmask=[rcx] minReg=1 fixed wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> PUTARG_REG BB06 regmask=[rcx] minReg=1 fixed wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> BB06 regmask=[rax] minReg=1 last wt=0.00> BB06 regmask=[rcx] minReg=1 last wt=0.00> BB06 regmask=[rdx] minReg=1 last wt=0.00> BB06 regmask=[r8] minReg=1 last wt=0.00> BB06 regmask=[r9] minReg=1 last wt=0.00> BB06 regmask=[r10] minReg=1 last wt=0.00> BB06 regmask=[r11] minReg=1 last wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> LCL_VAR BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> PUTARG_REG BB06 regmask=[rcx] minReg=1 fixed wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> BB06 regmask=[rax] minReg=1 last wt=0.00> BB06 regmask=[rcx] minReg=1 last wt=0.00> BB06 regmask=[rdx] minReg=1 last wt=0.00> BB06 regmask=[r8] minReg=1 last wt=0.00> BB06 regmask=[r9] minReg=1 last wt=0.00> BB06 regmask=[r10] minReg=1 last wt=0.00> BB06 regmask=[r11] minReg=1 last wt=0.00> ----------------- STORE_LCL_VAR BB01 regmask=[allInt] minReg=1 wt=650.00> LCL_VAR BB01 regmask=[allInt] minReg=1 regOptional wt=650.00> LCL_VAR BB02 regmask=[allInt] minReg=1 wt=650.00> LCL_VAR BB03 regmask=[allInt] minReg=1 last wt=650.00> ----------------- STORE_LCL_VAR BB01 regmask=[allInt] minReg=1 wt=400.00> LCL_VAR BB01 regmask=[allInt] minReg=1 wt=400.00> LCL_VAR BB05 regmask=[rdx] minReg=1 last fixed wt=400.00> ----------------- STORE_LCL_VAR BB01 regmask=[allInt] minReg=1 wt=400.00> LCL_VAR BB01 regmask=[rcx] minReg=1 last fixed wt=400.00> ----------------- STORE_LCL_VAR BB03 regmask=[allInt] minReg=1 wt=400.00> LCL_VAR BB03 regmask=[rcx] minReg=1 last fixed wt=400.00> ----------------- STORE_LCL_VAR BB02 regmask=[allInt] minReg=1 wt=100.00> LCL_VAR BB02 regmask=[allInt] minReg=1 wt=100.00> BB05 regmask=[allInt] minReg=1 regOptional wt=0.00> LCL_VAR BB05 regmask=[rcx] minReg=1 last fixed wt=100.00> ----------------- STORE_LCL_VAR BB06 regmask=[allInt] minReg=1 wt=0.00> LCL_VAR BB06 regmask=[rcx] minReg=1 fixed wt=0.00> LCL_VAR BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> TUPLE STYLE DUMP WITH REF POSITIONS Incoming Parameters: BB01 [000..???) -> BB03 (cond), preds={} succs={BB02,BB03} ===== N003. IL_OFFSET INLRT @ 0x000[E-] N005. CNS_INT(h) 0x4000000000420070 method Def:(#1) N007. PUTARG_REG Use:(#3) Fixed:rcx(#2) * Def:(#5) rcx N009. CALL help Use:(#7) Fixed:rcx(#6) * Kill: rax rcx rdx r8 r9 r10 r11 Def:(#16) rax Pref: N011. V02(L0) Use:(#17) * Def:(#18) N013. IL_OFFSET INLRT @ 0x006[E-] N015. V02(L0) N017. PUTARG_REG Use:(#20) Fixed:rcx(#19) * Def:(#22) rcx N019. CNS_INT 0x4000000000420088 Def:(#23) N021. IND N023. CALLV vt-ind Use:(#25) Fixed:rcx(#24) * Use:(#26) * Kill: rax rcx rdx r8 r9 r10 r11 Def:(#35) rax Pref: N025. V03(L1) Use:(#36) * Def:(#37) N027. V03(L1) N029. V05(L3) Use:(#38) Def:(#39) N031. V05(L3) N033. CNS_INT null N035. EQ Use:(#40) N037. JTRUE BB02 [???..???) -> BB05 (cond), preds={BB01} succs={BB03,BB05} ===== N041. V05(L3) N043. IND N045. CNS_INT(h) 0x40000000004200a0 class Def:(#42) Pref: N047. V04(L2) Use:(#43) * Def:(#44) N049. V04(L2) N051. NE Use:(#45) Use:(#46) N053. JTRUE BB03 [???..022) -> BB06 (cond), preds={BB01,BB02} succs={BB04,BB06} ===== N057. V05(L3) N059. LEA(b+8) N061. IND Use:(#48) * Def:(#49) Pref: N063. V07(L5) Use:(#50) * Def:(#51) N065. V07(L5) N067. PUTARG_REG Use:(#53) Fixed:rcx(#52) * Def:(#55) rcx N069. CNS_INT(h) 0x420148 [ICON_STR_HDL] Def:(#56) N071. PUTARG_REG Use:(#58) Fixed:rdx(#57) * Def:(#60) rdx N073. CALL Use:(#62) Fixed:rcx(#61) * Use:(#64) Fixed:rdx(#63) * Kill: rax rcx rdx r8 r9 r10 r11 Def:(#73) rax N075. CNS_INT 0 N077. EQ Use:(#74) * N079. JTRUE BB04 [028..029) (return), preds={BB03} succs={} ===== Dummy def of V04 at #76 N083. IL_OFFSET INLRT @ 0x028[E-] N085. RETURN BB05 [???..???) (throw), preds={BB02} succs={} ===== N089. V04(L2) N091. PUTARG_REG Use:(#79) Fixed:rcx(#78) * Def:(#81) rcx N093. V03(L1) N095. PUTARG_REG Use:(#83) Fixed:rdx(#82) * Def:(#85) rdx N097. CALL help Use:(#87) Fixed:rcx(#86) * Use:(#89) Fixed:rdx(#88) * Kill: rax rcx rdx r8 r9 r10 r11 Def:(#98) rax LocalDefUse * BB06 [022..028) (throw), preds={BB03} succs={} ===== N101. IL_OFFSET INLRT @ 0x022[E-] N103. CNS_INT(h) 0x40000000004200e8 token Def:(#100) N105. PUTARG_REG Use:(#102) Fixed:rcx(#101) * Def:(#104) rcx N107. CALL help Use:(#106) Fixed:rcx(#105) * Kill: rax rcx rdx r8 r9 r10 r11 Def:(#115) rax Pref: N109. V06(L4) Use:(#116) * Def:(#117) N111. V06(L4) N113. PUTARG_REG Use:(#119) Fixed:rcx(#118) Def:(#121) rcx Pref: N115. CALL Use:(#123) Fixed:rcx(#122) * Kill: rax rcx rdx r8 r9 r10 r11 N117. IL_OFFSET INLRT @ 0x027[--] N119. V06(L4) N121. PUTARG_REG Use:(#132) Fixed:rcx(#131) * Def:(#134) rcx N123. CALL help Use:(#136) Fixed:rcx(#135) * Kill: rax rcx rdx r8 r9 r10 r11 Linear scan intervals after buildIntervals: Interval 0: (V02) ref RefPositions {#18@12 #20@17} physReg:NA Preferences=[rcx] Interval 1: (V03) ref RefPositions {#37@26 #38@29 #83@95} physReg:NA Preferences=[rdx] Interval 2: (V04) long RefPositions {#44@48 #46@51 #76@87 #79@91} physReg:NA Preferences=[rcx] Interval 3: (V05) ref RefPositions {#39@30 #40@35 #45@51 #48@61} physReg:NA Preferences=[allInt] Interval 4: (V06) ref RefPositions {#117@110 #119@113 #132@121} physReg:NA Preferences=[rbx rbp rsi rdi r12-r15] Interval 5: (V07) ref RefPositions {#51@64 #53@67} physReg:NA Preferences=[rcx] Interval 6: long (constant) RefPositions {#1@6 #3@7} physReg:NA Preferences=[rcx] Interval 7: long RefPositions {#5@8 #7@9} physReg:NA Preferences=[rcx] Interval 8: ref RefPositions {#16@10 #17@11} physReg:NA Preferences=[rax] RelatedInterval Interval 9: ref RefPositions {#22@18 #25@23} physReg:NA Preferences=[rcx] Interval 10: long (constant) RefPositions {#23@20 #26@23} physReg:NA Preferences=[allInt] Interval 11: ref RefPositions {#35@24 #36@25} physReg:NA Preferences=[rax] RelatedInterval Interval 12: long (constant) RefPositions {#42@46 #43@47} physReg:NA Preferences=[allInt] RelatedInterval Interval 13: ref RefPositions {#49@62 #50@63} physReg:NA Preferences=[allInt] RelatedInterval Interval 14: ref RefPositions {#55@68 #62@73} physReg:NA Preferences=[rcx] Interval 15: ref (constant) RefPositions {#56@70 #58@71} physReg:NA Preferences=[rdx] Interval 16: ref RefPositions {#60@72 #64@73} physReg:NA Preferences=[rdx] Interval 17: int RefPositions {#73@74 #74@77} physReg:NA Preferences=[rax] Interval 18: long RefPositions {#81@92 #87@97} physReg:NA Preferences=[rcx] Interval 19: ref RefPositions {#85@96 #89@97} physReg:NA Preferences=[rdx] Interval 20: ref RefPositions {#98@98} physReg:NA Preferences=[rax] Interval 21: long (constant) RefPositions {#100@104 #102@105} physReg:NA Preferences=[rcx] Interval 22: long RefPositions {#104@106 #106@107} physReg:NA Preferences=[rcx] Interval 23: ref RefPositions {#115@108 #116@109} physReg:NA Preferences=[rax] RelatedInterval Interval 24: ref (specialPutArg) RefPositions {#121@114 #123@115} physReg:NA Preferences=[rcx] RelatedInterval Interval 25: ref RefPositions {#134@122 #136@123} physReg:NA Preferences=[rcx] *************** In LinearScan::allocateRegisters() Linear scan intervals before allocateRegisters: Interval 0: (V02) ref RefPositions {#18@12 #20@17} physReg:NA Preferences=[rcx] Interval 1: (V03) ref RefPositions {#37@26 #38@29 #83@95} physReg:NA Preferences=[rdx] Interval 2: (V04) long RefPositions {#44@48 #46@51 #76@87 #79@91} physReg:NA Preferences=[rcx] Interval 3: (V05) ref RefPositions {#39@30 #40@35 #45@51 #48@61} physReg:NA Preferences=[allInt] Interval 4: (V06) ref RefPositions {#117@110 #119@113 #132@121} physReg:NA Preferences=[rbx rbp rsi rdi r12-r15] Interval 5: (V07) ref RefPositions {#51@64 #53@67} physReg:NA Preferences=[rcx] Interval 6: long (constant) RefPositions {#1@6 #3@7} physReg:NA Preferences=[rcx] Interval 7: long RefPositions {#5@8 #7@9} physReg:NA Preferences=[rcx] Interval 8: ref RefPositions {#16@10 #17@11} physReg:NA Preferences=[rax] RelatedInterval Interval 9: ref RefPositions {#22@18 #25@23} physReg:NA Preferences=[rcx] Interval 10: long (constant) RefPositions {#23@20 #26@23} physReg:NA Preferences=[allInt] Interval 11: ref RefPositions {#35@24 #36@25} physReg:NA Preferences=[rax] RelatedInterval Interval 12: long (constant) RefPositions {#42@46 #43@47} physReg:NA Preferences=[allInt] RelatedInterval Interval 13: ref RefPositions {#49@62 #50@63} physReg:NA Preferences=[allInt] RelatedInterval Interval 14: ref RefPositions {#55@68 #62@73} physReg:NA Preferences=[rcx] Interval 15: ref (constant) RefPositions {#56@70 #58@71} physReg:NA Preferences=[rdx] Interval 16: ref RefPositions {#60@72 #64@73} physReg:NA Preferences=[rdx] Interval 17: int RefPositions {#73@74 #74@77} physReg:NA Preferences=[rax] Interval 18: long RefPositions {#81@92 #87@97} physReg:NA Preferences=[rcx] Interval 19: ref RefPositions {#85@96 #89@97} physReg:NA Preferences=[rdx] Interval 20: ref RefPositions {#98@98} physReg:NA Preferences=[rax] Interval 21: long (constant) RefPositions {#100@104 #102@105} physReg:NA Preferences=[rcx] Interval 22: long RefPositions {#104@106 #106@107} physReg:NA Preferences=[rcx] Interval 23: ref RefPositions {#115@108 #116@109} physReg:NA Preferences=[rax] RelatedInterval Interval 24: ref (specialPutArg) RefPositions {#121@114 #123@115} physReg:NA Preferences=[rcx] RelatedInterval Interval 25: ref RefPositions {#134@122 #136@123} physReg:NA Preferences=[rcx] ------------ REFPOSITIONS BEFORE ALLOCATION: ------------ CNS_INT BB01 regmask=[rcx] minReg=1 wt=400.00> BB01 regmask=[rcx] minReg=1 wt=100.00> BB01 regmask=[rcx] minReg=1 last fixed wt=100.00> BB01 regmask=[rcx] minReg=1 wt=100.00> PUTARG_REG BB01 regmask=[rcx] minReg=1 fixed wt=400.00> BB01 regmask=[rcx] minReg=1 wt=100.00> BB01 regmask=[rcx] minReg=1 last fixed wt=100.00> BB01 regmask=[rax] minReg=1 last wt=100.00> BB01 regmask=[rcx] minReg=1 last wt=100.00> BB01 regmask=[rdx] minReg=1 last wt=100.00> BB01 regmask=[r8] minReg=1 last wt=100.00> BB01 regmask=[r9] minReg=1 last wt=100.00> BB01 regmask=[r10] minReg=1 last wt=100.00> BB01 regmask=[r11] minReg=1 last wt=100.00> BB01 regmask=[rax] minReg=1 wt=100.00> CALL BB01 regmask=[rax] minReg=1 fixed wt=400.00> BB01 regmask=[allInt] minReg=1 last wt=100.00> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1 wt=400.00> BB01 regmask=[rcx] minReg=1 wt=100.00> LCL_VAR BB01 regmask=[rcx] minReg=1 last fixed wt=400.00> BB01 regmask=[rcx] minReg=1 wt=100.00> PUTARG_REG BB01 regmask=[rcx] minReg=1 fixed wt=400.00> CNS_INT BB01 regmask=[allInt] minReg=1 wt=400.00> BB01 regmask=[rcx] minReg=1 wt=100.00> BB01 regmask=[rcx] minReg=1 last fixed wt=100.00> BB01 regmask=[allInt] minReg=1 last wt=100.00> BB01 regmask=[rax] minReg=1 last wt=100.00> BB01 regmask=[rcx] minReg=1 last wt=100.00> BB01 regmask=[rdx] minReg=1 last wt=100.00> BB01 regmask=[r8] minReg=1 last wt=100.00> BB01 regmask=[r9] minReg=1 last wt=100.00> BB01 regmask=[r10] minReg=1 last wt=100.00> BB01 regmask=[r11] minReg=1 last wt=100.00> BB01 regmask=[rax] minReg=1 wt=100.00> CALL BB01 regmask=[rax] minReg=1 fixed wt=400.00> BB01 regmask=[allInt] minReg=1 last wt=100.00> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1 wt=400.00> LCL_VAR BB01 regmask=[allInt] minReg=1 wt=400.00> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1 wt=650.00> LCL_VAR BB01 regmask=[allInt] minReg=1 regOptional wt=650.00> CNS_INT BB02 regmask=[allInt] minReg=1 wt=100.00> BB02 regmask=[allInt] minReg=1 last wt=25.00> STORE_LCL_VAR BB02 regmask=[allInt] minReg=1 wt=100.00> LCL_VAR BB02 regmask=[allInt] minReg=1 wt=650.00> LCL_VAR BB02 regmask=[allInt] minReg=1 wt=100.00> LCL_VAR BB03 regmask=[allInt] minReg=1 last wt=650.00> IND BB03 regmask=[allInt] minReg=1 wt=400.00> BB03 regmask=[allInt] minReg=1 last wt=100.00> STORE_LCL_VAR BB03 regmask=[allInt] minReg=1 wt=400.00> BB03 regmask=[rcx] minReg=1 wt=100.00> LCL_VAR BB03 regmask=[rcx] minReg=1 last fixed wt=400.00> BB03 regmask=[rcx] minReg=1 wt=100.00> PUTARG_REG BB03 regmask=[rcx] minReg=1 fixed wt=400.00> CNS_INT BB03 regmask=[rdx] minReg=1 wt=400.00> BB03 regmask=[rdx] minReg=1 wt=100.00> BB03 regmask=[rdx] minReg=1 last fixed wt=100.00> BB03 regmask=[rdx] minReg=1 wt=100.00> PUTARG_REG BB03 regmask=[rdx] minReg=1 fixed wt=400.00> BB03 regmask=[rcx] minReg=1 wt=100.00> BB03 regmask=[rcx] minReg=1 last fixed wt=100.00> BB03 regmask=[rdx] minReg=1 wt=100.00> BB03 regmask=[rdx] minReg=1 last fixed wt=100.00> BB03 regmask=[rax] minReg=1 last wt=100.00> BB03 regmask=[rcx] minReg=1 last wt=100.00> BB03 regmask=[rdx] minReg=1 last wt=100.00> BB03 regmask=[r8] minReg=1 last wt=100.00> BB03 regmask=[r9] minReg=1 last wt=100.00> BB03 regmask=[r10] minReg=1 last wt=100.00> BB03 regmask=[r11] minReg=1 last wt=100.00> BB03 regmask=[rax] minReg=1 wt=100.00> CALL BB03 regmask=[rax] minReg=1 fixed wt=400.00> BB03 regmask=[allInt] minReg=1 last regOptional wt=100.00> BB05 regmask=[allInt] minReg=1 regOptional wt=0.00> BB05 regmask=[rcx] minReg=1 wt=0.00> LCL_VAR BB05 regmask=[rcx] minReg=1 last fixed wt=100.00> BB05 regmask=[rcx] minReg=1 wt=0.00> PUTARG_REG BB05 regmask=[rcx] minReg=1 fixed wt=0.00> BB05 regmask=[rdx] minReg=1 wt=0.00> LCL_VAR BB05 regmask=[rdx] minReg=1 last fixed wt=400.00> BB05 regmask=[rdx] minReg=1 wt=0.00> PUTARG_REG BB05 regmask=[rdx] minReg=1 fixed wt=0.00> BB05 regmask=[rcx] minReg=1 wt=0.00> BB05 regmask=[rcx] minReg=1 last fixed wt=0.00> BB05 regmask=[rdx] minReg=1 wt=0.00> BB05 regmask=[rdx] minReg=1 last fixed wt=0.00> BB05 regmask=[rax] minReg=1 last wt=0.00> BB05 regmask=[rcx] minReg=1 last wt=0.00> BB05 regmask=[rdx] minReg=1 last wt=0.00> BB05 regmask=[r8] minReg=1 last wt=0.00> BB05 regmask=[r9] minReg=1 last wt=0.00> BB05 regmask=[r10] minReg=1 last wt=0.00> BB05 regmask=[r11] minReg=1 last wt=0.00> BB05 regmask=[rax] minReg=1 wt=0.00> CALL BB05 regmask=[rax] minReg=1 last fixed local wt=0.00> CNS_INT BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> PUTARG_REG BB06 regmask=[rcx] minReg=1 fixed wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> BB06 regmask=[rax] minReg=1 last wt=0.00> BB06 regmask=[rcx] minReg=1 last wt=0.00> BB06 regmask=[rdx] minReg=1 last wt=0.00> BB06 regmask=[r8] minReg=1 last wt=0.00> BB06 regmask=[r9] minReg=1 last wt=0.00> BB06 regmask=[r10] minReg=1 last wt=0.00> BB06 regmask=[r11] minReg=1 last wt=0.00> BB06 regmask=[rax] minReg=1 wt=0.00> CALL BB06 regmask=[rax] minReg=1 fixed wt=0.00> BB06 regmask=[allInt] minReg=1 last wt=0.00> STORE_LCL_VAR BB06 regmask=[allInt] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> LCL_VAR BB06 regmask=[rcx] minReg=1 fixed wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> PUTARG_REG BB06 regmask=[rcx] minReg=1 fixed wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> BB06 regmask=[rax] minReg=1 last wt=0.00> BB06 regmask=[rcx] minReg=1 last wt=0.00> BB06 regmask=[rdx] minReg=1 last wt=0.00> BB06 regmask=[r8] minReg=1 last wt=0.00> BB06 regmask=[r9] minReg=1 last wt=0.00> BB06 regmask=[r10] minReg=1 last wt=0.00> BB06 regmask=[r11] minReg=1 last wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> LCL_VAR BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> PUTARG_REG BB06 regmask=[rcx] minReg=1 fixed wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> BB06 regmask=[rax] minReg=1 last wt=0.00> BB06 regmask=[rcx] minReg=1 last wt=0.00> BB06 regmask=[rdx] minReg=1 last wt=0.00> BB06 regmask=[r8] minReg=1 last wt=0.00> BB06 regmask=[r9] minReg=1 last wt=0.00> BB06 regmask=[r10] minReg=1 last wt=0.00> BB06 regmask=[r11] minReg=1 last wt=0.00> VAR REFPOSITIONS BEFORE ALLOCATION --- V00 --- V01 --- V02 (Interval 0) STORE_LCL_VAR BB01 regmask=[allInt] minReg=1 wt=400.00> LCL_VAR BB01 regmask=[rcx] minReg=1 last fixed wt=400.00> --- V03 (Interval 1) STORE_LCL_VAR BB01 regmask=[allInt] minReg=1 wt=400.00> LCL_VAR BB01 regmask=[allInt] minReg=1 wt=400.00> LCL_VAR BB05 regmask=[rdx] minReg=1 last fixed wt=400.00> --- V04 (Interval 2) STORE_LCL_VAR BB02 regmask=[allInt] minReg=1 wt=100.00> LCL_VAR BB02 regmask=[allInt] minReg=1 wt=100.00> BB05 regmask=[allInt] minReg=1 regOptional wt=0.00> LCL_VAR BB05 regmask=[rcx] minReg=1 last fixed wt=100.00> --- V05 (Interval 3) STORE_LCL_VAR BB01 regmask=[allInt] minReg=1 wt=650.00> LCL_VAR BB01 regmask=[allInt] minReg=1 regOptional wt=650.00> LCL_VAR BB02 regmask=[allInt] minReg=1 wt=650.00> LCL_VAR BB03 regmask=[allInt] minReg=1 last wt=650.00> --- V06 (Interval 4) STORE_LCL_VAR BB06 regmask=[allInt] minReg=1 wt=0.00> LCL_VAR BB06 regmask=[rcx] minReg=1 fixed wt=0.00> LCL_VAR BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> --- V07 (Interval 5) STORE_LCL_VAR BB03 regmask=[allInt] minReg=1 wt=400.00> LCL_VAR BB03 regmask=[rcx] minReg=1 last fixed wt=400.00> Allocating Registers -------------------- The following table has one or more rows for each RefPosition that is handled during allocation. The first column provides the basic information about the RefPosition, with its type (e.g. Def, Use, Fixd) followed by a '*' if it is a last use, and a 'D' if it is delayRegFree, and then the action taken during allocation (e.g. Alloc a new register, or Keep an existing one). The subsequent columns show the Interval occupying each register, if any, followed by 'a' if it is active, a 'p' if it is a large vector that has been partially spilled, and 'i'if it is inactive. Columns are only printed up to the last modifed register, which may increase during allocation, in which case additional columns will appear. Registers which are not marked modified have ---- in their column. -----------------------------------+----+----+----+----+----+----+----+----+----+ Loc RP# Name Type Action Reg |rax |rcx |rdx |rbx |rbp |rsi |rdi |r8 |r9 | -----------------------------------+----+----+----+----+----+----+----+----+----+ | | | | | | | | | | 1.#0 BB1 PredBB0 | | | | | | | | | | 6.#1 C6 Def Alloc rcx | |C6 a| | | | | | | | 7.#2 rcx Fixd Keep rcx | |C6 a| | | | | | | | 7.#3 C6 Use * Keep rcx | |C6 a| | | | | | | | 8.#4 rcx Fixd Keep rcx | | | | | | | | | | 8.#5 I7 Def Alloc rcx | |I7 a| | | | | | | | 9.#6 rcx Fixd Keep rcx | |I7 a| | | | | | | | 9.#7 I7 Use * Keep rcx | |I7 a| | | | | | | | 10.#8 rax Kill Keep rax | | | | | | | | | | 10.#9 rcx Kill Keep rcx | | | | | | | | | | 10.#10 rdx Kill Keep rdx | | | | | | | | | | 10.#11 r8 Kill Keep r8 | | | | | | | | | | 10.#12 r9 Kill Keep r9 | | | | | | | | | | 10.#13 r10 Kill Keep r10 | | | | | | | | | | 10.#14 r11 Kill Keep r11 | | | | | | | | | | 10.#15 rax Fixd Keep rax | | | | | | | | | | 10.#16 I8 Def Alloc rax |I8 a| | | | | | | | | 11.#17 I8 Use * Keep rax |I8 a| | | | | | | | | 12.#18 V2 Def BSFIT(A) rcx | |V2 a| | | | | | | | 17.#19 rcx Fixd Keep rcx | |V2 a| | | | | | | | 17.#20 V2 Use * Keep rcx | |V2 a| | | | | | | | 18.#21 rcx Fixd Keep rcx | | | | | | | | | | 18.#22 I9 Def Alloc rcx | |I9 a| | | | | | | | 20.#23 C10 Def ORDER(A) rax |C10a|I9 a| | | | | | | | 23.#24 rcx Fixd Keep rcx |C10a|I9 a| | | | | | | | 23.#25 I9 Use * Keep rcx |C10a|I9 a| | | | | | | | 23.#26 C10 Use * Keep rax |C10a|I9 a| | | | | | | | 24.#27 rax Kill Keep rax | | | | | | | | | | 24.#28 rcx Kill Keep rcx | | | | | | | | | | 24.#29 rdx Kill Keep rdx | | | | | | | | | | 24.#30 r8 Kill Keep r8 | | | | | | | | | | 24.#31 r9 Kill Keep r9 | | | | | | | | | | 24.#32 r10 Kill Keep r10 | | | | | | | | | | 24.#33 r11 Kill Keep r11 | | | | | | | | | | 24.#34 rax Fixd Keep rax | | | | | | | | | | 24.#35 I11 Def Alloc rax |I11a| | | | | | | | | 25.#36 I11 Use * Keep rax |I11a| | | | | | | | | 26.#37 V3 Def BSFIT(A) rax |V3 a| | | | | | | | | 29.#38 V3 Use Keep rax |V3 a| | | | | | | | | 30.#39 V5 Def BSFIT(A) rcx |V3 a|V5 a| | | | | | | | 35.#40 V5 Use Keep rcx |V3 a|V5 a| | | | | | | | -----------------------------------+----+----+----+----+----+----+----+----+----+ Loc RP# Name Type Action Reg |rax |rcx |rdx |rbx |rbp |rsi |rdi |r8 |r9 | -----------------------------------+----+----+----+----+----+----+----+----+----+ 39.#41 BB2 PredBB1 |V3 a|V5 a| | | | | | | | 46.#42 C12 Def ORDER(A) r8 |V3 a|V5 a| | | | | |C12a| | 47.#43 C12 Use * Keep r8 |V3 a|V5 a| | | | | |C12a| | 48.#44 V4 Def COVRS(A) r8 |V3 a|V5 a| | | | | |V4 a| | 51.#45 V5 Use Keep rcx |V3 a|V5 a| | | | | |V4 a| | 51.#46 V4 Use Keep r8 |V3 a|V5 a| | | | | |V4 a| | -----------------------------------+----+----+----+----+----+----+----+----+----+ Loc RP# Name Type Action Reg |rax |rcx |rdx |rbx |rbp |rsi |rdi |r8 |r9 | -----------------------------------+----+----+----+----+----+----+----+----+----+ 55.#47 BB3 PredBB1 |V3 i|V5 a| | | | | |V4 i| | 61.#48 V5 Use * Keep rcx |V3 i|V5 a| | | | | |V4 i| | 62.#49 I13 Def RELPR(A) rcx |V3 i|I13a| | | | | |V4 i| | 63.#50 I13 Use * Keep rcx |V3 i|I13a| | | | | |V4 i| | 64.#51 V7 Def COVRS(A) rcx |V3 i|V7 a| | | | | |V4 i| | 67.#52 rcx Fixd Keep rcx |V3 i|V7 a| | | | | |V4 i| | 67.#53 V7 Use * Keep rcx |V3 i|V7 a| | | | | |V4 i| | 68.#54 rcx Fixd Keep rcx |V3 i| | | | | | |V4 i| | 68.#55 I14 Def Alloc rcx |V3 i|I14a| | | | | |V4 i| | 70.#56 C15 Def Alloc rdx |V3 i|I14a|C15a| | | | |V4 i| | 71.#57 rdx Fixd Keep rdx |V3 i|I14a|C15a| | | | |V4 i| | 71.#58 C15 Use * Keep rdx |V3 i|I14a|C15a| | | | |V4 i| | 72.#59 rdx Fixd Keep rdx |V3 i|I14a| | | | | |V4 i| | 72.#60 I16 Def Alloc rdx |V3 i|I14a|I16a| | | | |V4 i| | 73.#61 rcx Fixd Keep rcx |V3 i|I14a|I16a| | | | |V4 i| | 73.#62 I14 Use * Keep rcx |V3 i|I14a|I16a| | | | |V4 i| | 73.#63 rdx Fixd Keep rdx |V3 i|I14a|I16a| | | | |V4 i| | 73.#64 I16 Use * Keep rdx |V3 i|I14a|I16a| | | | |V4 i| | 74.#65 rax Kill Keep rax | | | | | | | |V4 i| | 74.#66 rcx Kill Keep rcx | | | | | | | |V4 i| | 74.#67 rdx Kill Keep rdx | | | | | | | |V4 i| | 74.#68 r8 Kill Keep r8 | | | | | | | | | | 74.#69 r9 Kill Keep r9 | | | | | | | | | | 74.#70 r10 Kill Keep r10 | | | | | | | | | | 74.#71 r11 Kill Keep r11 | | | | | | | | | | 74.#72 rax Fixd Keep rax | | | | | | | | | | 74.#73 I17 Def Alloc rax |I17a| | | | | | | | | 77.#74 I17 Use * Keep rax |I17a| | | | | | | | | -----------------------------------+----+----+----+----+----+----+----+----+----+ Loc RP# Name Type Action Reg |rax |rcx |rdx |rbx |rbp |rsi |rdi |r8 |r9 | -----------------------------------+----+----+----+----+----+----+----+----+----+ 81.#75 BB4 PredBB3 | | | | | | | | | | -----------------------------------+----+----+----+----+----+----+----+----+----+ Loc RP# Name Type Action Reg |rax |rcx |rdx |rbx |rbp |rsi |rdi |r8 |r9 | -----------------------------------+----+----+----+----+----+----+----+----+----+ DDefs |V3 a| | | | | | | | | 87.#76 V4 DDef THISA(A) r8 |V3 a| | | | | | |V4 a| | -----------------------------------+----+----+----+----+----+----+----+----+----+ Loc RP# Name Type Action Reg |rax |rcx |rdx |rbx |rbp |rsi |rdi |r8 |r9 | -----------------------------------+----+----+----+----+----+----+----+----+----+ 87.#77 BB5 PredBB1 |V3 a| | | | | | |V4 a| | 91.#78 rcx Fixd Keep rcx |V3 a| | | | | | |V4 a| | 91.#79 V4 Use * Copy rcx |V3 a|V4 a| | | | | |V4 a| | 92.#80 rcx Fixd Keep rcx |V3 a| | | | | | | | | 92.#81 I18 Def Alloc rcx |V3 a|I18a| | | | | | | | 95.#82 rdx Fixd Keep rdx |V3 a|I18a| | | | | | | | 95.#83 V3 Use * Copy rdx |V3 a|I18a|V3 a| | | | | | | 96.#84 rdx Fixd Keep rdx | |I18a| | | | | | | | 96.#85 I19 Def Alloc rdx | |I18a|I19a| | | | | | | 97.#86 rcx Fixd Keep rcx | |I18a|I19a| | | | | | | 97.#87 I18 Use * Keep rcx | |I18a|I19a| | | | | | | 97.#88 rdx Fixd Keep rdx | |I18a|I19a| | | | | | | 97.#89 I19 Use * Keep rdx | |I18a|I19a| | | | | | | 98.#90 rax Kill Keep rax | | | | | | | | | | 98.#91 rcx Kill Keep rcx | | | | | | | | | | 98.#92 rdx Kill Keep rdx | | | | | | | | | | 98.#93 r8 Kill Keep r8 | | | | | | | | | | 98.#94 r9 Kill Keep r9 | | | | | | | | | | 98.#95 r10 Kill Keep r10 | | | | | | | | | | 98.#96 r11 Kill Keep r11 | | | | | | | | | | 98.#97 rax Fixd Keep rax | | | | | | | | | | 98.#98 I20 Def * Alloc rax |I20a| | | | | | | | | -----------------------------------+----+----+----+----+----+----+----+----+----+ Loc RP# Name Type Action Reg |rax |rcx |rdx |rbx |rbp |rsi |rdi |r8 |r9 | -----------------------------------+----+----+----+----+----+----+----+----+----+ 99.#99 BB6 PredBB3 | | | | | | | | | | 104.#100 C21 Def Alloc rcx | |C21a| | | | | | | | 105.#101 rcx Fixd Keep rcx | |C21a| | | | | | | | 105.#102 C21 Use * Keep rcx | |C21a| | | | | | | | 106.#103 rcx Fixd Keep rcx | | | | | | | | | | 106.#104 I22 Def Alloc rcx | |I22a| | | | | | | | 107.#105 rcx Fixd Keep rcx | |I22a| | | | | | | | 107.#106 I22 Use * Keep rcx | |I22a| | | | | | | | 108.#107 rax Kill Keep rax | | | | | | | | | | 108.#108 rcx Kill Keep rcx | | | | | | | | | | 108.#109 rdx Kill Keep rdx | | | | | | | | | | 108.#110 r8 Kill Keep r8 | | | | | | | | | | 108.#111 r9 Kill Keep r9 | | | | | | | | | | 108.#112 r10 Kill Keep r10 | | | | | | | | | | 108.#113 r11 Kill Keep r11 | | | | | | | | | | 108.#114 rax Fixd Keep rax | | | | | | | | | | 108.#115 I23 Def Alloc rax |I23a| | | | | | | | | 109.#116 I23 Use * Keep rax |I23a| | | | | | | | | 110.#117 V6 Def ORDER(A) rsi | | | | | |V6 a| | | | 113.#118 rcx Fixd Keep rcx | | | | | |V6 a| | | | 113.#119 V6 Use Copy rcx | |V6 a| | | |V6 a| | | | 114.#120 rcx Fixd Keep rcx | |V6 a| | | |V6 a| | | | 114.#121 I24 Def Alloc rcx | |I24a| | | |V6 a| | | | 115.#122 rcx Fixd Keep rcx | |I24a| | | |V6 a| | | | 115.#123 I24 Use * Keep rcx | |I24a| | | |V6 a| | | | 116.#124 rax Kill Keep rax | | | | | |V6 a| | | | 116.#125 rcx Kill Keep rcx | | | | | |V6 a| | | | 116.#126 rdx Kill Keep rdx | | | | | |V6 a| | | | 116.#127 r8 Kill Keep r8 | | | | | |V6 a| | | | 116.#128 r9 Kill Keep r9 | | | | | |V6 a| | | | 116.#129 r10 Kill Keep r10 | | | | | |V6 a| | | | 116.#130 r11 Kill Keep r11 | | | | | |V6 a| | | | 121.#131 rcx Fixd Keep rcx | | | | | |V6 a| | | | 121.#132 V6 Use * Copy rcx | |V6 a| | | |V6 a| | | | 122.#133 rcx Fixd Keep rcx | | | | | | | | | | 122.#134 I25 Def Alloc rcx | |I25a| | | | | | | | 123.#135 rcx Fixd Keep rcx | |I25a| | | | | | | | 123.#136 I25 Use * Keep rcx | |I25a| | | | | | | | 124.#137 rax Kill Keep rax | | | | | | | | | | 124.#138 rcx Kill Keep rcx | | | | | | | | | | 124.#139 rdx Kill Keep rdx | | | | | | | | | | 124.#140 r8 Kill Keep r8 | | | | | | | | | | 124.#141 r9 Kill Keep r9 | | | | | | | | | | 124.#142 r10 Kill Keep r10 | | | | | | | | | | 124.#143 r11 Kill Keep r11 | | | | | | | | | | ------------ REFPOSITIONS AFTER ALLOCATION: ------------ CNS_INT BB01 regmask=[rcx] minReg=1 wt=400.00> BB01 regmask=[rcx] minReg=1 wt=100.00> BB01 regmask=[rcx] minReg=1 last fixed wt=100.00> BB01 regmask=[rcx] minReg=1 wt=100.00> PUTARG_REG BB01 regmask=[rcx] minReg=1 fixed wt=400.00> BB01 regmask=[rcx] minReg=1 wt=100.00> BB01 regmask=[rcx] minReg=1 last fixed wt=100.00> BB01 regmask=[rax] minReg=1 last wt=100.00> BB01 regmask=[rcx] minReg=1 last wt=100.00> BB01 regmask=[rdx] minReg=1 last wt=100.00> BB01 regmask=[r8] minReg=1 last wt=100.00> BB01 regmask=[r9] minReg=1 last wt=100.00> BB01 regmask=[r10] minReg=1 last wt=100.00> BB01 regmask=[r11] minReg=1 last wt=100.00> BB01 regmask=[rax] minReg=1 wt=100.00> CALL BB01 regmask=[rax] minReg=1 fixed wt=400.00> BB01 regmask=[rax] minReg=1 last wt=100.00> STORE_LCL_VAR BB01 regmask=[rcx] minReg=1 wt=400.00> BB01 regmask=[rcx] minReg=1 wt=100.00> LCL_VAR BB01 regmask=[rcx] minReg=1 last fixed wt=400.00> BB01 regmask=[rcx] minReg=1 wt=100.00> PUTARG_REG BB01 regmask=[rcx] minReg=1 fixed wt=400.00> CNS_INT BB01 regmask=[rax] minReg=1 wt=400.00> BB01 regmask=[rcx] minReg=1 wt=100.00> BB01 regmask=[rcx] minReg=1 last fixed wt=100.00> BB01 regmask=[rax] minReg=1 last wt=100.00> BB01 regmask=[rax] minReg=1 last wt=100.00> BB01 regmask=[rcx] minReg=1 last wt=100.00> BB01 regmask=[rdx] minReg=1 last wt=100.00> BB01 regmask=[r8] minReg=1 last wt=100.00> BB01 regmask=[r9] minReg=1 last wt=100.00> BB01 regmask=[r10] minReg=1 last wt=100.00> BB01 regmask=[r11] minReg=1 last wt=100.00> BB01 regmask=[rax] minReg=1 wt=100.00> CALL BB01 regmask=[rax] minReg=1 fixed wt=400.00> BB01 regmask=[rax] minReg=1 last wt=100.00> STORE_LCL_VAR BB01 regmask=[rax] minReg=1 wt=400.00> LCL_VAR BB01 regmask=[rax] minReg=1 wt=400.00> STORE_LCL_VAR BB01 regmask=[rcx] minReg=1 wt=650.00> LCL_VAR BB01 regmask=[rcx] minReg=1 regOptional wt=650.00> CNS_INT BB02 regmask=[r8] minReg=1 wt=100.00> BB02 regmask=[r8] minReg=1 last wt=25.00> STORE_LCL_VAR BB02 regmask=[r8] minReg=1 wt=100.00> LCL_VAR BB02 regmask=[rcx] minReg=1 wt=650.00> LCL_VAR BB02 regmask=[r8] minReg=1 wt=100.00> LCL_VAR BB03 regmask=[rcx] minReg=1 last wt=650.00> IND BB03 regmask=[rcx] minReg=1 wt=400.00> BB03 regmask=[rcx] minReg=1 last wt=100.00> STORE_LCL_VAR BB03 regmask=[rcx] minReg=1 wt=400.00> BB03 regmask=[rcx] minReg=1 wt=100.00> LCL_VAR BB03 regmask=[rcx] minReg=1 last fixed wt=400.00> BB03 regmask=[rcx] minReg=1 wt=100.00> PUTARG_REG BB03 regmask=[rcx] minReg=1 fixed wt=400.00> CNS_INT BB03 regmask=[rdx] minReg=1 wt=400.00> BB03 regmask=[rdx] minReg=1 wt=100.00> BB03 regmask=[rdx] minReg=1 last fixed wt=100.00> BB03 regmask=[rdx] minReg=1 wt=100.00> PUTARG_REG BB03 regmask=[rdx] minReg=1 fixed wt=400.00> BB03 regmask=[rcx] minReg=1 wt=100.00> BB03 regmask=[rcx] minReg=1 last fixed wt=100.00> BB03 regmask=[rdx] minReg=1 wt=100.00> BB03 regmask=[rdx] minReg=1 last fixed wt=100.00> BB03 regmask=[rax] minReg=1 last wt=100.00> BB03 regmask=[rcx] minReg=1 last wt=100.00> BB03 regmask=[rdx] minReg=1 last wt=100.00> BB03 regmask=[r8] minReg=1 last wt=100.00> BB03 regmask=[r9] minReg=1 last wt=100.00> BB03 regmask=[r10] minReg=1 last wt=100.00> BB03 regmask=[r11] minReg=1 last wt=100.00> BB03 regmask=[rax] minReg=1 wt=100.00> CALL BB03 regmask=[rax] minReg=1 fixed wt=400.00> BB03 regmask=[rax] minReg=1 last regOptional wt=100.00> BB05 regmask=[r8] minReg=1 regOptional wt=0.00> BB05 regmask=[rcx] minReg=1 wt=0.00> LCL_VAR BB05 regmask=[rcx] minReg=1 last copy fixed wt=100.00> BB05 regmask=[rcx] minReg=1 wt=0.00> PUTARG_REG BB05 regmask=[rcx] minReg=1 fixed wt=0.00> BB05 regmask=[rdx] minReg=1 wt=0.00> LCL_VAR BB05 regmask=[rdx] minReg=1 last copy fixed wt=400.00> BB05 regmask=[rdx] minReg=1 wt=0.00> PUTARG_REG BB05 regmask=[rdx] minReg=1 fixed wt=0.00> BB05 regmask=[rcx] minReg=1 wt=0.00> BB05 regmask=[rcx] minReg=1 last fixed wt=0.00> BB05 regmask=[rdx] minReg=1 wt=0.00> BB05 regmask=[rdx] minReg=1 last fixed wt=0.00> BB05 regmask=[rax] minReg=1 last wt=0.00> BB05 regmask=[rcx] minReg=1 last wt=0.00> BB05 regmask=[rdx] minReg=1 last wt=0.00> BB05 regmask=[r8] minReg=1 last wt=0.00> BB05 regmask=[r9] minReg=1 last wt=0.00> BB05 regmask=[r10] minReg=1 last wt=0.00> BB05 regmask=[r11] minReg=1 last wt=0.00> BB05 regmask=[rax] minReg=1 wt=0.00> CALL BB05 regmask=[rax] minReg=1 last fixed local wt=0.00> CNS_INT BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> PUTARG_REG BB06 regmask=[rcx] minReg=1 fixed wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> BB06 regmask=[rax] minReg=1 last wt=0.00> BB06 regmask=[rcx] minReg=1 last wt=0.00> BB06 regmask=[rdx] minReg=1 last wt=0.00> BB06 regmask=[r8] minReg=1 last wt=0.00> BB06 regmask=[r9] minReg=1 last wt=0.00> BB06 regmask=[r10] minReg=1 last wt=0.00> BB06 regmask=[r11] minReg=1 last wt=0.00> BB06 regmask=[rax] minReg=1 wt=0.00> CALL BB06 regmask=[rax] minReg=1 fixed wt=0.00> BB06 regmask=[rax] minReg=1 last wt=0.00> STORE_LCL_VAR BB06 regmask=[rsi] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> LCL_VAR BB06 regmask=[rcx] minReg=1 copy fixed wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> PUTARG_REG BB06 regmask=[rcx] minReg=1 fixed wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> BB06 regmask=[rax] minReg=1 last wt=0.00> BB06 regmask=[rcx] minReg=1 last wt=0.00> BB06 regmask=[rdx] minReg=1 last wt=0.00> BB06 regmask=[r8] minReg=1 last wt=0.00> BB06 regmask=[r9] minReg=1 last wt=0.00> BB06 regmask=[r10] minReg=1 last wt=0.00> BB06 regmask=[r11] minReg=1 last wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> LCL_VAR BB06 regmask=[rcx] minReg=1 last copy fixed wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> PUTARG_REG BB06 regmask=[rcx] minReg=1 fixed wt=0.00> BB06 regmask=[rcx] minReg=1 wt=0.00> BB06 regmask=[rcx] minReg=1 last fixed wt=0.00> BB06 regmask=[rax] minReg=1 last wt=0.00> BB06 regmask=[rcx] minReg=1 last wt=0.00> BB06 regmask=[rdx] minReg=1 last wt=0.00> BB06 regmask=[r8] minReg=1 last wt=0.00> BB06 regmask=[r9] minReg=1 last wt=0.00> BB06 regmask=[r10] minReg=1 last wt=0.00> BB06 regmask=[r11] minReg=1 last wt=0.00> VAR REFPOSITIONS AFTER ALLOCATION --- V00 --- V01 --- V02 (Interval 0) STORE_LCL_VAR BB01 regmask=[rcx] minReg=1 wt=400.00> LCL_VAR BB01 regmask=[rcx] minReg=1 last fixed wt=400.00> --- V03 (Interval 1) STORE_LCL_VAR BB01 regmask=[rax] minReg=1 wt=400.00> LCL_VAR BB01 regmask=[rax] minReg=1 wt=400.00> LCL_VAR BB05 regmask=[rdx] minReg=1 last copy fixed wt=400.00> --- V04 (Interval 2) STORE_LCL_VAR BB02 regmask=[r8] minReg=1 wt=100.00> LCL_VAR BB02 regmask=[r8] minReg=1 wt=100.00> BB05 regmask=[r8] minReg=1 regOptional wt=0.00> LCL_VAR BB05 regmask=[rcx] minReg=1 last copy fixed wt=100.00> --- V05 (Interval 3) STORE_LCL_VAR BB01 regmask=[rcx] minReg=1 wt=650.00> LCL_VAR BB01 regmask=[rcx] minReg=1 regOptional wt=650.00> LCL_VAR BB02 regmask=[rcx] minReg=1 wt=650.00> LCL_VAR BB03 regmask=[rcx] minReg=1 last wt=650.00> --- V06 (Interval 4) STORE_LCL_VAR BB06 regmask=[rsi] minReg=1 wt=0.00> LCL_VAR BB06 regmask=[rcx] minReg=1 copy fixed wt=0.00> LCL_VAR BB06 regmask=[rcx] minReg=1 last copy fixed wt=0.00> --- V07 (Interval 5) STORE_LCL_VAR BB03 regmask=[rcx] minReg=1 wt=400.00> LCL_VAR BB03 regmask=[rcx] minReg=1 last fixed wt=400.00> Active intervals at end of allocation: ----------------------- RESOLVING BB BOUNDARIES ----------------------- Resolution Candidates: {V03 V04 V05} Has Critical Edges Prior to Resolution BB01 use def in out {} {V02 V03 V05} {} {V03 V05} Var=Reg beg of BB01: none Var=Reg end of BB01: V05=rcx V03=rax BB02 use def in out {V05} {V04} {V03 V05} {V03 V04 V05} Var=Reg beg of BB02: V05=rcx V03=rax Var=Reg end of BB02: V05=rcx V03=rax V04=r8 BB03 use def in out {V05} {V07} {V05} {} Var=Reg beg of BB03: V05=rcx Var=Reg end of BB03: none BB04 use def in out {} {} {} {} Var=Reg beg of BB04: none Var=Reg end of BB04: none BB05 use def in out {V03 V04} {} {V03 V04} {} Var=Reg beg of BB05: V03=rax V04=r8 Var=Reg end of BB05: none BB06 use def in out {} {V06} {} {} Var=Reg beg of BB06: none Var=Reg end of BB06: none RESOLVING EDGES Trees after linear scan register allocator (LSRA) ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB03 ( cond ) i hascall gcsafe newobj LIR BB02 [0009] 1 BB01 0.25 [???..???)-> BB05 ( cond ) i gcsafe LIR BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj LIR BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe LIR BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare gcsafe LIR BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj LIR ----------------------------------------------------------------------------------------------------------------------------------------- ------------ BB01 [000..???) -> BB03 (cond), preds={} succs={BB02,BB03} N003 (???,???) [000097] ------------ IL_OFFSET void INLRT @ 0x000[E-] REG NA N005 ( 1, 4) [000000] H----------- t0 = CNS_INT(h) long 0x4000000000420070 method REG rcx $140 /--* t0 long N007 (???,???) [000102] ------------ t102 = * PUTARG_REG long REG rcx /--* t102 long arg0 in rcx N009 ( 15, 10) [000001] --C--------- t1 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST REG rax $180 /--* t1 ref N011 ( 15, 10) [000003] DA---------- * STORE_LCL_VAR ref V02 tmp1 d:2 rcx REG rcx N013 (???,???) [000098] ------------ IL_OFFSET void INLRT @ 0x006[E-] REG NA N015 ( 1, 1) [000009] ------------ t9 = LCL_VAR ref V02 tmp1 u:2 rcx (last use) REG rcx $180 /--* t9 ref N017 (???,???) [000103] ------------ t103 = * PUTARG_REG ref REG rcx N019 ( 2, 10) [000095] ------------ t95 = CNS_INT long 0x4000000000420088 REG rax $1c1 /--* t95 long N021 ( 4, 12) [000076] nc---------- t76 = * IND long REG NA /--* t103 ref this in rcx +--* t76 long control expr N023 ( 25, 22) [000010] --CXG------- t10 = * CALLV vt-ind ref Base.GetFoo REG rax $c5 /--* t10 ref N025 ( 25, 22) [000013] DA-XG------- * STORE_LCL_VAR ref V03 tmp2 d:2 rax REG rax N027 ( 1, 1) [000031] ------?----- t31 = LCL_VAR ref V03 tmp2 u:2 rax REG rax $c5 /--* t31 ref N029 ( 1, 3) [000092] DA---------- * STORE_LCL_VAR ref V05 tmp4 d:2 rcx REG rcx N031 ( 1, 1) [000024] ------------ t24 = LCL_VAR ref V05 tmp4 u:2 rcx REG rcx $c5 N033 ( 1, 1) [000023] -c---------- t23 = CNS_INT ref null REG NA $VN.Null /--* t24 ref +--* t23 ref N035 ( 3, 3) [000025] J------N---- * EQ void REG NA $240 N037 ( 5, 5) [000089] ------------ * JTRUE void REG NA ------------ BB02 [???..???) -> BB05 (cond), preds={BB01} succs={BB03,BB05} N041 ( 1, 1) [000014] ------?----- t14 = LCL_VAR ref V05 tmp4 u:2 rcx REG rcx $c5 /--* t14 ref N043 ( 3, 2) [000021] #c---O?----- t21 = * IND long REG NA $184 N045 ( 1, 4) [000011] H-----?----- t11 = CNS_INT(h) long 0x40000000004200a0 class REG r8 $141 /--* t11 long N047 ( 5, 7) [000017] DA----?----- * STORE_LCL_VAR long V04 tmp3 d:2 r8 REG r8 N049 ( 3, 2) [000018] ------?----- t18 = LCL_VAR long V04 tmp3 u:2 r8 REG r8 $141 /--* t21 long +--* t18 long N051 ( 12, 12) [000022] J----O?N---- * NE void REG NA $242 N053 ( 14, 14) [000090] -----O------ * JTRUE void REG NA ------------ BB03 [???..022) -> BB06 (cond), preds={BB01,BB02} succs={BB04,BB06} N057 ( 1, 1) [000036] ------------ t36 = LCL_VAR ref V05 tmp4 u:2 rcx (last use) REG rcx $c5 /--* t36 ref N059 ( 2, 2) [000080] -c---------- t80 = * LEA(b+8) byref REG NA /--* t80 byref N061 ( 4, 4) [000037] ---XG------- t37 = * IND ref REG rcx /--* t37 ref N063 ( 4, 4) [000067] DA-XG------- * STORE_LCL_VAR ref V07 tmp6 d:2 rcx REG rcx N065 ( 1, 1) [000059] ------------ t59 = LCL_VAR ref V07 tmp6 u:2 rcx (last use) REG rcx /--* t59 ref N067 (???,???) [000104] ------------ t104 = * PUTARG_REG ref REG rcx N069 ( 1, 4) [000081] H----------- t81 = CNS_INT(h) ref 0x420148 [ICON_STR_HDL] REG rdx $143 /--* t81 ref N071 (???,???) [000105] ------------ t105 = * PUTARG_REG ref REG rdx /--* t104 ref arg0 in rcx +--* t105 ref arg1 in rdx N073 ( 16, 12) [000061] --CXG------- t61 = * CALL int System.String.Equals REG rax $300 N075 ( 1, 1) [000064] -c---------- t64 = CNS_INT int 0 REG NA $83 /--* t61 int +--* t64 int N077 ( 18, 14) [000065] J--XG--N---- * EQ void REG NA $243 N079 ( 20, 16) [000044] ---XG------- * JTRUE void REG NA ------------ BB04 [028..029) (return), preds={BB03} succs={} N083 (???,???) [000099] ------------ IL_OFFSET void INLRT @ 0x028[E-] REG NA N085 ( 0, 0) [000045] ------------ RETURN void REG NA $340 ------------ BB05 [???..???) (throw), preds={BB02} succs={} N089 ( 3, 2) [000020] ------?----- t20 = LCL_VAR long V04 tmp3 u:2 r8 (last use) REG r8 $141 /--* t20 long N091 (???,???) [000106] ------------ t106 = * PUTARG_REG long REG rcx N093 ( 1, 1) [000027] ------?----- t27 = LCL_VAR ref V03 tmp2 u:2 rax (last use) REG rax $c5 /--* t27 ref N095 (???,???) [000107] ------------ t107 = * PUTARG_REG ref REG rdx /--* t106 long arg0 in rcx +--* t107 ref arg1 in rdx N097 ( 18, 10) [000028] --CXG-?----- t28 = * CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL REG rax $18a ------------ BB06 [022..028) (throw), preds={BB03} succs={} N101 (???,???) [000100] ------------ IL_OFFSET void INLRT @ 0x022[E-] REG NA N103 ( 1, 4) [000046] H----------- t46 = CNS_INT(h) long 0x40000000004200e8 token REG rcx $144 /--* t46 long N105 (???,???) [000108] ------------ t108 = * PUTARG_REG long REG rcx /--* t108 long arg0 in rcx N107 ( 15, 10) [000047] --C--------- t47 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST REG rax $18f /--* t47 ref N109 ( 19, 13) [000049] DA---------- * STORE_LCL_VAR ref V06 tmp5 d:2 rsi REG rsi N111 ( 3, 2) [000050] ------------ t50 = LCL_VAR ref V06 tmp5 u:2 rsi REG rsi $18f /--* t50 ref N113 (???,???) [000109] ------------ t109 = * PUTARG_REG ref REG rcx /--* t109 ref this in rcx N115 ( 17, 9) [000051] --CXG------- * CALL void System.Exception..ctor REG NA $VN.Void N117 (???,???) [000101] ------------ IL_OFFSET void INLRT @ 0x027[--] REG NA N119 ( 3, 2) [000052] ------------ t52 = LCL_VAR ref V06 tmp5 u:2 rsi (last use) REG rsi $18f /--* t52 ref N121 (???,???) [000110] ------------ t110 = * PUTARG_REG ref REG rcx /--* t110 ref arg0 in rcx N123 ( 17, 8) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW REG NA $190 ------------------------------------------------------------------------------------------------------------------- Final allocation -----------------------------------+----+----+----+----+----+----+----+----+----+ Loc RP# Name Type Action Reg |rax |rcx |rdx |rbx |rbp |rsi |rdi |r8 |r9 | -----------------------------------+----+----+----+----+----+----+----+----+----+ 1.#0 BB1 PredBB0 | | | | | | | | | | 6.#1 C6 Def Alloc rcx | |C6 a| | | | | | | | 7.#2 rcx Fixd Keep rcx | |C6 a| | | | | | | | 7.#3 C6 Use * Keep rcx | |C6 i| | | | | | | | 8.#4 rcx Fixd Keep rcx | | | | | | | | | | 8.#5 I7 Def Alloc rcx | |I7 a| | | | | | | | 9.#6 rcx Fixd Keep rcx | |I7 a| | | | | | | | 9.#7 I7 Use * Keep rcx | |I7 i| | | | | | | | 10.#8 rax Kill Keep rax | | | | | | | | | | 10.#9 rcx Kill Keep rcx | | | | | | | | | | 10.#10 rdx Kill Keep rdx | | | | | | | | | | 10.#11 r8 Kill Keep r8 | | | | | | | | | | 10.#12 r9 Kill Keep r9 | | | | | | | | | | 10.#13 r10 Kill Keep r10 | | | | | | | | | | 10.#14 r11 Kill Keep r11 | | | | | | | | | | 10.#15 rax Fixd Keep rax | | | | | | | | | | 10.#16 I8 Def Alloc rax |I8 a| | | | | | | | | 11.#17 I8 Use * Keep rax |I8 i| | | | | | | | | 12.#18 V2 Def Alloc rcx | |V2 a| | | | | | | | 17.#19 rcx Fixd Keep rcx | |V2 a| | | | | | | | 17.#20 V2 Use * Keep rcx | |V2 i| | | | | | | | 18.#21 rcx Fixd Keep rcx | | | | | | | | | | 18.#22 I9 Def Alloc rcx | |I9 a| | | | | | | | 20.#23 C10 Def Alloc rax |C10a|I9 a| | | | | | | | 23.#24 rcx Fixd Keep rcx |C10a|I9 a| | | | | | | | 23.#25 I9 Use * Keep rcx |C10a|I9 i| | | | | | | | 23.#26 C10 Use * Keep rax |C10i| | | | | | | | | 24.#27 rax Kill Keep rax | | | | | | | | | | 24.#28 rcx Kill Keep rcx | | | | | | | | | | 24.#29 rdx Kill Keep rdx | | | | | | | | | | 24.#30 r8 Kill Keep r8 | | | | | | | | | | 24.#31 r9 Kill Keep r9 | | | | | | | | | | 24.#32 r10 Kill Keep r10 | | | | | | | | | | 24.#33 r11 Kill Keep r11 | | | | | | | | | | 24.#34 rax Fixd Keep rax | | | | | | | | | | 24.#35 I11 Def Alloc rax |I11a| | | | | | | | | 25.#36 I11 Use * Keep rax |I11i| | | | | | | | | 26.#37 V3 Def Alloc rax |V3 a| | | | | | | | | 29.#38 V3 Use Keep rax |V3 a| | | | | | | | | 30.#39 V5 Def Alloc rcx |V3 a|V5 a| | | | | | | | 35.#40 V5 Use Keep rcx |V3 a|V5 a| | | | | | | | -----------------------------------+----+----+----+----+----+----+----+----+----+ Loc RP# Name Type Action Reg |rax |rcx |rdx |rbx |rbp |rsi |rdi |r8 |r9 | -----------------------------------+----+----+----+----+----+----+----+----+----+ 39.#41 BB2 PredBB1 |V3 a|V5 a| | | | | | | | 46.#42 C12 Def Alloc r8 |V3 a|V5 a| | | | | |C12a| | 47.#43 C12 Use * Keep r8 |V3 a|V5 a| | | | | |C12i| | 48.#44 V4 Def Alloc r8 |V3 a|V5 a| | | | | |V4 a| | 51.#45 V5 Use Keep rcx |V3 a|V5 a| | | | | |V4 a| | 51.#46 V4 Use Keep r8 |V3 a|V5 a| | | | | |V4 a| | -----------------------------------+----+----+----+----+----+----+----+----+----+ Loc RP# Name Type Action Reg |rax |rcx |rdx |rbx |rbp |rsi |rdi |r8 |r9 | -----------------------------------+----+----+----+----+----+----+----+----+----+ 55.#47 BB3 PredBB1 | |V5 a| | | | | | | | 61.#48 V5 Use * Keep rcx | |V5 i| | | | | | | | 62.#49 I13 Def Alloc rcx | |I13a| | | | | | | | 63.#50 I13 Use * Keep rcx | |I13i| | | | | | | | 64.#51 V7 Def Alloc rcx | |V7 a| | | | | | | | 67.#52 rcx Fixd Keep rcx | |V7 a| | | | | | | | 67.#53 V7 Use * Keep rcx | |V7 i| | | | | | | | 68.#54 rcx Fixd Keep rcx | | | | | | | | | | 68.#55 I14 Def Alloc rcx | |I14a| | | | | | | | 70.#56 C15 Def Alloc rdx | |I14a|C15a| | | | | | | 71.#57 rdx Fixd Keep rdx | |I14a|C15a| | | | | | | 71.#58 C15 Use * Keep rdx | |I14a|C15i| | | | | | | 72.#59 rdx Fixd Keep rdx | |I14a| | | | | | | | 72.#60 I16 Def Alloc rdx | |I14a|I16a| | | | | | | 73.#61 rcx Fixd Keep rcx | |I14a|I16a| | | | | | | 73.#62 I14 Use * Keep rcx | |I14i|I16a| | | | | | | 73.#63 rdx Fixd Keep rdx | | |I16a| | | | | | | 73.#64 I16 Use * Keep rdx | | |I16i| | | | | | | 74.#65 rax Kill Keep rax | | | | | | | | | | 74.#66 rcx Kill Keep rcx | | | | | | | | | | 74.#67 rdx Kill Keep rdx | | | | | | | | | | 74.#68 r8 Kill Keep r8 | | | | | | | | | | 74.#69 r9 Kill Keep r9 | | | | | | | | | | 74.#70 r10 Kill Keep r10 | | | | | | | | | | 74.#71 r11 Kill Keep r11 | | | | | | | | | | 74.#72 rax Fixd Keep rax | | | | | | | | | | 74.#73 I17 Def Alloc rax |I17a| | | | | | | | | 77.#74 I17 Use * Keep rax |I17i| | | | | | | | | -----------------------------------+----+----+----+----+----+----+----+----+----+ Loc RP# Name Type Action Reg |rax |rcx |rdx |rbx |rbp |rsi |rdi |r8 |r9 | -----------------------------------+----+----+----+----+----+----+----+----+----+ 81.#75 BB4 PredBB3 | | | | | | | | | | 87.#76 V4 DDef | | | | | | | | | | -----------------------------------+----+----+----+----+----+----+----+----+----+ Loc RP# Name Type Action Reg |rax |rcx |rdx |rbx |rbp |rsi |rdi |r8 |r9 | -----------------------------------+----+----+----+----+----+----+----+----+----+ 87.#77 BB5 PredBB1 |V3 a| | | | | | |V4 a| | 91.#78 rcx Fixd Keep rcx |V3 a| | | | | | |V4 a| | 91.#79 V4 Use * Copy rcx |V3 a|V4 i| | | | | |V4 i| | 92.#80 rcx Fixd Keep rcx |V3 a| | | | | | | | | 92.#81 I18 Def Alloc rcx |V3 a|I18a| | | | | | | | 95.#82 rdx Fixd Keep rdx |V3 a|I18a| | | | | | | | 95.#83 V3 Use * Copy rdx |V3 i|I18a|V3 i| | | | | | | 96.#84 rdx Fixd Keep rdx | |I18a| | | | | | | | 96.#85 I19 Def Alloc rdx | |I18a|I19a| | | | | | | 97.#86 rcx Fixd Keep rcx | |I18a|I19a| | | | | | | 97.#87 I18 Use * Keep rcx | |I18i|I19a| | | | | | | 97.#88 rdx Fixd Keep rdx | | |I19a| | | | | | | 97.#89 I19 Use * Keep rdx | | |I19i| | | | | | | 98.#90 rax Kill Keep rax | | | | | | | | | | 98.#91 rcx Kill Keep rcx | | | | | | | | | | 98.#92 rdx Kill Keep rdx | | | | | | | | | | 98.#93 r8 Kill Keep r8 | | | | | | | | | | 98.#94 r9 Kill Keep r9 | | | | | | | | | | 98.#95 r10 Kill Keep r10 | | | | | | | | | | 98.#96 r11 Kill Keep r11 | | | | | | | | | | 98.#97 rax Fixd Keep rax | | | | | | | | | | 98.#98 I20 Def * Alloc rax |I20i| | | | | | | | | -----------------------------------+----+----+----+----+----+----+----+----+----+ Loc RP# Name Type Action Reg |rax |rcx |rdx |rbx |rbp |rsi |rdi |r8 |r9 | -----------------------------------+----+----+----+----+----+----+----+----+----+ 99.#99 BB6 PredBB3 | | | | | | | | | | 104.#100 C21 Def Alloc rcx | |C21a| | | | | | | | 105.#101 rcx Fixd Keep rcx | |C21a| | | | | | | | 105.#102 C21 Use * Keep rcx | |C21i| | | | | | | | 106.#103 rcx Fixd Keep rcx | | | | | | | | | | 106.#104 I22 Def Alloc rcx | |I22a| | | | | | | | 107.#105 rcx Fixd Keep rcx | |I22a| | | | | | | | 107.#106 I22 Use * Keep rcx | |I22i| | | | | | | | 108.#107 rax Kill Keep rax | | | | | | | | | | 108.#108 rcx Kill Keep rcx | | | | | | | | | | 108.#109 rdx Kill Keep rdx | | | | | | | | | | 108.#110 r8 Kill Keep r8 | | | | | | | | | | 108.#111 r9 Kill Keep r9 | | | | | | | | | | 108.#112 r10 Kill Keep r10 | | | | | | | | | | 108.#113 r11 Kill Keep r11 | | | | | | | | | | 108.#114 rax Fixd Keep rax | | | | | | | | | | 108.#115 I23 Def Alloc rax |I23a| | | | | | | | | 109.#116 I23 Use * Keep rax |I23i| | | | | | | | | 110.#117 V6 Def Alloc rsi | | | | | |V6 a| | | | 113.#118 rcx Fixd Keep rcx | | | | | |V6 a| | | | 113.#119 V6 Use Copy rcx | |V6 a| | | |V6 a| | | | 114.#120 rcx Fixd Keep rcx | | | | | |V6 a| | | | 114.#121 I24 Def Alloc rcx | |I24a| | | |V6 a| | | | 115.#122 rcx Fixd Keep rcx | |I24a| | | |V6 a| | | | 115.#123 I24 Use * Keep rcx | |I24i| | | |V6 a| | | | 116.#124 rax Kill Keep rax | | | | | |V6 a| | | | 116.#125 rcx Kill Keep rcx | | | | | |V6 a| | | | 116.#126 rdx Kill Keep rdx | | | | | |V6 a| | | | 116.#127 r8 Kill Keep r8 | | | | | |V6 a| | | | 116.#128 r9 Kill Keep r9 | | | | | |V6 a| | | | 116.#129 r10 Kill Keep r10 | | | | | |V6 a| | | | 116.#130 r11 Kill Keep r11 | | | | | |V6 a| | | | 121.#131 rcx Fixd Keep rcx | | | | | |V6 a| | | | 121.#132 V6 Use * Copy rcx | |V6 i| | | |V6 i| | | | 122.#133 rcx Fixd Keep rcx | | | | | | | | | | 122.#134 I25 Def Alloc rcx | |I25a| | | | | | | | 123.#135 rcx Fixd Keep rcx | |I25a| | | | | | | | 123.#136 I25 Use * Keep rcx | |I25i| | | | | | | | 124.#137 rax Kill Keep rax | | | | | | | | | | 124.#138 rcx Kill Keep rcx | | | | | | | | | | 124.#139 rdx Kill Keep rdx | | | | | | | | | | 124.#140 r8 Kill Keep r8 | | | | | | | | | | 124.#141 r9 Kill Keep r9 | | | | | | | | | | 124.#142 r10 Kill Keep r10 | | | | | | | | | | 124.#143 r11 Kill Keep r11 | | | | | | | | | | Recording the maximum number of concurrent spills: ---------- LSRA Stats ---------- Register selection order: ABCDEFGHIJKLMNOPQ Total Tracked Vars: 6 Total Reg Cand Vars: 6 Total number of Intervals: 25 Total number of RefPositions: 143 Total Number of spill temps created: 0 .......... BB01 [ 100.00]: BEST_FIT = 3, REG_ORDER = 1 BB02 [ 25.00]: COVERS = 1, REG_ORDER = 1 BB03 [ 100.00]: COVERS = 1, RELATED_PREFERENCE = 1 BB05 [ 0.00]: THIS_ASSIGNED = 1 BB06 [ 0.00]: REG_ORDER = 1 .......... Total SpillCount : 0 Weighted: 0.000000 Total CopyReg : 0 Weighted: 0.000000 Total ResolutionMovs : 0 Weighted: 0.000000 Total SplitEdges : 0 Weighted: 0.000000 .......... Total THIS_ASSIGNED [# 3] : 1 Weighted: 0.000000 Total COVERS [# 4] : 2 Weighted: 125.000000 Total RELATED_PREFERENCE [# 7] : 1 Weighted: 100.000000 Total BEST_FIT [#11] : 3 Weighted: 300.000000 Total REG_ORDER [#13] : 3 Weighted: 125.000000 TUPLE STYLE DUMP WITH REGISTER ASSIGNMENTS Incoming Parameters: BB01 [000..???) -> BB03 (cond), preds={} succs={BB02,BB03} ===== N003. IL_OFFSET INLRT @ 0x000[E-] N005. rcx = CNS_INT(h) 0x4000000000420070 method N007. rcx = PUTARG_REG; rcx N009. rax = CALL help; rcx * N011. V02(rcx); rax N013. IL_OFFSET INLRT @ 0x006[E-] N015. V02(rcx*) N017. rcx = PUTARG_REG; rcx* N019. rax = CNS_INT 0x4000000000420088 N021. STK = IND ; rax N023. rax = CALLV vt-ind; rcx,STK * N025. V03(rax); rax N027. V03(rax) * N029. V05(rcx); rax N031. V05(rcx) N033. CNS_INT null N035. EQ ; rcx N037. JTRUE Var=Reg end of BB01: V05=rcx V03=rax BB02 [???..???) -> BB05 (cond), preds={BB01} succs={BB03,BB05} ===== Predecessor for variable locations: BB01 Var=Reg beg of BB02: V05=rcx V03=rax N041. V05(rcx) N043. STK = IND ; rcx N045. r8 = CNS_INT(h) 0x40000000004200a0 class * N047. V04(r8); r8 N049. V04(r8) N051. NE ; STK,r8 N053. JTRUE Var=Reg end of BB02: V05=rcx V03=rax V04=r8 BB03 [???..022) -> BB06 (cond), preds={BB01,BB02} succs={BB04,BB06} ===== Predecessor for variable locations: BB01 Var=Reg beg of BB03: V05=rcx N057. V05(rcx*) N059. STK = LEA(b+8) ; rcx* N061. rcx = IND ; STK * N063. V07(rcx); rcx N065. V07(rcx*) N067. rcx = PUTARG_REG; rcx* N069. rdx = CNS_INT(h) 0x420148 [ICON_STR_HDL] N071. rdx = PUTARG_REG; rdx N073. rax = CALL ; rcx,rdx N075. CNS_INT 0 N077. EQ ; rax N079. JTRUE Var=Reg end of BB03: none BB04 [028..029) (return), preds={BB03} succs={} ===== Predecessor for variable locations: BB03 Var=Reg beg of BB04: none N083. IL_OFFSET INLRT @ 0x028[E-] N085. RETURN Var=Reg end of BB04: none BB05 [???..???) (throw), preds={BB02} succs={} ===== Predecessor for variable locations: BB01 Var=Reg beg of BB05: V03=rax V04=r8 N089. V04(r8*) N091. rcx = PUTARG_REG; r8* N093. V03(rax*) N095. rdx = PUTARG_REG; rax* * N097. rax = CALL help; rcx,rdx Var=Reg end of BB05: none BB06 [022..028) (throw), preds={BB03} succs={} ===== Predecessor for variable locations: BB03 Var=Reg beg of BB06: none N101. IL_OFFSET INLRT @ 0x022[E-] N103. rcx = CNS_INT(h) 0x40000000004200e8 token N105. rcx = PUTARG_REG; rcx N107. rax = CALL help; rcx * N109. V06(rsi); rax N111. V06(rsi) N113. rcx = PUTARG_REG; rsi N115. CALL ; rcx N117. IL_OFFSET INLRT @ 0x027[--] N119. V06(rsi*) N121. rcx = PUTARG_REG; rsi* N123. CALL help; rcx Var=Reg end of BB06: none *************** Finishing PHASE Linear scan register alloc *************** Starting PHASE Place 'align' instructions *************** Finishing PHASE Place 'align' instructions *************** In genGenerateCode() ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB03 ( cond ) i hascall gcsafe newobj LIR BB02 [0009] 1 BB01 0.25 [???..???)-> BB05 ( cond ) i gcsafe LIR BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i hascall gcsafe newobj LIR BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe LIR BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare gcsafe LIR BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare hascall gcsafe newobj LIR ----------------------------------------------------------------------------------------------------------------------------------------- *************** Starting PHASE Generate code *************** In fgDebugCheckBBlist Finalizing stack frame Recording Var Locations at start of BB01 Modified regs: [rax rcx rdx rsi r8-r11] Callee-saved registers pushed: 1 [rsi] *************** In lvaAssignFrameOffsets(FINAL_FRAME_LAYOUT) Assign V01 OutArgs, size=32, stkOffs=-0x30 --- delta bump 8 for RA --- delta bump 40 for RSP frame --- virtual stack offset to actual stack offset delta is 48 -- V01 was -48, now 0 ; Final local variable assignments ; ;* V00 loc0 [V00 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def ; V01 OutArgs [V01 ] ( 1, 1 ) lclBlk (32) [rsp+00H] "OutgoingArgSpace" ; V02 tmp1 [V02,T02] ( 2, 4 ) ref -> rcx class-hnd exact single-def "NewObj constructor temp" ; V03 tmp2 [V03,T01] ( 3, 4 ) ref -> rax single-def "CASTCLASS eval op1" ; V04 tmp3 [V04,T04] ( 3, 1 ) long -> r8 "fgInsertCommaFormTemp is creating a new local variable" ; V05 tmp4 [V05,T00] ( 4, 6.50) ref -> rcx class-hnd "spilling QMark2" ; V06 tmp5 [V06,T05] ( 3, 0 ) ref -> rsi class-hnd exact single-def "NewObj constructor temp" ; V07 tmp6 [V07,T03] ( 2, 4 ) ref -> rcx class-hnd single-def "Inlining Arg" ; ; Lcl frame size = 32 Mark labels for codegen BB01 : first block BB03 : branch target BB05 : branch target BB06 : branch target *************** After genMarkLabelsForCodegen() ----------------------------------------------------------------------------------------------------------------------------------------- BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] ----------------------------------------------------------------------------------------------------------------------------------------- BB01 [0000] 1 1 [000..???)-> BB03 ( cond ) i label hascall gcsafe newobj LIR BB02 [0009] 1 BB01 0.25 [???..???)-> BB05 ( cond ) i gcsafe LIR BB03 [0007] 2 BB01,BB02 1 [???..022)-> BB06 ( cond ) i label hascall gcsafe newobj LIR BB04 [0002] 1 BB03 1 [028..029) (return) i gcsafe LIR BB05 [0008] 1 BB02 0 [???..???) (throw ) i rare label gcsafe LIR BB06 [0001] 1 BB03 0 [022..028) (throw ) i rare label hascall gcsafe newobj LIR ----------------------------------------------------------------------------------------------------------------------------------------- Setting stack level from -572662307 to 0 =============== Generating BB01 [000..???) -> BB03 (cond), preds={} succs={BB02,BB03} flags=0x00000002.20490020: i label hascall gcsafe newobj LIR BB01 IN (0)={ } + ByrefExposed + GcHeap OUT(2)={V05 V03} + ByrefExposed + GcHeap Recording Var Locations at start of BB01 Liveness not changing: 0000000000000000 {} Live regs: (unchanged) 00000000 {} GC regs: (unchanged) 00000000 {} Byref regs: (unchanged) 00000000 {} L_M48700_BB01: Mapped BB01 to G_M48700_IG02 Label: IG02, GCvars=0000000000000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {} Scope info: begin block BB01, IL range [000..???) Added IP mapping: 0x0000 STACK_EMPTY (G_M48700_IG02,ins#0,ofs#0) label Generating: N003 (???,???) [000097] ------------ IL_OFFSET void INLRT @ 0x000[E-] REG NA Generating: N005 ( 1, 4) [000000] H----------- t0 = CNS_INT(h) long 0x4000000000420070 method REG rcx $140 IN0001: lea rcx, [(reloc 0x4000000000420070)] /--* t0 long Generating: N007 (???,???) [000102] ------------ t102 = * PUTARG_REG long REG rcx /--* t102 long arg0 in rcx Generating: N009 ( 15, 10) [000001] --C--------- t1 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST REG rax $180 Call: GCvars=0000000000000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {} IN0002: call CORINFO_HELP_NEWSFAST GC regs: 00000000 {} => 00000001 {rax} /--* t1 ref Generating: N011 ( 15, 10) [000003] DA---------- * STORE_LCL_VAR ref V02 tmp1 d:2 rcx REG rcx GC regs: 00000001 {rax} => 00000000 {} IN0003: mov rcx, rax V02 in reg rcx is becoming live [000003] Live regs: 00000000 {} => 00000002 {rcx} Live vars: {} => {V02} GC regs: 00000000 {} => 00000002 {rcx} Added IP mapping: 0x0006 STACK_EMPTY (G_M48700_IG02,ins#3,ofs#15) Generating: N013 (???,???) [000098] ------------ IL_OFFSET void INLRT @ 0x006[E-] REG NA Generating: N015 ( 1, 1) [000009] ------------ t9 = LCL_VAR ref V02 tmp1 u:2 rcx (last use) REG rcx $180 /--* t9 ref Generating: N017 (???,???) [000103] ------------ t103 = * PUTARG_REG ref REG rcx V02 in reg rcx is becoming dead [000009] Live regs: 00000002 {rcx} => 00000000 {} Live vars: {V02} => {} GC regs: 00000002 {rcx} => 00000000 {} GC regs: 00000000 {} => 00000002 {rcx} Generating: N019 ( 2, 10) [000095] ------------ t95 = CNS_INT long 0x4000000000420088 REG rax $1c1 IN0004: mov rax, 0x4000000000420088 /--* t95 long Generating: N021 ( 4, 12) [000076] nc---------- t76 = * IND long REG NA /--* t103 ref this in rcx +--* t76 long control expr Generating: N023 ( 25, 22) [000010] --CXG------- t10 = * CALLV vt-ind ref Base.GetFoo REG rax $c5 GC regs: 00000002 {rcx} => 00000000 {} Call: GCvars=0000000000000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {} IN0005: call [rax]Base:GetFoo():BringUpTest+TestCovariantReturns+IFoo:this GC regs: 00000000 {} => 00000001 {rax} /--* t10 ref Generating: N025 ( 25, 22) [000013] DA-XG------- * STORE_LCL_VAR ref V03 tmp2 d:2 rax REG rax GC regs: 00000001 {rax} => 00000000 {} V03 in reg rax is becoming live [000013] Live regs: 00000000 {} => 00000001 {rax} Live vars: {} => {V03} GC regs: 00000000 {} => 00000001 {rax} Generating: N027 ( 1, 1) [000031] ------?----- t31 = LCL_VAR ref V03 tmp2 u:2 rax REG rax $c5 /--* t31 ref Generating: N029 ( 1, 3) [000092] DA---------- * STORE_LCL_VAR ref V05 tmp4 d:2 rcx REG rcx IN0006: mov rcx, rax V05 in reg rcx is becoming live [000092] Live regs: 00000001 {rax} => 00000003 {rax rcx} Live vars: {V03} => {V03 V05} GC regs: 00000001 {rax} => 00000003 {rax rcx} Generating: N031 ( 1, 1) [000024] ------------ t24 = LCL_VAR ref V05 tmp4 u:2 rcx REG rcx $c5 Generating: N033 ( 1, 1) [000023] -c---------- t23 = CNS_INT ref null REG NA $VN.Null /--* t24 ref +--* t23 ref Generating: N035 ( 3, 3) [000025] J------N---- * EQ void REG NA $240 IN0007: test rcx, rcx Generating: N037 ( 5, 5) [000089] ------------ * JTRUE void REG NA IN0008: je L_M48700_BB03 Scope info: ignoring block end Variable Live Range History Dump for BB01 ..None.. =============== Generating BB02 [???..???) -> BB05 (cond), preds={BB01} succs={BB03,BB05} flags=0x00000000.20080020: i gcsafe LIR BB02 IN (2)={V05 V03 } + ByrefExposed + GcHeap OUT(3)={V05 V03 V04} + ByrefExposed + GcHeap Recording Var Locations at start of BB02 V05(rcx) V03(rax) Liveness not changing: 0000000000000003 {V03 V05} Live regs: 00000000 {} => 00000003 {rax rcx} GC regs: 00000000 {} => 00000003 {rax rcx} Byref regs: (unchanged) 00000000 {} L_M48700_BB02: Adding label due to BB weight difference: BBJ_COND BB01 with weight 100 different from BB02 with weight 25 G_M48700_IG02: ; offs=000000H, funclet=00, bbWeight=1 Mapped BB02 to G_M48700_IG03 Label: IG03, GCvars=0000000000000000 {}, gcrefRegs=00000003 {rax rcx}, byrefRegs=00000000 {} Scope info: begin block BB02, IL range [???..???) Scope info: ignoring block beginning Generating: N041 ( 1, 1) [000014] ------?----- t14 = LCL_VAR ref V05 tmp4 u:2 rcx REG rcx $c5 /--* t14 ref Generating: N043 ( 3, 2) [000021] #c---O?----- t21 = * IND long REG NA $184 Generating: N045 ( 1, 4) [000011] H-----?----- t11 = CNS_INT(h) long 0x40000000004200a0 class REG r8 $141 IN0009: lea r8, [(reloc 0x40000000004200a0)] /--* t11 long Generating: N047 ( 5, 7) [000017] DA----?----- * STORE_LCL_VAR long V04 tmp3 d:2 r8 REG r8 V04 in reg r8 is becoming live [000017] Live regs: 00000003 {rax rcx} => 00000103 {rax rcx r8} Live vars: {V03 V05} => {V03 V04 V05} Generating: N049 ( 3, 2) [000018] ------?----- t18 = LCL_VAR long V04 tmp3 u:2 r8 REG r8 $141 /--* t21 long +--* t18 long Generating: N051 ( 12, 12) [000022] J----O?N---- * NE void REG NA $242 IN000a: cmp qword ptr [rcx], r8 Generating: N053 ( 14, 14) [000090] -----O------ * JTRUE void REG NA IN000b: jne L_M48700_BB05 Scope info: ignoring block end Variable Live Range History Dump for BB02 ..None.. =============== Generating BB03 [???..022) -> BB06 (cond), preds={BB01,BB02} succs={BB04,BB06} flags=0x00000002.20490020: i label hascall gcsafe newobj LIR BB03 IN (1)={V05} + ByrefExposed + GcHeap OUT(0)={ } + ByrefExposed + GcHeap Recording Var Locations at start of BB03 V05(rcx) Change life 0000000000000013 {V03 V04 V05} -> 0000000000000001 {V05} V03 in reg rax is becoming dead [------] Live regs: (unchanged) 00000000 {} V04 in reg r8 is becoming dead [------] Live regs: (unchanged) 00000000 {} Live regs: 00000000 {} => 00000002 {rcx} GC regs: 00000000 {} => 00000002 {rcx} Byref regs: (unchanged) 00000000 {} L_M48700_BB03: Adding label due to BB weight difference: BBJ_COND BB02 with weight 25 different from BB03 with weight 100 G_M48700_IG03: ; offs=000027H, funclet=00, bbWeight=0.25 Mapped BB03 to G_M48700_IG04 Label: IG04, GCvars=0000000000000000 {}, gcrefRegs=00000002 {rcx}, byrefRegs=00000000 {} Scope info: begin block BB03, IL range [???..022) Scope info: ignoring block beginning Generating: N057 ( 1, 1) [000036] ------------ t36 = LCL_VAR ref V05 tmp4 u:2 rcx (last use) REG rcx $c5 /--* t36 ref Generating: N059 ( 2, 2) [000080] -c---------- t80 = * LEA(b+8) byref REG NA /--* t80 byref Generating: N061 ( 4, 4) [000037] ---XG------- t37 = * IND ref REG rcx V05 in reg rcx is becoming dead [000036] Live regs: 00000002 {rcx} => 00000000 {} Live vars: {V05} => {} GC regs: 00000002 {rcx} => 00000000 {} IN000c: mov rcx, gword ptr [rcx+8] GC regs: 00000000 {} => 00000002 {rcx} /--* t37 ref Generating: N063 ( 4, 4) [000067] DA-XG------- * STORE_LCL_VAR ref V07 tmp6 d:2 rcx REG rcx GC regs: 00000002 {rcx} => 00000000 {} V07 in reg rcx is becoming live [000067] Live regs: 00000000 {} => 00000002 {rcx} Live vars: {} => {V07} GC regs: 00000000 {} => 00000002 {rcx} Generating: N065 ( 1, 1) [000059] ------------ t59 = LCL_VAR ref V07 tmp6 u:2 rcx (last use) REG rcx /--* t59 ref Generating: N067 (???,???) [000104] ------------ t104 = * PUTARG_REG ref REG rcx V07 in reg rcx is becoming dead [000059] Live regs: 00000002 {rcx} => 00000000 {} Live vars: {V07} => {} GC regs: 00000002 {rcx} => 00000000 {} GC regs: 00000000 {} => 00000002 {rcx} Generating: N069 ( 1, 4) [000081] H----------- t81 = CNS_INT(h) ref 0x420148 [ICON_STR_HDL] REG rdx $143 IN000d: lea rdx, gword ptr [(reloc 0x4000000000420148)] GC regs: 00000002 {rcx} => 00000006 {rcx rdx} /--* t81 ref Generating: N071 (???,???) [000105] ------------ t105 = * PUTARG_REG ref REG rdx GC regs: 00000006 {rcx rdx} => 00000002 {rcx} GC regs: 00000002 {rcx} => 00000006 {rcx rdx} /--* t104 ref arg0 in rcx +--* t105 ref arg1 in rdx Generating: N073 ( 16, 12) [000061] --CXG------- t61 = * CALL int System.String.Equals REG rax $300 GC regs: 00000006 {rcx rdx} => 00000004 {rdx} GC regs: 00000004 {rdx} => 00000000 {} Call: GCvars=0000000000000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {} IN000e: call System.String:Equals(System.String,System.String):bool Generating: N075 ( 1, 1) [000064] -c---------- t64 = CNS_INT int 0 REG NA $83 /--* t61 int +--* t64 int Generating: N077 ( 18, 14) [000065] J--XG--N---- * EQ void REG NA $243 IN000f: test eax, eax Generating: N079 ( 20, 16) [000044] ---XG------- * JTRUE void REG NA IN0010: je L_M48700_BB06 Variable Live Range History Dump for BB03 ..None.. =============== Generating BB04 [028..029) (return), preds={BB03} succs={} flags=0x00000000.20080020: i gcsafe LIR BB04 IN (0)={} OUT(0)={} Recording Var Locations at start of BB04 Liveness not changing: 0000000000000000 {} Live regs: (unchanged) 00000000 {} GC regs: (unchanged) 00000000 {} Byref regs: (unchanged) 00000000 {} L_M48700_BB04: Scope info: begin block BB04, IL range [028..029) Added IP mapping: 0x0028 STACK_EMPTY (G_M48700_IG04,ins#5,ofs#24) label Generating: N083 (???,???) [000099] ------------ IL_OFFSET void INLRT @ 0x028[E-] REG NA Generating: N085 ( 0, 0) [000045] ------------ RETURN void REG NA $340 Added IP mapping: EPILOG (G_M48700_IG04,ins#5,ofs#24) label Reserving epilog IG for block BB04 G_M48700_IG04: ; offs=000037H, funclet=00, bbWeight=1 *************** After placeholder IG creation G_M48700_IG01: ; func=00, offs=000000H, size=0000H, gcrefRegs=00000000 {} <-- Prolog IG G_M48700_IG02: ; offs=000000H, size=0027H, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, BB01 [0000], byref G_M48700_IG03: ; offs=000027H, size=0010H, gcrefRegs=00000003 {rax rcx}, byrefRegs=00000000 {}, BB02 [0009], byref G_M48700_IG04: ; offs=000037H, size=0018H, gcrefRegs=00000002 {rcx}, byrefRegs=00000000 {}, BB03 [0007], byref G_M48700_IG05: ; epilog placeholder, next placeholder=, BB04 [0002], epilog, extend <-- First placeholder <-- Last placeholder ; PrevGCVars=0000000000000000 {}, PrevGCrefRegs=00000003 {rax rcx}, PrevByrefRegs=00000000 {} ; InitGCVars=0000000000000000 {}, InitGCrefRegs=00000002 {rcx}, InitByrefRegs=00000000 {} G_M48700_IG06: ; offs=00014FH, size=0000H, gcrefRegs=00000000 {} <-- Current IG Variable Live Range History Dump for BB04 ..None.. =============== Generating BB05 [???..???) (throw), preds={BB02} succs={} flags=0x00000000.20091020: i rare label gcsafe LIR BB05 IN (2)={V03 V04} OUT(0)={ } Recording Var Locations at start of BB05 V03(rax) V04(r8) Change life 0000000000000000 {} -> 0000000000000012 {V03 V04} V03 in reg rax is becoming live [------] Live regs: 00000000 {} => 00000001 {rax} V04 in reg r8 is becoming live [------] Live regs: 00000001 {rax} => 00000101 {rax r8} Live regs: (unchanged) 00000101 {rax r8} GC regs: (unchanged) 00000001 {rax} Byref regs: (unchanged) 00000000 {} L_M48700_BB05: Mapped BB05 to G_M48700_IG06 Label: IG06, GCvars=0000000000000000 {}, gcrefRegs=00000001 {rax}, byrefRegs=00000000 {} Scope info: begin block BB05, IL range [???..???) Scope info: ignoring block beginning Generating: N089 ( 3, 2) [000020] ------?----- t20 = LCL_VAR long V04 tmp3 u:2 r8 (last use) REG r8 $141 /--* t20 long Generating: N091 (???,???) [000106] ------------ t106 = * PUTARG_REG long REG rcx V04 in reg r8 is becoming dead [000020] Live regs: 00000101 {rax r8} => 00000001 {rax} Live vars: {V03 V04} => {V03} IN0011: mov rcx, r8 Generating: N093 ( 1, 1) [000027] ------?----- t27 = LCL_VAR ref V03 tmp2 u:2 rax (last use) REG rax $c5 /--* t27 ref Generating: N095 (???,???) [000107] ------------ t107 = * PUTARG_REG ref REG rdx V03 in reg rax is becoming dead [000027] Live regs: 00000001 {rax} => 00000000 {} Live vars: {V03} => {} GC regs: 00000001 {rax} => 00000000 {} IN0012: mov rdx, rax GC regs: 00000000 {} => 00000004 {rdx} /--* t106 long arg0 in rcx +--* t107 ref arg1 in rdx Generating: N097 ( 18, 10) [000028] --CXG-?----- t28 = * CALL help ref HELPER.CORINFO_HELP_CHKCASTCLASS_SPECIAL REG rax $18a GC regs: 00000004 {rdx} => 00000000 {} Call: GCvars=0000000000000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {} IN0013: call CORINFO_HELP_CHKCASTCLASS_SPECIAL GC regs: 00000000 {} => 00000001 {rax} GC regs: 00000001 {rax} => 00000000 {} Scope info: ignoring block end IN0014: int3 Variable Live Range History Dump for BB05 ..None.. =============== Generating BB06 [022..028) (throw), preds={BB03} succs={} flags=0x00000002.20491020: i rare label hascall gcsafe newobj LIR BB06 IN (0)={} + ByrefExposed + GcHeap OUT(0)={} Recording Var Locations at start of BB06 Liveness not changing: 0000000000000000 {} Live regs: (unchanged) 00000000 {} GC regs: (unchanged) 00000000 {} Byref regs: (unchanged) 00000000 {} L_M48700_BB06: G_M48700_IG06: ; offs=00014FH, funclet=00, bbWeight=0 Mapped BB06 to G_M48700_IG07 Label: IG07, GCvars=0000000000000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {} Scope info: begin block BB06, IL range [022..028) Added IP mapping: 0x0022 STACK_EMPTY (G_M48700_IG07,ins#0,ofs#0) label Generating: N101 (???,???) [000100] ------------ IL_OFFSET void INLRT @ 0x022[E-] REG NA Generating: N103 ( 1, 4) [000046] H----------- t46 = CNS_INT(h) long 0x40000000004200e8 token REG rcx $144 IN0015: lea rcx, [(reloc 0x40000000004200e8)] /--* t46 long Generating: N105 (???,???) [000108] ------------ t108 = * PUTARG_REG long REG rcx /--* t108 long arg0 in rcx Generating: N107 ( 15, 10) [000047] --C--------- t47 = * CALL help ref HELPER.CORINFO_HELP_NEWSFAST REG rax $18f Call: GCvars=0000000000000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {} IN0016: call CORINFO_HELP_NEWSFAST GC regs: 00000000 {} => 00000001 {rax} /--* t47 ref Generating: N109 ( 19, 13) [000049] DA---------- * STORE_LCL_VAR ref V06 tmp5 d:2 rsi REG rsi GC regs: 00000001 {rax} => 00000000 {} IN0017: mov rsi, rax V06 in reg rsi is becoming live [000049] Live regs: 00000000 {} => 00000040 {rsi} Live vars: {} => {V06} GC regs: 00000000 {} => 00000040 {rsi} Generating: N111 ( 3, 2) [000050] ------------ t50 = LCL_VAR ref V06 tmp5 u:2 rsi REG rsi $18f /--* t50 ref Generating: N113 (???,???) [000109] ------------ t109 = * PUTARG_REG ref REG rcx IN0018: mov rcx, rsi GC regs: 00000040 {rsi} => 00000042 {rcx rsi} /--* t109 ref this in rcx Generating: N115 ( 17, 9) [000051] --CXG------- * CALL void System.Exception..ctor REG NA $VN.Void GC regs: 00000042 {rcx rsi} => 00000040 {rsi} Call: GCvars=0000000000000000 {}, gcrefRegs=00000040 {rsi}, byrefRegs=00000000 {} IN0019: call System.Exception:.ctor():this Added IP mapping: 0x0027 (G_M48700_IG07,ins#5,ofs#23) Generating: N117 (???,???) [000101] ------------ IL_OFFSET void INLRT @ 0x027[--] REG NA Generating: N119 ( 3, 2) [000052] ------------ t52 = LCL_VAR ref V06 tmp5 u:2 rsi (last use) REG rsi $18f /--* t52 ref Generating: N121 (???,???) [000110] ------------ t110 = * PUTARG_REG ref REG rcx V06 in reg rsi is becoming dead [000052] Live regs: 00000040 {rsi} => 00000000 {} Live vars: {V06} => {} GC regs: 00000040 {rsi} => 00000000 {} IN001a: mov rcx, rsi GC regs: 00000000 {} => 00000002 {rcx} /--* t110 ref arg0 in rcx Generating: N123 ( 17, 8) [000053] --CXG------- * CALL help void HELPER.CORINFO_HELP_THROW REG NA $190 GC regs: 00000002 {rcx} => 00000000 {} Call: GCvars=0000000000000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {} IN001b: call CORINFO_HELP_THROW IN001c: int3 Variable Live Range History Dump for BB06 ..None.. Liveness not changing: 0000000000000000 {} # compCycleEstimate = 155, compSizeEstimate = 114 TestCovariantReturns:Run() ; Final local variable assignments ; ;* V00 loc0 [V00 ] ( 0, 0 ) ref -> zero-ref class-hnd exact single-def ; V01 OutArgs [V01 ] ( 1, 1 ) lclBlk (32) [rsp+00H] "OutgoingArgSpace" ; V02 tmp1 [V02,T02] ( 2, 4 ) ref -> rcx class-hnd exact single-def "NewObj constructor temp" ; V03 tmp2 [V03,T01] ( 3, 4 ) ref -> rax single-def "CASTCLASS eval op1" ; V04 tmp3 [V04,T04] ( 3, 1 ) long -> r8 "fgInsertCommaFormTemp is creating a new local variable" ; V05 tmp4 [V05,T00] ( 4, 6.50) ref -> rcx class-hnd "spilling QMark2" ; V06 tmp5 [V06,T05] ( 3, 0 ) ref -> rsi class-hnd exact single-def "NewObj constructor temp" ; V07 tmp6 [V07,T03] ( 2, 4 ) ref -> rcx class-hnd single-def "Inlining Arg" ; ; Lcl frame size = 32 *************** Before prolog / epilog generation G_M48700_IG01: ; func=00, offs=000000H, size=0000H, gcrefRegs=00000000 {} <-- Prolog IG G_M48700_IG02: ; offs=000000H, size=0027H, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, BB01 [0000], byref G_M48700_IG03: ; offs=000027H, size=0010H, gcrefRegs=00000003 {rax rcx}, byrefRegs=00000000 {}, BB02 [0009], byref G_M48700_IG04: ; offs=000037H, size=0018H, gcrefRegs=00000002 {rcx}, byrefRegs=00000000 {}, BB03 [0007], byref G_M48700_IG05: ; epilog placeholder, next placeholder=, BB04 [0002], epilog, extend <-- First placeholder <-- Last placeholder ; PrevGCVars=0000000000000000 {}, PrevGCrefRegs=00000003 {rax rcx}, PrevByrefRegs=00000000 {} ; InitGCVars=0000000000000000 {}, InitGCrefRegs=00000002 {rcx}, InitByrefRegs=00000000 {} G_M48700_IG06: ; offs=00014FH, size=000CH, gcVars=0000000000000000 {}, gcrefRegs=00000001 {rax}, byrefRegs=00000000 {}, BB05 [0008], gcvars, byref G_M48700_IG07: ; offs=00015BH, size=0000H, gcrefRegs=00000000 {}, BB06 [0001] <-- Current IG Recording Var Locations at start of BB01 G_M48700_IG07: ; offs=00015BH, funclet=00, bbWeight=0 *************** In genFnProlog() Added IP mapping to front: PROLOG (G_M48700_IG01,ins#0,ofs#0) label __prolog: IN001d: push rsi IN001e: sub rsp, 32 *************** In genEnregisterIncomingStackArgs() G_M48700_IG01: ; offs=000000H, funclet=00, bbWeight=1 *************** In genFnEpilog() __epilog: gcVarPtrSetCur=0000000000000000 {}, gcRegGCrefSetCur=00000002 {rcx}, gcRegByrefSetCur=00000000 {} IN001f: add rsp, 32 IN0020: pop rsi IN0021: ret G_M48700_IG05: ; offs=00004FH, funclet=00, bbWeight=1 0 prologs, 1 epilogs, 0 funclet prologs, 0 funclet epilogs *************** After prolog / epilog generation G_M48700_IG01: ; func=00, offs=000000H, size=0005H, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG G_M48700_IG02: ; offs=000005H, size=0027H, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, BB01 [0000], byref G_M48700_IG03: ; offs=00002CH, size=0010H, gcrefRegs=00000003 {rax rcx}, byrefRegs=00000000 {}, BB02 [0009], byref G_M48700_IG04: ; offs=00003CH, size=0018H, gcrefRegs=00000002 {rcx}, byrefRegs=00000000 {}, BB03 [0007], byref G_M48700_IG05: ; offs=000054H, size=0006H, epilog, nogc, extend G_M48700_IG06: ; offs=00005AH, size=000CH, gcVars=0000000000000000 {}, gcrefRegs=00000001 {rax}, byrefRegs=00000000 {}, BB05 [0008], gcvars, byref G_M48700_IG07: ; offs=000066H, size=0020H, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, BB06 [0001], byref *************** In emitJumpDistBind() Binding: IN0008: 000000 je L_M48700_BB03 Binding L_M48700_BB03 to G_M48700_IG04 Estimate of fwd jump [55B07AE4/008]: 0026 -> 003C = 0014 Shrinking jump [55B07AE4/008] Adjusted offset of BB03 from 002C to 0028 Binding: IN000b: 000000 jne L_M48700_BB05 Binding L_M48700_BB05 to G_M48700_IG06 Estimate of fwd jump [55B07CCC/011]: 0032 -> 0056 = 0022 Shrinking jump [55B07CCC/011] Adjusted offset of BB04 from 003C to 0034 Binding: IN0010: 000000 je L_M48700_BB06 Binding L_M48700_BB06 to G_M48700_IG07 Estimate of fwd jump [55B07FE4/016]: 0046 -> 005E = 0016 Shrinking jump [55B07FE4/016] Adjusted offset of BB05 from 0054 to 0048 Adjusted offset of BB06 from 005A to 004E Adjusted offset of BB07 from 0066 to 005A Total shrinkage = 12, min extra jump size = 4294967295 *************** Finishing PHASE Generate code *************** Starting PHASE Emit code Hot code size = 0x7A bytes Cold code size = 0x0 bytes reserveUnwindInfo(isFunclet=false, isColdCode=false, unwindSize=0x8) *************** In emitEndCodeGen() Converting emitMaxStackDepth from bytes (0) to elements (0) *************************************************************************** Instructions as they come out of the scheduler G_M48700_IG01: ; func=00, offs=000000H, size=0005H, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG IN001d: 000000 56 push rsi IN001e: 000001 4883EC20 sub rsp, 32 ;; bbWeight=1 PerfScore 1.25 G_M48700_IG02: ; func=00, offs=000005H, size=0023H, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, BB01 [0000], byref, isz IN0001: 000005 488D0D00000000 lea rcx, [(reloc 0x4000000000420070)] IN0002: 00000C E800000000 call CORINFO_HELP_NEWSFAST ; gcrRegs +[rax] ; gcr arg pop 0 IN0003: 000011 488BC8 mov rcx, rax ; gcrRegs +[rcx] IN0004: 000014 48B88800420000000040 mov rax, 0x4000000000420088 ; gcrRegs -[rax] IN0005: 00001E FF10 call [rax]Base:GetFoo():BringUpTest+TestCovariantReturns+IFoo:this ; gcrRegs -[rcx] +[rax] ; gcr arg pop 0 IN0006: 000020 488BC8 mov rcx, rax ; gcrRegs +[rcx] IN0007: 000023 4885C9 test rcx, rcx IN0008: 000026 740C je SHORT G_M48700_IG04 ;; bbWeight=1 PerfScore 6.50 G_M48700_IG03: ; func=00, offs=000028H, size=000CH, gcrefRegs=00000003 {rax rcx}, byrefRegs=00000000 {}, BB02 [0009], byref, isz IN0009: 000028 4C8D0500000000 lea r8, [(reloc 0x40000000004200a0)] IN000a: 00002F 4C3901 cmp qword ptr [rcx], r8 IN000b: 000032 751A jne SHORT G_M48700_IG06 ;; bbWeight=0.25 PerfScore 1.12 G_M48700_IG04: ; func=00, offs=000034H, size=0014H, gcrefRegs=00000002 {rcx}, byrefRegs=00000000 {}, BB03 [0007], byref, isz ; gcrRegs -[rax] IN000c: 000034 488B4908 mov rcx, gword ptr [rcx+8] IN000d: 000038 488D1500000000 lea rdx, gword ptr [(reloc 0x4000000000420148)] ; gcrRegs +[rdx] IN000e: 00003F E800000000 call System.String:Equals(System.String,System.String):bool ; gcrRegs -[rcx rdx] ; gcr arg pop 0 IN000f: 000044 85C0 test eax, eax IN0010: 000046 7412 je SHORT G_M48700_IG07 ;; bbWeight=1 PerfScore 4.75 G_M48700_IG05: ; func=00, offs=000048H, size=0006H, epilog, nogc, extend IN001f: 000048 4883C420 add rsp, 32 IN0020: 00004C 5E pop rsi IN0021: 00004D C3 ret ;; bbWeight=1 PerfScore 1.75 G_M48700_IG06: ; func=00, offs=00004EH, size=000CH, gcVars=0000000000000000 {}, gcrefRegs=00000001 {rax}, byrefRegs=00000000 {}, BB05 [0008], gcvars, byref ; gcrRegs +[rax] IN0011: 00004E 498BC8 mov rcx, r8 IN0012: 000051 488BD0 mov rdx, rax ; gcrRegs +[rdx] IN0013: 000054 E800000000 call CORINFO_HELP_CHKCASTCLASS_SPECIAL ; gcrRegs -[rdx] ; gcr arg pop 0 IN0014: 000059 CC int3 ;; bbWeight=0 PerfScore 0.00 G_M48700_IG07: ; func=00, offs=00005AH, size=0020H, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, BB06 [0001], byref ; gcrRegs -[rax] IN0015: 00005A 488D0D00000000 lea rcx, [(reloc 0x40000000004200e8)] IN0016: 000061 E800000000 call CORINFO_HELP_NEWSFAST ; gcrRegs +[rax] ; gcr arg pop 0 IN0017: 000066 488BF0 mov rsi, rax ; gcrRegs +[rsi] IN0018: 000069 488BCE mov rcx, rsi ; gcrRegs +[rcx] IN0019: 00006C E800000000 call System.Exception:.ctor():this ; gcrRegs -[rax rcx] ; gcr arg pop 0 IN001a: 000071 488BCE mov rcx, rsi ; gcrRegs +[rcx] IN001b: 000074 E800000000 call CORINFO_HELP_THROW ; gcrRegs -[rcx rsi] ; gcr arg pop 0 IN001c: 000079 CC int3 ;; bbWeight=0 PerfScore 0.00Allocated method code size = 122 , actual size = 122, unused size = 0 ; Total bytes of code 122, prolog size 5, PerfScore 27.58, instruction count 33, allocated bytes for code 122 (MethodHash=db0641c3) for method TestCovariantReturns:Run() ; ============================================================ *************** After end code gen, before unwindEmit() G_M48700_IG01: ; func=00, offs=000000H, size=0005H, bbWeight=1 PerfScore 1.25, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG IN001d: 000000 push rsi IN001e: 000001 sub rsp, 32 G_M48700_IG02: ; offs=000005H, size=0023H, bbWeight=1 PerfScore 6.50, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, BB01 [0000], byref, isz IN0001: 000005 lea rcx, [(reloc 0x4000000000420070)] IN0002: 00000C call CORINFO_HELP_NEWSFAST IN0003: 000011 mov rcx, rax IN0004: 000014 mov rax, 0x4000000000420088 IN0005: 00001E call [rax]Base:GetFoo():BringUpTest+TestCovariantReturns+IFoo:this IN0006: 000020 mov rcx, rax IN0007: 000023 test rcx, rcx IN0008: 000026 je SHORT G_M48700_IG04 G_M48700_IG03: ; offs=000028H, size=000CH, bbWeight=0.25 PerfScore 1.12, gcrefRegs=00000003 {rax rcx}, byrefRegs=00000000 {}, BB02 [0009], byref, isz IN0009: 000028 lea r8, [(reloc 0x40000000004200a0)] IN000a: 00002F cmp qword ptr [rcx], r8 IN000b: 000032 jne SHORT G_M48700_IG06 G_M48700_IG04: ; offs=000034H, size=0014H, bbWeight=1 PerfScore 4.75, gcrefRegs=00000002 {rcx}, byrefRegs=00000000 {}, BB03 [0007], byref, isz IN000c: 000034 mov rcx, gword ptr [rcx+8] IN000d: 000038 lea rdx, gword ptr [(reloc 0x4000000000420148)] IN000e: 00003F call System.String:Equals(System.String,System.String):bool IN000f: 000044 test eax, eax IN0010: 000046 je SHORT G_M48700_IG07 G_M48700_IG05: ; offs=000048H, size=0006H, bbWeight=1 PerfScore 1.75, epilog, nogc, extend IN001f: 000048 add rsp, 32 IN0020: 00004C pop rsi IN0021: 00004D ret G_M48700_IG06: ; offs=00004EH, size=000CH, bbWeight=0 PerfScore 0.00, gcVars=0000000000000000 {}, gcrefRegs=00000001 {rax}, byrefRegs=00000000 {}, BB05 [0008], gcvars, byref IN0011: 00004E mov rcx, r8 IN0012: 000051 mov rdx, rax IN0013: 000054 call CORINFO_HELP_CHKCASTCLASS_SPECIAL IN0014: 000059 int3 G_M48700_IG07: ; offs=00005AH, size=0020H, bbWeight=0 PerfScore 0.00, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, BB06 [0001], byref IN0015: 00005A lea rcx, [(reloc 0x40000000004200e8)] IN0016: 000061 call CORINFO_HELP_NEWSFAST IN0017: 000066 mov rsi, rax IN0018: 000069 mov rcx, rsi IN0019: 00006C call System.Exception:.ctor():this IN001a: 000071 mov rcx, rsi IN001b: 000074 call CORINFO_HELP_THROW IN001c: 000079 int3 *************** Finishing PHASE Emit code *************** Starting PHASE Emit GC+EH tables Unwind Info: >> Start offset : 0x000000 (not in unwind data) >> End offset : 0x00007a (not in unwind data) Version : 1 Flags : 0x00 SizeOfProlog : 0x05 CountOfUnwindCodes: 2 FrameRegister : none (0) FrameOffset : N/A (no FrameRegister) (Value=0) UnwindCodes : CodeOffset: 0x05 UnwindOp: UWOP_ALLOC_SMALL (2) OpInfo: 3 * 8 + 8 = 32 = 0x20 CodeOffset: 0x01 UnwindOp: UWOP_PUSH_NONVOL (0) OpInfo: rsi (6) allocUnwindInfo(pHotCode=0x00000223110AC2A8, pColdCode=0x0000000000000000, startOffset=0x0, endOffset=0x7a, unwindSize=0x8, pUnwindBlock=0x0000022455AF9188, funKind=0 (main function)) *************** In genIPmappingGen() IP mapping count : 7 IL offs PROLOG : 0x00000000 ( STACK_EMPTY ) IL offs 0x0000 : 0x00000005 ( STACK_EMPTY ) IL offs 0x0006 : 0x00000014 ( STACK_EMPTY ) IL offs 0x0028 : 0x00000048 ( STACK_EMPTY ) IL offs EPILOG : 0x00000048 ( STACK_EMPTY ) IL offs 0x0022 : 0x0000005A ( STACK_EMPTY ) IL offs 0x0027 : 0x00000071 *************** In genSetScopeInfo() VarLocInfo count is 0 ; Variable debug info: 0 live ranges, 0 vars for method TestCovariantReturns:Run() VARIABLE LIVE RANGES: ..None.. *************** In gcInfoBlockHdrSave() Set code length to 122. Set ReturnKind to Scalar. Set Outgoing stack arg area size to 32. Register slot id for reg rsi = 0. Set state of slot 0 at instr offset 0x6c to Live. Set state of slot 0 at instr offset 0x71 to Dead. Defining 7 call sites: Offset 0xc, size 5. Offset 0x1e, size 2. Offset 0x3f, size 5. Offset 0x54, size 5. Offset 0x61, size 5. Offset 0x6c, size 5. Offset 0x74, size 5. *************** Finishing PHASE Emit GC+EH tables Method code size: 122 Allocations for TestCovariantReturns:Run() (MethodHash=db0641c3) count: 1393, size: 115354, max = 3072 allocateMemory: 131072, nraUsed: 120800 Alloc'd bytes by kind: kind | size | pct ---------------------+------------+-------- AssertionProp | 6684 | 5.79% ASTNode | 15568 | 13.50% InstDesc | 4816 | 4.17% ImpStack | 384 | 0.33% BasicBlock | 6000 | 5.20% fgArgInfo | 648 | 0.56% fgArgInfoPtrArr | 72 | 0.06% FlowList | 456 | 0.40% TreeStatementList | 0 | 0.00% SiScope | 0 | 0.00% DominatorMemory | 336 | 0.29% LSRA | 5288 | 4.58% LSRA_Interval | 2080 | 1.80% LSRA_RefPosition | 9216 | 7.99% Reachability | 16 | 0.01% SSA | 968 | 0.84% ValueNumber | 12647 | 10.96% LvaTable | 2208 | 1.91% UnwindInfo | 0 | 0.00% hashBv | 120 | 0.10% bitset | 360 | 0.31% FixedBitVect | 128 | 0.11% Generic | 2718 | 2.36% LocalAddressVisitor | 512 | 0.44% FieldSeqStore | 176 | 0.15% ZeroOffsetFieldMap | 160 | 0.14% ArrayInfoMap | 40 | 0.03% MemoryPhiArg | 0 | 0.00% CSE | 1504 | 1.30% GC | 3199 | 2.77% CorTailCallInfo | 0 | 0.00% Inlining | 5344 | 4.63% ArrayStack | 0 | 0.00% DebugInfo | 376 | 0.33% DebugOnly | 30393 | 26.35% Codegen | 848 | 0.74% LoopOpt | 120 | 0.10% LoopClone | 0 | 0.00% LoopHoist | 0 | 0.00% Unknown | 801 | 0.69% RangeCheck | 0 | 0.00% CopyProp | 744 | 0.64% SideEffects | 0 | 0.00% ObjectAllocator | 0 | 0.00% VariableLiveRanges | 184 | 0.16% ClassLayout | 0 | 0.00% TailMergeThrows | 0 | 0.00% EarlyProp | 0 | 0.00% ZeroInit | 240 | 0.21% Pgo | 0 | 0.00% ****** DONE compiling TestCovariantReturns:Run() C:\git\runtime\artifacts\bin\coreclr\windows.x64.Debug\ilc\net6.0\ilc.exe (process 24252) exited with code 0. To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops. Press any key to close this window . . .