Created
March 5, 2020 19:03
-
-
Save AndyAyersMS/f10d9dae8143ddec55869b718d0f38bd to your computer and use it in GitHub Desktop.
Jit dumps for simple repro case in dotnet/runtime#33098
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
c:\repos\runtime4\artifacts\tests\coreclr\Windows_NT.x86.release\Tests\Core_Root\corerun.exe ex.exe | |
Compiling 0 CastHelpers::StelemRef, IL size = 86, hash=0x93aaa786 FullOpts | |
Compiling 1 CastHelpers::LdelemaRef, IL size = 42, hash=0xffd2fc9e FullOpts | |
Compiling 2 SpanHelpers::IndexOf, IL size = 705, hash=0xdb3370c7 FullOpts | |
Compiling 3 Utf16Utility::GetPointerToFirstInvalidChar, IL size = 972, hash=0x137a51fe FullOpts | |
Compiling 4 Vector128::CreateScalarUnsafe, IL size = 21, hash=0xcd46d192 FullOpts | |
Compiling 5 Vector128::AsUInt32, IL size = 7, hash=0x8f8eda53 FullOpts | |
Compiling 6 Vector128::AsUInt16, IL size = 7, hash=0x7bc35b55 FullOpts | |
Compiling 7 Vector128::AsByte, IL size = 7, hash=0x9ea1d9de FullOpts | |
Compiling 8 Sse41::get_IsSupported, IL size = 6, hash=0x6da8cf37 FullOpts | |
Compiling 9 ASCIIUtility::NarrowUtf16ToAscii, IL size = 637, hash=0x150d5dc8 FullOpts | |
Compiling 10 X::Main, IL size = 51, hash=0x17874944 FullOpts | |
Compiling 11 EmptyArray`1::.cctor, IL size = 12, hash=0xaece4604 Tier-1/FullOpts switched to MinOpts | |
Compiling 12 Stack`1::Push, IL size = 60, hash=0x3bffc3a2 FullOpts | |
Compiling 13 Stack`1::PushWithResize, IL size = 80, hash=0xa06e2af2 FullOpts | |
Compiling 14 Array::Resize, IL size = 66, hash=0x16e8e9e0 FullOpts | |
****** START compiling Stack`1:Pop():RefAsValueType`1:this (MethodHash=b85a3b29) | |
Generating code for Windows x86 | |
OPTIONS: compCodeOpt = BLENDED_CODE | |
OPTIONS: compDbgCode = false | |
OPTIONS: compDbgInfo = true | |
OPTIONS: compDbgEnC = false | |
OPTIONS: compProcedureSplitting = false | |
OPTIONS: compProcedureSplittingEH = false | |
IL to import: | |
IL_0000 02 ldarg.0 | |
IL_0001 7b 54 02 00 0a ldfld 0xA000254 | |
IL_0006 17 ldc.i4.1 | |
IL_0007 59 sub | |
IL_0008 0a stloc.0 | |
IL_0009 02 ldarg.0 | |
IL_000a 7b 53 02 00 0a ldfld 0xA000253 | |
IL_000f 0b stloc.1 | |
IL_0010 06 ldloc.0 | |
IL_0011 07 ldloc.1 | |
IL_0012 8e ldlen | |
IL_0013 69 conv.i4 | |
IL_0014 37 06 blt.un.s 6 (IL_001c) | |
IL_0016 02 ldarg.0 | |
IL_0017 28 59 02 00 0a call 0xA000259 | |
IL_001c 02 ldarg.0 | |
IL_001d 02 ldarg.0 | |
IL_001e 7b 55 02 00 0a ldfld 0xA000255 | |
IL_0023 17 ldc.i4.1 | |
IL_0024 58 add | |
IL_0025 7d 55 02 00 0a stfld 0xA000255 | |
IL_002a 02 ldarg.0 | |
IL_002b 06 ldloc.0 | |
IL_002c 7d 54 02 00 0a stfld 0xA000254 | |
IL_0031 07 ldloc.1 | |
IL_0032 06 ldloc.0 | |
IL_0033 a3 11 00 00 1b ldelem 0x1B000011 | |
IL_0038 0c stloc.2 | |
IL_0039 28 0b 00 00 2b call 0x2B00000B | |
IL_003e 2c 10 brfalse.s 16 (IL_0050) | |
IL_0040 07 ldloc.1 | |
IL_0041 06 ldloc.0 | |
IL_0042 12 03 ldloca.s 0x3 | |
IL_0044 fe 15 11 00 00 1b initobj 0x1B000011 | |
IL_004a 09 ldloc.3 | |
IL_004b a4 11 00 00 1b stelem 0x1B000011 | |
IL_0050 08 ldloc.2 | |
IL_0051 2a ret | |
lvaSetClass: setting class for V00 to (0825A8B8) Stack`1 | |
'this' passed in register ecx | |
lvaSetClass: setting class for V02 to (0825AD18) (null) | |
; Initial local variable assignments | |
; | |
; V00 this ref this class-hnd | |
; V01 loc0 int | |
; V02 loc1 ref class-hnd | |
; V03 loc2 struct ( 4) | |
; V04 loc3 struct ( 4) | |
*************** In compInitDebuggingInfo() for Stack`1:Pop():RefAsValueType`1:this | |
getVars() returned cVars = 0, extendOthers = true | |
info.compVarScopesCount = 5 | |
VarNum LVNum Name Beg End | |
0: 00h 00h V00 this 000h 052h | |
1: 01h 01h V01 loc0 000h 052h | |
2: 02h 02h V02 loc1 000h 052h | |
3: 03h 03h V03 loc2 000h 052h | |
4: 04h 04h V04 loc3 000h 052h | |
info.compStmtOffsetsCount = 0 | |
info.compStmtOffsetsImplicit = 0005h ( STACK_EMPTY CALL_SITE ) | |
*************** In fgFindBasicBlocks() for Stack`1:Pop():RefAsValueType`1:this | |
Marked V01 as a single def local | |
Marked V02 as a single def local | |
Marked V03 as a single def local | |
Jump targets: | |
IL_001c | |
IL_0050 | |
New Basic Block BB01 [0000] created. | |
BB01 [000..016) | |
New Basic Block BB02 [0001] created. | |
BB02 [016..01C) | |
New Basic Block BB03 [0002] created. | |
BB03 [01C..040) | |
New Basic Block BB04 [0003] created. | |
BB04 [040..050) | |
New Basic Block BB05 [0004] created. | |
BB05 [050..052) | |
IL Code Size,Instr 82, 38, Basic Block count 5, Local Variable Num,Ref count 5, 19 for method Stack`1:Pop():RefAsValueType`1:this | |
OPTIONS: opts.MinOpts() == false | |
Basic block list for 'Stack`1:Pop():RefAsValueType`1:this' | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB03 ( cond ) | |
BB02 [0001] 1 1 [016..01C) | |
BB03 [0002] 2 1 [01C..040)-> BB05 ( cond ) | |
BB04 [0003] 1 1 [040..050) | |
BB05 [0004] 2 1 [050..052) (return) | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
Compiling 15 Stack`1::Pop, IL size = 82, hash=0xb85a3b29 FullOpts | |
*************** Starting PHASE Pre-import | |
*************** Finishing PHASE Pre-import | |
*************** Starting PHASE Importation | |
*************** In impImport() for Stack`1:Pop():RefAsValueType`1:this | |
impImportBlockPending for BB01 | |
Importing BB01 (PC=000) of 'Stack`1:Pop():RefAsValueType`1:this' | |
[ 0] 0 (0x000) ldarg.0 | |
[ 1] 1 (0x001) ldfld 0A000254 | |
[ 1] 6 (0x006) ldc.i4.1 1 | |
[ 2] 7 (0x007) sub | |
[ 1] 8 (0x008) stloc.0 | |
STMT00000 (IL 0x000... ???) | |
[000005] -A-XG------- * ASG int | |
[000004] D------N---- +--* LCL_VAR int V01 loc0 | |
[000003] ---XG------- \--* SUB int | |
[000001] ---XG------- +--* FIELD int _size | |
[000000] ------------ | \--* LCL_VAR ref V00 this | |
[000002] ------------ \--* CNS_INT int 1 | |
[ 0] 9 (0x009) ldarg.0 | |
[ 1] 10 (0x00a) ldfld 0A000253 | |
[ 1] 15 (0x00f) stloc.1Querying runtime about current class of field Stack`1._array (declared as (null)) | |
Field's current class not available | |
STMT00001 (IL 0x009... ???) | |
[000009] -A-XG------- * ASG ref | |
[000008] D------N---- +--* LCL_VAR ref V02 loc1 | |
[000007] ---XG------- \--* FIELD ref _array | |
[000006] ------------ \--* LCL_VAR ref V00 this | |
[ 0] 16 (0x010) ldloc.0 | |
[ 1] 17 (0x011) ldloc.1 | |
[ 2] 18 (0x012) ldlen | |
[ 2] 19 (0x013) conv.i4 | |
[ 2] 20 (0x014) blt.un.s | |
STMT00002 (IL 0x010... ???) | |
[000014] ---X-------- * JTRUE void | |
[000013] N--X-----U-- \--* LT int | |
[000010] ------------ +--* LCL_VAR int V01 loc0 | |
[000012] ---X-------- \--* ARR_LENGTH int | |
[000011] ------------ \--* LCL_VAR ref V02 loc1 | |
impImportBlockPending for BB02 | |
impImportBlockPending for BB03 | |
Importing BB03 (PC=028) of 'Stack`1:Pop():RefAsValueType`1:this' | |
[ 0] 28 (0x01c) ldarg.0 | |
[ 1] 29 (0x01d) ldarg.0 | |
[ 2] 30 (0x01e) ldfld 0A000255 | |
[ 2] 35 (0x023) ldc.i4.1 1 | |
[ 3] 36 (0x024) add | |
[ 2] 37 (0x025) stfld 0A000255 | |
STMT00003 (IL 0x01C... ???) | |
[000021] -A-XG------- * ASG int | |
[000020] ---XG--N---- +--* FIELD int _version | |
[000015] ------------ | \--* LCL_VAR ref V00 this | |
[000019] ---XG------- \--* ADD int | |
[000017] ---XG------- +--* FIELD int _version | |
[000016] ------------ | \--* LCL_VAR ref V00 this | |
[000018] ------------ \--* CNS_INT int 1 | |
[ 0] 42 (0x02a) ldarg.0 | |
[ 1] 43 (0x02b) ldloc.0 | |
[ 2] 44 (0x02c) stfld 0A000254 | |
STMT00004 (IL 0x02A... ???) | |
[000025] -A-XG------- * ASG int | |
[000024] ---XG--N---- +--* FIELD int _size | |
[000022] ------------ | \--* LCL_VAR ref V00 this | |
[000023] ------------ \--* LCL_VAR int V01 loc0 | |
[ 0] 49 (0x031) ldloc.1 | |
[ 1] 50 (0x032) ldloc.0 | |
[ 2] 51 (0x033) ldelem 1B000011 | |
[ 1] 56 (0x038) stloc.2 | |
STMT00005 (IL 0x031... ???) | |
[000033] -A-XG------- * ASG struct (copy) | |
[000031] D----------- +--* LCL_VAR struct<RefAsValueType`1, 4> V03 loc2 | |
[000030] ---XG------- \--* OBJ struct<RefAsValueType`1, 4> | |
[000029] ---XG------- \--* ADDR byref | |
[000028] ---XG------- \--* INDEX struct | |
[000026] ------------ +--* LCL_VAR ref V02 loc1 | |
[000027] ------------ \--* LCL_VAR int V01 loc0 | |
[ 0] 57 (0x039) call 2B00000B | |
In Compiler::impImportCall: opcode is call, kind=0, callRetType is bool, structSize is 0 | |
Named Intrinsic System.Runtime.CompilerServices.RuntimeHelpersIsReferenceOrContainsReferences: Not recognized | |
lvaGrabTemp returning 5 (V05 tmp0) called for impRuntimeLookup slot. | |
STMT00006 (IL 0x039... ???) | |
[000038] -A-X-------- * ASG int | |
[000037] D------N---- +--* LCL_VAR int V05 tmp0 | |
[000036] #--X-------- \--* IND int | |
[000035] ------------ \--* LCL_VAR ref V00 this | |
lvaGrabTemp returning 6 (V06 tmp1) called for spilling Runtime Lookup tree. | |
STMT00007 (IL ???... ???) | |
[000063] -AC-G------- * ASG int | |
[000062] D------N---- +--* LCL_VAR int V06 tmp1 | |
[000061] --C-G------- \--* QMARK int | |
[000051] Q----------- if +--* NE int | |
[000047] n----------- | +--* IND int | |
[000046] ------------ | | \--* ADD int | |
[000044] #----------- | | +--* IND int | |
[000043] #----------- | | | \--* IND int | |
[000042] ------------ | | | \--* ADD int | |
[000040] ------------ | | | +--* LCL_VAR int V05 tmp0 | |
[000041] ------------ | | | \--* CNS_INT int 32 | |
[000045] ------------ | | \--* CNS_INT int 12 | |
[000050] ------------ | \--* CNS_INT int 0 | |
[000060] --C-G------- if \--* COLON int | |
[000049] --C-G------- else +--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] ------------ arg0 | +--* LCL_VAR int V05 tmp0 | |
[000048] ------------ arg1 | \--* CNS_INT(h) int 0x8283EB8 token | |
[000052] n----------- then \--* IND int | |
[000053] ------------ \--* ADD int | |
[000054] #----------- +--* IND int | |
[000055] #----------- | \--* IND int | |
[000056] ------------ | \--* ADD int | |
[000057] ------------ | +--* LCL_VAR int V05 tmp0 | |
[000058] ------------ | \--* CNS_INT int 32 | |
[000059] ------------ \--* CNS_INT int 12 | |
STMT00008 (IL ???... ???) | |
[000034] I-C-G------- * CALL int RuntimeHelpers.IsReferenceOrContainsReferences (exactContextHnd=0x0825B810) | |
[000065] ------------ arg0 \--* RUNTIMELOOKUP int 0x825b854 method | |
[000064] ------------ \--* LCL_VAR int V06 tmp1 | |
[ 1] 62 (0x03e) brfalse.s | |
STMT00009 (IL ???... ???) | |
[000069] --C--------- * JTRUE void | |
[000068] --C--------- \--* EQ int | |
[000066] --C--------- +--* RET_EXPR int (inl return from call [000034]) | |
[000067] ------------ \--* CNS_INT int 0 | |
impImportBlockPending for BB04 | |
impImportBlockPending for BB05 | |
Importing BB05 (PC=080) of 'Stack`1:Pop():RefAsValueType`1:this' | |
[ 0] 80 (0x050) ldloc.2 | |
[ 1] 81 (0x051) ret | |
impFixupStructReturnType: retyping | |
[000070] ------------ * LCL_VAR struct<RefAsValueType`1, 4> V03 loc2 | |
impFixupStructReturnType: result of retyping is | |
[000070] ------------ * LCL_FLD ref V03 loc2 [+0] | |
STMT00010 (IL 0x050... ???) | |
[000071] ------------ * RETURN ref | |
[000070] ------------ \--* LCL_FLD ref V03 loc2 [+0] | |
Importing BB04 (PC=064) of 'Stack`1:Pop():RefAsValueType`1:this' | |
[ 0] 64 (0x040) ldloc.1 | |
[ 1] 65 (0x041) ldloc.0 | |
[ 2] 66 (0x042) ldloca.s 3 | |
[ 3] 68 (0x044) initobj 1B000011 | |
STMT00011 (IL 0x040... ???) | |
[000077] IA---------- * ASG struct (init) | |
[000074] D------N---- +--* LCL_VAR struct<RefAsValueType`1, 4> V04 loc3 | |
[000076] ------------ \--* CNS_INT int 0 | |
[ 2] 74 (0x04a) ldloc.3 | |
[ 3] 75 (0x04b) stelem 1B000011 | |
STMT00012 (IL ???... ???) | |
[000081] -A-XG------- * ASG struct (copy) | |
[000079] ---XG------- +--* INDEX struct | |
[000072] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000073] ------------ | \--* LCL_VAR int V01 loc0 | |
[000078] ------------ \--* LCL_VAR struct<RefAsValueType`1, 4> V04 loc3 | |
impImportBlockPending for BB05 | |
Importing BB02 (PC=022) of 'Stack`1:Pop():RefAsValueType`1:this' | |
[ 0] 22 (0x016) ldarg.0 | |
[ 1] 23 (0x017) call 0A000259 | |
In Compiler::impImportCall: opcode is call, kind=0, callRetType is void, structSize is 0 | |
STMT00013 (IL 0x016... ???) | |
[000083] I-C-G------- * CALL void Stack`1.ThrowForEmptyStack (exactContextHnd=0x0825A8A0) | |
[000082] ------------ this in ecx \--* LCL_VAR ref V00 this | |
impImportBlockPending for BB03 | |
*************** Finishing PHASE Importation | |
*************** Starting PHASE Indirect call transform | |
*************** in fgTransformIndirectCalls(root) | |
-- no candidates to transform | |
*************** Finishing PHASE Indirect call transform | |
*************** Starting PHASE Post-import | |
*************** Finishing PHASE Post-import | |
*************** Starting PHASE Morph - Init | |
New BlockSet epoch 1, # of blocks (including unused BB00): 6, bitset array size: 1 (short) | |
*************** Finishing PHASE Morph - Init | |
*************** In fgDebugCheckBBlist | |
*************** Starting PHASE Morph - Inlining | |
*************** In fgInline() | |
Querying runtime about current class of field Stack`1._array (declared as (null)) | |
Field's current class not available | |
Expanding INLINE_CANDIDATE in statement STMT00013 in BB02: | |
STMT00013 (IL 0x016...0x017) | |
[000083] I-C-G------- * CALL void Stack`1.ThrowForEmptyStack (exactContextHnd=0x0825A8A0) | |
[000082] ------------ this in ecx \--* LCL_VAR ref V00 this | |
thisArg: is a local var | |
[000082] ------------ * LCL_VAR ref V00 this | |
INLINER: inlineInfo.tokenLookupContextHandle for Stack`1:ThrowForEmptyStack():this set to 0x0825A8A0: | |
Invoking compiler for the inlinee method Stack`1:ThrowForEmptyStack():this : | |
IL to import: | |
IL_0000 28 16 00 00 06 call 0x6000016 | |
IL_0005 73 51 00 00 0a newobj 0xA000051 | |
IL_000a 7a throw | |
INLINER impTokenLookupContextHandle for Stack`1:ThrowForEmptyStack():this is 0x0825A8A0. | |
*************** In fgFindBasicBlocks() for Stack`1:ThrowForEmptyStack():this | |
Jump targets: | |
none | |
New Basic Block BB06 [0005] created. | |
BB06 [000..00B) | |
Basic block list for 'Stack`1:ThrowForEmptyStack():this' | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB06 [0005] 1 0 [000..00B) (throw ) rare | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
INLINER: during 'fgInline' result 'failed this callee' reason 'does not return' for 'Stack`1:Pop():RefAsValueType`1:this' calling 'Stack`1:ThrowForEmptyStack():this' | |
INLINER: during 'fgInline' result 'failed this callee' reason 'does not return' | |
Expanding INLINE_CANDIDATE in statement STMT00008 in BB03: | |
STMT00008 (IL ???... ???) | |
[000034] I-C-G------- * CALL int RuntimeHelpers.IsReferenceOrContainsReferences (exactContextHnd=0x0825B810) | |
[000065] ------------ arg0 \--* RUNTIMELOOKUP int 0x825b854 method | |
[000064] ------------ \--* LCL_VAR int V06 tmp1 | |
INLINER: inlineInfo.tokenLookupContextHandle for RuntimeHelpers:IsReferenceOrContainsReferences():bool set to 0x0825B810: | |
Invoking compiler for the inlinee method RuntimeHelpers:IsReferenceOrContainsReferences():bool : | |
IL to import: | |
IL_0000 17 ldc.i4.1 | |
IL_0001 2a ret | |
INLINER impTokenLookupContextHandle for RuntimeHelpers:IsReferenceOrContainsReferences():bool is 0x0825B810. | |
*************** In fgFindBasicBlocks() for RuntimeHelpers:IsReferenceOrContainsReferences():bool | |
Jump targets: | |
none | |
New Basic Block BB07 [0005] created. | |
BB07 [000..002) | |
Basic block list for 'RuntimeHelpers:IsReferenceOrContainsReferences():bool' | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB07 [0005] 1 1 [000..002) (return) | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Inline @[000034] Starting PHASE Pre-import | |
*************** Inline @[000034] Finishing PHASE Pre-import | |
*************** Inline @[000034] Starting PHASE Importation | |
*************** In impImport() for RuntimeHelpers:IsReferenceOrContainsReferences():bool | |
impImportBlockPending for BB07 | |
Importing BB07 (PC=000) of 'RuntimeHelpers:IsReferenceOrContainsReferences():bool' | |
[ 0] 0 (0x000) ldc.i4.1 1 | |
[ 1] 1 (0x001) ret | |
Inlinee Return expression (before normalization) => | |
[000084] ------------ * CNS_INT int 1 | |
Inlinee Return expression (after normalization) => | |
[000085] ------------ * CAST int <- bool <- int | |
[000084] ------------ \--* CNS_INT int 1 | |
** Note: inlinee IL was partially imported -- imported 0 of 2 bytes of method IL | |
*************** Inline @[000034] Finishing PHASE Importation | |
*************** Inline @[000034] Starting PHASE Indirect call transform | |
*************** in fgTransformIndirectCalls(inlinee) | |
-- no candidates to transform | |
*************** Inline @[000034] Finishing PHASE Indirect call transform | |
*************** Inline @[000034] Starting PHASE Post-import | |
*************** Inline @[000034] Finishing PHASE Post-import | |
----------- Statements (and blocks) added due to the inlining of call [000034] ----------- | |
Inlinee method body:Inlinee ignores runtime lookup generics context | |
fgInlineAppendStatements: no gc ref inline locals. | |
Return expression for call at [000034] is | |
[000085] ------------ * CAST int <- bool <- int | |
[000084] ------------ \--* CNS_INT int 1 | |
Successfully inlined RuntimeHelpers:IsReferenceOrContainsReferences():bool (2 IL bytes) (depth 1) [below ALWAYS_INLINE size] | |
-------------------------------------------------------------------------------------------- | |
INLINER: during 'fgInline' result 'success' reason 'below ALWAYS_INLINE size' for 'Stack`1:Pop():RefAsValueType`1:this' calling 'RuntimeHelpers:IsReferenceOrContainsReferences():bool' | |
INLINER: during 'fgInline' result 'success' reason 'below ALWAYS_INLINE size' | |
Folding operator with constant nodes into a constant: | |
[000085] ------------ * CAST int <- bool <- int | |
[000084] ------------ \--* CNS_INT int 1 | |
Bashed to int constant: | |
[000085] ------------ * CNS_INT int 1 | |
Replacing the return expression placeholder [000066] with [000085] | |
[000066] --C--------- * RET_EXPR int (inl return from call [000085]) | |
Inserting the inline return expression | |
[000085] ------------ * CNS_INT int 1 | |
Folding operator with constant nodes into a constant: | |
[000068] --C--------- * EQ int | |
[000085] ------------ +--* CNS_INT int 1 | |
[000067] ------------ \--* CNS_INT int 0 | |
Bashed to int constant: | |
[000068] ------------ * CNS_INT int 0 | |
... found foldable jtrue at [000069] in BB03 | |
*************** After fgInline() | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB03 ( cond ) i idxlen | |
BB02 [0001] 1 1 [016..01C) i | |
BB03 [0002] 2 1 [01C..040) i idxlen | |
BB04 [0003] 1 1 [040..050) i idxlen | |
BB05 [0004] 1 1 [050..052) (return) i | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB03 (cond), preds={} succs={BB02,BB03} | |
***** BB01 | |
STMT00000 (IL 0x000...0x008) | |
[000005] -A-XG------- * ASG int | |
[000004] D------N---- +--* LCL_VAR int V01 loc0 | |
[000003] ---XG------- \--* SUB int | |
[000001] ---XG------- +--* FIELD int _size | |
[000000] ------------ | \--* LCL_VAR ref V00 this | |
[000002] ------------ \--* CNS_INT int 1 | |
***** BB01 | |
STMT00001 (IL 0x009...0x00F) | |
[000009] -A-XG------- * ASG ref | |
[000008] D------N---- +--* LCL_VAR ref V02 loc1 | |
[000007] ---XG------- \--* FIELD ref _array | |
[000006] ------------ \--* LCL_VAR ref V00 this | |
***** BB01 | |
STMT00002 (IL 0x010...0x014) | |
[000014] ---X-------- * JTRUE void | |
[000013] N--X-----U-- \--* LT int | |
[000010] ------------ +--* LCL_VAR int V01 loc0 | |
[000012] ---X-------- \--* ARR_LENGTH int | |
[000011] ------------ \--* LCL_VAR ref V02 loc1 | |
------------ BB02 [016..01C), preds={} succs={BB03} | |
***** BB02 | |
STMT00013 (IL 0x016...0x017) | |
[000083] --C-G------- * CALL void Stack`1.ThrowForEmptyStack | |
[000082] ------------ this in ecx \--* LCL_VAR ref V00 this | |
------------ BB03 [01C..040), preds={} succs={BB04} | |
***** BB03 | |
STMT00003 (IL 0x01C...0x025) | |
[000021] -A-XG------- * ASG int | |
[000020] ---XG--N---- +--* FIELD int _version | |
[000015] ------------ | \--* LCL_VAR ref V00 this | |
[000019] ---XG------- \--* ADD int | |
[000017] ---XG------- +--* FIELD int _version | |
[000016] ------------ | \--* LCL_VAR ref V00 this | |
[000018] ------------ \--* CNS_INT int 1 | |
***** BB03 | |
STMT00004 (IL 0x02A...0x02C) | |
[000025] -A-XG------- * ASG int | |
[000024] ---XG--N---- +--* FIELD int _size | |
[000022] ------------ | \--* LCL_VAR ref V00 this | |
[000023] ------------ \--* LCL_VAR int V01 loc0 | |
***** BB03 | |
STMT00005 (IL 0x031...0x038) | |
[000033] -A-XG------- * ASG struct (copy) | |
[000031] D----------- +--* LCL_VAR struct<RefAsValueType`1, 4> V03 loc2 | |
[000030] ---XG------- \--* OBJ struct<RefAsValueType`1, 4> | |
[000029] ---XG------- \--* ADDR byref | |
[000028] ---XG------- \--* INDEX struct | |
[000026] ------------ +--* LCL_VAR ref V02 loc1 | |
[000027] ------------ \--* LCL_VAR int V01 loc0 | |
***** BB03 | |
STMT00006 (IL 0x039...0x03E) | |
[000038] -A-X-------- * ASG int | |
[000037] D------N---- +--* LCL_VAR int V05 tmp0 | |
[000036] #--X-------- \--* IND int | |
[000035] ------------ \--* LCL_VAR ref V00 this | |
***** BB03 | |
STMT00007 (IL ???... ???) | |
[000063] -AC-G------- * ASG int | |
[000062] D------N---- +--* LCL_VAR int V06 tmp1 | |
[000061] --C-G------- \--* QMARK int | |
[000051] Q----------- if +--* NE int | |
[000047] n----------- | +--* IND int | |
[000046] ------------ | | \--* ADD int | |
[000044] #----------- | | +--* IND int | |
[000043] #----------- | | | \--* IND int | |
[000042] ------------ | | | \--* ADD int | |
[000040] ------------ | | | +--* LCL_VAR int V05 tmp0 | |
[000041] ------------ | | | \--* CNS_INT int 32 | |
[000045] ------------ | | \--* CNS_INT int 12 | |
[000050] ------------ | \--* CNS_INT int 0 | |
[000060] --C-G------- if \--* COLON int | |
[000049] --C-G------- else +--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] ------------ arg0 | +--* LCL_VAR int V05 tmp0 | |
[000048] ------------ arg1 | \--* CNS_INT(h) int 0x8283EB8 token | |
[000052] n----------- then \--* IND int | |
[000053] ------------ \--* ADD int | |
[000054] #----------- +--* IND int | |
[000055] #----------- | \--* IND int | |
[000056] ------------ | \--* ADD int | |
[000057] ------------ | +--* LCL_VAR int V05 tmp0 | |
[000058] ------------ | \--* CNS_INT int 32 | |
[000059] ------------ \--* CNS_INT int 12 | |
***** BB03 | |
STMT00009 (IL ???... ???) | |
[000069] ------------ * NOP void | |
------------ BB04 [040..050), preds={} succs={BB05} | |
***** BB04 | |
STMT00011 (IL 0x040...0x045) | |
[000077] IA---------- * ASG struct (init) | |
[000074] D------N---- +--* LCL_VAR struct<RefAsValueType`1, 4> V04 loc3 | |
[000076] ------------ \--* CNS_INT int 0 | |
***** BB04 | |
STMT00012 (IL ???...0x04B) | |
[000081] -A-XG------- * ASG struct (copy) | |
[000079] ---XG------- +--* INDEX struct | |
[000072] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000073] ------------ | \--* LCL_VAR int V01 loc0 | |
[000078] ------------ \--* LCL_VAR struct<RefAsValueType`1, 4> V04 loc3 | |
------------ BB05 [050..052) (return), preds={} succs={} | |
***** BB05 | |
STMT00010 (IL 0x050...0x051) | |
[000071] ------------ * RETURN ref | |
[000070] ------------ \--* LCL_FLD ref V03 loc2 [+0] | |
------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
**************** Inline Tree | |
Inlines into 0600029B Stack`1:Pop():RefAsValueType`1:this | |
[0 IL=0023 TR=000083 060002A0] [FAILED: does not return] Stack`1:ThrowForEmptyStack():this | |
[1 IL=0057 TR=000034 06003C89] [below ALWAYS_INLINE size] RuntimeHelpers:IsReferenceOrContainsReferences():bool | |
Budget: initialTime=306, finalTime=292, initialBudget=3060, currentBudget=3060 | |
Budget: initialSize=2000, finalSize=2000 | |
*************** Finishing PHASE Morph - Inlining | |
Trees before Allocate Objects | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB03 ( cond ) i idxlen | |
BB02 [0001] 1 1 [016..01C) i | |
BB03 [0002] 2 1 [01C..040) i idxlen | |
BB04 [0003] 1 1 [040..050) i idxlen | |
BB05 [0004] 1 1 [050..052) (return) i | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB03 (cond), preds={} succs={BB02,BB03} | |
***** BB01 | |
STMT00000 (IL 0x000...0x008) | |
[000005] -A-XG------- * ASG int | |
[000004] D------N---- +--* LCL_VAR int V01 loc0 | |
[000003] ---XG------- \--* SUB int | |
[000001] ---XG------- +--* FIELD int _size | |
[000000] ------------ | \--* LCL_VAR ref V00 this | |
[000002] ------------ \--* CNS_INT int 1 | |
***** BB01 | |
STMT00001 (IL 0x009...0x00F) | |
[000009] -A-XG------- * ASG ref | |
[000008] D------N---- +--* LCL_VAR ref V02 loc1 | |
[000007] ---XG------- \--* FIELD ref _array | |
[000006] ------------ \--* LCL_VAR ref V00 this | |
***** BB01 | |
STMT00002 (IL 0x010...0x014) | |
[000014] ---X-------- * JTRUE void | |
[000013] N--X-----U-- \--* LT int | |
[000010] ------------ +--* LCL_VAR int V01 loc0 | |
[000012] ---X-------- \--* ARR_LENGTH int | |
[000011] ------------ \--* LCL_VAR ref V02 loc1 | |
------------ BB02 [016..01C), preds={} succs={BB03} | |
***** BB02 | |
STMT00013 (IL 0x016...0x017) | |
[000083] --C-G------- * CALL void Stack`1.ThrowForEmptyStack | |
[000082] ------------ this in ecx \--* LCL_VAR ref V00 this | |
------------ BB03 [01C..040), preds={} succs={BB04} | |
***** BB03 | |
STMT00003 (IL 0x01C...0x025) | |
[000021] -A-XG------- * ASG int | |
[000020] ---XG--N---- +--* FIELD int _version | |
[000015] ------------ | \--* LCL_VAR ref V00 this | |
[000019] ---XG------- \--* ADD int | |
[000017] ---XG------- +--* FIELD int _version | |
[000016] ------------ | \--* LCL_VAR ref V00 this | |
[000018] ------------ \--* CNS_INT int 1 | |
***** BB03 | |
STMT00004 (IL 0x02A...0x02C) | |
[000025] -A-XG------- * ASG int | |
[000024] ---XG--N---- +--* FIELD int _size | |
[000022] ------------ | \--* LCL_VAR ref V00 this | |
[000023] ------------ \--* LCL_VAR int V01 loc0 | |
***** BB03 | |
STMT00005 (IL 0x031...0x038) | |
[000033] -A-XG------- * ASG struct (copy) | |
[000031] D----------- +--* LCL_VAR struct<RefAsValueType`1, 4> V03 loc2 | |
[000030] ---XG------- \--* OBJ struct<RefAsValueType`1, 4> | |
[000029] ---XG------- \--* ADDR byref | |
[000028] ---XG------- \--* INDEX struct | |
[000026] ------------ +--* LCL_VAR ref V02 loc1 | |
[000027] ------------ \--* LCL_VAR int V01 loc0 | |
***** BB03 | |
STMT00006 (IL 0x039...0x03E) | |
[000038] -A-X-------- * ASG int | |
[000037] D------N---- +--* LCL_VAR int V05 tmp0 | |
[000036] #--X-------- \--* IND int | |
[000035] ------------ \--* LCL_VAR ref V00 this | |
***** BB03 | |
STMT00007 (IL ???... ???) | |
[000063] -AC-G------- * ASG int | |
[000062] D------N---- +--* LCL_VAR int V06 tmp1 | |
[000061] --C-G------- \--* QMARK int | |
[000051] Q----------- if +--* NE int | |
[000047] n----------- | +--* IND int | |
[000046] ------------ | | \--* ADD int | |
[000044] #----------- | | +--* IND int | |
[000043] #----------- | | | \--* IND int | |
[000042] ------------ | | | \--* ADD int | |
[000040] ------------ | | | +--* LCL_VAR int V05 tmp0 | |
[000041] ------------ | | | \--* CNS_INT int 32 | |
[000045] ------------ | | \--* CNS_INT int 12 | |
[000050] ------------ | \--* CNS_INT int 0 | |
[000060] --C-G------- if \--* COLON int | |
[000049] --C-G------- else +--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] ------------ arg0 | +--* LCL_VAR int V05 tmp0 | |
[000048] ------------ arg1 | \--* CNS_INT(h) int 0x8283EB8 token | |
[000052] n----------- then \--* IND int | |
[000053] ------------ \--* ADD int | |
[000054] #----------- +--* IND int | |
[000055] #----------- | \--* IND int | |
[000056] ------------ | \--* ADD int | |
[000057] ------------ | +--* LCL_VAR int V05 tmp0 | |
[000058] ------------ | \--* CNS_INT int 32 | |
[000059] ------------ \--* CNS_INT int 12 | |
***** BB03 | |
STMT00009 (IL ???... ???) | |
[000069] ------------ * NOP void | |
------------ BB04 [040..050), preds={} succs={BB05} | |
***** BB04 | |
STMT00011 (IL 0x040...0x045) | |
[000077] IA---------- * ASG struct (init) | |
[000074] D------N---- +--* LCL_VAR struct<RefAsValueType`1, 4> V04 loc3 | |
[000076] ------------ \--* CNS_INT int 0 | |
***** BB04 | |
STMT00012 (IL ???...0x04B) | |
[000081] -A-XG------- * ASG struct (copy) | |
[000079] ---XG------- +--* INDEX struct | |
[000072] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000073] ------------ | \--* LCL_VAR int V01 loc0 | |
[000078] ------------ \--* LCL_VAR struct<RefAsValueType`1, 4> V04 loc3 | |
------------ BB05 [050..052) (return), preds={} succs={} | |
***** BB05 | |
STMT00010 (IL 0x050...0x051) | |
[000071] ------------ * RETURN ref | |
[000070] ------------ \--* LCL_FLD ref V03 loc2 [+0] | |
------------------------------------------------------------------------------------------------------------------- | |
*************** Starting PHASE Allocate Objects | |
*** ObjectAllocationPhase: no newobjs in this method; punting | |
*************** Finishing PHASE Allocate Objects | |
Trees after Allocate Objects | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB03 ( cond ) i idxlen | |
BB02 [0001] 1 1 [016..01C) i | |
BB03 [0002] 2 1 [01C..040) i idxlen | |
BB04 [0003] 1 1 [040..050) i idxlen | |
BB05 [0004] 1 1 [050..052) (return) i | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB03 (cond), preds={} succs={BB02,BB03} | |
***** BB01 | |
STMT00000 (IL 0x000...0x008) | |
[000005] -A-XG------- * ASG int | |
[000004] D------N---- +--* LCL_VAR int V01 loc0 | |
[000003] ---XG------- \--* SUB int | |
[000001] ---XG------- +--* FIELD int _size | |
[000000] ------------ | \--* LCL_VAR ref V00 this | |
[000002] ------------ \--* CNS_INT int 1 | |
***** BB01 | |
STMT00001 (IL 0x009...0x00F) | |
[000009] -A-XG------- * ASG ref | |
[000008] D------N---- +--* LCL_VAR ref V02 loc1 | |
[000007] ---XG------- \--* FIELD ref _array | |
[000006] ------------ \--* LCL_VAR ref V00 this | |
***** BB01 | |
STMT00002 (IL 0x010...0x014) | |
[000014] ---X-------- * JTRUE void | |
[000013] N--X-----U-- \--* LT int | |
[000010] ------------ +--* LCL_VAR int V01 loc0 | |
[000012] ---X-------- \--* ARR_LENGTH int | |
[000011] ------------ \--* LCL_VAR ref V02 loc1 | |
------------ BB02 [016..01C), preds={} succs={BB03} | |
***** BB02 | |
STMT00013 (IL 0x016...0x017) | |
[000083] --C-G------- * CALL void Stack`1.ThrowForEmptyStack | |
[000082] ------------ this in ecx \--* LCL_VAR ref V00 this | |
------------ BB03 [01C..040), preds={} succs={BB04} | |
***** BB03 | |
STMT00003 (IL 0x01C...0x025) | |
[000021] -A-XG------- * ASG int | |
[000020] ---XG--N---- +--* FIELD int _version | |
[000015] ------------ | \--* LCL_VAR ref V00 this | |
[000019] ---XG------- \--* ADD int | |
[000017] ---XG------- +--* FIELD int _version | |
[000016] ------------ | \--* LCL_VAR ref V00 this | |
[000018] ------------ \--* CNS_INT int 1 | |
***** BB03 | |
STMT00004 (IL 0x02A...0x02C) | |
[000025] -A-XG------- * ASG int | |
[000024] ---XG--N---- +--* FIELD int _size | |
[000022] ------------ | \--* LCL_VAR ref V00 this | |
[000023] ------------ \--* LCL_VAR int V01 loc0 | |
***** BB03 | |
STMT00005 (IL 0x031...0x038) | |
[000033] -A-XG------- * ASG struct (copy) | |
[000031] D----------- +--* LCL_VAR struct<RefAsValueType`1, 4> V03 loc2 | |
[000030] ---XG------- \--* OBJ struct<RefAsValueType`1, 4> | |
[000029] ---XG------- \--* ADDR byref | |
[000028] ---XG------- \--* INDEX struct | |
[000026] ------------ +--* LCL_VAR ref V02 loc1 | |
[000027] ------------ \--* LCL_VAR int V01 loc0 | |
***** BB03 | |
STMT00006 (IL 0x039...0x03E) | |
[000038] -A-X-------- * ASG int | |
[000037] D------N---- +--* LCL_VAR int V05 tmp0 | |
[000036] #--X-------- \--* IND int | |
[000035] ------------ \--* LCL_VAR ref V00 this | |
***** BB03 | |
STMT00007 (IL ???... ???) | |
[000063] -AC-G------- * ASG int | |
[000062] D------N---- +--* LCL_VAR int V06 tmp1 | |
[000061] --C-G------- \--* QMARK int | |
[000051] Q----------- if +--* NE int | |
[000047] n----------- | +--* IND int | |
[000046] ------------ | | \--* ADD int | |
[000044] #----------- | | +--* IND int | |
[000043] #----------- | | | \--* IND int | |
[000042] ------------ | | | \--* ADD int | |
[000040] ------------ | | | +--* LCL_VAR int V05 tmp0 | |
[000041] ------------ | | | \--* CNS_INT int 32 | |
[000045] ------------ | | \--* CNS_INT int 12 | |
[000050] ------------ | \--* CNS_INT int 0 | |
[000060] --C-G------- if \--* COLON int | |
[000049] --C-G------- else +--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] ------------ arg0 | +--* LCL_VAR int V05 tmp0 | |
[000048] ------------ arg1 | \--* CNS_INT(h) int 0x8283EB8 token | |
[000052] n----------- then \--* IND int | |
[000053] ------------ \--* ADD int | |
[000054] #----------- +--* IND int | |
[000055] #----------- | \--* IND int | |
[000056] ------------ | \--* ADD int | |
[000057] ------------ | +--* LCL_VAR int V05 tmp0 | |
[000058] ------------ | \--* CNS_INT int 32 | |
[000059] ------------ \--* CNS_INT int 12 | |
***** BB03 | |
STMT00009 (IL ???... ???) | |
[000069] ------------ * NOP void | |
------------ BB04 [040..050), preds={} succs={BB05} | |
***** BB04 | |
STMT00011 (IL 0x040...0x045) | |
[000077] IA---------- * ASG struct (init) | |
[000074] D------N---- +--* LCL_VAR struct<RefAsValueType`1, 4> V04 loc3 | |
[000076] ------------ \--* CNS_INT int 0 | |
***** BB04 | |
STMT00012 (IL ???...0x04B) | |
[000081] -A-XG------- * ASG struct (copy) | |
[000079] ---XG------- +--* INDEX struct | |
[000072] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000073] ------------ | \--* LCL_VAR int V01 loc0 | |
[000078] ------------ \--* LCL_VAR struct<RefAsValueType`1, 4> V04 loc3 | |
------------ BB05 [050..052) (return), preds={} succs={} | |
***** BB05 | |
STMT00010 (IL 0x050...0x051) | |
[000071] ------------ * RETURN ref | |
[000070] ------------ \--* LCL_FLD ref V03 loc2 [+0] | |
------------------------------------------------------------------------------------------------------------------- | |
*************** 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..016)-> BB03 ( cond ) i idxlen | |
BB02 [0001] 1 1 [016..01C) i | |
BB03 [0002] 2 1 [01C..040) i idxlen | |
BB04 [0003] 1 1 [040..050) i idxlen | |
BB05 [0004] 1 1 [050..052) (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 | |
*************** Starting PHASE Remove empty finally | |
*************** In fgRemoveEmptyFinally() | |
No EH in this method, nothing to remove. | |
*************** Finishing PHASE Remove empty finally | |
*************** Starting PHASE Merge callfinally chains | |
*************** In fgMergeFinallyChains() | |
No EH in this method, nothing to merge. | |
*************** Finishing PHASE Merge callfinally chains | |
*************** Starting PHASE Clone finally | |
*************** In fgCloneFinally() | |
No EH in this method, no cloning. | |
*************** Finishing PHASE Clone finally | |
*************** 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..016)-> BB03 ( cond ) i idxlen | |
BB02 [0001] 1 1 [016..01C) i | |
BB03 [0002] 2 1 [01C..040) i idxlen | |
BB04 [0003] 1 1 [040..050) i idxlen | |
BB05 [0004] 1 1 [050..052) (return) i | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
*************** After renumbering the basic blocks | |
=============== No blocks renumbered! | |
New BlockSet epoch 2, # of blocks (including unused BB00): 6, 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..016)-> BB03 ( cond ) i idxlen | |
BB02 [0001] 1 1 [016..01C) i | |
BB03 [0002] 2 1 [01C..040) i idxlen | |
BB04 [0003] 1 1 [040..050) i idxlen | |
BB05 [0004] 1 1 [050..052) (return) i | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** After fgComputePreds() | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB03 ( cond ) i label target idxlen | |
BB02 [0001] 1 BB01 1 [016..01C) i | |
BB03 [0002] 2 BB01,BB02 1 [01C..040) i label target idxlen | |
BB04 [0003] 1 BB03 1 [040..050) i idxlen | |
BB05 [0004] 1 BB04 1 [050..052) (return) i | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Finishing PHASE Compute preds | |
*************** 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..016)-> BB03 ( cond ) i label target idxlen | |
BB02 [0001] 1 BB01 1 [016..01C) i | |
BB03 [0002] 2 BB01,BB02 1 [01C..040) i label target idxlen | |
BB04 [0003] 1 BB03 1 [040..050) i idxlen | |
BB05 [0004] 1 BB04 1 [050..052) (return) i | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
Compacting blocks BB03 and BB04: | |
*************** In fgDebugCheckBBlist | |
Compacting blocks BB03 and BB05: | |
*************** 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..016)-> BB03 ( cond ) i label target idxlen | |
BB02 [0001] 1 BB01 1 [016..01C) i | |
BB03 [0002] 2 BB01,BB02 1 [01C..052) (return) i label target idxlen | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
*************** In fgDebugCheckBBlist | |
*************** Finishing PHASE Update flow graph early pass | |
*************** Starting PHASE Morph - Promote Structs | |
*************** In fgPromoteStructs() | |
lvaTable before fgPromoteStructs | |
; Initial local variable assignments | |
; | |
; V00 this ref this class-hnd | |
; V01 loc0 int | |
; V02 loc1 ref class-hnd | |
; V03 loc2 struct ( 4) | |
; V04 loc3 struct ( 4) ld-addr-op | |
; V05 tmp0 int "impRuntimeLookup slot" | |
; V06 tmp1 int "spilling Runtime Lookup tree" | |
Promoting struct local V03 (RefAsValueType`1): | |
lvaGrabTemp returning 7 (V07 tmp2) (a long lifetime temp) called for field V03.Value (fldOffset=0x0). | |
Promoting struct local V04 (RefAsValueType`1): | |
lvaGrabTemp returning 8 (V08 tmp3) (a long lifetime temp) called for field V04.Value (fldOffset=0x0). | |
lvaTable after fgPromoteStructs | |
; Initial local variable assignments | |
; | |
; V00 this ref this class-hnd | |
; V01 loc0 int | |
; V02 loc1 ref class-hnd | |
; V03 loc2 struct ( 4) | |
; V04 loc3 struct ( 4) ld-addr-op | |
; V05 tmp0 int "impRuntimeLookup slot" | |
; V06 tmp1 int "spilling Runtime Lookup tree" | |
; V07 tmp2 ref V03.Value(offs=0x00) P-INDEP "field V03.Value (fldOffset=0x0)" | |
; V08 tmp3 ref V04.Value(offs=0x00) P-INDEP "field V04.Value (fldOffset=0x0)" | |
*************** Finishing PHASE Morph - Promote Structs | |
*************** Starting PHASE Morph - Structs/AddrExp | |
*************** In fgMarkAddressExposedLocals() | |
LocalAddressVisitor visiting statement: | |
STMT00000 (IL 0x000...0x008) | |
[000005] -A-XG------- * ASG int | |
[000004] D------N---- +--* LCL_VAR int V01 loc0 | |
[000003] ---XG------- \--* SUB int | |
[000001] ---XG------- +--* FIELD int _size | |
[000000] ------------ | \--* LCL_VAR ref V00 this | |
[000002] ------------ \--* CNS_INT int 1 | |
LocalAddressVisitor visiting statement: | |
STMT00001 (IL 0x009...0x00F) | |
[000009] -A-XG------- * ASG ref | |
[000008] D------N---- +--* LCL_VAR ref V02 loc1 | |
[000007] ---XG------- \--* FIELD ref _array | |
[000006] ------------ \--* LCL_VAR ref V00 this | |
LocalAddressVisitor visiting statement: | |
STMT00002 (IL 0x010...0x014) | |
[000014] ---X-------- * JTRUE void | |
[000013] N--X-----U-- \--* LT int | |
[000010] ------------ +--* LCL_VAR int V01 loc0 | |
[000012] ---X-------- \--* ARR_LENGTH int | |
[000011] ------------ \--* LCL_VAR ref V02 loc1 | |
LocalAddressVisitor visiting statement: | |
STMT00013 (IL 0x016...0x017) | |
[000083] --C-G------- * CALL void Stack`1.ThrowForEmptyStack | |
[000082] ------------ this in ecx \--* LCL_VAR ref V00 this | |
LocalAddressVisitor visiting statement: | |
STMT00003 (IL 0x01C...0x025) | |
[000021] -A-XG------- * ASG int | |
[000020] ---XG--N---- +--* FIELD int _version | |
[000015] ------------ | \--* LCL_VAR ref V00 this | |
[000019] ---XG------- \--* ADD int | |
[000017] ---XG------- +--* FIELD int _version | |
[000016] ------------ | \--* LCL_VAR ref V00 this | |
[000018] ------------ \--* CNS_INT int 1 | |
LocalAddressVisitor visiting statement: | |
STMT00004 (IL 0x02A...0x02C) | |
[000025] -A-XG------- * ASG int | |
[000024] ---XG--N---- +--* FIELD int _size | |
[000022] ------------ | \--* LCL_VAR ref V00 this | |
[000023] ------------ \--* LCL_VAR int V01 loc0 | |
LocalAddressVisitor visiting statement: | |
STMT00005 (IL 0x031...0x038) | |
[000033] -A-XG------- * ASG struct (copy) | |
[000031] D----------- +--* LCL_VAR struct<RefAsValueType`1, 4>(P) V03 loc2 | |
+--* ref V03.Value (offs=0x00) -> V07 tmp2 | |
[000030] ---XG------- \--* OBJ struct<RefAsValueType`1, 4> | |
[000029] ---XG------- \--* ADDR byref | |
[000028] ---XG------- \--* INDEX struct | |
[000026] ------------ +--* LCL_VAR ref V02 loc1 | |
[000027] ------------ \--* LCL_VAR int V01 loc0 | |
LocalAddressVisitor visiting statement: | |
STMT00006 (IL 0x039...0x03E) | |
[000038] -A-X-------- * ASG int | |
[000037] D------N---- +--* LCL_VAR int V05 tmp0 | |
[000036] #--X-------- \--* IND int | |
[000035] ------------ \--* LCL_VAR ref V00 this | |
LocalAddressVisitor visiting statement: | |
STMT00007 (IL ???... ???) | |
[000063] -AC-G------- * ASG int | |
[000062] D------N---- +--* LCL_VAR int V06 tmp1 | |
[000061] --C-G------- \--* QMARK int | |
[000051] Q----------- if +--* NE int | |
[000047] n----------- | +--* IND int | |
[000046] ------------ | | \--* ADD int | |
[000044] #----------- | | +--* IND int | |
[000043] #----------- | | | \--* IND int | |
[000042] ------------ | | | \--* ADD int | |
[000040] ------------ | | | +--* LCL_VAR int V05 tmp0 | |
[000041] ------------ | | | \--* CNS_INT int 32 | |
[000045] ------------ | | \--* CNS_INT int 12 | |
[000050] ------------ | \--* CNS_INT int 0 | |
[000060] --C-G------- if \--* COLON int | |
[000049] --C-G------- else +--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] ------------ arg0 | +--* LCL_VAR int V05 tmp0 | |
[000048] ------------ arg1 | \--* CNS_INT(h) int 0x8283EB8 token | |
[000052] n----------- then \--* IND int | |
[000053] ------------ \--* ADD int | |
[000054] #----------- +--* IND int | |
[000055] #----------- | \--* IND int | |
[000056] ------------ | \--* ADD int | |
[000057] ------------ | +--* LCL_VAR int V05 tmp0 | |
[000058] ------------ | \--* CNS_INT int 32 | |
[000059] ------------ \--* CNS_INT int 12 | |
LocalAddressVisitor visiting statement: | |
STMT00009 (IL ???... ???) | |
[000069] ------------ * NOP void | |
LocalAddressVisitor visiting statement: | |
STMT00011 (IL 0x040...0x045) | |
[000077] IA---------- * ASG struct (init) | |
[000074] D------N---- +--* LCL_VAR struct<RefAsValueType`1, 4>(P) V04 loc3 | |
+--* ref V04.Value (offs=0x00) -> V08 tmp3 | |
[000076] ------------ \--* CNS_INT int 0 | |
LocalAddressVisitor visiting statement: | |
STMT00012 (IL ???...0x04B) | |
[000081] -A-XG------- * ASG struct (copy) | |
[000079] ---XG------- +--* INDEX struct | |
[000072] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000073] ------------ | \--* LCL_VAR int V01 loc0 | |
[000078] ------------ \--* LCL_VAR struct<RefAsValueType`1, 4>(P) V04 loc3 | |
\--* ref V04.Value (offs=0x00) -> V08 tmp3 | |
LocalAddressVisitor visiting statement: | |
STMT00010 (IL 0x050...0x051) | |
[000071] ------------ * RETURN ref | |
[000070] ------------ \--* LCL_FLD ref V03 loc2 [+0] | |
\--* ref V03.Value (offs=0x00) -> V07 tmp2 | |
Replacing the GT_LCL_FLD in promoted struct with local var V07 | |
LocalAddressVisitor modified statement: | |
STMT00010 (IL 0x050...0x051) | |
[000071] ------------ * RETURN ref | |
[000070] ------------ \--* LCL_VAR ref V07 tmp2 | |
*************** Finishing PHASE Morph - Structs/AddrExp | |
*************** Starting PHASE Morph - ByRefs | |
*************** Finishing PHASE Morph - ByRefs | |
*************** Starting PHASE Morph - Global | |
*************** In fgMorphBlocks() | |
Morphing BB01 of 'Stack`1:Pop():RefAsValueType`1:this' | |
fgMorphTree BB01, STMT00000 (before) | |
[000005] -A-XG------- * ASG int | |
[000004] D------N---- +--* LCL_VAR int V01 loc0 | |
[000003] ---XG------- \--* SUB int | |
[000001] ---XG------- +--* FIELD int _size | |
[000000] ------------ | \--* LCL_VAR ref V00 this | |
[000002] ------------ \--* CNS_INT int 1 | |
Final value of Compiler::fgMorphField after calling fgMorphSmpOp: | |
[000001] ---XG------- * IND int | |
[000088] -----+------ \--* ADD byref | |
[000000] -----+------ +--* LCL_VAR ref V00 this | |
[000087] -----+------ \--* CNS_INT int 8 field offset Fseq[_size] | |
GenTreeNode creates assertion: | |
[000001] ---XG------- * IND int | |
In BB01 New Local Constant Assertion: V00 != null index=#01, mask=0000000000000001 | |
fgMorphTree BB01, STMT00000 (after) | |
[000005] -A-XG+------ * ASG int | |
[000004] D----+-N---- +--* LCL_VAR int V01 loc0 | |
[000003] ---XG+------ \--* ADD int | |
[000001] ---XG+------ +--* IND int | |
[000088] -----+------ | \--* ADD byref | |
[000000] -----+------ | +--* LCL_VAR ref V00 this | |
[000087] -----+------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
[000002] -----+------ \--* CNS_INT int -1 | |
fgMorphTree BB01, STMT00001 (before) | |
[000009] -A-XG------- * ASG ref | |
[000008] D------N---- +--* LCL_VAR ref V02 loc1 | |
[000007] ---XG------- \--* FIELD ref _array | |
[000006] ------------ \--* LCL_VAR ref V00 this | |
Final value of Compiler::fgMorphField after calling fgMorphSmpOp: | |
[000007] ---XG------- * IND ref | |
[000090] -----+------ \--* ADD byref | |
[000006] -----+------ +--* LCL_VAR ref V00 this | |
[000089] -----+------ \--* CNS_INT int 4 field offset Fseq[_array] | |
fgMorphTree BB01, STMT00001 (after) | |
[000009] -A-XG+------ * ASG ref | |
[000008] D----+-N---- +--* LCL_VAR ref V02 loc1 | |
[000007] ---XG+------ \--* IND ref | |
[000090] -----+------ \--* ADD byref | |
[000006] -----+------ +--* LCL_VAR ref V00 this | |
[000089] -----+------ \--* CNS_INT int 4 field offset Fseq[_array] | |
fgMorphTree BB01, STMT00002 (before) | |
[000014] ---X-------- * JTRUE void | |
[000013] N--X-----U-- \--* LT int | |
[000010] ------------ +--* LCL_VAR int V01 loc0 | |
[000012] ---X-------- \--* ARR_LENGTH int | |
[000011] ------------ \--* LCL_VAR ref V02 loc1 | |
GenTreeNode creates assertion: | |
[000012] ---X-------- * ARR_LENGTH int | |
In BB01 New Local Constant Assertion: V02 != null index=#02, mask=0000000000000002 | |
Morphing BB02 of 'Stack`1:Pop():RefAsValueType`1:this' | |
fgMorphTree BB02, STMT00013 (before) | |
[000083] --C-G------- * CALL void Stack`1.ThrowForEmptyStack | |
[000082] ------------ this in ecx \--* LCL_VAR ref V00 this | |
Initializing arg info for 83.CALL: | |
ArgTable for 83.CALL after fgInitArgInfo: | |
fgArgTabEntry[arg 0 82.LCL_VAR ref, 1 reg: ecx, align=1] | |
Morphing args for 83.CALL: | |
Sorting the arguments: | |
Deferred argument ('ecx'): | |
[000082] -----+------ * LCL_VAR ref V00 this | |
Replaced with placeholder node: | |
[000091] ----------L- * ARGPLACE ref | |
Shuffled argument table: ecx | |
ArgTable for 83.CALL after fgMorphArgs: | |
fgArgTabEntry[arg 0 82.LCL_VAR ref, 1 reg: ecx, align=1, lateArgInx=0, processed] | |
fgMorphTree BB02, STMT00013 (after) | |
[000083] --CXG+------ * CALL void Stack`1.ThrowForEmptyStack | |
[000082] -----+------ this in ecx \--* LCL_VAR ref V00 this | |
Converting BB02 to BBJ_THROW | |
Morphing BB03 of 'Stack`1:Pop():RefAsValueType`1:this' | |
fgMorphTree BB03, STMT00003 (before) | |
[000021] -A-XG------- * ASG int | |
[000020] ---XG--N---- +--* FIELD int _version | |
[000015] ------------ | \--* LCL_VAR ref V00 this | |
[000019] ---XG------- \--* ADD int | |
[000017] ---XG------- +--* FIELD int _version | |
[000016] ------------ | \--* LCL_VAR ref V00 this | |
[000018] ------------ \--* CNS_INT int 1 | |
Final value of Compiler::fgMorphField after calling fgMorphSmpOp: | |
[000020] ---XG--N---- * IND int | |
[000093] -----+------ \--* ADD byref | |
[000015] -----+------ +--* LCL_VAR ref V00 this | |
[000092] -----+------ \--* CNS_INT int 12 field offset Fseq[_version] | |
GenTreeNode creates assertion: | |
[000020] ---XG--N---- * IND int | |
In BB03 New Local Constant Assertion: V00 != null index=#01, mask=0000000000000001 | |
Final value of Compiler::fgMorphField after calling fgMorphSmpOp: | |
[000017] ---XG------- * IND int | |
[000095] -----+------ \--* ADD byref | |
[000016] -----+------ +--* LCL_VAR ref V00 this | |
[000094] -----+------ \--* CNS_INT int 12 field offset Fseq[_version] | |
fgMorphTree BB03, STMT00003 (after) | |
[000021] -A-XG+------ * ASG int | |
[000020] ---XG+-N---- +--* IND int | |
[000093] -----+------ | \--* ADD byref | |
[000015] -----+------ | +--* LCL_VAR ref V00 this | |
[000092] -----+------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
[000019] ---XG+------ \--* ADD int | |
[000017] ---XG+------ +--* IND int | |
[000095] -----+------ | \--* ADD byref | |
[000016] -----+------ | +--* LCL_VAR ref V00 this | |
[000094] -----+------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
[000018] -----+------ \--* CNS_INT int 1 | |
fgMorphTree BB03, STMT00004 (before) | |
[000025] -A-XG------- * ASG int | |
[000024] ---XG--N---- +--* FIELD int _size | |
[000022] ------------ | \--* LCL_VAR ref V00 this | |
[000023] ------------ \--* LCL_VAR int V01 loc0 | |
Final value of Compiler::fgMorphField after calling fgMorphSmpOp: | |
[000024] ---XG--N---- * IND int | |
[000097] -----+------ \--* ADD byref | |
[000022] -----+------ +--* LCL_VAR ref V00 this | |
[000096] -----+------ \--* CNS_INT int 8 field offset Fseq[_size] | |
fgMorphTree BB03, STMT00004 (after) | |
[000025] -A-XG+------ * ASG int | |
[000024] ---XG+-N---- +--* IND int | |
[000097] -----+------ | \--* ADD byref | |
[000022] -----+------ | +--* LCL_VAR ref V00 this | |
[000096] -----+------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
[000023] -----+------ \--* LCL_VAR int V01 loc0 | |
fgMorphTree BB03, STMT00005 (before) | |
[000033] -A-XG------- * ASG struct (copy) | |
[000031] D----------- +--* LCL_VAR struct<RefAsValueType`1, 4>(P) V03 loc2 | |
+--* ref V03.Value (offs=0x00) -> V07 tmp2 | |
[000030] ---XG------- \--* OBJ struct<RefAsValueType`1, 4> | |
[000029] ---XG------- \--* ADDR byref | |
[000028] ---XG------- \--* INDEX struct | |
[000026] ------------ +--* LCL_VAR ref V02 loc1 | |
[000027] ------------ \--* LCL_VAR int V01 loc0 | |
GenTreeNode creates assertion: | |
[000100] ---X-------- * ARR_LENGTH int | |
In BB03 New Local Constant Assertion: V02 != null index=#02, mask=0000000000000002 | |
fgMorphCopyBlock:block assignment to morph: | |
[000033] -A-XG------- * ASG struct (copy) | |
[000031] D----+-N---- +--* LCL_VAR struct<RefAsValueType`1, 4>(P) V03 loc2 | |
+--* ref V03.Value (offs=0x00) -> V07 tmp2 | |
[000030] ---XG+------ \--* OBJ struct<RefAsValueType`1, 4> | |
[000107] ---XG+------ \--* COMMA byref | |
[000101] ---X-+------ +--* ARR_BOUNDS_CHECK_Rng void | |
[000027] -----+------ | +--* LCL_VAR int V01 loc0 | |
[000100] ---X-+------ | \--* ARR_LENGTH int | |
[000026] -----+------ | \--* LCL_VAR ref V02 loc1 | |
[000108] ----G------- \--* ADDR byref | |
[000028] a---G+-N---- \--* IND struct | |
[000106] -----+------ \--* ADD byref | |
[000098] -----+------ +--* LCL_VAR ref V02 loc1 | |
[000105] -----+------ \--* ADD int | |
[000103] -----+------ +--* LSH int | |
[000099] i----+------ | +--* LCL_VAR int V01 loc0 | |
[000102] -----+-N---- | \--* CNS_INT int 2 | |
[000104] -----+------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
(destDoFldAsg=true) using field by field assignments. | |
fgAddFieldSeqForZeroOffset for Fseq[Value] | |
addr (Before) | |
[000110] ---XG------- COMMA byref | |
(After) | |
[000110] ---XG------- COMMA byref Zero Fseq[Value] | |
fgMorphCopyBlock (after): | |
[000125] -A-XG+------ * ASG ref | |
[000109] D------N---- +--* LCL_VAR ref V07 tmp2 | |
[000124] ---XG------- \--* IND ref | |
[000110] ---XG------- \--* COMMA byref Zero Fseq[Value] | |
[000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void | |
[000113] ------------ | +--* LCL_VAR int V01 loc0 | |
[000111] ---X-------- | \--* ARR_LENGTH int | |
[000112] ------------ | \--* LCL_VAR ref V02 loc1 | |
[000115] ----G------- \--* ADDR byref | |
[000116] a---G--N---- \--* IND struct | |
[000117] ------------ \--* ADD byref | |
[000118] ------------ +--* LCL_VAR ref V02 loc1 | |
[000119] ------------ \--* ADD int | |
[000120] ------------ +--* LSH int | |
[000121] i----------- | +--* LCL_VAR int V01 loc0 | |
[000122] -------N---- | \--* CNS_INT int 2 | |
[000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
fgMorphTree BB03, STMT00005 (after) | |
[000125] -A-XG+------ * ASG ref | |
[000109] D------N---- +--* LCL_VAR ref V07 tmp2 | |
[000124] ---XG------- \--* IND ref | |
[000110] ---XG------- \--* COMMA byref Zero Fseq[Value] | |
[000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void | |
[000113] ------------ | +--* LCL_VAR int V01 loc0 | |
[000111] ---X-------- | \--* ARR_LENGTH int | |
[000112] ------------ | \--* LCL_VAR ref V02 loc1 | |
[000115] ----G------- \--* ADDR byref | |
[000116] a---G--N---- \--* IND struct | |
[000117] ------------ \--* ADD byref | |
[000118] ------------ +--* LCL_VAR ref V02 loc1 | |
[000119] ------------ \--* ADD int | |
[000120] ------------ +--* LSH int | |
[000121] i----------- | +--* LCL_VAR int V01 loc0 | |
[000122] -------N---- | \--* CNS_INT int 2 | |
[000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
fgMorphTree BB03, STMT00006 (before) | |
[000038] -A-X-------- * ASG int | |
[000037] D------N---- +--* LCL_VAR int V05 tmp0 | |
[000036] #--X-------- \--* IND int | |
[000035] ------------ \--* LCL_VAR ref V00 this | |
Non-null prop for index #01 in BB03: | |
[000036] #--X-------- * IND int | |
fgMorphTree BB03, STMT00007 (before) | |
[000063] -AC-G------- * ASG int | |
[000062] D------N---- +--* LCL_VAR int V06 tmp1 | |
[000061] --C-G------- \--* QMARK int | |
[000051] Q----------- if +--* NE int | |
[000047] n----------- | +--* IND int | |
[000046] ------------ | | \--* ADD int | |
[000044] #----------- | | +--* IND int | |
[000043] #----------- | | | \--* IND int | |
[000042] ------------ | | | \--* ADD int | |
[000040] ------------ | | | +--* LCL_VAR int V05 tmp0 | |
[000041] ------------ | | | \--* CNS_INT int 32 | |
[000045] ------------ | | \--* CNS_INT int 12 | |
[000050] ------------ | \--* CNS_INT int 0 | |
[000060] --C-G------- if \--* COLON int | |
[000049] --C-G------- else +--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] ------------ arg0 | +--* LCL_VAR int V05 tmp0 | |
[000048] ------------ arg1 | \--* CNS_INT(h) int 0x8283EB8 token | |
[000052] n----------- then \--* IND int | |
[000053] ------------ \--* ADD int | |
[000054] #----------- +--* IND int | |
[000055] #----------- | \--* IND int | |
[000056] ------------ | \--* ADD int | |
[000057] ------------ | +--* LCL_VAR int V05 tmp0 | |
[000058] ------------ | \--* CNS_INT int 32 | |
[000059] ------------ \--* CNS_INT int 12 | |
Initializing arg info for 49.CALL: | |
ArgTable for 49.CALL after fgInitArgInfo: | |
fgArgTabEntry[arg 0 39.LCL_VAR int, 1 reg: ecx, align=1] | |
fgArgTabEntry[arg 1 48.CNS_INT int, 1 reg: edx, align=1] | |
Morphing args for 49.CALL: | |
Sorting the arguments: | |
Deferred argument ('ecx'): | |
[000039] -----+------ * LCL_VAR int V05 tmp0 | |
Replaced with placeholder node: | |
[000126] ----------L- * ARGPLACE int | |
Deferred argument ('edx'): | |
[000048] -----+------ * CNS_INT(h) int 0x8283EB8 token | |
Replaced with placeholder node: | |
[000127] ----------L- * ARGPLACE int | |
Shuffled argument table: ecx edx | |
ArgTable for 49.CALL after fgMorphArgs: | |
fgArgTabEntry[arg 0 39.LCL_VAR int, 1 reg: ecx, align=1, lateArgInx=0, processed] | |
fgArgTabEntry[arg 1 48.CNS_INT int, 1 reg: edx, align=1, lateArgInx=1, processed] | |
fgMorphTree BB03, STMT00007 (after) | |
[000063] -AC-G+------ * ASG int | |
[000062] D----+-N---- +--* LCL_VAR int V06 tmp1 | |
[000061] --C-G+------ \--* QMARK int | |
[000051] J----+-N---- if +--* NE int | |
[000047] n----+------ | +--* IND int | |
[000046] -----+------ | | \--* ADD int | |
[000044] #----+------ | | +--* IND int | |
[000043] #----+------ | | | \--* IND int | |
[000042] -----+------ | | | \--* ADD int | |
[000040] -----+------ | | | +--* LCL_VAR int V05 tmp0 | |
[000041] -----+------ | | | \--* CNS_INT int 32 | |
[000045] -----+------ | | \--* CNS_INT int 12 | |
[000050] -----+------ | \--* CNS_INT int 0 | |
[000060] --C-G+?----- if \--* COLON int | |
[000049] --C-G+?----- else +--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] -----+?----- arg0 in ecx | +--* LCL_VAR int V05 tmp0 | |
[000048] -----+?----- arg1 in edx | \--* CNS_INT(h) int 0x8283EB8 token | |
[000052] n----+?----- then \--* IND int | |
[000053] -----+?----- \--* ADD int | |
[000054] #----+?----- +--* IND int | |
[000055] #----+?----- | \--* IND int | |
[000056] -----+?----- | \--* ADD int | |
[000057] -----+?----- | +--* LCL_VAR int V05 tmp0 | |
[000058] -----+?----- | \--* CNS_INT int 32 | |
[000059] -----+?----- \--* CNS_INT int 12 | |
fgMorphTree BB03, STMT00009 (before) | |
[000069] ------------ * NOP void | |
fgMorphTree BB03, STMT00011 (before) | |
[000077] IA---------- * ASG struct (init) | |
[000074] D------N---- +--* LCL_VAR struct<RefAsValueType`1, 4>(P) V04 loc3 | |
+--* ref V04.Value (offs=0x00) -> V08 tmp3 | |
[000076] ------------ \--* CNS_INT int 0 | |
fgMorphInitBlock: using field by field initialization. | |
GenTreeNode creates assertion: | |
[000130] -A---------- * ASG ref | |
In BB03 New Local Constant Assertion: V08 == null index=#03, mask=0000000000000004 | |
fgMorphInitBlock (after): | |
[000130] -A---+------ * ASG ref | |
[000128] D------N---- +--* LCL_VAR ref V08 tmp3 | |
[000129] ------------ \--* CNS_INT ref null | |
The assignment [000130] using V08 removes: Constant Assertion: V08 == null | |
GenTreeNode creates assertion: | |
[000130] -A---+------ * ASG ref | |
In BB03 New Local Constant Assertion: V08 == null index=#03, mask=0000000000000004 | |
fgMorphTree BB03, STMT00011 (after) | |
[000130] -A---+------ * ASG ref | |
[000128] D------N---- +--* LCL_VAR ref V08 tmp3 | |
[000129] ------------ \--* CNS_INT ref null | |
fgMorphTree BB03, STMT00012 (before) | |
[000081] -A-XG------- * ASG struct (copy) | |
[000079] ---XG------- +--* INDEX struct | |
[000072] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000073] ------------ | \--* LCL_VAR int V01 loc0 | |
[000078] ------------ \--* LCL_VAR struct<RefAsValueType`1, 4>(P) V04 loc3 | |
\--* ref V04.Value (offs=0x00) -> V08 tmp3 | |
fgMorphCopyBlock:block assignment to morph: | |
[000081] -A-XG------- * ASG struct (copy) | |
[000142] ---XG+------ +--* OBJ struct<RefAsValueType`1, 4> | |
[000140] ---XG+------ | \--* COMMA byref | |
[000134] ---X-+------ | +--* ARR_BOUNDS_CHECK_Rng void | |
[000073] -----+------ | | +--* LCL_VAR int V01 loc0 | |
[000133] ---X-+------ | | \--* ARR_LENGTH int | |
[000072] -----+------ | | \--* LCL_VAR ref V02 loc1 | |
[000141] ---XG+------ | \--* ADDR byref | |
[000079] a--XG+------ | \--* IND struct | |
[000139] -----+------ | \--* ADD byref | |
[000131] -----+------ | +--* LCL_VAR ref V02 loc1 | |
[000138] -----+------ | \--* ADD int | |
[000136] -----+------ | +--* LSH int | |
[000132] i----+------ | | +--* LCL_VAR int V01 loc0 | |
[000135] -----+-N---- | | \--* CNS_INT int 2 | |
[000137] -----+------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
[000078] -----+------ \--* LCL_VAR struct<RefAsValueType`1, 4>(P) V04 loc3 | |
\--* ref V04.Value (offs=0x00) -> V08 tmp3 | |
(srcDoFldAsg=true) using field by field assignments. | |
fgAddFieldSeqForZeroOffset for Fseq[Value] | |
addr (Before) | |
[000143] ---XG------- COMMA byref | |
(After) | |
[000143] ---XG------- COMMA byref Zero Fseq[Value] | |
fgMorphCopyBlock (after): | |
[000159] -A-XG+------ * ASG ref | |
[000157] *--XG--N---- +--* IND ref | |
[000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] | |
[000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void | |
[000146] ------------ | | +--* LCL_VAR int V01 loc0 | |
[000144] ---X-------- | | \--* ARR_LENGTH int | |
[000145] ------------ | | \--* LCL_VAR ref V02 loc1 | |
[000148] ---XG------- | \--* ADDR byref | |
[000149] a--XG------- | \--* IND struct | |
[000150] ------------ | \--* ADD byref | |
[000151] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000152] ------------ | \--* ADD int | |
[000153] ------------ | +--* LSH int | |
[000154] i----------- | | +--* LCL_VAR int V01 loc0 | |
[000155] -------N---- | | \--* CNS_INT int 2 | |
[000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
[000158] ------------ \--* LCL_VAR ref V08 tmp3 | |
fgMorphTree BB03, STMT00012 (after) | |
[000159] -A-XG+------ * ASG ref | |
[000157] *--XG--N---- +--* IND ref | |
[000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] | |
[000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void | |
[000146] ------------ | | +--* LCL_VAR int V01 loc0 | |
[000144] ---X-------- | | \--* ARR_LENGTH int | |
[000145] ------------ | | \--* LCL_VAR ref V02 loc1 | |
[000148] ---XG------- | \--* ADDR byref | |
[000149] a--XG------- | \--* IND struct | |
[000150] ------------ | \--* ADD byref | |
[000151] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000152] ------------ | \--* ADD int | |
[000153] ------------ | +--* LSH int | |
[000154] i----------- | | +--* LCL_VAR int V01 loc0 | |
[000155] -------N---- | | \--* CNS_INT int 2 | |
[000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
[000158] ------------ \--* LCL_VAR ref V08 tmp3 | |
fgMorphTree BB03, STMT00010 (before) | |
[000071] ------------ * RETURN ref | |
[000070] ------------ \--* LCL_VAR ref V07 tmp2 | |
Expanding top-level qmark in BB03 (before) | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB03 [0002] 1 BB01 1 [01C..052) (return) i label target idxlen | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB03 [01C..052) (return), preds={BB01} succs={} | |
***** BB03 | |
STMT00003 (IL 0x01C...0x025) | |
[000021] -A-XG+------ * ASG int | |
[000020] ---XG+-N---- +--* IND int | |
[000093] -----+------ | \--* ADD byref | |
[000015] -----+------ | +--* LCL_VAR ref V00 this | |
[000092] -----+------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
[000019] ---XG+------ \--* ADD int | |
[000017] ---XG+------ +--* IND int | |
[000095] -----+------ | \--* ADD byref | |
[000016] -----+------ | +--* LCL_VAR ref V00 this | |
[000094] -----+------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
[000018] -----+------ \--* CNS_INT int 1 | |
***** BB03 | |
STMT00004 (IL 0x02A...0x02C) | |
[000025] -A-XG+------ * ASG int | |
[000024] ---XG+-N---- +--* IND int | |
[000097] -----+------ | \--* ADD byref | |
[000022] -----+------ | +--* LCL_VAR ref V00 this | |
[000096] -----+------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
[000023] -----+------ \--* LCL_VAR int V01 loc0 | |
***** BB03 | |
STMT00005 (IL 0x031...0x038) | |
[000125] -A-XG+------ * ASG ref | |
[000109] D------N---- +--* LCL_VAR ref V07 tmp2 | |
[000124] ---XG------- \--* IND ref | |
[000110] ---XG------- \--* COMMA byref Zero Fseq[Value] | |
[000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void | |
[000113] ------------ | +--* LCL_VAR int V01 loc0 | |
[000111] ---X-------- | \--* ARR_LENGTH int | |
[000112] ------------ | \--* LCL_VAR ref V02 loc1 | |
[000115] ----G------- \--* ADDR byref | |
[000116] a---G--N---- \--* IND struct | |
[000117] ------------ \--* ADD byref | |
[000118] ------------ +--* LCL_VAR ref V02 loc1 | |
[000119] ------------ \--* ADD int | |
[000120] ------------ +--* LSH int | |
[000121] i----------- | +--* LCL_VAR int V01 loc0 | |
[000122] -------N---- | \--* CNS_INT int 2 | |
[000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
***** BB03 | |
STMT00006 (IL 0x039...0x03E) | |
[000038] -A---+------ * ASG int | |
[000037] D----+-N---- +--* LCL_VAR int V05 tmp0 | |
[000036] #----+------ \--* IND int | |
[000035] -----+------ \--* LCL_VAR ref V00 this | |
***** BB03 | |
STMT00007 (IL ???... ???) | |
[000063] -AC-G+------ * ASG int | |
[000062] D----+-N---- +--* LCL_VAR int V06 tmp1 | |
[000061] --C-G+------ \--* QMARK int | |
[000051] J----+-N---- if +--* NE int | |
[000047] n----+------ | +--* IND int | |
[000046] -----+------ | | \--* ADD int | |
[000044] #----+------ | | +--* IND int | |
[000043] #----+------ | | | \--* IND int | |
[000042] -----+------ | | | \--* ADD int | |
[000040] -----+------ | | | +--* LCL_VAR int V05 tmp0 | |
[000041] -----+------ | | | \--* CNS_INT int 32 | |
[000045] -----+------ | | \--* CNS_INT int 12 | |
[000050] -----+------ | \--* CNS_INT int 0 | |
[000060] --C-G+?----- if \--* COLON int | |
[000049] --C-G+?----- else +--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] -----+?----- arg0 in ecx | +--* LCL_VAR int V05 tmp0 | |
[000048] -----+?----- arg1 in edx | \--* CNS_INT(h) int 0x8283EB8 token | |
[000052] n----+?----- then \--* IND int | |
[000053] -----+?----- \--* ADD int | |
[000054] #----+?----- +--* IND int | |
[000055] #----+?----- | \--* IND int | |
[000056] -----+?----- | \--* ADD int | |
[000057] -----+?----- | +--* LCL_VAR int V05 tmp0 | |
[000058] -----+?----- | \--* CNS_INT int 32 | |
[000059] -----+?----- \--* CNS_INT int 12 | |
***** BB03 | |
STMT00011 (IL 0x040...0x045) | |
[000130] -A---+------ * ASG ref | |
[000128] D------N---- +--* LCL_VAR ref V08 tmp3 | |
[000129] ------------ \--* CNS_INT ref null | |
***** BB03 | |
STMT00012 (IL ???...0x04B) | |
[000159] -A-XG+------ * ASG ref | |
[000157] *--XG--N---- +--* IND ref | |
[000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] | |
[000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void | |
[000146] ------------ | | +--* LCL_VAR int V01 loc0 | |
[000144] ---X-------- | | \--* ARR_LENGTH int | |
[000145] ------------ | | \--* LCL_VAR ref V02 loc1 | |
[000148] ---XG------- | \--* ADDR byref | |
[000149] a--XG------- | \--* IND struct | |
[000150] ------------ | \--* ADD byref | |
[000151] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000152] ------------ | \--* ADD int | |
[000153] ------------ | +--* LSH int | |
[000154] i----------- | | +--* LCL_VAR int V01 loc0 | |
[000155] -------N---- | | \--* CNS_INT int 2 | |
[000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
[000158] ------------ \--* LCL_VAR ref V08 tmp3 | |
***** BB03 | |
STMT00010 (IL 0x050...0x051) | |
[000071] -----+------ * RETURN ref | |
[000070] -----+------ \--* LCL_VAR ref V07 tmp2 | |
------------------------------------------------------------------------------------------------------------------- | |
New Basic Block BB06 [0006] created. | |
New Basic Block BB07 [0007] created. | |
New Basic Block BB08 [0008] created. | |
New Basic Block BB09 [0009] created. | |
Removing statement STMT00007 (IL ???... ???) | |
[000063] -AC-G+------ * ASG int | |
[000062] D----+-N---- +--* LCL_VAR int V06 tmp1 | |
[000061] --C-G+------ \--* QMARK int | |
[000051] J----+-N---- if +--* EQ int | |
[000047] n----+------ | +--* IND int | |
[000046] -----+------ | | \--* ADD int | |
[000044] #----+------ | | +--* IND int | |
[000043] #----+------ | | | \--* IND int | |
[000042] -----+------ | | | \--* ADD int | |
[000040] -----+------ | | | +--* LCL_VAR int V05 tmp0 | |
[000041] -----+------ | | | \--* CNS_INT int 32 | |
[000045] -----+------ | | \--* CNS_INT int 12 | |
[000050] -----+------ | \--* CNS_INT int 0 | |
[000060] --C-G+?----- if \--* COLON int | |
[000049] --C-G+?----- else +--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] -----+?----- arg0 in ecx | +--* LCL_VAR int V05 tmp0 | |
[000048] -----+?----- arg1 in edx | \--* CNS_INT(h) int 0x8283EB8 token | |
[000052] n----+?----- then \--* IND int | |
[000053] -----+?----- \--* ADD int | |
[000054] #----+?----- +--* IND int | |
[000055] #----+?----- | \--* IND int | |
[000056] -----+?----- | \--* ADD int | |
[000057] -----+?----- | +--* LCL_VAR int V05 tmp0 | |
[000058] -----+?----- | \--* CNS_INT int 32 | |
[000059] -----+?----- \--* CNS_INT int 12 | |
in BB03 as useless: | |
Expanding top-level qmark in BB03 (after) | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB03 [0002] 1 BB01 1 [01C..040) i label target idxlen | |
BB07 [0007] 1 BB03 1 [???..???)-> BB08 ( cond ) i | |
BB09 [0009] 1 BB07 0.50 [???..???)-> BB06 (always) i | |
BB08 [0008] 1 BB07 0.50 [???..???) i label target | |
BB06 [0006] 2 BB08,BB09 1 [040..052) (return) i label target idxlen | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB03 [01C..040), preds={BB01} succs={BB07} | |
***** BB03 | |
STMT00003 (IL 0x01C...0x025) | |
[000021] -A-XG+------ * ASG int | |
[000020] ---XG+-N---- +--* IND int | |
[000093] -----+------ | \--* ADD byref | |
[000015] -----+------ | +--* LCL_VAR ref V00 this | |
[000092] -----+------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
[000019] ---XG+------ \--* ADD int | |
[000017] ---XG+------ +--* IND int | |
[000095] -----+------ | \--* ADD byref | |
[000016] -----+------ | +--* LCL_VAR ref V00 this | |
[000094] -----+------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
[000018] -----+------ \--* CNS_INT int 1 | |
***** BB03 | |
STMT00004 (IL 0x02A...0x02C) | |
[000025] -A-XG+------ * ASG int | |
[000024] ---XG+-N---- +--* IND int | |
[000097] -----+------ | \--* ADD byref | |
[000022] -----+------ | +--* LCL_VAR ref V00 this | |
[000096] -----+------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
[000023] -----+------ \--* LCL_VAR int V01 loc0 | |
***** BB03 | |
STMT00005 (IL 0x031...0x038) | |
[000125] -A-XG+------ * ASG ref | |
[000109] D------N---- +--* LCL_VAR ref V07 tmp2 | |
[000124] ---XG------- \--* IND ref | |
[000110] ---XG------- \--* COMMA byref Zero Fseq[Value] | |
[000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void | |
[000113] ------------ | +--* LCL_VAR int V01 loc0 | |
[000111] ---X-------- | \--* ARR_LENGTH int | |
[000112] ------------ | \--* LCL_VAR ref V02 loc1 | |
[000115] ----G------- \--* ADDR byref | |
[000116] a---G--N---- \--* IND struct | |
[000117] ------------ \--* ADD byref | |
[000118] ------------ +--* LCL_VAR ref V02 loc1 | |
[000119] ------------ \--* ADD int | |
[000120] ------------ +--* LSH int | |
[000121] i----------- | +--* LCL_VAR int V01 loc0 | |
[000122] -------N---- | \--* CNS_INT int 2 | |
[000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
***** BB03 | |
STMT00006 (IL 0x039...0x03E) | |
[000038] -A---+------ * ASG int | |
[000037] D----+-N---- +--* LCL_VAR int V05 tmp0 | |
[000036] #----+------ \--* IND int | |
[000035] -----+------ \--* LCL_VAR ref V00 this | |
------------ BB07 [???..???) -> BB08 (cond), preds={BB03} succs={BB09,BB08} | |
***** BB07 | |
STMT00014 (IL ???... ???) | |
[000160] ------------ * JTRUE void | |
[000051] J----+-N---- \--* EQ int | |
[000047] n----+------ +--* IND int | |
[000046] -----+------ | \--* ADD int | |
[000044] #----+------ | +--* IND int | |
[000043] #----+------ | | \--* IND int | |
[000042] -----+------ | | \--* ADD int | |
[000040] -----+------ | | +--* LCL_VAR int V05 tmp0 | |
[000041] -----+------ | | \--* CNS_INT int 32 | |
[000045] -----+------ | \--* CNS_INT int 12 | |
[000050] -----+------ \--* CNS_INT int 0 | |
------------ BB09 [???..???) -> BB06 (always), preds={BB07} succs={BB06} | |
***** BB09 | |
STMT00015 (IL ???... ???) | |
[000162] -A---------- * ASG int | |
[000161] D------N---- +--* LCL_VAR int V06 tmp1 | |
[000052] n----+?----- \--* IND int | |
[000053] -----+?----- \--* ADD int | |
[000054] #----+?----- +--* IND int | |
[000055] #----+?----- | \--* IND int | |
[000056] -----+?----- | \--* ADD int | |
[000057] -----+?----- | +--* LCL_VAR int V05 tmp0 | |
[000058] -----+?----- | \--* CNS_INT int 32 | |
[000059] -----+?----- \--* CNS_INT int 12 | |
------------ BB08 [???..???), preds={BB07} succs={BB06} | |
***** BB08 | |
STMT00016 (IL ???... ???) | |
[000164] -AC-G------- * ASG int | |
[000163] D------N---- +--* LCL_VAR int V06 tmp1 | |
[000049] --C-G+?----- \--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] -----+?----- arg0 in ecx +--* LCL_VAR int V05 tmp0 | |
[000048] -----+?----- arg1 in edx \--* CNS_INT(h) int 0x8283EB8 token | |
------------ BB06 [040..052) (return), preds={BB08,BB09} succs={} | |
***** BB06 | |
STMT00011 (IL 0x040...0x045) | |
[000130] -A---+------ * ASG ref | |
[000128] D------N---- +--* LCL_VAR ref V08 tmp3 | |
[000129] ------------ \--* CNS_INT ref null | |
***** BB06 | |
STMT00012 (IL ???...0x04B) | |
[000159] -A-XG+------ * ASG ref | |
[000157] *--XG--N---- +--* IND ref | |
[000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] | |
[000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void | |
[000146] ------------ | | +--* LCL_VAR int V01 loc0 | |
[000144] ---X-------- | | \--* ARR_LENGTH int | |
[000145] ------------ | | \--* LCL_VAR ref V02 loc1 | |
[000148] ---XG------- | \--* ADDR byref | |
[000149] a--XG------- | \--* IND struct | |
[000150] ------------ | \--* ADD byref | |
[000151] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000152] ------------ | \--* ADD int | |
[000153] ------------ | +--* LSH int | |
[000154] i----------- | | +--* LCL_VAR int V01 loc0 | |
[000155] -------N---- | | \--* CNS_INT int 2 | |
[000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
[000158] ------------ \--* LCL_VAR ref V08 tmp3 | |
***** BB06 | |
STMT00010 (IL 0x050...0x051) | |
[000071] -----+------ * RETURN ref | |
[000070] -----+------ \--* LCL_VAR ref V07 tmp2 | |
------------------------------------------------------------------------------------------------------------------- | |
*************** Finishing PHASE Morph - Global | |
*************** Starting PHASE GS Cookie | |
No GS security needed | |
*************** Finishing PHASE GS Cookie | |
*************** Starting PHASE Mark GC poll blocks | |
*************** Before renumbering the basic blocks | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB03 ( cond ) i label target idxlen | |
BB02 [0001] 1 BB01 0 [016..01C) (throw ) i rare gcsafe | |
BB03 [0002] 1 BB01 1 [01C..040) i label target idxlen | |
BB07 [0007] 1 BB03 1 [???..???)-> BB08 ( cond ) i | |
BB09 [0009] 1 BB07 0.50 [???..???)-> BB06 (always) i | |
BB08 [0008] 1 BB07 0.50 [???..???) i label target | |
BB06 [0006] 2 BB08,BB09 1 [040..052) (return) i label target idxlen | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
Renumber BB07 to BB04 | |
Renumber BB09 to BB05 | |
Renumber BB08 to BB06 | |
Renumber BB06 to BB07 | |
*************** After renumbering the basic blocks | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB03 ( cond ) i label target idxlen | |
BB02 [0001] 1 BB01 0 [016..01C) (throw ) i rare gcsafe | |
BB03 [0002] 1 BB01 1 [01C..040) i label target idxlen | |
BB04 [0007] 1 BB03 1 [???..???)-> BB06 ( cond ) i | |
BB05 [0009] 1 BB04 0.50 [???..???)-> BB07 (always) i | |
BB06 [0008] 1 BB04 0.50 [???..???) i label target | |
BB07 [0006] 2 BB06,BB05 1 [040..052) (return) i label target idxlen | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
New BlockSet epoch 3, # of blocks (including unused BB00): 8, bitset array size: 1 (short) | |
*************** Finishing PHASE Mark GC poll blocks | |
*************** Starting PHASE Compute edge weights (1, false) | |
*************** In fgComputeBlockAndEdgeWeights() | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB03 ( cond ) i label target idxlen | |
BB02 [0001] 1 BB01 0 [016..01C) (throw ) i rare gcsafe | |
BB03 [0002] 1 BB01 1 [01C..040) i label target idxlen | |
BB04 [0007] 1 BB03 1 [???..???)-> BB06 ( cond ) i | |
BB05 [0009] 1 BB04 0.50 [???..???)-> BB07 (always) i | |
BB06 [0008] 1 BB04 0.50 [???..???) i label target | |
BB07 [0006] 2 BB06,BB05 1 [040..052) (return) i label target idxlen | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
-- no profile data, so using default called count | |
fgComputeEdgeWeights() was able to compute exact edge weights for all of the 7 edges, using 1 passes. | |
Edge weights into BB02 :BB01 (0) | |
Edge weights into BB03 :BB01 (100) | |
Edge weights into BB04 :BB03 (100) | |
Edge weights into BB05 :BB04 (50) | |
Edge weights into BB06 :BB04 (50) | |
Edge weights into BB07 :BB06 (50), BB05 (50) | |
*************** Finishing PHASE Compute edge weights (1, false) | |
*************** Starting PHASE Merge throw blocks | |
*************** In fgTailMergeThrows | |
Method does not have multiple noreturn calls. | |
*************** Finishing PHASE Merge throw blocks | |
*************** Starting PHASE Optimize layout | |
*************** In optOptimizeLayout() | |
*************** Exception Handling table is empty | |
*************** In fgDebugCheckBBlist | |
*************** In fgUpdateFlowGraph() | |
Before updating the flow graph: | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB03 ( cond ) i label target idxlen | |
BB02 [0001] 1 BB01 0 [016..01C) (throw ) i rare gcsafe | |
BB03 [0002] 1 BB01 1 [01C..040) i label target idxlen | |
BB04 [0007] 1 BB03 1 [???..???)-> BB06 ( cond ) i | |
BB05 [0009] 1 BB04 0.50 [???..???)-> BB07 (always) i | |
BB06 [0008] 1 BB04 0.50 [???..???) i label target | |
BB07 [0006] 2 BB06,BB05 1 [040..052) (return) i label target idxlen | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
Compacting blocks BB03 and BB04: | |
*************** 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..016)-> BB03 ( cond ) i label target idxlen | |
BB02 [0001] 1 BB01 0 [016..01C) (throw ) i rare gcsafe | |
BB03 [0002] 1 BB01 1 [01C..040)-> BB06 ( cond ) i label target idxlen | |
BB05 [0009] 1 BB03 0.50 [???..???)-> BB07 (always) i | |
BB06 [0008] 1 BB03 0.50 [???..???) i label target | |
BB07 [0006] 2 BB06,BB05 1 [040..052) (return) i label target idxlen | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
*************** In fgDebugCheckBBlist | |
*************** In fgExpandRarelyRunBlocks() | |
*************** In fgRelocateEHRegions() | |
*************** In fgReorderBlocks() | |
Initial BasicBlocks | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB03 ( cond ) i label target idxlen | |
BB02 [0001] 1 BB01 0 [016..01C) (throw ) i rare gcsafe | |
BB03 [0002] 1 BB01 1 [01C..040)-> BB06 ( cond ) i label target idxlen | |
BB05 [0009] 1 BB03 0.50 [???..???)-> BB07 (always) i | |
BB06 [0008] 1 BB03 0.50 [???..???) i label target | |
BB07 [0006] 2 BB06,BB05 1 [040..052) (return) i label target idxlen | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
Decided to reverse conditional branch at block BB01 branch to BB03 since it falls into a rarely run block | |
Relocated rarely run block BB02 by reversing conditional jump at BB01 | |
Relocated block [BB02..BB02] inserted after BB07 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..016)-> BB02 ( cond ) i label target idxlen | |
BB03 [0002] 1 BB01 1 [01C..040)-> BB06 ( cond ) i label target idxlen | |
BB05 [0009] 1 BB03 0.50 [???..???)-> BB07 (always) i | |
BB06 [0008] 1 BB03 0.50 [???..???) i label target | |
BB07 [0006] 2 BB06,BB05 1 [040..052) (return) i label target idxlen | |
BB02 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** 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..016)-> BB02 ( cond ) i label target idxlen | |
BB03 [0002] 1 BB01 1 [01C..040)-> BB06 ( cond ) i label target idxlen | |
BB05 [0009] 1 BB03 0.50 [???..???)-> BB07 (always) i | |
BB06 [0008] 1 BB03 0.50 [???..???) i label target | |
BB07 [0006] 2 BB06,BB05 1 [040..052) (return) i label target idxlen | |
BB02 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** In fgDebugCheckBBlist | |
*************** Finishing PHASE Optimize layout | |
*************** Starting PHASE Compute blocks reachability | |
*************** In fgComputeReachability | |
*************** In fgDebugCheckBBlist | |
Renumbering the basic blocks for fgComputeReachability pass #1 | |
*************** Before renumbering the basic blocks | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB02 ( cond ) i label target idxlen | |
BB03 [0002] 1 BB01 1 [01C..040)-> BB06 ( cond ) i label target idxlen | |
BB05 [0009] 1 BB03 0.50 [???..???)-> BB07 (always) i | |
BB06 [0008] 1 BB03 0.50 [???..???) i label target | |
BB07 [0006] 2 BB06,BB05 1 [040..052) (return) i label target idxlen | |
BB02 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
Renumber BB03 to BB02 | |
Renumber BB05 to BB03 | |
Renumber BB06 to BB04 | |
Renumber BB07 to BB05 | |
Renumber BB02 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..016)-> BB06 ( cond ) i label target idxlen | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen | |
BB03 [0009] 1 BB02 0.50 [???..???)-> BB05 (always) i | |
BB04 [0008] 1 BB02 0.50 [???..???) i label target | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** 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 BB04 | |
BB05 : BB01 BB02 BB03 BB04 BB05 | |
BB06 : BB01 BB06 | |
After computing reachability: | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB06 ( cond ) i label target idxlen | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen | |
BB03 [0009] 1 BB02 0.50 [???..???)-> BB05 (always) i | |
BB04 [0008] 1 BB02 0.50 [???..???) i label target | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** In fgDebugCheckBBlist | |
*************** In fgComputeDoms | |
*************** In fgDebugCheckBBlist | |
Dominator computation start blocks (those blocks with no incoming edges): | |
BB01 | |
------------------------------------------------ | |
BBnum Dominated by | |
------------------------------------------------ | |
BB01: BB01 | |
BB02: BB02 BB01 | |
BB03: BB03 BB02 BB01 | |
BB04: BB04 BB02 BB01 | |
BB05: BB05 BB02 BB01 | |
BB06: BB06 BB01 | |
Inside fgBuildDomTree | |
After computing the Dominance Tree: | |
BB01 : BB06 BB02 | |
BB02 : BB05 BB04 BB03 | |
After numbering the dominator tree: | |
BB01: pre=01, post=06 | |
BB02: pre=03, post=05 | |
BB03: pre=06, post=04 | |
BB04: pre=05, post=03 | |
BB05: pre=04, post=02 | |
BB06: pre=02, post=01 | |
*************** Finishing PHASE Compute blocks reachability | |
*************** Starting PHASE Optimize loops | |
*************** In optOptimizeLoops() | |
After optSetBlockWeights: | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB06 ( cond ) i label target idxlen | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen | |
BB03 [0009] 1 BB02 0.25 [???..???)-> BB05 (always) i | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** In fgDebugCheckBBlist | |
*************** Finishing PHASE Optimize loops | |
*************** Starting PHASE Clone loops | |
*************** In optCloneLoops() | |
*************** Finishing PHASE Clone loops | |
*************** Starting PHASE Unroll loops | |
*************** Finishing PHASE Unroll loops | |
*************** Starting PHASE Mark local vars | |
*************** In lvaMarkLocalVars() | |
*** lvaComputeRefCounts *** | |
*** lvaComputeRefCounts -- explicit counts *** | |
*** marking local variables in block BB01 (weight=1 ) | |
STMT00000 (IL 0x000...0x008) | |
[000005] -A-XG+------ * ASG int | |
[000004] D----+-N---- +--* LCL_VAR int V01 loc0 | |
[000003] ---XG+------ \--* ADD int | |
[000001] ---XG+------ +--* IND int | |
[000088] -----+------ | \--* ADD byref | |
[000000] -----+------ | +--* LCL_VAR ref V00 this | |
[000087] -----+------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
[000002] -----+------ \--* CNS_INT int -1 | |
New refCnts for V01: refCnt = 1, refCntWtd = 1 | |
New refCnts for V00: refCnt = 1, refCntWtd = 1 | |
STMT00001 (IL 0x009...0x00F) | |
[000009] -A-XG+------ * ASG ref | |
[000008] D----+-N---- +--* LCL_VAR ref V02 loc1 | |
[000007] ---XG+------ \--* IND ref | |
[000090] -----+------ \--* ADD byref | |
[000006] -----+------ +--* LCL_VAR ref V00 this | |
[000089] -----+------ \--* CNS_INT int 4 field offset Fseq[_array] | |
New refCnts for V02: refCnt = 1, refCntWtd = 1 | |
New refCnts for V00: refCnt = 2, refCntWtd = 2 | |
STMT00002 (IL 0x010...0x014) | |
[000014] ---X-+------ * JTRUE void | |
[000013] N--X-+-N-U-- \--* GE int | |
[000010] -----+------ +--* LCL_VAR int V01 loc0 | |
[000012] ---X-+------ \--* ARR_LENGTH int | |
[000011] -----+------ \--* LCL_VAR ref V02 loc1 | |
New refCnts for V01: refCnt = 2, refCntWtd = 2 | |
New refCnts for V02: refCnt = 2, refCntWtd = 2 | |
*** marking local variables in block BB02 (weight=1 ) | |
STMT00003 (IL 0x01C...0x025) | |
[000021] -A-XG+------ * ASG int | |
[000020] ---XG+-N---- +--* IND int | |
[000093] -----+------ | \--* ADD byref | |
[000015] -----+------ | +--* LCL_VAR ref V00 this | |
[000092] -----+------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
[000019] ---XG+------ \--* ADD int | |
[000017] ---XG+------ +--* IND int | |
[000095] -----+------ | \--* ADD byref | |
[000016] -----+------ | +--* LCL_VAR ref V00 this | |
[000094] -----+------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
[000018] -----+------ \--* CNS_INT int 1 | |
New refCnts for V00: refCnt = 3, refCntWtd = 3 | |
New refCnts for V00: refCnt = 4, refCntWtd = 4 | |
STMT00004 (IL 0x02A...0x02C) | |
[000025] -A-XG+------ * ASG int | |
[000024] ---XG+-N---- +--* IND int | |
[000097] -----+------ | \--* ADD byref | |
[000022] -----+------ | +--* LCL_VAR ref V00 this | |
[000096] -----+------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
[000023] -----+------ \--* LCL_VAR int V01 loc0 | |
New refCnts for V00: refCnt = 5, refCntWtd = 5 | |
New refCnts for V01: refCnt = 3, refCntWtd = 3 | |
STMT00005 (IL 0x031...0x038) | |
[000125] -A-XG+------ * ASG ref | |
[000109] D------N---- +--* LCL_VAR ref V07 tmp2 | |
[000124] ---XG------- \--* IND ref | |
[000110] ---XG------- \--* COMMA byref Zero Fseq[Value] | |
[000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void | |
[000113] ------------ | +--* LCL_VAR int V01 loc0 | |
[000111] ---X-------- | \--* ARR_LENGTH int | |
[000112] ------------ | \--* LCL_VAR ref V02 loc1 | |
[000115] ----G------- \--* ADDR byref | |
[000116] a---G--N---- \--* IND struct | |
[000117] ------------ \--* ADD byref | |
[000118] ------------ +--* LCL_VAR ref V02 loc1 | |
[000119] ------------ \--* ADD int | |
[000120] ------------ +--* LSH int | |
[000121] i----------- | +--* LCL_VAR int V01 loc0 | |
[000122] -------N---- | \--* CNS_INT int 2 | |
[000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
New refCnts for V07: refCnt = 1, refCntWtd = 1 | |
New refCnts for V01: refCnt = 4, refCntWtd = 4 | |
New refCnts for V02: refCnt = 3, refCntWtd = 3 | |
New refCnts for V02: refCnt = 4, refCntWtd = 4 | |
New refCnts for V01: refCnt = 5, refCntWtd = 5 | |
STMT00006 (IL 0x039...0x03E) | |
[000038] -A---+------ * ASG int | |
[000037] D----+-N---- +--* LCL_VAR int V05 tmp0 | |
[000036] #----+------ \--* IND int | |
[000035] -----+------ \--* LCL_VAR ref V00 this | |
New refCnts for V05: refCnt = 1, refCntWtd = 2 | |
New refCnts for V00: refCnt = 6, refCntWtd = 6 | |
STMT00014 (IL ???... ???) | |
[000160] ------------ * JTRUE void | |
[000051] J----+-N---- \--* EQ int | |
[000047] n----+------ +--* IND int | |
[000046] -----+------ | \--* ADD int | |
[000044] #----+------ | +--* IND int | |
[000043] #----+------ | | \--* IND int | |
[000042] -----+------ | | \--* ADD int | |
[000040] -----+------ | | +--* LCL_VAR int V05 tmp0 | |
[000041] -----+------ | | \--* CNS_INT int 32 | |
[000045] -----+------ | \--* CNS_INT int 12 | |
[000050] -----+------ \--* CNS_INT int 0 | |
New refCnts for V05: refCnt = 2, refCntWtd = 4 | |
*** marking local variables in block BB03 (weight=0.25) | |
STMT00015 (IL ???... ???) | |
[000162] -A---------- * ASG int | |
[000161] D------N---- +--* LCL_VAR int V06 tmp1 | |
[000052] n----+?----- \--* IND int | |
[000053] -----+?----- \--* ADD int | |
[000054] #----+?----- +--* IND int | |
[000055] #----+?----- | \--* IND int | |
[000056] -----+?----- | \--* ADD int | |
[000057] -----+?----- | +--* LCL_VAR int V05 tmp0 | |
[000058] -----+?----- | \--* CNS_INT int 32 | |
[000059] -----+?----- \--* CNS_INT int 12 | |
New refCnts for V06: refCnt = 1, refCntWtd = 0.50 | |
New refCnts for V05: refCnt = 3, refCntWtd = 4.50 | |
*** marking local variables in block BB04 (weight=0.25) | |
STMT00016 (IL ???... ???) | |
[000164] -AC-G------- * ASG int | |
[000163] D------N---- +--* LCL_VAR int V06 tmp1 | |
[000049] --C-G+?----- \--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] -----+?----- arg0 in ecx +--* LCL_VAR int V05 tmp0 | |
[000048] -----+?----- arg1 in edx \--* CNS_INT(h) int 0x8283EB8 token | |
New refCnts for V06: refCnt = 2, refCntWtd = 1 | |
New refCnts for V05: refCnt = 4, refCntWtd = 5 | |
*** marking local variables in block BB05 (weight=1 ) | |
STMT00011 (IL 0x040...0x045) | |
[000130] -A---+------ * ASG ref | |
[000128] D------N---- +--* LCL_VAR ref V08 tmp3 | |
[000129] ------------ \--* CNS_INT ref null | |
New refCnts for V08: refCnt = 1, refCntWtd = 1 | |
STMT00012 (IL ???...0x04B) | |
[000159] -A-XG+------ * ASG ref | |
[000157] *--XG--N---- +--* IND ref | |
[000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] | |
[000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void | |
[000146] ------------ | | +--* LCL_VAR int V01 loc0 | |
[000144] ---X-------- | | \--* ARR_LENGTH int | |
[000145] ------------ | | \--* LCL_VAR ref V02 loc1 | |
[000148] ---XG------- | \--* ADDR byref | |
[000149] a--XG------- | \--* IND struct | |
[000150] ------------ | \--* ADD byref | |
[000151] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000152] ------------ | \--* ADD int | |
[000153] ------------ | +--* LSH int | |
[000154] i----------- | | +--* LCL_VAR int V01 loc0 | |
[000155] -------N---- | | \--* CNS_INT int 2 | |
[000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
[000158] ------------ \--* LCL_VAR ref V08 tmp3 | |
New refCnts for V01: refCnt = 6, refCntWtd = 6 | |
New refCnts for V02: refCnt = 5, refCntWtd = 5 | |
New refCnts for V02: refCnt = 6, refCntWtd = 6 | |
New refCnts for V01: refCnt = 7, refCntWtd = 7 | |
New refCnts for V08: refCnt = 2, refCntWtd = 2 | |
STMT00010 (IL 0x050...0x051) | |
[000071] -----+------ * RETURN ref | |
[000070] -----+------ \--* LCL_VAR ref V07 tmp2 | |
New refCnts for V07: refCnt = 2, refCntWtd = 2 | |
*** marking local variables in block BB06 (weight=0 ) | |
STMT00013 (IL 0x016...0x017) | |
[000083] --CXG+------ * CALL void Stack`1.ThrowForEmptyStack | |
[000082] -----+------ this in ecx \--* LCL_VAR ref V00 this | |
New refCnts for V00: refCnt = 7, refCntWtd = 6 | |
*** lvaComputeRefCounts -- implicit counts *** | |
New refCnts for V00: refCnt = 8, refCntWtd = 7 | |
New refCnts for V00: refCnt = 9, refCntWtd = 8 | |
*************** 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 17 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..016)-> BB06 ( cond ) i label target idxlen | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen | |
BB03 [0009] 1 BB02 0.25 [???..???)-> BB05 (always) i | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
***** BB01 | |
STMT00000 (IL 0x000...0x008) | |
N008 ( 6, 6) [000005] -A-XG---R--- * ASG int | |
N007 ( 1, 1) [000004] D------N---- +--* LCL_VAR int V01 loc0 | |
N006 ( 6, 6) [000003] ---XG------- \--* ADD int | |
N004 ( 4, 4) [000001] ---XG------- +--* IND int | |
N003 ( 2, 2) [000088] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000000] ------------ | +--* LCL_VAR ref V00 this | |
N002 ( 1, 1) [000087] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
N005 ( 1, 1) [000002] ------------ \--* CNS_INT int -1 | |
***** BB01 | |
STMT00001 (IL 0x009...0x00F) | |
N006 ( 4, 4) [000009] -A-XG---R--- * ASG ref | |
N005 ( 1, 1) [000008] D------N---- +--* LCL_VAR ref V02 loc1 | |
N004 ( 4, 4) [000007] ---XG------- \--* IND ref | |
N003 ( 2, 2) [000090] -------N---- \--* ADD byref | |
N001 ( 1, 1) [000006] ------------ +--* LCL_VAR ref V00 this | |
N002 ( 1, 1) [000089] ------------ \--* CNS_INT int 4 field offset Fseq[_array] | |
***** BB01 | |
STMT00002 (IL 0x010...0x014) | |
N005 ( 7, 7) [000014] ---X-------- * JTRUE void | |
N004 ( 5, 5) [000013] N--X---N-U-- \--* LE int | |
N002 ( 3, 3) [000012] ---X-------- +--* ARR_LENGTH int | |
N001 ( 1, 1) [000011] ------------ | \--* LCL_VAR ref V02 loc1 | |
N003 ( 1, 1) [000010] ------------ \--* LCL_VAR int V01 loc0 | |
------------ BB02 [01C..040) -> BB04 (cond), preds={BB01} succs={BB03,BB04} | |
***** BB02 | |
STMT00003 (IL 0x01C...0x025) | |
N011 ( 11, 11) [000021] -A-XG---R--- * ASG int | |
N010 ( 4, 4) [000020] ---XG--N---- +--* IND int | |
N009 ( 2, 2) [000093] -------N---- | \--* ADD byref | |
N007 ( 1, 1) [000015] ------------ | +--* LCL_VAR ref V00 this | |
N008 ( 1, 1) [000092] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
N006 ( 6, 6) [000019] ---XG------- \--* ADD int | |
N004 ( 4, 4) [000017] ---XG------- +--* IND int | |
N003 ( 2, 2) [000095] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000016] ------------ | +--* LCL_VAR ref V00 this | |
N002 ( 1, 1) [000094] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
N005 ( 1, 1) [000018] ------------ \--* CNS_INT int 1 | |
***** BB02 | |
STMT00004 (IL 0x02A...0x02C) | |
N006 ( 6, 6) [000025] -A-XG------- * ASG int | |
N004 ( 4, 4) [000024] ---XG--N---- +--* IND int | |
N003 ( 2, 2) [000097] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000022] ------------ | +--* LCL_VAR ref V00 this | |
N002 ( 1, 1) [000096] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
N005 ( 1, 1) [000023] ------------ \--* LCL_VAR int V01 loc0 | |
***** BB02 | |
STMT00005 (IL 0x031...0x038) | |
N017 ( 24, 25) [000125] -A-XG---R--- * ASG ref | |
N016 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 | |
N015 ( 20, 22) [000124] ---XG------- \--* IND ref | |
N014 ( 17, 20) [000110] ---XG------- \--* COMMA byref Zero Fseq[Value] | |
N004 ( 8, 11) [000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void | |
N001 ( 1, 1) [000113] ------------ | +--* LCL_VAR int V01 loc0 | |
N003 ( 3, 3) [000111] ---X-------- | \--* ARR_LENGTH int | |
N002 ( 1, 1) [000112] ------------ | \--* LCL_VAR ref V02 loc1 | |
N013 ( 9, 9) [000115] ----G------- \--* ADDR byref | |
N012 ( 5, 5) [000116] a---G--N---- \--* IND struct | |
N011 ( 4, 4) [000117] -------N---- \--* ADD byref | |
N005 ( 1, 1) [000118] ------------ +--* LCL_VAR ref V02 loc1 | |
N010 ( 3, 3) [000119] -------N---- \--* ADD int | |
N008 ( 2, 2) [000120] -------N---- +--* LSH int | |
N006 ( 1, 1) [000121] i----------- | +--* LCL_VAR int V01 loc0 | |
N007 ( 1, 1) [000122] -------N---- | \--* CNS_INT int 2 | |
N009 ( 1, 1) [000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
***** BB02 | |
STMT00006 (IL 0x039...0x03E) | |
N004 ( 3, 3) [000038] -A---O--R--- * ASG int | |
N003 ( 1, 1) [000037] D------N---- +--* LCL_VAR int V05 tmp0 | |
N002 ( 3, 2) [000036] #----O------ \--* IND int | |
N001 ( 1, 1) [000035] ------------ \--* LCL_VAR ref V00 this | |
***** BB02 | |
STMT00014 (IL ???... ???) | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
N010 ( 12, 11) [000051] J------N---- \--* EQ int | |
N008 ( 10, 9) [000047] n----------- +--* IND int | |
N007 ( 8, 7) [000046] -------N---- | \--* ADD int | |
N005 ( 7, 6) [000044] #----------- | +--* IND int | |
N004 ( 4, 4) [000043] #----------- | | \--* IND int | |
N003 ( 2, 2) [000042] -------N---- | | \--* ADD int | |
N001 ( 1, 1) [000040] ------------ | | +--* LCL_VAR int V05 tmp0 | |
N002 ( 1, 1) [000041] ------------ | | \--* CNS_INT int 32 | |
N006 ( 1, 1) [000045] ------------ | \--* CNS_INT int 12 | |
N009 ( 1, 1) [000050] ------------ \--* CNS_INT int 0 | |
------------ BB03 [???..???) -> BB05 (always), preds={BB02} succs={BB05} | |
***** BB03 | |
STMT00015 (IL ???... ???) | |
N010 ( 14, 12) [000162] -A------R--- * ASG int | |
N009 ( 3, 2) [000161] D------N---- +--* LCL_VAR int V06 tmp1 | |
N008 ( 10, 9) [000052] n-----?----- \--* IND int | |
N007 ( 8, 7) [000053] ------?N---- \--* ADD int | |
N005 ( 7, 6) [000054] #-----?----- +--* IND int | |
N004 ( 4, 4) [000055] #-----?----- | \--* IND int | |
N003 ( 2, 2) [000056] ------?N---- | \--* ADD int | |
N001 ( 1, 1) [000057] ------?----- | +--* LCL_VAR int V05 tmp0 | |
N002 ( 1, 1) [000058] ------?----- | \--* CNS_INT int 32 | |
N006 ( 1, 1) [000059] ------?----- \--* CNS_INT int 12 | |
------------ BB04 [???..???), preds={BB02} succs={BB05} | |
***** BB04 | |
STMT00016 (IL ???... ???) | |
N007 ( 20, 15) [000164] -AC-G---R--- * ASG int | |
N006 ( 3, 2) [000163] D------N---- +--* LCL_VAR int V06 tmp1 | |
N005 ( 16, 12) [000049] --C-G-?----- \--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
N003 ( 1, 1) [000039] ------?----- arg0 in ecx +--* LCL_VAR int V05 tmp0 | |
N004 ( 1, 4) [000048] ------?----- arg1 in edx \--* CNS_INT(h) int 0x8283EB8 token | |
------------ BB05 [040..052) (return), preds={BB04,BB03} succs={} | |
***** BB05 | |
STMT00011 (IL 0x040...0x045) | |
N003 ( 5, 4) [000130] -A------R--- * ASG ref | |
N002 ( 3, 2) [000128] D------N---- +--* LCL_VAR ref V08 tmp3 | |
N001 ( 1, 1) [000129] ------------ \--* CNS_INT ref null | |
***** BB05 | |
STMT00012 (IL ???...0x04B) | |
N017 ( 24, 25) [000159] -A-XG------- * ASG ref | |
N015 ( 20, 22) [000157] *--XG--N---- +--* IND ref | |
N014 ( 17, 20) [000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] | |
N004 ( 8, 11) [000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void | |
N001 ( 1, 1) [000146] ------------ | | +--* LCL_VAR int V01 loc0 | |
N003 ( 3, 3) [000144] ---X-------- | | \--* ARR_LENGTH int | |
N002 ( 1, 1) [000145] ------------ | | \--* LCL_VAR ref V02 loc1 | |
N013 ( 9, 9) [000148] ---XG------- | \--* ADDR byref | |
N012 ( 5, 5) [000149] a--XG------- | \--* IND struct | |
N011 ( 4, 4) [000150] -------N---- | \--* ADD byref | |
N005 ( 1, 1) [000151] ------------ | +--* LCL_VAR ref V02 loc1 | |
N010 ( 3, 3) [000152] -------N---- | \--* ADD int | |
N008 ( 2, 2) [000153] -------N---- | +--* LSH int | |
N006 ( 1, 1) [000154] i----------- | | +--* LCL_VAR int V01 loc0 | |
N007 ( 1, 1) [000155] -------N---- | | \--* CNS_INT int 2 | |
N009 ( 1, 1) [000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
N016 ( 3, 2) [000158] ------------ \--* LCL_VAR ref V08 tmp3 | |
***** BB05 | |
STMT00010 (IL 0x050...0x051) | |
N002 ( 4, 3) [000071] ------------ * RETURN ref | |
N001 ( 3, 2) [000070] ------------ \--* LCL_VAR ref V07 tmp2 | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
***** BB06 | |
STMT00013 (IL 0x016...0x017) | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack | |
N002 ( 1, 1) [000082] ------------ this in ecx \--* LCL_VAR ref V00 this | |
------------------------------------------------------------------------------------------------------------------- | |
*************** 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..016)-> BB06 ( cond ) i label target idxlen | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen | |
BB03 [0009] 1 BB02 0.25 [???..???)-> BB05 (always) i | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
[SsaBuilder] Topologically sorted the graph. | |
[SsaBuilder::ComputeImmediateDom] | |
Inside fgBuildDomTree | |
After computing the Dominance Tree: | |
BB01 : BB06 BB02 | |
BB02 : BB05 BB04 BB03 | |
*************** In fgLocalVarLiveness() | |
In fgLocalVarLivenessInit | |
Tracked variable (7 out of 9) table: | |
V00 this [ ref]: refCnt = 9, refCntWtd = 8 | |
V01 loc0 [ int]: refCnt = 7, refCntWtd = 7 | |
V02 loc1 [ ref]: refCnt = 6, refCntWtd = 6 | |
V05 tmp0 [ int]: refCnt = 4, refCntWtd = 5 | |
V07 tmp2 [ ref]: refCnt = 2, refCntWtd = 2 | |
V08 tmp3 [ ref]: refCnt = 2, refCntWtd = 2 | |
V06 tmp1 [ int]: refCnt = 2, refCntWtd = 1 | |
*************** In fgPerBlockLocalVarLiveness() | |
BB01 USE(1)={V00 } + ByrefExposed + GcHeap | |
DEF(2)={ V01 V02} | |
BB02 USE(3)={V00 V01 V02 } + ByrefExposed + GcHeap | |
DEF(2)={ V05 V07} + ByrefExposed + GcHeap | |
BB03 USE(1)={V05 } + ByrefExposed + GcHeap | |
DEF(1)={ V06} | |
BB04 USE(1)={V05 } | |
DEF(1)={ V06} | |
BB05 USE(3)={V01 V02 V07 } + ByrefExposed + GcHeap | |
DEF(1)={ V08} + ByrefExposed + GcHeap | |
BB06 USE(1)={V00} + ByrefExposed + GcHeap | |
DEF(0)={ } + ByrefExposed* + GcHeap* | |
** Memory liveness computed, GcHeap states and ByrefExposed states match | |
*************** In fgInterBlockLocalVarLiveness() | |
BB liveness after fgLiveVarAnalysis(): | |
BB01 IN (1)={V00 } + ByrefExposed + GcHeap | |
OUT(3)={V00 V01 V02} + ByrefExposed + GcHeap | |
BB02 IN (3)={V00 V01 V02 } + ByrefExposed + GcHeap | |
OUT(4)={ V01 V02 V05 V07} + ByrefExposed + GcHeap | |
BB03 IN (4)={V01 V02 V05 V07} + ByrefExposed + GcHeap | |
OUT(3)={V01 V02 V07} + ByrefExposed + GcHeap | |
BB04 IN (4)={V01 V02 V05 V07} + ByrefExposed + GcHeap | |
OUT(3)={V01 V02 V07} + ByrefExposed + GcHeap | |
BB05 IN (3)={V01 V02 V07} + ByrefExposed + GcHeap | |
OUT(0)={ } | |
BB06 IN (1)={V00} + ByrefExposed + GcHeap | |
OUT(0)={ } | |
top level assign | |
removing stmt with no side effects | |
Removing statement STMT00015 (IL ???... ???) | |
N010 ( 14, 12) [000162] -A------R--- * ASG int | |
N009 ( 3, 2) [000161] D------N---- +--* LCL_VAR int V06 tmp1 | |
N008 ( 10, 9) [000052] n-----?----- \--* IND int | |
N007 ( 8, 7) [000053] ------?N---- \--* ADD int | |
N005 ( 7, 6) [000054] #-----?----- +--* IND int | |
N004 ( 4, 4) [000055] #-----?----- | \--* IND int | |
N003 ( 2, 2) [000056] ------?N---- | \--* ADD int | |
N001 ( 1, 1) [000057] ------?----- | +--* LCL_VAR int V05 tmp0 | |
N002 ( 1, 1) [000058] ------?----- | \--* CNS_INT int 32 | |
N006 ( 1, 1) [000059] ------?----- \--* CNS_INT int 12 | |
in BB03 as useless: | |
BB03 becomes empty | |
BB04 - Dead assignment has side effects... | |
N007 ( 20, 15) [000164] -AC-G---R--- * ASG int | |
N006 ( 3, 2) [000163] D------N---- +--* LCL_VAR int V06 tmp1 | |
N005 ( 16, 12) [000049] --C-G-?----- \--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
N003 ( 1, 1) [000039] ------?----- arg0 in ecx +--* LCL_VAR int V05 tmp0 | |
N004 ( 1, 4) [000048] ------?----- arg1 in edx \--* CNS_INT(h) int 0x8283EB8 token | |
top level assign | |
removing stmt with no side effects | |
Removing statement STMT00016 (IL ???... ???) | |
N007 ( 20, 15) [000164] -AC-G---R--- * ASG int | |
N006 ( 3, 2) [000163] D------N---- +--* LCL_VAR int V06 tmp1 | |
N005 ( 16, 12) [000049] --C-G-?----- \--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
N003 ( 1, 1) [000039] ------?----- arg0 in ecx +--* LCL_VAR int V05 tmp0 | |
N004 ( 1, 4) [000048] ------?----- arg1 in edx \--* CNS_INT(h) int 0x8283EB8 token | |
in BB04 as useless: | |
BB04 becomes empty | |
*************** In fgPerBlockLocalVarLiveness() | |
BB01 USE(1)={V00 } + ByrefExposed + GcHeap | |
DEF(2)={ V01 V02} | |
BB02 USE(3)={V00 V01 V02 } + ByrefExposed + GcHeap | |
DEF(2)={ V05 V07} + ByrefExposed + GcHeap | |
BB03 USE(0)={} | |
DEF(0)={} | |
BB04 USE(0)={} | |
DEF(0)={} | |
BB05 USE(3)={V01 V02 V07 } + ByrefExposed + GcHeap | |
DEF(1)={ V08} + ByrefExposed + GcHeap | |
BB06 USE(1)={V00} + ByrefExposed + GcHeap | |
DEF(0)={ } + ByrefExposed* + GcHeap* | |
** Memory liveness computed, GcHeap states and ByrefExposed states match | |
*************** In fgInterBlockLocalVarLiveness() | |
BB liveness after fgLiveVarAnalysis(): | |
BB01 IN (1)={V00 } + ByrefExposed + GcHeap | |
OUT(3)={V00 V01 V02} + ByrefExposed + GcHeap | |
BB02 IN (3)={V00 V01 V02 } + ByrefExposed + GcHeap | |
OUT(3)={ V01 V02 V07} + ByrefExposed + GcHeap | |
BB03 IN (3)={V01 V02 V07} + ByrefExposed + GcHeap | |
OUT(3)={V01 V02 V07} + ByrefExposed + GcHeap | |
BB04 IN (3)={V01 V02 V07} + ByrefExposed + GcHeap | |
OUT(3)={V01 V02 V07} + ByrefExposed + GcHeap | |
BB05 IN (3)={V01 V02 V07} + ByrefExposed + GcHeap | |
OUT(0)={ } | |
BB06 IN (1)={V00} + ByrefExposed + GcHeap | |
OUT(0)={ } | |
*************** 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..016)-> BB06 ( cond ) i label target idxlen | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen | |
BB03 [0009] 1 BB02 0.25 [???..???)-> BB05 (always) i | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
***** BB01 | |
STMT00000 (IL 0x000...0x008) | |
N008 ( 6, 6) [000005] -A-XG---R--- * ASG int | |
N007 ( 1, 1) [000004] D------N---- +--* LCL_VAR int V01 loc0 d:1 | |
N006 ( 6, 6) [000003] ---XG------- \--* ADD int | |
N004 ( 4, 4) [000001] ---XG------- +--* IND int | |
N003 ( 2, 2) [000088] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000000] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000087] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
N005 ( 1, 1) [000002] ------------ \--* CNS_INT int -1 | |
***** BB01 | |
STMT00001 (IL 0x009...0x00F) | |
N006 ( 4, 4) [000009] -A-XG---R--- * ASG ref | |
N005 ( 1, 1) [000008] D------N---- +--* LCL_VAR ref V02 loc1 d:1 | |
N004 ( 4, 4) [000007] ---XG------- \--* IND ref | |
N003 ( 2, 2) [000090] -------N---- \--* ADD byref | |
N001 ( 1, 1) [000006] ------------ +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000089] ------------ \--* CNS_INT int 4 field offset Fseq[_array] | |
***** BB01 | |
STMT00002 (IL 0x010...0x014) | |
N005 ( 7, 7) [000014] ---X-------- * JTRUE void | |
N004 ( 5, 5) [000013] N--X---N-U-- \--* LE int | |
N002 ( 3, 3) [000012] ---X-------- +--* ARR_LENGTH int | |
N001 ( 1, 1) [000011] ------------ | \--* LCL_VAR ref V02 loc1 u:1 | |
N003 ( 1, 1) [000010] ------------ \--* LCL_VAR int V01 loc0 u:1 | |
------------ BB02 [01C..040) -> BB04 (cond), preds={BB01} succs={BB03,BB04} | |
***** BB02 | |
STMT00003 (IL 0x01C...0x025) | |
N011 ( 11, 11) [000021] -A-XG---R--- * ASG int | |
N010 ( 4, 4) [000020] D--XG--N---- +--* IND int | |
N009 ( 2, 2) [000093] -------N---- | \--* ADD byref | |
N007 ( 1, 1) [000015] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N008 ( 1, 1) [000092] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
N006 ( 6, 6) [000019] ---XG------- \--* ADD int | |
N004 ( 4, 4) [000017] ---XG------- +--* IND int | |
N003 ( 2, 2) [000095] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000016] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000094] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
N005 ( 1, 1) [000018] ------------ \--* CNS_INT int 1 | |
***** BB02 | |
STMT00004 (IL 0x02A...0x02C) | |
N006 ( 6, 6) [000025] -A-XG------- * ASG int | |
N004 ( 4, 4) [000024] D--XG--N---- +--* IND int | |
N003 ( 2, 2) [000097] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000022] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000096] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
N005 ( 1, 1) [000023] ------------ \--* LCL_VAR int V01 loc0 u:1 | |
***** BB02 | |
STMT00005 (IL 0x031...0x038) | |
N017 ( 24, 25) [000125] -A-XG---R--- * ASG ref | |
N016 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 | |
N015 ( 20, 22) [000124] ---XG------- \--* IND ref | |
N014 ( 17, 20) [000110] ---XG------- \--* COMMA byref Zero Fseq[Value] | |
N004 ( 8, 11) [000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void | |
N001 ( 1, 1) [000113] ------------ | +--* LCL_VAR int V01 loc0 u:1 | |
N003 ( 3, 3) [000111] ---X-------- | \--* ARR_LENGTH int | |
N002 ( 1, 1) [000112] ------------ | \--* LCL_VAR ref V02 loc1 u:1 | |
N013 ( 9, 9) [000115] ----G------- \--* ADDR byref | |
N012 ( 5, 5) [000116] a---G--N---- \--* IND struct | |
N011 ( 4, 4) [000117] -------N---- \--* ADD byref | |
N005 ( 1, 1) [000118] ------------ +--* LCL_VAR ref V02 loc1 u:1 | |
N010 ( 3, 3) [000119] -------N---- \--* ADD int | |
N008 ( 2, 2) [000120] -------N---- +--* LSH int | |
N006 ( 1, 1) [000121] i----------- | +--* LCL_VAR int V01 loc0 u:1 | |
N007 ( 1, 1) [000122] -------N---- | \--* CNS_INT int 2 | |
N009 ( 1, 1) [000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
***** BB02 | |
STMT00006 (IL 0x039...0x03E) | |
N004 ( 3, 3) [000038] -A---O--R--- * ASG int | |
N003 ( 1, 1) [000037] D------N---- +--* LCL_VAR int V05 tmp0 d:1 | |
N002 ( 3, 2) [000036] #----O------ \--* IND int | |
N001 ( 1, 1) [000035] ------------ \--* LCL_VAR ref V00 this u:1 (last use) | |
***** BB02 | |
STMT00014 (IL ???... ???) | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
N010 ( 12, 11) [000051] J------N---- \--* EQ int | |
N008 ( 10, 9) [000047] n----------- +--* IND int | |
N007 ( 8, 7) [000046] -------N---- | \--* ADD int | |
N005 ( 7, 6) [000044] #----------- | +--* IND int | |
N004 ( 4, 4) [000043] #----------- | | \--* IND int | |
N003 ( 2, 2) [000042] -------N---- | | \--* ADD int | |
N001 ( 1, 1) [000040] ------------ | | +--* LCL_VAR int V05 tmp0 u:1 (last use) | |
N002 ( 1, 1) [000041] ------------ | | \--* CNS_INT int 32 | |
N006 ( 1, 1) [000045] ------------ | \--* CNS_INT int 12 | |
N009 ( 1, 1) [000050] ------------ \--* CNS_INT int 0 | |
------------ BB03 [???..???) -> BB05 (always), preds={BB02} succs={BB05} | |
------------ BB04 [???..???), preds={BB02} succs={BB05} | |
------------ BB05 [040..052) (return), preds={BB04,BB03} succs={} | |
***** BB05 | |
STMT00011 (IL 0x040...0x045) | |
N003 ( 5, 4) [000130] -A------R--- * ASG ref | |
N002 ( 3, 2) [000128] D------N---- +--* LCL_VAR ref V08 tmp3 d:1 | |
N001 ( 1, 1) [000129] ------------ \--* CNS_INT ref null | |
***** BB05 | |
STMT00012 (IL ???...0x04B) | |
N017 ( 24, 25) [000159] -A-XG------- * ASG ref | |
N015 ( 20, 22) [000157] *--XG--N---- +--* IND ref | |
N014 ( 17, 20) [000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] | |
N004 ( 8, 11) [000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void | |
N001 ( 1, 1) [000146] ------------ | | +--* LCL_VAR int V01 loc0 u:1 | |
N003 ( 3, 3) [000144] ---X-------- | | \--* ARR_LENGTH int | |
N002 ( 1, 1) [000145] ------------ | | \--* LCL_VAR ref V02 loc1 u:1 | |
N013 ( 9, 9) [000148] ---XG------- | \--* ADDR byref | |
N012 ( 5, 5) [000149] a--XG------- | \--* IND struct | |
N011 ( 4, 4) [000150] -------N---- | \--* ADD byref | |
N005 ( 1, 1) [000151] ------------ | +--* LCL_VAR ref V02 loc1 u:1 (last use) | |
N010 ( 3, 3) [000152] -------N---- | \--* ADD int | |
N008 ( 2, 2) [000153] -------N---- | +--* LSH int | |
N006 ( 1, 1) [000154] i----------- | | +--* LCL_VAR int V01 loc0 u:1 (last use) | |
N007 ( 1, 1) [000155] -------N---- | | \--* CNS_INT int 2 | |
N009 ( 1, 1) [000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
N016 ( 3, 2) [000158] ------------ \--* LCL_VAR ref V08 tmp3 u:1 (last use) | |
***** BB05 | |
STMT00010 (IL 0x050...0x051) | |
N002 ( 4, 3) [000071] ------------ * RETURN ref | |
N001 ( 3, 2) [000070] ------------ \--* LCL_VAR ref V07 tmp2 u:1 (last use) | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
***** BB06 | |
STMT00013 (IL 0x016...0x017) | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack | |
N002 ( 1, 1) [000082] ------------ this in ecx \--* LCL_VAR ref V00 this u:1 (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..016)-> BB06 ( cond ) i label target idxlen | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen | |
BB03 [0009] 1 BB02 0.25 [???..???)-> BB05 (always) i | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
***** BB01 | |
STMT00000 (IL 0x000...0x008) | |
N008 ( 6, 6) [000005] -A-XG---R--- * ASG int | |
N007 ( 1, 1) [000004] D------N---- +--* LCL_VAR int V01 loc0 d:1 | |
N006 ( 6, 6) [000003] ---XG------- \--* ADD int | |
N004 ( 4, 4) [000001] ---XG------- +--* IND int | |
N003 ( 2, 2) [000088] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000000] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000087] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
N005 ( 1, 1) [000002] ------------ \--* CNS_INT int -1 | |
***** BB01 | |
STMT00001 (IL 0x009...0x00F) | |
N006 ( 4, 4) [000009] -A-XG---R--- * ASG ref | |
N005 ( 1, 1) [000008] D------N---- +--* LCL_VAR ref V02 loc1 d:1 | |
N004 ( 4, 4) [000007] ---XG------- \--* IND ref | |
N003 ( 2, 2) [000090] -------N---- \--* ADD byref | |
N001 ( 1, 1) [000006] ------------ +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000089] ------------ \--* CNS_INT int 4 field offset Fseq[_array] | |
***** BB01 | |
STMT00002 (IL 0x010...0x014) | |
N005 ( 7, 7) [000014] ---X-------- * JTRUE void | |
N004 ( 5, 5) [000013] N--X---N-U-- \--* LE int | |
N002 ( 3, 3) [000012] ---X-------- +--* ARR_LENGTH int | |
N001 ( 1, 1) [000011] ------------ | \--* LCL_VAR ref V02 loc1 u:1 | |
N003 ( 1, 1) [000010] ------------ \--* LCL_VAR int V01 loc0 u:1 | |
------------ BB02 [01C..040) -> BB04 (cond), preds={BB01} succs={BB03,BB04} | |
***** BB02 | |
STMT00003 (IL 0x01C...0x025) | |
N011 ( 11, 11) [000021] -A-XG---R--- * ASG int | |
N010 ( 4, 4) [000020] D--XG--N---- +--* IND int | |
N009 ( 2, 2) [000093] -------N---- | \--* ADD byref | |
N007 ( 1, 1) [000015] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N008 ( 1, 1) [000092] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
N006 ( 6, 6) [000019] ---XG------- \--* ADD int | |
N004 ( 4, 4) [000017] ---XG------- +--* IND int | |
N003 ( 2, 2) [000095] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000016] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000094] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
N005 ( 1, 1) [000018] ------------ \--* CNS_INT int 1 | |
***** BB02 | |
STMT00004 (IL 0x02A...0x02C) | |
N006 ( 6, 6) [000025] -A-XG------- * ASG int | |
N004 ( 4, 4) [000024] D--XG--N---- +--* IND int | |
N003 ( 2, 2) [000097] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000022] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000096] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
N005 ( 1, 1) [000023] ------------ \--* LCL_VAR int V01 loc0 u:1 | |
***** BB02 | |
STMT00005 (IL 0x031...0x038) | |
N017 ( 24, 25) [000125] -A-XG---R--- * ASG ref | |
N016 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 | |
N015 ( 20, 22) [000124] ---XG------- \--* IND ref | |
N014 ( 17, 20) [000110] ---XG------- \--* COMMA byref Zero Fseq[Value] | |
N004 ( 8, 11) [000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void | |
N001 ( 1, 1) [000113] ------------ | +--* LCL_VAR int V01 loc0 u:1 | |
N003 ( 3, 3) [000111] ---X-------- | \--* ARR_LENGTH int | |
N002 ( 1, 1) [000112] ------------ | \--* LCL_VAR ref V02 loc1 u:1 | |
N013 ( 9, 9) [000115] ----G------- \--* ADDR byref | |
N012 ( 5, 5) [000116] a---G--N---- \--* IND struct | |
N011 ( 4, 4) [000117] -------N---- \--* ADD byref | |
N005 ( 1, 1) [000118] ------------ +--* LCL_VAR ref V02 loc1 u:1 | |
N010 ( 3, 3) [000119] -------N---- \--* ADD int | |
N008 ( 2, 2) [000120] -------N---- +--* LSH int | |
N006 ( 1, 1) [000121] i----------- | +--* LCL_VAR int V01 loc0 u:1 | |
N007 ( 1, 1) [000122] -------N---- | \--* CNS_INT int 2 | |
N009 ( 1, 1) [000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
***** BB02 | |
STMT00006 (IL 0x039...0x03E) | |
N004 ( 3, 3) [000038] -A---O--R--- * ASG int | |
N003 ( 1, 1) [000037] D------N---- +--* LCL_VAR int V05 tmp0 d:1 | |
N002 ( 3, 2) [000036] #----O------ \--* IND int | |
N001 ( 1, 1) [000035] ------------ \--* LCL_VAR ref V00 this u:1 (last use) | |
***** BB02 | |
STMT00014 (IL ???... ???) | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
N010 ( 12, 11) [000051] J------N---- \--* EQ int | |
N008 ( 10, 9) [000047] n----------- +--* IND int | |
N007 ( 8, 7) [000046] -------N---- | \--* ADD int | |
N005 ( 7, 6) [000044] #----------- | +--* IND int | |
N004 ( 4, 4) [000043] #----------- | | \--* IND int | |
N003 ( 2, 2) [000042] -------N---- | | \--* ADD int | |
N001 ( 1, 1) [000040] ------------ | | +--* LCL_VAR int V05 tmp0 u:1 (last use) | |
N002 ( 1, 1) [000041] ------------ | | \--* CNS_INT int 32 | |
N006 ( 1, 1) [000045] ------------ | \--* CNS_INT int 12 | |
N009 ( 1, 1) [000050] ------------ \--* CNS_INT int 0 | |
------------ BB03 [???..???) -> BB05 (always), preds={BB02} succs={BB05} | |
------------ BB04 [???..???), preds={BB02} succs={BB05} | |
------------ BB05 [040..052) (return), preds={BB04,BB03} succs={} | |
***** BB05 | |
STMT00011 (IL 0x040...0x045) | |
N003 ( 5, 4) [000130] -A------R--- * ASG ref | |
N002 ( 3, 2) [000128] D------N---- +--* LCL_VAR ref V08 tmp3 d:1 | |
N001 ( 1, 1) [000129] ------------ \--* CNS_INT ref null | |
***** BB05 | |
STMT00012 (IL ???...0x04B) | |
N017 ( 24, 25) [000159] -A-XG------- * ASG ref | |
N015 ( 20, 22) [000157] *--XG--N---- +--* IND ref | |
N014 ( 17, 20) [000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] | |
N004 ( 8, 11) [000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void | |
N001 ( 1, 1) [000146] ------------ | | +--* LCL_VAR int V01 loc0 u:1 | |
N003 ( 3, 3) [000144] ---X-------- | | \--* ARR_LENGTH int | |
N002 ( 1, 1) [000145] ------------ | | \--* LCL_VAR ref V02 loc1 u:1 | |
N013 ( 9, 9) [000148] ---XG------- | \--* ADDR byref | |
N012 ( 5, 5) [000149] a--XG------- | \--* IND struct | |
N011 ( 4, 4) [000150] -------N---- | \--* ADD byref | |
N005 ( 1, 1) [000151] ------------ | +--* LCL_VAR ref V02 loc1 u:1 (last use) | |
N010 ( 3, 3) [000152] -------N---- | \--* ADD int | |
N008 ( 2, 2) [000153] -------N---- | +--* LSH int | |
N006 ( 1, 1) [000154] i----------- | | +--* LCL_VAR int V01 loc0 u:1 (last use) | |
N007 ( 1, 1) [000155] -------N---- | | \--* CNS_INT int 2 | |
N009 ( 1, 1) [000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
N016 ( 3, 2) [000158] ------------ \--* LCL_VAR ref V08 tmp3 u:1 (last use) | |
***** BB05 | |
STMT00010 (IL 0x050...0x051) | |
N002 ( 4, 3) [000071] ------------ * RETURN ref | |
N001 ( 3, 2) [000070] ------------ \--* LCL_VAR ref V07 tmp2 u:1 (last use) | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
***** BB06 | |
STMT00013 (IL 0x016...0x017) | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack | |
N002 ( 1, 1) [000082] ------------ this in ecx \--* LCL_VAR ref V00 this u:1 (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..016)-> BB06 ( cond ) i label target idxlen | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen | |
BB03 [0009] 1 BB02 0.25 [???..???)-> BB05 (always) i | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
***** BB01 | |
STMT00000 (IL 0x000...0x008) | |
N008 ( 6, 6) [000005] -A-XG---R--- * ASG int | |
N007 ( 1, 1) [000004] D------N---- +--* LCL_VAR int V01 loc0 d:1 | |
N006 ( 6, 6) [000003] ---XG------- \--* ADD int | |
N004 ( 4, 4) [000001] ---XG------- +--* IND int | |
N003 ( 2, 2) [000088] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000000] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000087] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
N005 ( 1, 1) [000002] ------------ \--* CNS_INT int -1 | |
***** BB01 | |
STMT00001 (IL 0x009...0x00F) | |
N006 ( 4, 4) [000009] -A-XG---R--- * ASG ref | |
N005 ( 1, 1) [000008] D------N---- +--* LCL_VAR ref V02 loc1 d:1 | |
N004 ( 4, 4) [000007] ---XG------- \--* IND ref | |
N003 ( 2, 2) [000090] -------N---- \--* ADD byref | |
N001 ( 1, 1) [000006] ------------ +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000089] ------------ \--* CNS_INT int 4 field offset Fseq[_array] | |
***** BB01 | |
STMT00002 (IL 0x010...0x014) | |
N005 ( 7, 7) [000014] ---X-------- * JTRUE void | |
N004 ( 5, 5) [000013] N--X---N-U-- \--* LE int | |
N002 ( 3, 3) [000012] ---X-------- +--* ARR_LENGTH int | |
N001 ( 1, 1) [000011] ------------ | \--* LCL_VAR ref V02 loc1 u:1 | |
N003 ( 1, 1) [000010] ------------ \--* LCL_VAR int V01 loc0 u:1 | |
------------ BB02 [01C..040) -> BB04 (cond), preds={BB01} succs={BB03,BB04} | |
***** BB02 | |
STMT00003 (IL 0x01C...0x025) | |
N011 ( 11, 11) [000021] -A-XG---R--- * ASG int | |
N010 ( 4, 4) [000020] D--XG--N---- +--* IND int | |
N009 ( 2, 2) [000093] -------N---- | \--* ADD byref | |
N007 ( 1, 1) [000015] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N008 ( 1, 1) [000092] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
N006 ( 6, 6) [000019] ---XG------- \--* ADD int | |
N004 ( 4, 4) [000017] ---XG------- +--* IND int | |
N003 ( 2, 2) [000095] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000016] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000094] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
N005 ( 1, 1) [000018] ------------ \--* CNS_INT int 1 | |
***** BB02 | |
STMT00004 (IL 0x02A...0x02C) | |
N006 ( 6, 6) [000025] -A-XG------- * ASG int | |
N004 ( 4, 4) [000024] D--XG--N---- +--* IND int | |
N003 ( 2, 2) [000097] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000022] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000096] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
N005 ( 1, 1) [000023] ------------ \--* LCL_VAR int V01 loc0 u:1 | |
***** BB02 | |
STMT00005 (IL 0x031...0x038) | |
N017 ( 24, 25) [000125] -A-XG---R--- * ASG ref | |
N016 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 | |
N015 ( 20, 22) [000124] ---XG------- \--* IND ref | |
N014 ( 17, 20) [000110] ---XG------- \--* COMMA byref Zero Fseq[Value] | |
N004 ( 8, 11) [000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void | |
N001 ( 1, 1) [000113] ------------ | +--* LCL_VAR int V01 loc0 u:1 | |
N003 ( 3, 3) [000111] ---X-------- | \--* ARR_LENGTH int | |
N002 ( 1, 1) [000112] ------------ | \--* LCL_VAR ref V02 loc1 u:1 | |
N013 ( 9, 9) [000115] ----G------- \--* ADDR byref | |
N012 ( 5, 5) [000116] a---G--N---- \--* IND struct | |
N011 ( 4, 4) [000117] -------N---- \--* ADD byref | |
N005 ( 1, 1) [000118] ------------ +--* LCL_VAR ref V02 loc1 u:1 | |
N010 ( 3, 3) [000119] -------N---- \--* ADD int | |
N008 ( 2, 2) [000120] -------N---- +--* LSH int | |
N006 ( 1, 1) [000121] i----------- | +--* LCL_VAR int V01 loc0 u:1 | |
N007 ( 1, 1) [000122] -------N---- | \--* CNS_INT int 2 | |
N009 ( 1, 1) [000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
***** BB02 | |
STMT00006 (IL 0x039...0x03E) | |
N004 ( 3, 3) [000038] -A---O--R--- * ASG int | |
N003 ( 1, 1) [000037] D------N---- +--* LCL_VAR int V05 tmp0 d:1 | |
N002 ( 3, 2) [000036] #----O------ \--* IND int | |
N001 ( 1, 1) [000035] ------------ \--* LCL_VAR ref V00 this u:1 (last use) | |
***** BB02 | |
STMT00014 (IL ???... ???) | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
N010 ( 12, 11) [000051] J------N---- \--* EQ int | |
N008 ( 10, 9) [000047] n----------- +--* IND int | |
N007 ( 8, 7) [000046] -------N---- | \--* ADD int | |
N005 ( 7, 6) [000044] #----------- | +--* IND int | |
N004 ( 4, 4) [000043] #----------- | | \--* IND int | |
N003 ( 2, 2) [000042] -------N---- | | \--* ADD int | |
N001 ( 1, 1) [000040] ------------ | | +--* LCL_VAR int V05 tmp0 u:1 (last use) | |
N002 ( 1, 1) [000041] ------------ | | \--* CNS_INT int 32 | |
N006 ( 1, 1) [000045] ------------ | \--* CNS_INT int 12 | |
N009 ( 1, 1) [000050] ------------ \--* CNS_INT int 0 | |
------------ BB03 [???..???) -> BB05 (always), preds={BB02} succs={BB05} | |
------------ BB04 [???..???), preds={BB02} succs={BB05} | |
------------ BB05 [040..052) (return), preds={BB04,BB03} succs={} | |
***** BB05 | |
STMT00011 (IL 0x040...0x045) | |
N003 ( 5, 4) [000130] -A------R--- * ASG ref | |
N002 ( 3, 2) [000128] D------N---- +--* LCL_VAR ref V08 tmp3 d:1 | |
N001 ( 1, 1) [000129] ------------ \--* CNS_INT ref null | |
***** BB05 | |
STMT00012 (IL ???...0x04B) | |
N017 ( 24, 25) [000159] -A-XG------- * ASG ref | |
N015 ( 20, 22) [000157] *--XG--N---- +--* IND ref | |
N014 ( 17, 20) [000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] | |
N004 ( 8, 11) [000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void | |
N001 ( 1, 1) [000146] ------------ | | +--* LCL_VAR int V01 loc0 u:1 | |
N003 ( 3, 3) [000144] ---X-------- | | \--* ARR_LENGTH int | |
N002 ( 1, 1) [000145] ------------ | | \--* LCL_VAR ref V02 loc1 u:1 | |
N013 ( 9, 9) [000148] ---XG------- | \--* ADDR byref | |
N012 ( 5, 5) [000149] a--XG------- | \--* IND struct | |
N011 ( 4, 4) [000150] -------N---- | \--* ADD byref | |
N005 ( 1, 1) [000151] ------------ | +--* LCL_VAR ref V02 loc1 u:1 (last use) | |
N010 ( 3, 3) [000152] -------N---- | \--* ADD int | |
N008 ( 2, 2) [000153] -------N---- | +--* LSH int | |
N006 ( 1, 1) [000154] i----------- | | +--* LCL_VAR int V01 loc0 u:1 (last use) | |
N007 ( 1, 1) [000155] -------N---- | | \--* CNS_INT int 2 | |
N009 ( 1, 1) [000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
N016 ( 3, 2) [000158] ------------ \--* LCL_VAR ref V08 tmp3 u:1 (last use) | |
***** BB05 | |
STMT00010 (IL 0x050...0x051) | |
N002 ( 4, 3) [000071] ------------ * RETURN ref | |
N001 ( 3, 2) [000070] ------------ \--* LCL_VAR ref V07 tmp2 u:1 (last use) | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
***** BB06 | |
STMT00013 (IL 0x016...0x017) | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack | |
N002 ( 1, 1) [000082] ------------ this in ecx \--* LCL_VAR ref V00 this u:1 (last use) | |
------------------------------------------------------------------------------------------------------------------- | |
*************** Finishing PHASE Early Value Propagation | |
*************** Starting PHASE Do value numbering | |
*************** In fgValueNumber() | |
Memory Initial Value in BB01 is: $81 | |
The SSA definition for ByrefExposed (#1) at start of BB01 is $81 {InitVal($41)} | |
The SSA definition for GcHeap (#1) at start of BB01 is $81 {InitVal($41)} | |
***** BB01, STMT00000(before) | |
N008 ( 6, 6) [000005] -A-XG---R--- * ASG int | |
N007 ( 1, 1) [000004] D------N---- +--* LCL_VAR int V01 loc0 d:1 | |
N006 ( 6, 6) [000003] ---XG------- \--* ADD int | |
N004 ( 4, 4) [000001] ---XG------- +--* IND int | |
N003 ( 2, 2) [000088] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000000] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000087] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
N005 ( 1, 1) [000002] ------------ \--* CNS_INT int -1 | |
N001 [000000] LCL_VAR V00 this u:1 => $80 {InitVal($40)} | |
N002 [000087] CNS_INT 8 field offset Fseq[_size] => $42 {IntCns 8} | |
N003 [000088] ADD => $c0 {ADD($42, $80)} | |
VNApplySelectors: | |
VNForHandle(_size) is $100, fieldType is int | |
VNForMapSelect($81, $100):int returns $140 {$81[$100]} | |
VNForMapSelect($140, $80):int returns $141 {$140[$80]} | |
N004 [000001] IND => <l:$143 {norm=$141 {$140[$80]}, exc=$1c0 {NullPtrExc($80)}}, c:$142 {norm=$180 {180}, exc=$1c0 {NullPtrExc($80)}}> | |
N005 [000002] CNS_INT -1 => $41 {IntCns -1} | |
N006 [000003] ADD => <l:$147 {norm=$145 {ADD($41, $141)}, exc=$1c0 {NullPtrExc($80)}}, c:$146 {norm=$144 {ADD($41, $180)}, exc=$1c0 {NullPtrExc($80)}}> | |
N007 [000004] LCL_VAR V01 loc0 d:1 => <l:$145 {ADD($41, $141)}, c:$144 {ADD($41, $180)}> | |
N008 [000005] ASG => <l:$147 {norm=$145 {ADD($41, $141)}, exc=$1c0 {NullPtrExc($80)}}, c:$146 {norm=$144 {ADD($41, $180)}, exc=$1c0 {NullPtrExc($80)}}> | |
***** BB01, STMT00000(after) | |
N008 ( 6, 6) [000005] -A-XG---R--- * ASG int <l:$147, c:$146> | |
N007 ( 1, 1) [000004] D------N---- +--* LCL_VAR int V01 loc0 d:1 <l:$145, c:$144> | |
N006 ( 6, 6) [000003] ---XG------- \--* ADD int <l:$147, c:$146> | |
N004 ( 4, 4) [000001] ---XG------- +--* IND int <l:$143, c:$142> | |
N003 ( 2, 2) [000088] -------N---- | \--* ADD byref $c0 | |
N001 ( 1, 1) [000000] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000087] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] $42 | |
N005 ( 1, 1) [000002] ------------ \--* CNS_INT int -1 $41 | |
--------- | |
***** BB01, STMT00001(before) | |
N006 ( 4, 4) [000009] -A-XG---R--- * ASG ref | |
N005 ( 1, 1) [000008] D------N---- +--* LCL_VAR ref V02 loc1 d:1 | |
N004 ( 4, 4) [000007] ---XG------- \--* IND ref | |
N003 ( 2, 2) [000090] -------N---- \--* ADD byref | |
N001 ( 1, 1) [000006] ------------ +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000089] ------------ \--* CNS_INT int 4 field offset Fseq[_array] | |
N001 [000006] LCL_VAR V00 this u:1 => $80 {InitVal($40)} | |
N002 [000089] CNS_INT 4 field offset Fseq[_array] => $43 {IntCns 4} | |
N003 [000090] ADD => $c1 {ADD($43, $80)} | |
VNApplySelectors: | |
VNForHandle(_array) is $101, fieldType is ref | |
VNForMapSelect($81, $101):ref returns $1c1 {$81[$101]} | |
VNForMapSelect($1c1, $80):ref returns $1c2 {$1c1[$80]} | |
N004 [000007] IND => <l:$1c4 {norm=$1c2 {$1c1[$80]}, exc=$1c0 {NullPtrExc($80)}}, c:$1c3 {norm=$200 {200}, exc=$1c0 {NullPtrExc($80)}}> | |
N005 [000008] LCL_VAR V02 loc1 d:1 => <l:$1c2 {$1c1[$80]}, c:$200 {200}> | |
N006 [000009] ASG => <l:$1c4 {norm=$1c2 {$1c1[$80]}, exc=$1c0 {NullPtrExc($80)}}, c:$1c3 {norm=$200 {200}, exc=$1c0 {NullPtrExc($80)}}> | |
***** BB01, STMT00001(after) | |
N006 ( 4, 4) [000009] -A-XG---R--- * ASG ref <l:$1c4, c:$1c3> | |
N005 ( 1, 1) [000008] D------N---- +--* LCL_VAR ref V02 loc1 d:1 <l:$1c2, c:$200> | |
N004 ( 4, 4) [000007] ---XG------- \--* IND ref <l:$1c4, c:$1c3> | |
N003 ( 2, 2) [000090] -------N---- \--* ADD byref $c1 | |
N001 ( 1, 1) [000006] ------------ +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000089] ------------ \--* CNS_INT int 4 field offset Fseq[_array] $43 | |
--------- | |
***** BB01, STMT00002(before) | |
N005 ( 7, 7) [000014] ---X-------- * JTRUE void | |
N004 ( 5, 5) [000013] N--X---N-U-- \--* LE int | |
N002 ( 3, 3) [000012] ---X-------- +--* ARR_LENGTH int | |
N001 ( 1, 1) [000011] ------------ | \--* LCL_VAR ref V02 loc1 u:1 | |
N003 ( 1, 1) [000010] ------------ \--* LCL_VAR int V01 loc0 u:1 | |
N001 [000011] LCL_VAR V02 loc1 u:1 => <l:$1c2 {$1c1[$80]}, c:$200 {200}> | |
N002 [000012] ARR_LENGTH => <l:$149 {norm=$241 {ARR_LENGTH($1c2)}, exc=$1c6 {NullPtrExc($1c2)}}, c:$148 {norm=$240 {ARR_LENGTH($200)}, exc=$1c5 {NullPtrExc($200)}}> | |
N003 [000010] LCL_VAR V01 loc0 u:1 => <l:$145 {ADD($41, $141)}, c:$144 {ADD($41, $180)}> | |
N004 [000013] LE => <l:$14d {norm=$14b {LE_UN($241, $145)}, exc=$1c6 {NullPtrExc($1c2)}}, c:$14c {norm=$14a {LE_UN($240, $144)}, exc=$1c5 {NullPtrExc($200)}}> | |
***** BB01, STMT00002(after) | |
N005 ( 7, 7) [000014] ---X-------- * JTRUE void | |
N004 ( 5, 5) [000013] N--X---N-U-- \--* LE int <l:$14d, c:$14c> | |
N002 ( 3, 3) [000012] ---X-------- +--* ARR_LENGTH int <l:$149, c:$148> | |
N001 ( 1, 1) [000011] ------------ | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N003 ( 1, 1) [000010] ------------ \--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
finish(BB01). | |
Succ(BB02). | |
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 (#1) at start of BB06 is $81 {InitVal($41)} | |
The SSA definition for GcHeap (#1) at start of BB06 is $81 {InitVal($41)} | |
***** BB06, STMT00013(before) | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack | |
N002 ( 1, 1) [000082] ------------ this in ecx \--* LCL_VAR ref V00 this u:1 (last use) | |
N001 [000091] ARGPLACE => $202 {202} | |
N002 [000082] LCL_VAR V00 this u:1 (last use) => $80 {InitVal($40)} | |
fgCurMemoryVN[GcHeap] assigned for CALL at [000083] to VN: $203. | |
N003 [000083] CALL => $VN.Void | |
***** BB06, STMT00013(after) | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack $VN.Void | |
N002 ( 1, 1) [000082] ------------ this in ecx \--* LCL_VAR ref V00 this u:1 (last use) $80 | |
finish(BB06). | |
The SSA definition for ByrefExposed (#1) at start of BB02 is $81 {InitVal($41)} | |
The SSA definition for GcHeap (#1) at start of BB02 is $81 {InitVal($41)} | |
***** BB02, STMT00003(before) | |
N011 ( 11, 11) [000021] -A-XG---R--- * ASG int | |
N010 ( 4, 4) [000020] D--XG--N---- +--* IND int | |
N009 ( 2, 2) [000093] -------N---- | \--* ADD byref | |
N007 ( 1, 1) [000015] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N008 ( 1, 1) [000092] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
N006 ( 6, 6) [000019] ---XG------- \--* ADD int | |
N004 ( 4, 4) [000017] ---XG------- +--* IND int | |
N003 ( 2, 2) [000095] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000016] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000094] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
N005 ( 1, 1) [000018] ------------ \--* CNS_INT int 1 | |
N001 [000016] LCL_VAR V00 this u:1 => $80 {InitVal($40)} | |
N002 [000094] CNS_INT 12 field offset Fseq[_version] => $44 {IntCns 12} | |
N003 [000095] ADD => $c2 {ADD($44, $80)} | |
VNApplySelectors: | |
VNForHandle(_version) is $102, fieldType is int | |
VNForMapSelect($81, $102):int returns $14e {$81[$102]} | |
VNForMapSelect($14e, $80):int returns $14f {$14e[$80]} | |
N004 [000017] IND => <l:$151 {norm=$14f {$14e[$80]}, exc=$1c0 {NullPtrExc($80)}}, c:$150 {norm=$182 {182}, exc=$1c0 {NullPtrExc($80)}}> | |
N005 [000018] CNS_INT 1 => $45 {IntCns 1} | |
N006 [000019] ADD => <l:$155 {norm=$153 {ADD($45, $14f)}, exc=$1c0 {NullPtrExc($80)}}, c:$154 {norm=$152 {ADD($45, $182)}, exc=$1c0 {NullPtrExc($80)}}> | |
N007 [000015] LCL_VAR V00 this u:1 => $80 {InitVal($40)} | |
N008 [000092] CNS_INT 12 field offset Fseq[_version] => $44 {IntCns 12} | |
N009 [000093] ADD => $c2 {ADD($44, $80)} | |
VNApplySelectors: | |
VNForHandle(_version) is $102, fieldType is int | |
VNForMapSelect($81, $102):int returns $14e {$81[$102]} | |
VNForMapSelect($14e, $80):int returns $14f {$14e[$80]} | |
VNForMapStore($14e, $80, $153):int returns $280 {$14e[$80 := $153]} | |
VNApplySelectorsAssign: | |
VNForHandle(_version) is $102, fieldType is int | |
VNForMapStore($81, $102, $280):int returns $281 {$81[$102 := $280]} | |
fgCurMemoryVN[GcHeap] assigned for StoreField at [000021] to VN: $281. | |
N011 [000021] ASG => $VN.Void | |
***** BB02, STMT00003(after) | |
N011 ( 11, 11) [000021] -A-XG---R--- * ASG int $VN.Void | |
N010 ( 4, 4) [000020] D--XG--N---- +--* IND int $153 | |
N009 ( 2, 2) [000093] -------N---- | \--* ADD byref $c2 | |
N007 ( 1, 1) [000015] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N008 ( 1, 1) [000092] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N006 ( 6, 6) [000019] ---XG------- \--* ADD int <l:$155, c:$154> | |
N004 ( 4, 4) [000017] ---XG------- +--* IND int <l:$151, c:$150> | |
N003 ( 2, 2) [000095] -------N---- | \--* ADD byref $c2 | |
N001 ( 1, 1) [000016] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000094] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N005 ( 1, 1) [000018] ------------ \--* CNS_INT int 1 $45 | |
--------- | |
***** BB02, STMT00004(before) | |
N006 ( 6, 6) [000025] -A-XG------- * ASG int | |
N004 ( 4, 4) [000024] D--XG--N---- +--* IND int | |
N003 ( 2, 2) [000097] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000022] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000096] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
N005 ( 1, 1) [000023] ------------ \--* LCL_VAR int V01 loc0 u:1 | |
N001 [000022] LCL_VAR V00 this u:1 => $80 {InitVal($40)} | |
N002 [000096] CNS_INT 8 field offset Fseq[_size] => $42 {IntCns 8} | |
N003 [000097] ADD => $c0 {ADD($42, $80)} | |
N005 [000023] LCL_VAR V01 loc0 u:1 => <l:$145 {ADD($41, $141)}, c:$144 {ADD($41, $180)}> | |
VNApplySelectors: | |
VNForHandle(_size) is $100, fieldType is int | |
AX2: $100 != $102 ==> select([$281]store($81, $102, $280), $100) ==> select($81, $100). | |
VNForMapSelect($281, $100):int returns $140 {$81[$100]} | |
VNForMapSelect($140, $80):int returns $141 {$140[$80]} | |
VNForMapStore($140, $80, $145):int returns $282 {$140[$80 := $145]} | |
VNApplySelectorsAssign: | |
VNForHandle(_size) is $100, fieldType is int | |
VNForMapStore($281, $100, $282):int returns $283 {$281[$100 := $282]} | |
fgCurMemoryVN[GcHeap] assigned for StoreField at [000025] to VN: $283. | |
N006 [000025] ASG => $VN.Void | |
***** BB02, STMT00004(after) | |
N006 ( 6, 6) [000025] -A-XG------- * ASG int $VN.Void | |
N004 ( 4, 4) [000024] D--XG--N---- +--* IND int $145 | |
N003 ( 2, 2) [000097] -------N---- | \--* ADD byref $c0 | |
N001 ( 1, 1) [000022] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000096] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] $42 | |
N005 ( 1, 1) [000023] ------------ \--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
--------- | |
***** BB02, STMT00005(before) | |
N017 ( 24, 25) [000125] -A-XG---R--- * ASG ref | |
N016 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 | |
N015 ( 20, 22) [000124] ---XG------- \--* IND ref | |
N014 ( 17, 20) [000110] ---XG------- \--* COMMA byref Zero Fseq[Value] | |
N004 ( 8, 11) [000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void | |
N001 ( 1, 1) [000113] ------------ | +--* LCL_VAR int V01 loc0 u:1 | |
N003 ( 3, 3) [000111] ---X-------- | \--* ARR_LENGTH int | |
N002 ( 1, 1) [000112] ------------ | \--* LCL_VAR ref V02 loc1 u:1 | |
N013 ( 9, 9) [000115] ----G------- \--* ADDR byref | |
N012 ( 5, 5) [000116] a---G--N---- \--* IND struct | |
N011 ( 4, 4) [000117] -------N---- \--* ADD byref | |
N005 ( 1, 1) [000118] ------------ +--* LCL_VAR ref V02 loc1 u:1 | |
N010 ( 3, 3) [000119] -------N---- \--* ADD int | |
N008 ( 2, 2) [000120] -------N---- +--* LSH int | |
N006 ( 1, 1) [000121] i----------- | +--* LCL_VAR int V01 loc0 u:1 | |
N007 ( 1, 1) [000122] -------N---- | \--* CNS_INT int 2 | |
N009 ( 1, 1) [000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
N001 [000113] LCL_VAR V01 loc0 u:1 => <l:$145 {ADD($41, $141)}, c:$144 {ADD($41, $180)}> | |
N002 [000112] LCL_VAR V02 loc1 u:1 => <l:$1c2 {$1c1[$80]}, c:$200 {200}> | |
N003 [000111] ARR_LENGTH => <l:$149 {norm=$241 {ARR_LENGTH($1c2)}, exc=$1c6 {NullPtrExc($1c2)}}, c:$148 {norm=$240 {ARR_LENGTH($200)}, exc=$1c5 {NullPtrExc($200)}}> | |
N004 [000114] ARR_BOUNDS_CHECK_Rng => <l:$1d0 {norm=$3 {3}, exc=$1ce( {NullPtrExc($1c2)}, {IndexOutOfRangeExc($145, $241)})}, c:$1cf {norm=$3 {3}, exc=$1cd( {NullPtrExc($200)}, {IndexOutOfRangeExc($144, $240)})}> | |
N005 [000118] LCL_VAR V02 loc1 u:1 => <l:$1c2 {$1c1[$80]}, c:$200 {200}> | |
N006 [000121] LCL_VAR V01 loc0 u:1 => <l:$145 {ADD($41, $141)}, c:$144 {ADD($41, $180)}> | |
N007 [000122] CNS_INT 2 => $46 {IntCns 2} | |
N008 [000120] LSH => <l:$157 {LSH($145, $46)}, c:$156 {LSH($144, $46)}> | |
N009 [000123] CNS_INT 8 Fseq[#FirstElem] => $42 {IntCns 8} | |
N010 [000119] ADD => <l:$159 {ADD($42, $157)}, c:$158 {ADD($42, $156)}> | |
N011 [000117] ADD => <l:$c4 {ADD($159, $1c2)}, c:$c3 {ADD($158, $200)}> | |
VNForHandle(arrElemType: RefAsValueType`1) is $103 | |
Relabeled IND_ARR_INDEX address node [000117] with l:$300: {PtrToArrElem($103, $1c2, $145, $0)} | |
AX2: $103 != $100 ==> select([$283]store($281, $100, $282), $103) ==> select($281, $103). | |
AX2: $103 != $102 ==> select([$281]store($81, $102, $280), $103) ==> select($81, $103). | |
VNForMapSelect($283, $103):ref returns $1d1 {$81[$103]} | |
VNForMapSelect($1d1, $1c2):ref returns $1d2 {$1d1[$1c2]} | |
VNForMapSelect($1d2, $145):struct returns $340 {$1d2[$145]} | |
hAtArrType $1d1 is MapSelect(curGcHeap($283), RefAsValueType`1[]). | |
hAtArrTypeAtArr $1d2 is MapSelect(hAtArrType($1d1), arr=$1c2). | |
wholeElem $340 is MapSelect(hAtArrTypeAtArr($1d2), ind=$145). | |
N012 [000116] IND => <l:$340 {$1d2[$145]}, c:$380 {380}> | |
N013 [000115] ADDR => $300 {PtrToArrElem($103, $1c2, $145, $0)} | |
N014 [000110] COMMA => <l:$c6 {norm=$300 {PtrToArrElem($103, $1c2, $145, $0)}, exc=$1ce( {NullPtrExc($1c2)}, {IndexOutOfRangeExc($145, $241)})}, c:$c5 {norm=$300 {PtrToArrElem($103, $1c2, $145, $0)}, exc=$1cd( {NullPtrExc($200)}, {IndexOutOfRangeExc($144, $240)})}> | |
AX2: $103 != $100 ==> select([$283]store($281, $100, $282), $103) ==> select($281, $103). | |
AX2: $103 != $102 ==> select([$281]store($81, $102, $280), $103) ==> select($81, $103). | |
VNForMapSelect($283, $103):ref returns $1d1 {$81[$103]} | |
VNForMapSelect($1d1, $1c2):ref returns $1d2 {$1d1[$1c2]} | |
VNForMapSelect($1d2, $145):struct returns $340 {$1d2[$145]} | |
hAtArrType $1d1 is MapSelect(curGcHeap($283), RefAsValueType`1[]). | |
hAtArrTypeAtArr $1d2 is MapSelect(hAtArrType($1d1), arr=$1c2). | |
wholeElem $340 is MapSelect(hAtArrTypeAtArr($1d2), ind=$145). | |
selectedElem is $341 after applying selectors. | |
N015 [000124] IND => <l:$341 {norm=$340 {$1d2[$145]}, exc=$1ce( {NullPtrExc($1c2)}, {IndexOutOfRangeExc($145, $241)})}, c:$204 {204}> | |
N016 [000109] LCL_VAR V07 tmp2 d:1 => <l:$340 {$1d2[$145]}, c:$204 {204}> | |
N017 [000125] ASG => <l:$341 {norm=$340 {$1d2[$145]}, exc=$1ce( {NullPtrExc($1c2)}, {IndexOutOfRangeExc($145, $241)})}, c:$204 {204}> | |
***** BB02, STMT00005(after) | |
N017 ( 24, 25) [000125] -A-XG---R--- * ASG ref <l:$341, c:$204> | |
N016 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 <l:$340, c:$204> | |
N015 ( 20, 22) [000124] ---XG------- \--* IND ref <l:$341, c:$204> | |
N014 ( 17, 20) [000110] ---XG------- \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N004 ( 8, 11) [000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
N001 ( 1, 1) [000113] ------------ | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 3, 3) [000111] ---X-------- | \--* ARR_LENGTH int <l:$149, c:$148> | |
N002 ( 1, 1) [000112] ------------ | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N013 ( 9, 9) [000115] ----G------- \--* ADDR byref $300 | |
N012 ( 5, 5) [000116] a---G--N---- \--* IND struct <l:$340, c:$380> | |
N011 ( 4, 4) [000117] -------N---- \--* ADD byref $300 | |
N005 ( 1, 1) [000118] ------------ +--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N010 ( 3, 3) [000119] -------N---- \--* ADD int <l:$159, c:$158> | |
N008 ( 2, 2) [000120] -------N---- +--* LSH int <l:$157, c:$156> | |
N006 ( 1, 1) [000121] i----------- | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N007 ( 1, 1) [000122] -------N---- | \--* CNS_INT int 2 $46 | |
N009 ( 1, 1) [000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
--------- | |
***** BB02, STMT00006(before) | |
N004 ( 3, 3) [000038] -A---O--R--- * ASG int | |
N003 ( 1, 1) [000037] D------N---- +--* LCL_VAR int V05 tmp0 d:1 | |
N002 ( 3, 2) [000036] #----O------ \--* IND int | |
N001 ( 1, 1) [000035] ------------ \--* LCL_VAR ref V00 this u:1 (last use) | |
N001 [000035] LCL_VAR V00 this u:1 (last use) => $80 {InitVal($40)} | |
VNForMapSelect($2, $80):ref returns $1d3 {$VN.ReadOnlyHeap[$80]} | |
VNForMapSelect($2, $80):ref returns $1d3 {$VN.ReadOnlyHeap[$80]} | |
N002 [000036] IND => $1d3 {$VN.ReadOnlyHeap[$80]} | |
N003 [000037] LCL_VAR V05 tmp0 d:1 => $1d3 {$VN.ReadOnlyHeap[$80]} | |
N004 [000038] ASG => $1d3 {$VN.ReadOnlyHeap[$80]} | |
***** BB02, STMT00006(after) | |
N004 ( 3, 3) [000038] -A---O--R--- * ASG int $1d3 | |
N003 ( 1, 1) [000037] D------N---- +--* LCL_VAR int V05 tmp0 d:1 $1d3 | |
N002 ( 3, 2) [000036] #----O------ \--* IND int $1d3 | |
N001 ( 1, 1) [000035] ------------ \--* LCL_VAR ref V00 this u:1 (last use) $80 | |
--------- | |
***** BB02, STMT00014(before) | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
N010 ( 12, 11) [000051] J------N---- \--* EQ int | |
N008 ( 10, 9) [000047] n----------- +--* IND int | |
N007 ( 8, 7) [000046] -------N---- | \--* ADD int | |
N005 ( 7, 6) [000044] #----------- | +--* IND int | |
N004 ( 4, 4) [000043] #----------- | | \--* IND int | |
N003 ( 2, 2) [000042] -------N---- | | \--* ADD int | |
N001 ( 1, 1) [000040] ------------ | | +--* LCL_VAR int V05 tmp0 u:1 (last use) | |
N002 ( 1, 1) [000041] ------------ | | \--* CNS_INT int 32 | |
N006 ( 1, 1) [000045] ------------ | \--* CNS_INT int 12 | |
N009 ( 1, 1) [000050] ------------ \--* CNS_INT int 0 | |
N001 [000040] LCL_VAR V05 tmp0 u:1 (last use) => $1d3 {$VN.ReadOnlyHeap[$80]} | |
N002 [000041] CNS_INT 32 => $47 {IntCns 32} | |
N003 [000042] ADD => $15b {ADD($47, $1d3)} | |
VNForMapSelect($2, $15b):ref returns $1d4 {$VN.ReadOnlyHeap[$15b]} | |
VNForMapSelect($2, $15b):ref returns $1d4 {$VN.ReadOnlyHeap[$15b]} | |
N004 [000043] IND => $1d4 {$VN.ReadOnlyHeap[$15b]} | |
VNForMapSelect($2, $1d4):ref returns $1d5 {$VN.ReadOnlyHeap[$1d4]} | |
VNForMapSelect($2, $1d4):ref returns $1d5 {$VN.ReadOnlyHeap[$1d4]} | |
N005 [000044] IND => $1d5 {$VN.ReadOnlyHeap[$1d4]} | |
N006 [000045] CNS_INT 12 => $44 {IntCns 12} | |
N007 [000046] ADD => $15c {ADD($44, $1d5)} | |
N008 [000047] IND => <l:$284 {ByrefExposedLoad($48, $15c, $283)}, c:$184 {184}> | |
N009 [000050] CNS_INT 0 => $40 {IntCns 0} | |
N010 [000051] EQ => <l:$15e {EQ($284, $40)}, c:$15d {EQ($184, $40)}> | |
***** BB02, STMT00014(after) | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
N010 ( 12, 11) [000051] J------N---- \--* EQ int <l:$15e, c:$15d> | |
N008 ( 10, 9) [000047] n----------- +--* IND int <l:$284, c:$184> | |
N007 ( 8, 7) [000046] -------N---- | \--* ADD int $15c | |
N005 ( 7, 6) [000044] #----------- | +--* IND int $1d5 | |
N004 ( 4, 4) [000043] #----------- | | \--* IND int $1d4 | |
N003 ( 2, 2) [000042] -------N---- | | \--* ADD int $15b | |
N001 ( 1, 1) [000040] ------------ | | +--* LCL_VAR int V05 tmp0 u:1 (last use) $1d3 | |
N002 ( 1, 1) [000041] ------------ | | \--* CNS_INT int 32 $47 | |
N006 ( 1, 1) [000045] ------------ | \--* CNS_INT int 12 $44 | |
N009 ( 1, 1) [000050] ------------ \--* CNS_INT int 0 $40 | |
finish(BB02). | |
Succ(BB03). | |
Not yet completed. | |
All preds complete, adding to allDone. | |
Succ(BB04). | |
Not yet completed. | |
All preds complete, adding to allDone. | |
The SSA definition for ByrefExposed (#3) at start of BB04 is $283 {$281[$100 := $282]} | |
The SSA definition for GcHeap (#3) at start of BB04 is $283 {$281[$100 := $282]} | |
finish(BB04). | |
Succ(BB05). | |
Not yet completed. | |
Not all preds complete Adding to notallDone, if necessary... | |
Was necessary. | |
The SSA definition for ByrefExposed (#3) at start of BB03 is $283 {$281[$100 := $282]} | |
The SSA definition for GcHeap (#3) at start of BB03 is $283 {$281[$100 := $282]} | |
finish(BB03). | |
Succ(BB05). | |
Not yet completed. | |
All preds complete, adding to allDone. | |
The SSA definition for ByrefExposed (#3) at start of BB05 is $283 {$281[$100 := $282]} | |
The SSA definition for GcHeap (#3) at start of BB05 is $283 {$281[$100 := $282]} | |
***** BB05, STMT00011(before) | |
N003 ( 5, 4) [000130] -A------R--- * ASG ref | |
N002 ( 3, 2) [000128] D------N---- +--* LCL_VAR ref V08 tmp3 d:1 | |
N001 ( 1, 1) [000129] ------------ \--* CNS_INT ref null | |
N001 [000129] CNS_INT null => $VN.Null | |
N002 [000128] LCL_VAR V08 tmp3 d:1 => $VN.Null | |
N003 [000130] ASG => $VN.Null | |
***** BB05, STMT00011(after) | |
N003 ( 5, 4) [000130] -A------R--- * ASG ref $VN.Null | |
N002 ( 3, 2) [000128] D------N---- +--* LCL_VAR ref V08 tmp3 d:1 $VN.Null | |
N001 ( 1, 1) [000129] ------------ \--* CNS_INT ref null $VN.Null | |
--------- | |
***** BB05, STMT00012(before) | |
N017 ( 24, 25) [000159] -A-XG------- * ASG ref | |
N015 ( 20, 22) [000157] *--XG--N---- +--* IND ref | |
N014 ( 17, 20) [000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] | |
N004 ( 8, 11) [000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void | |
N001 ( 1, 1) [000146] ------------ | | +--* LCL_VAR int V01 loc0 u:1 | |
N003 ( 3, 3) [000144] ---X-------- | | \--* ARR_LENGTH int | |
N002 ( 1, 1) [000145] ------------ | | \--* LCL_VAR ref V02 loc1 u:1 | |
N013 ( 9, 9) [000148] ---XG------- | \--* ADDR byref | |
N012 ( 5, 5) [000149] a--XG------- | \--* IND struct | |
N011 ( 4, 4) [000150] -------N---- | \--* ADD byref | |
N005 ( 1, 1) [000151] ------------ | +--* LCL_VAR ref V02 loc1 u:1 (last use) | |
N010 ( 3, 3) [000152] -------N---- | \--* ADD int | |
N008 ( 2, 2) [000153] -------N---- | +--* LSH int | |
N006 ( 1, 1) [000154] i----------- | | +--* LCL_VAR int V01 loc0 u:1 (last use) | |
N007 ( 1, 1) [000155] -------N---- | | \--* CNS_INT int 2 | |
N009 ( 1, 1) [000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
N016 ( 3, 2) [000158] ------------ \--* LCL_VAR ref V08 tmp3 u:1 (last use) | |
N001 [000146] LCL_VAR V01 loc0 u:1 => <l:$145 {ADD($41, $141)}, c:$144 {ADD($41, $180)}> | |
N002 [000145] LCL_VAR V02 loc1 u:1 => <l:$1c2 {$1c1[$80]}, c:$200 {200}> | |
N003 [000144] ARR_LENGTH => <l:$149 {norm=$241 {ARR_LENGTH($1c2)}, exc=$1c6 {NullPtrExc($1c2)}}, c:$148 {norm=$240 {ARR_LENGTH($200)}, exc=$1c5 {NullPtrExc($200)}}> | |
N004 [000147] ARR_BOUNDS_CHECK_Rng => <l:$1d0 {norm=$3 {3}, exc=$1ce( {NullPtrExc($1c2)}, {IndexOutOfRangeExc($145, $241)})}, c:$1cf {norm=$3 {3}, exc=$1cd( {NullPtrExc($200)}, {IndexOutOfRangeExc($144, $240)})}> | |
N005 [000151] LCL_VAR V02 loc1 u:1 (last use) => <l:$1c2 {$1c1[$80]}, c:$200 {200}> | |
N006 [000154] LCL_VAR V01 loc0 u:1 (last use) => <l:$145 {ADD($41, $141)}, c:$144 {ADD($41, $180)}> | |
N007 [000155] CNS_INT 2 => $46 {IntCns 2} | |
N008 [000153] LSH => <l:$157 {LSH($145, $46)}, c:$156 {LSH($144, $46)}> | |
N009 [000156] CNS_INT 8 Fseq[#FirstElem] => $42 {IntCns 8} | |
N010 [000152] ADD => <l:$159 {ADD($42, $157)}, c:$158 {ADD($42, $156)}> | |
N011 [000150] ADD => <l:$c4 {ADD($159, $1c2)}, c:$c3 {ADD($158, $200)}> | |
VNForHandle(arrElemType: RefAsValueType`1) is $103 | |
Relabeled IND_ARR_INDEX address node [000150] with l:$300: {PtrToArrElem($103, $1c2, $145, $0)} | |
AX2: $103 != $100 ==> select([$283]store($281, $100, $282), $103) ==> select($281, $103). | |
AX2: $103 != $102 ==> select([$281]store($81, $102, $280), $103) ==> select($81, $103). | |
VNForMapSelect($283, $103):ref returns $1d1 {$81[$103]} | |
VNForMapSelect($1d1, $1c2):ref returns $1d2 {$1d1[$1c2]} | |
VNForMapSelect($1d2, $145):struct returns $340 {$1d2[$145]} | |
hAtArrType $1d1 is MapSelect(curGcHeap($283), RefAsValueType`1[]). | |
hAtArrTypeAtArr $1d2 is MapSelect(hAtArrType($1d1), arr=$1c2). | |
wholeElem $340 is MapSelect(hAtArrTypeAtArr($1d2), ind=$145). | |
N012 [000149] IND => <l:$343 {norm=$340 {$1d2[$145]}, exc=$1d6 {NullPtrExc($300)}}, c:$342 {norm=$381 {381}, exc=$1d6 {NullPtrExc($300)}}> | |
N013 [000148] ADDR => $300 {PtrToArrElem($103, $1c2, $145, $0)} | |
N014 [000143] COMMA => <l:$c6 {norm=$300 {PtrToArrElem($103, $1c2, $145, $0)}, exc=$1ce( {NullPtrExc($1c2)}, {IndexOutOfRangeExc($145, $241)})}, c:$c5 {norm=$300 {PtrToArrElem($103, $1c2, $145, $0)}, exc=$1cd( {NullPtrExc($200)}, {IndexOutOfRangeExc($144, $240)})}> | |
N016 [000158] LCL_VAR V08 tmp3 u:1 (last use) => $VN.Null | |
Tree [000159] assigns to an array element: | |
AX2: $103 != $100 ==> select([$283]store($281, $100, $282), $103) ==> select($281, $103). | |
AX2: $103 != $102 ==> select([$281]store($81, $102, $280), $103) ==> select($81, $103). | |
VNForMapSelect($283, $103):ref returns $1d1 {$81[$103]} | |
VNForMapSelect($1d1, $1c2):ref returns $1d2 {$1d1[$1c2]} | |
VNForMapSelect($1d2, $145):struct returns $340 {$1d2[$145]} | |
*** Mismatched types in fgValueNumberArrIndexAssign | |
hAtArrType $1d1 is MapSelect(curGcHeap($283), RefAsValueType`1[]). | |
hAtArrTypeAtArr $1d2 is MapSelect(hAtArrType($1d1), arr=$1c2) | |
hAtArrTypeAtArrAtInx $340 is MapSelect(hAtArrTypeAtArr($1d2), inx=$145):struct | |
newValAtArrType $207 is {207} | |
VNForMapStore($283, $103, $207):ref returns $3c0 {$283[$103 := $207]} | |
fgCurMemoryVN[GcHeap] assigned for ArrIndexAssign (case 1) at [000159] to VN: $3c0. | |
N017 [000159] ASG => $VN.Void | |
***** BB05, STMT00012(after) | |
N017 ( 24, 25) [000159] -A-XG------- * ASG ref $VN.Void | |
N015 ( 20, 22) [000157] *--XG--N---- +--* IND ref $VN.Null | |
N014 ( 17, 20) [000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N004 ( 8, 11) [000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
N001 ( 1, 1) [000146] ------------ | | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 3, 3) [000144] ---X-------- | | \--* ARR_LENGTH int <l:$149, c:$148> | |
N002 ( 1, 1) [000145] ------------ | | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N013 ( 9, 9) [000148] ---XG------- | \--* ADDR byref $300 | |
N012 ( 5, 5) [000149] a--XG------- | \--* IND struct <l:$343, c:$342> | |
N011 ( 4, 4) [000150] -------N---- | \--* ADD byref $300 | |
N005 ( 1, 1) [000151] ------------ | +--* LCL_VAR ref V02 loc1 u:1 (last use) <l:$1c2, c:$200> | |
N010 ( 3, 3) [000152] -------N---- | \--* ADD int <l:$159, c:$158> | |
N008 ( 2, 2) [000153] -------N---- | +--* LSH int <l:$157, c:$156> | |
N006 ( 1, 1) [000154] i----------- | | +--* LCL_VAR int V01 loc0 u:1 (last use) <l:$145, c:$144> | |
N007 ( 1, 1) [000155] -------N---- | | \--* CNS_INT int 2 $46 | |
N009 ( 1, 1) [000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
N016 ( 3, 2) [000158] ------------ \--* LCL_VAR ref V08 tmp3 u:1 (last use) $VN.Null | |
--------- | |
***** BB05, STMT00010(before) | |
N002 ( 4, 3) [000071] ------------ * RETURN ref | |
N001 ( 3, 2) [000070] ------------ \--* LCL_VAR ref V07 tmp2 u:1 (last use) | |
N001 [000070] LCL_VAR V07 tmp2 u:1 (last use) => <l:$340 {$1d2[$145]}, c:$204 {204}> | |
N002 [000071] RETURN => $208 {208} | |
***** BB05, STMT00010(after) | |
N002 ( 4, 3) [000071] ------------ * RETURN ref $208 | |
N001 ( 3, 2) [000070] ------------ \--* LCL_VAR ref V07 tmp2 u:1 (last use) <l:$340, c:$204> | |
finish(BB05). | |
*************** Finishing PHASE Do value numbering | |
*************** Starting PHASE Hoist loop code | |
*************** Finishing PHASE Hoist loop code | |
*************** Starting PHASE VN based copy prop | |
*************** In optVnCopyProp() | |
Copy Assertion for BB01 | |
curSsaName stack: { } | |
Live vars: {V00} => {V00 V01} | |
Live vars: {V00 V01} => {V00 V01 V02} | |
Copy Assertion for BB06 | |
curSsaName stack: { 0-[000000]:V00 1-[000004]:V01 2-[000008]:V02 } | |
Live vars: {V00} => {} | |
Copy Assertion for BB02 | |
curSsaName stack: { 0-[000000]:V00 1-[000004]:V01 2-[000008]:V02 } | |
Live vars: {V00 V01 V02} => {V00 V01 V02 V07} | |
Live vars: {V00 V01 V02 V07} => {V01 V02 V07} | |
Live vars: {V01 V02 V07} => {V01 V02 V05 V07} | |
Live vars: {V01 V02 V05 V07} => {V01 V02 V07} | |
Copy Assertion for BB05 | |
curSsaName stack: { 0-[000000]:V00 1-[000004]:V01 2-[000008]:V02 5-[000037]:V05 7-[000109]:V07 } | |
Live vars: {V01 V02 V07} => {V01 V02 V07 V08} | |
Live vars: {V01 V02 V07 V08} => {V01 V07 V08} | |
Live vars: {V01 V07 V08} => {V07 V08} | |
Live vars: {V07 V08} => {V07} | |
Live vars: {V07} => {} | |
Copy Assertion for BB04 | |
curSsaName stack: { 0-[000000]:V00 1-[000004]:V01 2-[000008]:V02 5-[000037]:V05 7-[000109]:V07 } | |
Copy Assertion for BB03 | |
curSsaName stack: { 0-[000000]:V00 1-[000004]:V01 2-[000008]:V02 5-[000037]:V05 7-[000109]:V07 } | |
*************** Finishing PHASE VN based copy prop | |
*************** Starting PHASE Optimize Valnum CSEs | |
*************** In optOptimizeCSEs() | |
Blocks/Trees at start of optOptimizeCSE phase | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB06 ( cond ) i label target idxlen | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen | |
BB03 [0009] 1 BB02 0.25 [???..???)-> BB05 (always) i | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
***** BB01 | |
STMT00000 (IL 0x000...0x008) | |
N008 ( 6, 6) [000005] -A-XG---R--- * ASG int <l:$147, c:$146> | |
N007 ( 1, 1) [000004] D------N---- +--* LCL_VAR int V01 loc0 d:1 <l:$145, c:$144> | |
N006 ( 6, 6) [000003] ---XG------- \--* ADD int <l:$147, c:$146> | |
N004 ( 4, 4) [000001] ---XG------- +--* IND int <l:$143, c:$142> | |
N003 ( 2, 2) [000088] -------N---- | \--* ADD byref $c0 | |
N001 ( 1, 1) [000000] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000087] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] $42 | |
N005 ( 1, 1) [000002] ------------ \--* CNS_INT int -1 $41 | |
***** BB01 | |
STMT00001 (IL 0x009...0x00F) | |
N006 ( 4, 4) [000009] -A-XG---R--- * ASG ref <l:$1c4, c:$1c3> | |
N005 ( 1, 1) [000008] D------N---- +--* LCL_VAR ref V02 loc1 d:1 <l:$1c2, c:$200> | |
N004 ( 4, 4) [000007] ---XG------- \--* IND ref <l:$1c4, c:$1c3> | |
N003 ( 2, 2) [000090] -------N---- \--* ADD byref $c1 | |
N001 ( 1, 1) [000006] ------------ +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000089] ------------ \--* CNS_INT int 4 field offset Fseq[_array] $43 | |
***** BB01 | |
STMT00002 (IL 0x010...0x014) | |
N005 ( 7, 7) [000014] ---X-------- * JTRUE void | |
N004 ( 5, 5) [000013] N--X---N-U-- \--* LE int <l:$14d, c:$14c> | |
N002 ( 3, 3) [000012] ---X-------- +--* ARR_LENGTH int <l:$149, c:$148> | |
N001 ( 1, 1) [000011] ------------ | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N003 ( 1, 1) [000010] ------------ \--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
------------ BB02 [01C..040) -> BB04 (cond), preds={BB01} succs={BB03,BB04} | |
***** BB02 | |
STMT00003 (IL 0x01C...0x025) | |
N011 ( 11, 11) [000021] -A-XG---R--- * ASG int $VN.Void | |
N010 ( 4, 4) [000020] D--XG--N---- +--* IND int $153 | |
N009 ( 2, 2) [000093] -------N---- | \--* ADD byref $c2 | |
N007 ( 1, 1) [000015] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N008 ( 1, 1) [000092] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N006 ( 6, 6) [000019] ---XG------- \--* ADD int <l:$155, c:$154> | |
N004 ( 4, 4) [000017] ---XG------- +--* IND int <l:$151, c:$150> | |
N003 ( 2, 2) [000095] -------N---- | \--* ADD byref $c2 | |
N001 ( 1, 1) [000016] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000094] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N005 ( 1, 1) [000018] ------------ \--* CNS_INT int 1 $45 | |
***** BB02 | |
STMT00004 (IL 0x02A...0x02C) | |
N006 ( 6, 6) [000025] -A-XG------- * ASG int $VN.Void | |
N004 ( 4, 4) [000024] D--XG--N---- +--* IND int $145 | |
N003 ( 2, 2) [000097] -------N---- | \--* ADD byref $c0 | |
N001 ( 1, 1) [000022] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000096] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] $42 | |
N005 ( 1, 1) [000023] ------------ \--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
***** BB02 | |
STMT00005 (IL 0x031...0x038) | |
N017 ( 24, 25) [000125] -A-XG---R--- * ASG ref <l:$341, c:$204> | |
N016 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 <l:$340, c:$204> | |
N015 ( 20, 22) [000124] ---XG------- \--* IND ref <l:$341, c:$204> | |
N014 ( 17, 20) [000110] ---XG------- \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N004 ( 8, 11) [000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
N001 ( 1, 1) [000113] ------------ | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 3, 3) [000111] ---X-------- | \--* ARR_LENGTH int <l:$149, c:$148> | |
N002 ( 1, 1) [000112] ------------ | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N013 ( 9, 9) [000115] ----G------- \--* ADDR byref $300 | |
N012 ( 5, 5) [000116] a---G--N---- \--* IND struct <l:$340, c:$380> | |
N011 ( 4, 4) [000117] -------N---- \--* ADD byref $300 | |
N005 ( 1, 1) [000118] ------------ +--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N010 ( 3, 3) [000119] -------N---- \--* ADD int <l:$159, c:$158> | |
N008 ( 2, 2) [000120] -------N---- +--* LSH int <l:$157, c:$156> | |
N006 ( 1, 1) [000121] i----------- | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N007 ( 1, 1) [000122] -------N---- | \--* CNS_INT int 2 $46 | |
N009 ( 1, 1) [000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
***** BB02 | |
STMT00006 (IL 0x039...0x03E) | |
N004 ( 3, 3) [000038] -A---O--R--- * ASG int $1d3 | |
N003 ( 1, 1) [000037] D------N---- +--* LCL_VAR int V05 tmp0 d:1 $1d3 | |
N002 ( 3, 2) [000036] #----O------ \--* IND int $1d3 | |
N001 ( 1, 1) [000035] ------------ \--* LCL_VAR ref V00 this u:1 (last use) $80 | |
***** BB02 | |
STMT00014 (IL ???... ???) | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
N010 ( 12, 11) [000051] J------N---- \--* EQ int <l:$15e, c:$15d> | |
N008 ( 10, 9) [000047] n----------- +--* IND int <l:$284, c:$184> | |
N007 ( 8, 7) [000046] -------N---- | \--* ADD int $15c | |
N005 ( 7, 6) [000044] #----------- | +--* IND int $1d5 | |
N004 ( 4, 4) [000043] #----------- | | \--* IND int $1d4 | |
N003 ( 2, 2) [000042] -------N---- | | \--* ADD int $15b | |
N001 ( 1, 1) [000040] ------------ | | +--* LCL_VAR int V05 tmp0 u:1 (last use) $1d3 | |
N002 ( 1, 1) [000041] ------------ | | \--* CNS_INT int 32 $47 | |
N006 ( 1, 1) [000045] ------------ | \--* CNS_INT int 12 $44 | |
N009 ( 1, 1) [000050] ------------ \--* CNS_INT int 0 $40 | |
------------ BB03 [???..???) -> BB05 (always), preds={BB02} succs={BB05} | |
------------ BB04 [???..???), preds={BB02} succs={BB05} | |
------------ BB05 [040..052) (return), preds={BB04,BB03} succs={} | |
***** BB05 | |
STMT00011 (IL 0x040...0x045) | |
N003 ( 5, 4) [000130] -A------R--- * ASG ref $VN.Null | |
N002 ( 3, 2) [000128] D------N---- +--* LCL_VAR ref V08 tmp3 d:1 $VN.Null | |
N001 ( 1, 1) [000129] ------------ \--* CNS_INT ref null $VN.Null | |
***** BB05 | |
STMT00012 (IL ???...0x04B) | |
N017 ( 24, 25) [000159] -A-XG------- * ASG ref $VN.Void | |
N015 ( 20, 22) [000157] *--XG--N---- +--* IND ref $VN.Null | |
N014 ( 17, 20) [000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N004 ( 8, 11) [000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
N001 ( 1, 1) [000146] ------------ | | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 3, 3) [000144] ---X-------- | | \--* ARR_LENGTH int <l:$149, c:$148> | |
N002 ( 1, 1) [000145] ------------ | | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N013 ( 9, 9) [000148] ---XG------- | \--* ADDR byref $300 | |
N012 ( 5, 5) [000149] a--XG------- | \--* IND struct <l:$343, c:$342> | |
N011 ( 4, 4) [000150] -------N---- | \--* ADD byref $300 | |
N005 ( 1, 1) [000151] ------------ | +--* LCL_VAR ref V02 loc1 u:1 (last use) <l:$1c2, c:$200> | |
N010 ( 3, 3) [000152] -------N---- | \--* ADD int <l:$159, c:$158> | |
N008 ( 2, 2) [000153] -------N---- | +--* LSH int <l:$157, c:$156> | |
N006 ( 1, 1) [000154] i----------- | | +--* LCL_VAR int V01 loc0 u:1 (last use) <l:$145, c:$144> | |
N007 ( 1, 1) [000155] -------N---- | | \--* CNS_INT int 2 $46 | |
N009 ( 1, 1) [000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
N016 ( 3, 2) [000158] ------------ \--* LCL_VAR ref V08 tmp3 u:1 (last use) $VN.Null | |
***** BB05 | |
STMT00010 (IL 0x050...0x051) | |
N002 ( 4, 3) [000071] ------------ * RETURN ref $208 | |
N001 ( 3, 2) [000070] ------------ \--* LCL_VAR ref V07 tmp2 u:1 (last use) <l:$340, c:$204> | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
***** BB06 | |
STMT00013 (IL 0x016...0x017) | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack $VN.Void | |
N002 ( 1, 1) [000082] ------------ this in ecx \--* LCL_VAR ref V00 this u:1 (last use) $80 | |
------------------------------------------------------------------------------------------------------------------- | |
*************** In optOptimizeValnumCSEs() | |
CSE candidate #01, vn=$241 in BB02, [cost= 3, size= 3]: | |
N003 ( 3, 3) CSE #01 (use)[000111] ---X-------- * ARR_LENGTH int <l:$149, c:$148> | |
N002 ( 1, 1) [000112] ------------ \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
CSE candidate #02, vn=$340 in BB05, [cost= 5, size= 5]: | |
N012 ( 5, 5) CSE #02 (use)[000149] a--XG------- * IND struct <l:$343, c:$342> | |
N011 ( 4, 4) [000150] -------N---- \--* ADD byref $300 | |
N005 ( 1, 1) [000151] ------------ +--* LCL_VAR ref V02 loc1 u:1 (last use) <l:$1c2, c:$200> | |
N010 ( 3, 3) [000152] -------N---- \--* ADD int <l:$159, c:$158> | |
N008 ( 2, 2) [000153] -------N---- +--* LSH int <l:$157, c:$156> | |
N006 ( 1, 1) [000154] i----------- | +--* LCL_VAR int V01 loc0 u:1 (last use) <l:$145, c:$144> | |
N007 ( 1, 1) [000155] -------N---- | \--* CNS_INT int 2 $46 | |
N009 ( 1, 1) [000156] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
CSE candidate #03, vn=$c6 in BB05, [cost=17, size=20]: | |
N014 ( 17, 20) CSE #03 (use)[000143] ---XG------- * COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N004 ( 8, 11) [000147] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
N001 ( 1, 1) [000146] ------------ | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 3, 3) CSE #01 (use)[000144] ---X-------- | \--* ARR_LENGTH int <l:$149, c:$148> | |
N002 ( 1, 1) [000145] ------------ | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N013 ( 9, 9) [000148] ---XG------- \--* ADDR byref $300 | |
N012 ( 5, 5) CSE #02 (use)[000149] a--XG------- \--* IND struct <l:$343, c:$342> | |
N011 ( 4, 4) [000150] -------N---- \--* ADD byref $300 | |
N005 ( 1, 1) [000151] ------------ +--* LCL_VAR ref V02 loc1 u:1 (last use) <l:$1c2, c:$200> | |
N010 ( 3, 3) [000152] -------N---- \--* ADD int <l:$159, c:$158> | |
N008 ( 2, 2) [000153] -------N---- +--* LSH int <l:$157, c:$156> | |
N006 ( 1, 1) [000154] i----------- | +--* LCL_VAR int V01 loc0 u:1 (last use) <l:$145, c:$144> | |
N007 ( 1, 1) [000155] -------N---- | \--* CNS_INT int 2 $46 | |
N009 ( 1, 1) [000156] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
Blocks that generate CSE def/uses | |
BB01 cseGen = 00000003 | |
BB02 cseGen = 0000003F | |
BB05 cseGen = 0000003F | |
Performing DataFlow for ValnumCSE's | |
StartMerge BB01 | |
:: cseOut = 0000007F | |
EndMerge BB01 | |
:: cseIn = 00000000 | |
:: cseGen = 00000003 | |
=> cseOut = 00000003 | |
!= preMerge = 0000007F, => true | |
StartMerge BB02 | |
:: cseOut = 0000007F | |
Merge BB02 and BB01 | |
:: cseIn = 0000007F | |
:: cseOut = 0000007F | |
=> cseIn = 00000003 | |
EndMerge BB02 | |
:: cseIn = 00000003 | |
-- cseKill = 00000015 | |
:: cseGen = 0000003F | |
=> cseOut = 0000003F | |
!= preMerge = 0000007F, => true | |
StartMerge BB06 | |
:: cseOut = 0000007F | |
Merge BB06 and BB01 | |
:: cseIn = 0000007F | |
:: cseOut = 0000007F | |
=> cseIn = 00000003 | |
EndMerge BB06 | |
:: cseIn = 00000003 | |
-- cseKill = 00000015 | |
:: cseGen = 00000000 | |
=> cseOut = 00000001 | |
!= preMerge = 0000007F, => true | |
StartMerge BB03 | |
:: cseOut = 0000007F | |
Merge BB03 and BB02 | |
:: cseIn = 0000007F | |
:: cseOut = 0000007F | |
=> cseIn = 0000003F | |
EndMerge BB03 | |
:: cseIn = 0000003F | |
:: cseGen = 00000000 | |
=> cseOut = 0000003F | |
!= preMerge = 0000007F, => true | |
StartMerge BB04 | |
:: cseOut = 0000007F | |
Merge BB04 and BB02 | |
:: cseIn = 0000007F | |
:: cseOut = 0000007F | |
=> cseIn = 0000003F | |
EndMerge BB04 | |
:: cseIn = 0000003F | |
:: cseGen = 00000000 | |
=> cseOut = 0000003F | |
!= preMerge = 0000007F, => true | |
StartMerge BB05 | |
:: cseOut = 0000007F | |
Merge BB05 and BB04 | |
:: cseIn = 0000007F | |
:: cseOut = 0000007F | |
=> cseIn = 0000003F | |
Merge BB05 and BB03 | |
:: cseIn = 0000003F | |
:: cseOut = 0000007F | |
=> cseIn = 0000003F | |
EndMerge BB05 | |
:: cseIn = 0000003F | |
:: cseGen = 0000003F | |
=> cseOut = 0000003F | |
!= preMerge = 0000007F, => true | |
StartMerge BB05 | |
:: cseOut = 0000003F | |
Merge BB05 and BB04 | |
:: cseIn = 0000003F | |
:: cseOut = 0000003F | |
=> cseIn = 0000003F | |
Merge BB05 and BB03 | |
:: cseIn = 0000003F | |
:: cseOut = 0000003F | |
=> cseIn = 0000003F | |
EndMerge BB05 | |
:: cseIn = 0000003F | |
:: cseGen = 0000003F | |
=> cseOut = 0000003F | |
!= preMerge = 0000003F, => false | |
After performing DataFlow for ValnumCSE's | |
BB01 cseIn = 00000000, cseGen = 00000003, cseOut = 00000003 | |
BB02 cseIn = 00000003, cseGen = 0000003F, cseOut = 0000003F | |
BB03 cseIn = 0000003F, cseGen = 00000000, cseOut = 0000003F | |
BB04 cseIn = 0000003F, cseGen = 00000000, cseOut = 0000003F | |
BB05 cseIn = 0000003F, cseGen = 0000003F, cseOut = 0000003F | |
BB06 cseIn = 00000003, cseGen = 00000000, cseOut = 00000001 | |
Labeling the CSEs with Use/Def information | |
BB01 [000012] Def of CSE #01 [weight=1 ] | |
BB02 [000111] Use of CSE #01 [weight=1 ] | |
BB02 [000110] Def of CSE #03 [weight=1 ] | |
BB02 [000124] Def of CSE #02 [weight=1 ] | |
BB05 [000144] Use of CSE #01 [weight=1 ] | |
BB05 [000149] Use of CSE #02 [weight=1 ] | |
NO_CSE - This use has an exception set item that isn't contained in the defs! | |
BB05 [000143] Use of CSE #03 [weight=1 ] | |
************ Trees at start of optValnumCSE_Heuristic() | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
***** BB01 | |
STMT00000 (IL 0x000...0x008) | |
N008 ( 6, 6) [000005] -A-XG---R--- * ASG int <l:$147, c:$146> | |
N007 ( 1, 1) [000004] D------N---- +--* LCL_VAR int V01 loc0 d:1 <l:$145, c:$144> | |
N006 ( 6, 6) [000003] ---XG------- \--* ADD int <l:$147, c:$146> | |
N004 ( 4, 4) [000001] ---XG------- +--* IND int <l:$143, c:$142> | |
N003 ( 2, 2) [000088] -------N---- | \--* ADD byref $c0 | |
N001 ( 1, 1) [000000] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000087] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] $42 | |
N005 ( 1, 1) [000002] ------------ \--* CNS_INT int -1 $41 | |
***** BB01 | |
STMT00001 (IL 0x009...0x00F) | |
N006 ( 4, 4) [000009] -A-XG---R--- * ASG ref <l:$1c4, c:$1c3> | |
N005 ( 1, 1) [000008] D------N---- +--* LCL_VAR ref V02 loc1 d:1 <l:$1c2, c:$200> | |
N004 ( 4, 4) [000007] ---XG------- \--* IND ref <l:$1c4, c:$1c3> | |
N003 ( 2, 2) [000090] -------N---- \--* ADD byref $c1 | |
N001 ( 1, 1) [000006] ------------ +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000089] ------------ \--* CNS_INT int 4 field offset Fseq[_array] $43 | |
***** BB01 | |
STMT00002 (IL 0x010...0x014) | |
N005 ( 7, 7) [000014] ---X-------- * JTRUE void | |
N004 ( 5, 5) [000013] N--X---N-U-- \--* LE int <l:$14d, c:$14c> | |
N002 ( 3, 3) CSE #01 (def)[000012] ---X-------- +--* ARR_LENGTH int <l:$149, c:$148> | |
N001 ( 1, 1) [000011] ------------ | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N003 ( 1, 1) [000010] ------------ \--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
------------ BB02 [01C..040) -> BB04 (cond), preds={BB01} succs={BB03,BB04} | |
***** BB02 | |
STMT00003 (IL 0x01C...0x025) | |
N011 ( 11, 11) [000021] -A-XG---R--- * ASG int $VN.Void | |
N010 ( 4, 4) [000020] D--XG--N---- +--* IND int $153 | |
N009 ( 2, 2) [000093] -------N---- | \--* ADD byref $c2 | |
N007 ( 1, 1) [000015] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N008 ( 1, 1) [000092] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N006 ( 6, 6) [000019] ---XG------- \--* ADD int <l:$155, c:$154> | |
N004 ( 4, 4) [000017] ---XG------- +--* IND int <l:$151, c:$150> | |
N003 ( 2, 2) [000095] -------N---- | \--* ADD byref $c2 | |
N001 ( 1, 1) [000016] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000094] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N005 ( 1, 1) [000018] ------------ \--* CNS_INT int 1 $45 | |
***** BB02 | |
STMT00004 (IL 0x02A...0x02C) | |
N006 ( 6, 6) [000025] -A-XG------- * ASG int $VN.Void | |
N004 ( 4, 4) [000024] D--XG--N---- +--* IND int $145 | |
N003 ( 2, 2) [000097] -------N---- | \--* ADD byref $c0 | |
N001 ( 1, 1) [000022] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000096] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] $42 | |
N005 ( 1, 1) [000023] ------------ \--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
***** BB02 | |
STMT00005 (IL 0x031...0x038) | |
N017 ( 24, 25) [000125] -A-XG---R--- * ASG ref <l:$341, c:$204> | |
N016 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 <l:$340, c:$204> | |
N015 ( 20, 22) CSE #02 (def)[000124] ---XG------- \--* IND ref <l:$341, c:$204> | |
N014 ( 17, 20) CSE #03 (def)[000110] ---XG------- \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N004 ( 8, 11) [000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
N001 ( 1, 1) [000113] ------------ | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 3, 3) CSE #01 (use)[000111] ---X-------- | \--* ARR_LENGTH int <l:$149, c:$148> | |
N002 ( 1, 1) [000112] ------------ | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N013 ( 9, 9) [000115] ----G------- \--* ADDR byref $300 | |
N012 ( 5, 5) [000116] a---G--N---- \--* IND struct <l:$340, c:$380> | |
N011 ( 4, 4) [000117] -------N---- \--* ADD byref $300 | |
N005 ( 1, 1) [000118] ------------ +--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N010 ( 3, 3) [000119] -------N---- \--* ADD int <l:$159, c:$158> | |
N008 ( 2, 2) [000120] -------N---- +--* LSH int <l:$157, c:$156> | |
N006 ( 1, 1) [000121] i----------- | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N007 ( 1, 1) [000122] -------N---- | \--* CNS_INT int 2 $46 | |
N009 ( 1, 1) [000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
***** BB02 | |
STMT00006 (IL 0x039...0x03E) | |
N004 ( 3, 3) [000038] -A---O--R--- * ASG int $1d3 | |
N003 ( 1, 1) [000037] D------N---- +--* LCL_VAR int V05 tmp0 d:1 $1d3 | |
N002 ( 3, 2) [000036] #----O------ \--* IND int $1d3 | |
N001 ( 1, 1) [000035] ------------ \--* LCL_VAR ref V00 this u:1 (last use) $80 | |
***** BB02 | |
STMT00014 (IL ???... ???) | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
N010 ( 12, 11) [000051] J------N---- \--* EQ int <l:$15e, c:$15d> | |
N008 ( 10, 9) [000047] n----------- +--* IND int <l:$284, c:$184> | |
N007 ( 8, 7) [000046] -------N---- | \--* ADD int $15c | |
N005 ( 7, 6) [000044] #----------- | +--* IND int $1d5 | |
N004 ( 4, 4) [000043] #----------- | | \--* IND int $1d4 | |
N003 ( 2, 2) [000042] -------N---- | | \--* ADD int $15b | |
N001 ( 1, 1) [000040] ------------ | | +--* LCL_VAR int V05 tmp0 u:1 (last use) $1d3 | |
N002 ( 1, 1) [000041] ------------ | | \--* CNS_INT int 32 $47 | |
N006 ( 1, 1) [000045] ------------ | \--* CNS_INT int 12 $44 | |
N009 ( 1, 1) [000050] ------------ \--* CNS_INT int 0 $40 | |
------------ BB03 [???..???) -> BB05 (always), preds={BB02} succs={BB05} | |
------------ BB04 [???..???), preds={BB02} succs={BB05} | |
------------ BB05 [040..052) (return), preds={BB04,BB03} succs={} | |
***** BB05 | |
STMT00011 (IL 0x040...0x045) | |
N003 ( 5, 4) [000130] -A------R--- * ASG ref $VN.Null | |
N002 ( 3, 2) [000128] D------N---- +--* LCL_VAR ref V08 tmp3 d:1 $VN.Null | |
N001 ( 1, 1) [000129] ------------ \--* CNS_INT ref null $VN.Null | |
***** BB05 | |
STMT00012 (IL ???...0x04B) | |
N017 ( 24, 25) [000159] -A-XG------- * ASG ref $VN.Void | |
N015 ( 20, 22) [000157] *--XG--N---- +--* IND ref $VN.Null | |
N014 ( 17, 20) CSE #03 (use)[000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N004 ( 8, 11) [000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
N001 ( 1, 1) [000146] ------------ | | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 3, 3) CSE #01 (use)[000144] ---X-------- | | \--* ARR_LENGTH int <l:$149, c:$148> | |
N002 ( 1, 1) [000145] ------------ | | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N013 ( 9, 9) [000148] ---XG------- | \--* ADDR byref $300 | |
N012 ( 5, 5) [000149] a--XG------- | \--* IND struct <l:$343, c:$342> | |
N011 ( 4, 4) [000150] -------N---- | \--* ADD byref $300 | |
N005 ( 1, 1) [000151] ------------ | +--* LCL_VAR ref V02 loc1 u:1 (last use) <l:$1c2, c:$200> | |
N010 ( 3, 3) [000152] -------N---- | \--* ADD int <l:$159, c:$158> | |
N008 ( 2, 2) [000153] -------N---- | +--* LSH int <l:$157, c:$156> | |
N006 ( 1, 1) [000154] i----------- | | +--* LCL_VAR int V01 loc0 u:1 (last use) <l:$145, c:$144> | |
N007 ( 1, 1) [000155] -------N---- | | \--* CNS_INT int 2 $46 | |
N009 ( 1, 1) [000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
N016 ( 3, 2) [000158] ------------ \--* LCL_VAR ref V08 tmp3 u:1 (last use) $VN.Null | |
***** BB05 | |
STMT00010 (IL 0x050...0x051) | |
N002 ( 4, 3) [000071] ------------ * RETURN ref $208 | |
N001 ( 3, 2) [000070] ------------ \--* LCL_VAR ref V07 tmp2 u:1 (last use) <l:$340, c:$204> | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
***** BB06 | |
STMT00013 (IL 0x016...0x017) | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack $VN.Void | |
N002 ( 1, 1) [000082] ------------ this in ecx \--* LCL_VAR ref V00 this u:1 (last use) $80 | |
------------------------------------------------------------------------------------------------------------------- | |
Aggressive CSE Promotion cutoff is 300 | |
Moderate CSE Promotion cutoff is 100 | |
enregCount is 7 | |
Framesize estimate is 0x0000 | |
We have a small frame | |
Sorted CSE candidates: | |
CSE #02, {$340, $4 } useCnt=0: [def=100, use= 0, cost= 20 ] | |
:: N015 ( 20, 22) CSE #02 (def)[000124] ---XG------- * IND ref <l:$341, c:$204> | |
CSE #03, {$c6 , $1ce} useCnt=1: [def=100, use=100, cost= 17 ] | |
:: N014 ( 17, 20) CSE #03 (def)[000110] ---XG------- * COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
CSE #01, {$241, $1c6} useCnt=2: [def=100, use=200, cost= 3 ] | |
:: N002 ( 3, 3) CSE #01 (def)[000012] ---X-------- * ARR_LENGTH int <l:$149, c:$148> | |
Skipped CSE #02 because use count is 0 | |
Considering CSE #03 {$c6 , $1ce} [def=100, use=100, cost= 17 ] | |
CSE Expression : | |
N014 ( 17, 20) CSE #03 (def)[000110] ---XG------- * COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N004 ( 8, 11) [000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
N001 ( 1, 1) [000113] ------------ | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 3, 3) CSE #01 (use)[000111] ---X-------- | \--* ARR_LENGTH int <l:$149, c:$148> | |
N002 ( 1, 1) [000112] ------------ | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N013 ( 9, 9) [000115] ----G------- \--* ADDR byref $300 | |
N012 ( 5, 5) [000116] a---G--N---- \--* IND struct <l:$340, c:$380> | |
N011 ( 4, 4) [000117] -------N---- \--* ADD byref $300 | |
N005 ( 1, 1) [000118] ------------ +--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N010 ( 3, 3) [000119] -------N---- \--* ADD int <l:$159, c:$158> | |
N008 ( 2, 2) [000120] -------N---- +--* LSH int <l:$157, c:$156> | |
N006 ( 1, 1) [000121] i----------- | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N007 ( 1, 1) [000122] -------N---- | \--* CNS_INT int 2 $46 | |
N009 ( 1, 1) [000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
Aggressive CSE Promotion (300 >= 300) | |
cseRefCnt=300, aggressiveRefCnt=300, moderateRefCnt=100 | |
defCnt=100, useCnt=100, cost=17, size=20 | |
def_cost=1, use_cost=1, extra_no_cost=38, extra_yes_cost=0 | |
CSE cost savings check (1738 >= 200) passes | |
Promoting CSE: | |
lvaGrabTemp returning 9 (V09 rat0) (a long lifetime temp) called for CSE - aggressive. | |
CSE #03 is single-def, so associated CSE temp V09 will be in SSA | |
CSE #03 def at [000110] replaced in BB02 with def of V09 | |
fgAddFieldSeqForZeroOffset for Fseq[Value] | |
addr (Before) | |
[000167] ------------ LCL_VAR byref <l:$c6, c:$c5> | |
(After) | |
[000167] ------------ LCL_VAR byref Zero Fseq[Value] <l:$c6, c:$c5> | |
fgAddFieldSeqForZeroOffset for Fseq[Value] | |
addr (Before) | |
[000168] -A-XG------- COMMA byref <l:$c6, c:$c5> | |
(After) | |
[000168] -A-XG------- COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
optValnumCSE morphed tree: | |
N021 ( 31, 30) [000125] -A-XG---R--- * ASG ref <l:$341, c:$204> | |
N020 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 <l:$340, c:$204> | |
N019 ( 27, 27) CSE #02 (def)[000124] -A-XG------- \--* IND ref <l:$341, c:$204> | |
N018 ( 24, 25) [000168] -A-XG------- \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N016 ( 21, 23) [000166] -A-XG---R--- +--* ASG byref $VN.Void | |
N015 ( 3, 2) [000165] D------N---- | +--* LCL_VAR byref V09 cse0 d:1 <l:$c6, c:$c5> | |
N014 ( 17, 20) [000110] ---XG------- | \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N004 ( 8, 11) [000114] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
N001 ( 1, 1) [000113] ------------ | | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 3, 3) CSE #01 (use)[000111] ---X-------- | | \--* ARR_LENGTH int <l:$149, c:$148> | |
N002 ( 1, 1) [000112] ------------ | | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N013 ( 9, 9) [000115] ----G------- | \--* ADDR byref $300 | |
N012 ( 5, 5) [000116] a---G--N---- | \--* IND struct <l:$340, c:$380> | |
N011 ( 4, 4) [000117] -------N---- | \--* ADD byref $300 | |
N005 ( 1, 1) [000118] ------------ | +--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N010 ( 3, 3) [000119] -------N---- | \--* ADD int <l:$159, c:$158> | |
N008 ( 2, 2) [000120] -------N---- | +--* LSH int <l:$157, c:$156> | |
N006 ( 1, 1) [000121] i----------- | | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N007 ( 1, 1) [000122] -------N---- | | \--* CNS_INT int 2 $46 | |
N009 ( 1, 1) [000123] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
N017 ( 3, 2) [000167] ------------ \--* LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] <l:$c6, c:$c5> | |
Working on the replacement of the CSE #03 use at [000143] in BB05 | |
Unmark CSE use #01 at [000144]: 2 -> 1 | |
fgAddFieldSeqForZeroOffset for Fseq[Value] | |
addr (Before) | |
[000169] ------------ LCL_VAR byref $300 | |
(After) | |
[000169] ------------ LCL_VAR byref Zero Fseq[Value] $300 | |
optValnumCSE morphed tree: | |
N004 ( 10, 7) [000159] -A-XG------- * ASG ref $VN.Void | |
N002 ( 6, 4) [000157] *--XG--N---- +--* IND ref $VN.Null | |
N001 ( 3, 2) [000169] ------------ | \--* LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] $300 | |
N003 ( 3, 2) [000158] ------------ \--* LCL_VAR ref V08 tmp3 u:1 (last use) $VN.Null | |
Considering CSE #01 {$241, $1c6} [def=100, use=100, cost= 3 ] | |
CSE Expression : | |
N002 ( 3, 3) CSE #01 (def)[000012] ---X-------- * ARR_LENGTH int <l:$149, c:$148> | |
N001 ( 1, 1) [000011] ------------ \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
Aggressive CSE Promotion (300 >= 300) | |
cseRefCnt=300, aggressiveRefCnt=300, moderateRefCnt=100 | |
defCnt=100, useCnt=100, cost=3, size=3 | |
def_cost=1, use_cost=1, extra_no_cost=4, extra_yes_cost=0 | |
CSE cost savings check (304 >= 200) passes | |
Promoting CSE: | |
lvaGrabTemp returning 10 (V10 rat0) (a long lifetime temp) called for CSE - aggressive. | |
CSE #01 is single-def, so associated CSE temp V10 will be in SSA | |
CSE #01 def at [000012] replaced in BB01 with def of V10 | |
optValnumCSE morphed tree: | |
N009 ( 14, 12) [000014] -A-X-------- * JTRUE void | |
N008 ( 12, 10) [000013] NA-X---N-U-- \--* LE int <l:$14d, c:$14c> | |
N006 ( 10, 8) [000173] -A-X-------- +--* COMMA int <l:$149, c:$148> | |
N004 ( 7, 6) [000171] -A-X----R--- | +--* ASG int $VN.Void | |
N003 ( 3, 2) [000170] D------N---- | | +--* LCL_VAR int V10 cse1 d:1 <l:$149, c:$148> | |
N002 ( 3, 3) [000012] ---X-------- | | \--* ARR_LENGTH int <l:$149, c:$148> | |
N001 ( 1, 1) [000011] ------------ | | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N005 ( 3, 2) [000172] ------------ | \--* LCL_VAR int V10 cse1 u:1 <l:$149, c:$148> | |
N007 ( 1, 1) [000010] ------------ \--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
Working on the replacement of the CSE #01 use at [000111] in BB02 | |
optValnumCSE morphed tree: | |
N020 ( 31, 29) [000125] -A-XG---R--- * ASG ref <l:$341, c:$204> | |
N019 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 <l:$340, c:$204> | |
N018 ( 27, 26) CSE #02 (def)[000124] -A-XG------- \--* IND ref <l:$341, c:$204> | |
N017 ( 24, 24) [000168] -A-XG------- \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N015 ( 21, 22) [000166] -A-XG---R--- +--* ASG byref $VN.Void | |
N014 ( 3, 2) [000165] D------N---- | +--* LCL_VAR byref V09 cse0 d:1 <l:$c6, c:$c5> | |
N013 ( 17, 19) [000110] ---XG------- | \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N003 ( 8, 10) [000114] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
N001 ( 1, 1) [000113] ------------ | | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N002 ( 3, 2) [000174] ------------ | | \--* LCL_VAR int V10 cse1 u:1 <l:$241, c:$240> | |
N012 ( 9, 9) [000115] ----G------- | \--* ADDR byref $300 | |
N011 ( 5, 5) [000116] a---G--N---- | \--* IND struct <l:$340, c:$380> | |
N010 ( 4, 4) [000117] -------N---- | \--* ADD byref $300 | |
N004 ( 1, 1) [000118] ------------ | +--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N009 ( 3, 3) [000119] -------N---- | \--* ADD int <l:$159, c:$158> | |
N007 ( 2, 2) [000120] -------N---- | +--* LSH int <l:$157, c:$156> | |
N005 ( 1, 1) [000121] i----------- | | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N006 ( 1, 1) [000122] -------N---- | | \--* CNS_INT int 2 $46 | |
N008 ( 1, 1) [000123] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
N016 ( 3, 2) [000167] ------------ \--* LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] <l:$c6, c:$c5> | |
*************** 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..016)-> BB06 ( cond ) i label target idxlen | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen | |
BB03 [0009] 1 BB02 0.25 [???..???)-> BB05 (always) i | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
***** BB01 | |
STMT00000 (IL 0x000...0x008) | |
N008 ( 6, 6) [000005] -A-XG---R--- * ASG int <l:$147, c:$146> | |
N007 ( 1, 1) [000004] D------N---- +--* LCL_VAR int V01 loc0 d:1 <l:$145, c:$144> | |
N006 ( 6, 6) [000003] ---XG------- \--* ADD int <l:$147, c:$146> | |
N004 ( 4, 4) [000001] ---XG------- +--* IND int <l:$143, c:$142> | |
N003 ( 2, 2) [000088] -------N---- | \--* ADD byref $c0 | |
N001 ( 1, 1) [000000] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000087] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] $42 | |
N005 ( 1, 1) [000002] ------------ \--* CNS_INT int -1 $41 | |
***** BB01 | |
STMT00001 (IL 0x009...0x00F) | |
N006 ( 4, 4) [000009] -A-XG---R--- * ASG ref <l:$1c4, c:$1c3> | |
N005 ( 1, 1) [000008] D------N---- +--* LCL_VAR ref V02 loc1 d:1 <l:$1c2, c:$200> | |
N004 ( 4, 4) [000007] ---XG------- \--* IND ref <l:$1c4, c:$1c3> | |
N003 ( 2, 2) [000090] -------N---- \--* ADD byref $c1 | |
N001 ( 1, 1) [000006] ------------ +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000089] ------------ \--* CNS_INT int 4 field offset Fseq[_array] $43 | |
***** BB01 | |
STMT00002 (IL 0x010...0x014) | |
N009 ( 14, 12) [000014] -A-X-------- * JTRUE void | |
N008 ( 12, 10) [000013] NA-X---N-U-- \--* LE int <l:$14d, c:$14c> | |
N006 ( 10, 8) [000173] -A-X-------- +--* COMMA int <l:$149, c:$148> | |
N004 ( 7, 6) [000171] -A-X----R--- | +--* ASG int $VN.Void | |
N003 ( 3, 2) [000170] D------N---- | | +--* LCL_VAR int V10 cse1 d:1 <l:$149, c:$148> | |
N002 ( 3, 3) [000012] ---X-------- | | \--* ARR_LENGTH int <l:$149, c:$148> | |
N001 ( 1, 1) [000011] ------------ | | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N005 ( 3, 2) [000172] ------------ | \--* LCL_VAR int V10 cse1 u:1 <l:$149, c:$148> | |
N007 ( 1, 1) [000010] ------------ \--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
------------ BB02 [01C..040) -> BB04 (cond), preds={BB01} succs={BB03,BB04} | |
***** BB02 | |
STMT00003 (IL 0x01C...0x025) | |
N011 ( 11, 11) [000021] -A-XG---R--- * ASG int $VN.Void | |
N010 ( 4, 4) [000020] D--XG--N---- +--* IND int $153 | |
N009 ( 2, 2) [000093] -------N---- | \--* ADD byref $c2 | |
N007 ( 1, 1) [000015] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N008 ( 1, 1) [000092] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N006 ( 6, 6) [000019] ---XG------- \--* ADD int <l:$155, c:$154> | |
N004 ( 4, 4) [000017] ---XG------- +--* IND int <l:$151, c:$150> | |
N003 ( 2, 2) [000095] -------N---- | \--* ADD byref $c2 | |
N001 ( 1, 1) [000016] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000094] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N005 ( 1, 1) [000018] ------------ \--* CNS_INT int 1 $45 | |
***** BB02 | |
STMT00004 (IL 0x02A...0x02C) | |
N006 ( 6, 6) [000025] -A-XG------- * ASG int $VN.Void | |
N004 ( 4, 4) [000024] D--XG--N---- +--* IND int $145 | |
N003 ( 2, 2) [000097] -------N---- | \--* ADD byref $c0 | |
N001 ( 1, 1) [000022] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000096] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] $42 | |
N005 ( 1, 1) [000023] ------------ \--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
***** BB02 | |
STMT00005 (IL 0x031...0x038) | |
N020 ( 31, 29) [000125] -A-XG---R--- * ASG ref <l:$341, c:$204> | |
N019 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 <l:$340, c:$204> | |
N018 ( 27, 26) [000124] -A-XG------- \--* IND ref <l:$341, c:$204> | |
N017 ( 24, 24) [000168] -A-XG------- \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N015 ( 21, 22) [000166] -A-XG---R--- +--* ASG byref $VN.Void | |
N014 ( 3, 2) [000165] D------N---- | +--* LCL_VAR byref V09 cse0 d:1 <l:$c6, c:$c5> | |
N013 ( 17, 19) [000110] ---XG------- | \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N003 ( 8, 10) [000114] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
N001 ( 1, 1) [000113] ------------ | | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N002 ( 3, 2) [000174] ------------ | | \--* LCL_VAR int V10 cse1 u:1 <l:$241, c:$240> | |
N012 ( 9, 9) [000115] ----G------- | \--* ADDR byref $300 | |
N011 ( 5, 5) [000116] a---G--N---- | \--* IND struct <l:$340, c:$380> | |
N010 ( 4, 4) [000117] -------N---- | \--* ADD byref $300 | |
N004 ( 1, 1) [000118] ------------ | +--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N009 ( 3, 3) [000119] -------N---- | \--* ADD int <l:$159, c:$158> | |
N007 ( 2, 2) [000120] -------N---- | +--* LSH int <l:$157, c:$156> | |
N005 ( 1, 1) [000121] i----------- | | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N006 ( 1, 1) [000122] -------N---- | | \--* CNS_INT int 2 $46 | |
N008 ( 1, 1) [000123] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
N016 ( 3, 2) [000167] ------------ \--* LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] <l:$c6, c:$c5> | |
***** BB02 | |
STMT00006 (IL 0x039...0x03E) | |
N004 ( 3, 3) [000038] -A---O--R--- * ASG int $1d3 | |
N003 ( 1, 1) [000037] D------N---- +--* LCL_VAR int V05 tmp0 d:1 $1d3 | |
N002 ( 3, 2) [000036] #----O------ \--* IND int $1d3 | |
N001 ( 1, 1) [000035] ------------ \--* LCL_VAR ref V00 this u:1 (last use) $80 | |
***** BB02 | |
STMT00014 (IL ???... ???) | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
N010 ( 12, 11) [000051] J------N---- \--* EQ int <l:$15e, c:$15d> | |
N008 ( 10, 9) [000047] n----------- +--* IND int <l:$284, c:$184> | |
N007 ( 8, 7) [000046] -------N---- | \--* ADD int $15c | |
N005 ( 7, 6) [000044] #----------- | +--* IND int $1d5 | |
N004 ( 4, 4) [000043] #----------- | | \--* IND int $1d4 | |
N003 ( 2, 2) [000042] -------N---- | | \--* ADD int $15b | |
N001 ( 1, 1) [000040] ------------ | | +--* LCL_VAR int V05 tmp0 u:1 (last use) $1d3 | |
N002 ( 1, 1) [000041] ------------ | | \--* CNS_INT int 32 $47 | |
N006 ( 1, 1) [000045] ------------ | \--* CNS_INT int 12 $44 | |
N009 ( 1, 1) [000050] ------------ \--* CNS_INT int 0 $40 | |
------------ BB03 [???..???) -> BB05 (always), preds={BB02} succs={BB05} | |
------------ BB04 [???..???), preds={BB02} succs={BB05} | |
------------ BB05 [040..052) (return), preds={BB04,BB03} succs={} | |
***** BB05 | |
STMT00011 (IL 0x040...0x045) | |
N003 ( 5, 4) [000130] -A------R--- * ASG ref $VN.Null | |
N002 ( 3, 2) [000128] D------N---- +--* LCL_VAR ref V08 tmp3 d:1 $VN.Null | |
N001 ( 1, 1) [000129] ------------ \--* CNS_INT ref null $VN.Null | |
***** BB05 | |
STMT00012 (IL ???...0x04B) | |
N004 ( 10, 7) [000159] -A-XG------- * ASG ref $VN.Void | |
N002 ( 6, 4) [000157] *--XG--N---- +--* IND ref $VN.Null | |
N001 ( 3, 2) [000169] ------------ | \--* LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] $300 | |
N003 ( 3, 2) [000158] ------------ \--* LCL_VAR ref V08 tmp3 u:1 (last use) $VN.Null | |
***** BB05 | |
STMT00010 (IL 0x050...0x051) | |
N002 ( 4, 3) [000071] ------------ * RETURN ref $208 | |
N001 ( 3, 2) [000070] ------------ \--* LCL_VAR ref V07 tmp2 u:1 (last use) <l:$340, c:$204> | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
***** BB06 | |
STMT00013 (IL 0x016...0x017) | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack $VN.Void | |
N002 ( 1, 1) [000082] ------------ this in ecx \--* LCL_VAR ref V00 this u:1 (last use) $80 | |
------------------------------------------------------------------------------------------------------------------- | |
GenTreeNode creates assertion: | |
N004 ( 4, 4) [000001] ---XG------- * IND int <l:$143, c:$142> | |
In BB01 New Global Constant Assertion: (128, 0) ($80,$0) V00.01 != null index=#01, mask=0000000000000001 | |
GenTreeNode creates assertion: | |
N002 ( 3, 3) [000012] ---X-------- * ARR_LENGTH int <l:$149, c:$148> | |
In BB01 New Global Constant Assertion: (512, 0) ($200,$0) V02.01 != null index=#02, mask=0000000000000002 | |
GenTreeNode creates assertion: | |
N009 ( 14, 12) [000014] -A-X-------- * JTRUE void | |
In BB01 New Global ArrBnds Assertion: (330, -1) ($14a,$ffffffff) [idx: {ADD($41, $180)};len: {ARR_LENGTH($200)}] in range index=#03, mask=0000000000000004 | |
After constant propagation on [000158]: | |
STMT00012 (IL ???...0x04B) | |
N004 ( 10, 7) [000159] -A-XG------- * ASG ref $VN.Void | |
N002 ( 6, 4) [000157] *--XG--N---- +--* IND ref $VN.Null | |
N001 ( 3, 2) [000169] ------------ | \--* LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] $300 | |
[000175] ------------ \--* CNS_INT ref null $VN.Null | |
optVNAssertionPropCurStmt morphed tree: | |
N004 ( 8, 6) [000159] -A-XG------- * ASG ref $VN.Void | |
N002 ( 6, 4) [000157] *--XG--N---- +--* IND ref $VN.Null | |
N001 ( 3, 2) [000169] ------------ | \--* LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] $300 | |
N003 ( 1, 1) [000175] ------------ \--* CNS_INT ref null $VN.Null | |
GenTreeNode creates assertion: | |
N002 ( 6, 4) [000157] *--XG--N---- * IND ref $VN.Null | |
In BB05 New Global Constant Assertion: (768, 0) ($300,$0) Value_Number {PtrToArrElem($103, $1c2, $145, $0)} is not 0 index=#04, mask=0000000000000008 | |
BB01 valueGen = 0000000000000007 => BB06 valueGen = 0000000000000003, | |
BB02 valueGen = 0000000000000005 => BB04 valueGen = 0000000000000005, | |
BB03 valueGen = 0000000000000000 | |
BB04 valueGen = 0000000000000000 | |
BB05 valueGen = 0000000000000008 | |
BB06 valueGen = 0000000000000000 | |
AssertionPropCallback::StartMerge: BB01 in -> 0000000000000000 | |
AssertionPropCallback::EndMerge : BB01 in -> 0000000000000000 | |
AssertionPropCallback::Changed : BB01 before out -> 000000000000000F; after out -> 0000000000000007; | |
jumpDest before out -> 000000000000000F; jumpDest after out -> 0000000000000003; | |
AssertionPropCallback::StartMerge: BB02 in -> 000000000000000F | |
AssertionPropCallback::Merge : BB02 in -> 000000000000000F, predBlock BB01 out -> 0000000000000007 | |
AssertionPropCallback::EndMerge : BB02 in -> 0000000000000007 | |
AssertionPropCallback::Changed : BB02 before out -> 000000000000000F; after out -> 0000000000000007; | |
jumpDest before out -> 000000000000000F; jumpDest after out -> 0000000000000007; | |
AssertionPropCallback::StartMerge: BB06 in -> 000000000000000F | |
AssertionPropCallback::Merge : BB06 in -> 000000000000000F, predBlock BB01 out -> 0000000000000007 | |
AssertionPropCallback::EndMerge : BB06 in -> 0000000000000003 | |
AssertionPropCallback::Changed : BB06 before out -> 000000000000000F; after out -> 0000000000000003; | |
jumpDest before out -> 000000000000000F; jumpDest after out -> 0000000000000003; | |
AssertionPropCallback::StartMerge: BB03 in -> 000000000000000F | |
AssertionPropCallback::Merge : BB03 in -> 000000000000000F, predBlock BB02 out -> 0000000000000007 | |
AssertionPropCallback::EndMerge : BB03 in -> 0000000000000007 | |
AssertionPropCallback::Changed : BB03 before out -> 000000000000000F; after out -> 0000000000000007; | |
jumpDest before out -> 000000000000000F; jumpDest after out -> 0000000000000007; | |
AssertionPropCallback::StartMerge: BB04 in -> 000000000000000F | |
AssertionPropCallback::Merge : BB04 in -> 000000000000000F, predBlock BB02 out -> 0000000000000007 | |
AssertionPropCallback::EndMerge : BB04 in -> 0000000000000007 | |
AssertionPropCallback::Changed : BB04 before out -> 000000000000000F; after out -> 0000000000000007; | |
jumpDest before out -> 000000000000000F; jumpDest after out -> 0000000000000007; | |
AssertionPropCallback::StartMerge: BB05 in -> 000000000000000F | |
AssertionPropCallback::Merge : BB05 in -> 000000000000000F, predBlock BB04 out -> 0000000000000007 | |
AssertionPropCallback::Merge : BB05 in -> 0000000000000007, predBlock BB03 out -> 0000000000000007 | |
AssertionPropCallback::EndMerge : BB05 in -> 0000000000000007 | |
AssertionPropCallback::Changed : BB05 before out -> 000000000000000F; after out -> 000000000000000F; | |
jumpDest before out -> 000000000000000F; jumpDest after out -> 0000000000000007; | |
AssertionPropCallback::StartMerge: BB05 in -> 0000000000000007 | |
AssertionPropCallback::Merge : BB05 in -> 0000000000000007, predBlock BB04 out -> 0000000000000007 | |
AssertionPropCallback::Merge : BB05 in -> 0000000000000007, predBlock BB03 out -> 0000000000000007 | |
AssertionPropCallback::EndMerge : BB05 in -> 0000000000000007 | |
AssertionPropCallback::Unchanged : BB05 out -> 000000000000000F; jumpDest out -> 0000000000000007 | |
BB01 valueIn = 0000000000000000 valueOut = 0000000000000007 => BB06 valueOut= 0000000000000003 | |
BB02 valueIn = 0000000000000007 valueOut = 0000000000000007 => BB04 valueOut= 0000000000000007 | |
BB03 valueIn = 0000000000000007 valueOut = 0000000000000007 | |
BB04 valueIn = 0000000000000007 valueOut = 0000000000000007 | |
BB05 valueIn = 0000000000000007 valueOut = 000000000000000F | |
BB06 valueIn = 0000000000000003 valueOut = 0000000000000003 | |
Propagating 0000000000000000 assertions for BB01, stmt STMT00000, tree [000000], tree -> 0 | |
Propagating 0000000000000000 assertions for BB01, stmt STMT00000, tree [000087], tree -> 0 | |
Propagating 0000000000000000 assertions for BB01, stmt STMT00000, tree [000088], tree -> 0 | |
Propagating 0000000000000000 assertions for BB01, stmt STMT00000, tree [000001], tree -> 1 | |
Propagating 0000000000000001 assertions for BB01, stmt STMT00000, tree [000002], tree -> 0 | |
Propagating 0000000000000001 assertions for BB01, stmt STMT00000, tree [000003], tree -> 0 | |
Propagating 0000000000000001 assertions for BB01, stmt STMT00000, tree [000004], tree -> 0 | |
Propagating 0000000000000001 assertions for BB01, stmt STMT00000, tree [000005], tree -> 0 | |
Propagating 0000000000000001 assertions for BB01, stmt STMT00001, tree [000006], tree -> 0 | |
Propagating 0000000000000001 assertions for BB01, stmt STMT00001, tree [000089], tree -> 0 | |
Propagating 0000000000000001 assertions for BB01, stmt STMT00001, tree [000090], tree -> 0 | |
Propagating 0000000000000001 assertions for BB01, stmt STMT00001, tree [000007], tree -> 1 | |
Non-null prop for index #01 in BB01: | |
N004 ( 4, 4) [000007] ---XG------- * IND ref <l:$1c4, c:$1c3> | |
Propagating 0000000000000001 assertions for BB01, stmt STMT00001, tree [000008], tree -> 0 | |
Propagating 0000000000000001 assertions for BB01, stmt STMT00001, tree [000009], tree -> 0 | |
Re-morphing this stmt: | |
STMT00001 (IL 0x009...0x00F) | |
N006 ( 4, 4) [000009] -A-XG---R--- * ASG ref <l:$1c4, c:$1c3> | |
N005 ( 1, 1) [000008] D------N---- +--* LCL_VAR ref V02 loc1 d:1 <l:$1c2, c:$200> | |
N004 ( 4, 4) [000007] n---GO------ \--* IND ref <l:$1c4, c:$1c3> | |
N003 ( 2, 2) [000090] -------N---- \--* ADD byref $c1 | |
N001 ( 1, 1) [000006] ------------ +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000089] ------------ \--* CNS_INT int 4 field offset Fseq[_array] $43 | |
optAssertionPropMain morphed tree: | |
N006 ( 4, 4) [000009] -A--GO--R--- * ASG ref <l:$1c4, c:$1c3> | |
N005 ( 1, 1) [000008] D------N---- +--* LCL_VAR ref V02 loc1 d:1 <l:$1c2, c:$200> | |
N004 ( 4, 4) [000007] n---GO------ \--* IND ref <l:$1c4, c:$1c3> | |
N003 ( 2, 2) [000090] -------N---- \--* ADD byref $c1 | |
N001 ( 1, 1) [000006] ------------ +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000089] ------------ \--* CNS_INT int 4 field offset Fseq[_array] $43 | |
Propagating 0000000000000001 assertions for BB01, stmt STMT00002, tree [000011], tree -> 0 | |
Propagating 0000000000000001 assertions for BB01, stmt STMT00002, tree [000012], tree -> 2 | |
Propagating 0000000000000003 assertions for BB01, stmt STMT00002, tree [000170], tree -> 0 | |
Propagating 0000000000000003 assertions for BB01, stmt STMT00002, tree [000171], tree -> 0 | |
Propagating 0000000000000003 assertions for BB01, stmt STMT00002, tree [000172], tree -> 0 | |
Propagating 0000000000000003 assertions for BB01, stmt STMT00002, tree [000173], tree -> 0 | |
Propagating 0000000000000003 assertions for BB01, stmt STMT00002, tree [000010], tree -> 0 | |
Propagating 0000000000000003 assertions for BB01, stmt STMT00002, tree [000013], tree -> 0 | |
Propagating 0000000000000003 assertions for BB01, stmt STMT00002, tree [000014], tree -> 3 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00003, tree [000016], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00003, tree [000094], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00003, tree [000095], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00003, tree [000017], tree -> 1 | |
Non-null prop for index #01 in BB02: | |
N004 ( 4, 4) [000017] ---XG------- * IND int <l:$151, c:$150> | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00003, tree [000018], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00003, tree [000019], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00003, tree [000015], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00003, tree [000092], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00003, tree [000093], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00003, tree [000020], tree -> 1 | |
Non-null prop for index #01 in BB02: | |
N010 ( 4, 4) [000020] D--XG--N---- * IND int $153 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00003, tree [000021], tree -> 0 | |
Re-morphing this stmt: | |
STMT00003 (IL 0x01C...0x025) | |
N011 ( 11, 11) [000021] -A-XG---R--- * ASG int $VN.Void | |
N010 ( 4, 4) [000020] n---GO-N---- +--* IND int $153 | |
N009 ( 2, 2) [000093] -------N---- | \--* ADD byref $c2 | |
N007 ( 1, 1) [000015] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N008 ( 1, 1) [000092] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N006 ( 6, 6) [000019] ---XG------- \--* ADD int <l:$155, c:$154> | |
N004 ( 4, 4) [000017] n---GO------ +--* IND int <l:$151, c:$150> | |
N003 ( 2, 2) [000095] -------N---- | \--* ADD byref $c2 | |
N001 ( 1, 1) [000016] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000094] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N005 ( 1, 1) [000018] ------------ \--* CNS_INT int 1 $45 | |
optAssertionPropMain morphed tree: | |
N011 ( 11, 11) [000021] -A--GO--R--- * ASG int $VN.Void | |
N010 ( 4, 4) [000020] n---GO-N---- +--* IND int $153 | |
N009 ( 2, 2) [000093] -------N---- | \--* ADD byref $c2 | |
N007 ( 1, 1) [000015] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N008 ( 1, 1) [000092] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N006 ( 6, 6) [000019] ----GO------ \--* ADD int <l:$155, c:$154> | |
N004 ( 4, 4) [000017] n---GO------ +--* IND int <l:$151, c:$150> | |
N003 ( 2, 2) [000095] -------N---- | \--* ADD byref $c2 | |
N001 ( 1, 1) [000016] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000094] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N005 ( 1, 1) [000018] ------------ \--* CNS_INT int 1 $45 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00004, tree [000022], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00004, tree [000096], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00004, tree [000097], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00004, tree [000024], tree -> 1 | |
Non-null prop for index #01 in BB02: | |
N004 ( 4, 4) [000024] D--XG--N---- * IND int $145 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00004, tree [000023], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00004, tree [000025], tree -> 0 | |
Re-morphing this stmt: | |
STMT00004 (IL 0x02A...0x02C) | |
N006 ( 6, 6) [000025] -A-XG------- * ASG int $VN.Void | |
N004 ( 4, 4) [000024] n---GO-N---- +--* IND int $145 | |
N003 ( 2, 2) [000097] -------N---- | \--* ADD byref $c0 | |
N001 ( 1, 1) [000022] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000096] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] $42 | |
N005 ( 1, 1) [000023] ------------ \--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
optAssertionPropMain morphed tree: | |
N006 ( 6, 6) [000025] -A--GO------ * ASG int $VN.Void | |
N004 ( 4, 4) [000024] n---GO-N---- +--* IND int $145 | |
N003 ( 2, 2) [000097] -------N---- | \--* ADD byref $c0 | |
N001 ( 1, 1) [000022] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000096] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] $42 | |
N005 ( 1, 1) [000023] ------------ \--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00005, tree [000113], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00005, tree [000174], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00005, tree [000114], tree -> 3 | |
VN based redundant (a[i] followed by a[i]) bounds check assertion prop for index #03 in BB02: | |
N003 ( 8, 10) [000114] ---X-------- * ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00005, tree [000118], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00005, tree [000121], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00005, tree [000122], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00005, tree [000120], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00005, tree [000123], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00005, tree [000119], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00005, tree [000117], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00005, tree [000116], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00005, tree [000115], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00005, tree [000110], tree -> 0 | |
Before optRemoveRangeCheck: | |
N013 ( 17, 19) [000110] ---XG------- * COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N003 ( 8, 10) [000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
N001 ( 1, 1) [000113] ------------ | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N002 ( 3, 2) [000174] ------------ | \--* LCL_VAR int V10 cse1 u:1 <l:$241, c:$240> | |
N012 ( 9, 9) [000115] ----G------- \--* ADDR byref $300 | |
N011 ( 5, 5) [000116] a---G--N---- \--* IND struct <l:$340, c:$380> | |
N010 ( 4, 4) [000117] -------N---- \--* ADD byref $300 | |
N004 ( 1, 1) [000118] ------------ +--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N009 ( 3, 3) [000119] -------N---- \--* ADD int <l:$159, c:$158> | |
N007 ( 2, 2) [000120] -------N---- +--* LSH int <l:$157, c:$156> | |
N005 ( 1, 1) [000121] i----------- | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N006 ( 1, 1) [000122] -------N---- | \--* CNS_INT int 2 $46 | |
N008 ( 1, 1) [000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
After optRemoveRangeCheck: | |
N011 ( 9, 9) [000110] ----G--N---- * COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N001 ( 0, 0) [000176] ------------ +--* NOP void | |
N010 ( 9, 9) [000115] ----G------- \--* ADDR byref $300 | |
N009 ( 5, 5) [000116] a---G--N---- \--* IND struct <l:$340, c:$380> | |
N008 ( 4, 4) [000117] -------N---- \--* ADD byref $300 | |
N002 ( 1, 1) [000118] ------------ +--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N007 ( 3, 3) [000119] -------N---- \--* ADD int <l:$159, c:$158> | |
N005 ( 2, 2) [000120] -------N---- +--* LSH int <l:$157, c:$156> | |
N003 ( 1, 1) [000121] i----------- | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N004 ( 1, 1) [000122] -------N---- | \--* CNS_INT int 2 $46 | |
N006 ( 1, 1) [000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00005, tree [000165], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00005, tree [000166], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00005, tree [000167], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00005, tree [000168], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00005, tree [000124], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00005, tree [000109], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00005, tree [000125], tree -> 0 | |
Re-morphing this stmt: | |
STMT00005 (IL 0x031...0x038) | |
N018 ( 23, 19) [000125] -A-XG---R--- * ASG ref <l:$341, c:$204> | |
N017 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 <l:$340, c:$204> | |
N016 ( 19, 16) [000124] -A-XG------- \--* IND ref <l:$341, c:$204> | |
N015 ( 16, 14) [000168] -A--G------- \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N013 ( 13, 12) [000166] -A--G---R--- +--* ASG byref $VN.Void | |
N012 ( 3, 2) [000165] D------N---- | +--* LCL_VAR byref V09 cse0 d:1 <l:$c6, c:$c5> | |
N011 ( 9, 9) [000110] ----G--N---- | \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N001 ( 0, 0) [000176] ------------ | +--* NOP void | |
N010 ( 9, 9) [000115] ----G------- | \--* ADDR byref $300 | |
N009 ( 5, 5) [000116] a---G--N---- | \--* IND struct <l:$340, c:$380> | |
N008 ( 4, 4) [000117] -------N---- | \--* ADD byref $300 | |
N002 ( 1, 1) [000118] ------------ | +--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N007 ( 3, 3) [000119] -------N---- | \--* ADD int <l:$159, c:$158> | |
N005 ( 2, 2) [000120] -------N---- | +--* LSH int <l:$157, c:$156> | |
N003 ( 1, 1) [000121] i----------- | | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N004 ( 1, 1) [000122] -------N---- | | \--* CNS_INT int 2 $46 | |
N006 ( 1, 1) [000123] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
N014 ( 3, 2) [000167] ------------ \--* LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] <l:$c6, c:$c5> | |
optAssertionPropMain morphed tree: | |
N016 ( 23, 19) [000125] -A-XG---R--- * ASG ref <l:$341, c:$204> | |
N015 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 <l:$340, c:$204> | |
N014 ( 19, 16) [000124] -A-XG------- \--* IND ref <l:$341, c:$204> | |
N013 ( 16, 14) [000168] -A--G------- \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N011 ( 13, 12) [000166] -A--G---R--- +--* ASG byref $VN.Void | |
N010 ( 3, 2) [000165] D------N---- | +--* LCL_VAR byref V09 cse0 d:1 <l:$c6, c:$c5> | |
N009 ( 9, 9) [000115] ----G--N---- | \--* ADDR byref $300 | |
N008 ( 5, 5) [000116] a---G--N---- | \--* IND struct <l:$340, c:$380> | |
N007 ( 4, 4) [000117] -------N---- | \--* ADD byref $300 | |
N001 ( 1, 1) [000118] ------------ | +--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N006 ( 3, 3) [000119] -------N---- | \--* ADD int <l:$159, c:$158> | |
N004 ( 2, 2) [000120] -------N---- | +--* LSH int <l:$157, c:$156> | |
N002 ( 1, 1) [000121] i----------- | | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 1, 1) [000122] -------N---- | | \--* CNS_INT int 2 $46 | |
N005 ( 1, 1) [000123] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
N012 ( 3, 2) [000167] ------------ \--* LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] <l:$c6, c:$c5> | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00006, tree [000035], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00006, tree [000036], tree -> 1 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00006, tree [000037], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00006, tree [000038], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00014, tree [000040], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00014, tree [000041], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00014, tree [000042], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00014, tree [000043], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00014, tree [000044], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00014, tree [000045], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00014, tree [000046], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00014, tree [000047], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00014, tree [000050], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00014, tree [000051], tree -> 0 | |
Propagating 0000000000000007 assertions for BB02, stmt STMT00014, tree [000160], tree -> 0 | |
Propagating 0000000000000007 assertions for BB05, stmt STMT00011, tree [000129], tree -> 0 | |
Propagating 0000000000000007 assertions for BB05, stmt STMT00011, tree [000128], tree -> 0 | |
Propagating 0000000000000007 assertions for BB05, stmt STMT00011, tree [000130], tree -> 0 | |
Propagating 0000000000000007 assertions for BB05, stmt STMT00012, tree [000169], tree -> 0 | |
Propagating 0000000000000007 assertions for BB05, stmt STMT00012, tree [000157], tree -> 4 | |
Propagating 000000000000000F assertions for BB05, stmt STMT00012, tree [000175], tree -> 0 | |
Propagating 000000000000000F assertions for BB05, stmt STMT00012, tree [000159], tree -> 0 | |
Propagating 000000000000000F assertions for BB05, stmt STMT00010, tree [000070], tree -> 0 | |
Propagating 000000000000000F assertions for BB05, stmt STMT00010, tree [000071], tree -> 0 | |
Propagating 0000000000000003 assertions for BB06, stmt STMT00013, tree [000091], tree -> 0 | |
Propagating 0000000000000003 assertions for BB06, stmt STMT00013, tree [000082], tree -> 0 | |
Propagating 0000000000000003 assertions for BB06, stmt STMT00013, tree [000083], tree -> 0 | |
*************** 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..016)-> BB06 ( cond ) i label target idxlen | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen | |
BB03 [0009] 1 BB02 0.25 [???..???)-> BB05 (always) i | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
***** BB01 | |
STMT00000 (IL 0x000...0x008) | |
N008 ( 6, 6) [000005] -A-XG---R--- * ASG int <l:$147, c:$146> | |
N007 ( 1, 1) [000004] D------N---- +--* LCL_VAR int V01 loc0 d:1 <l:$145, c:$144> | |
N006 ( 6, 6) [000003] ---XG------- \--* ADD int <l:$147, c:$146> | |
N004 ( 4, 4) [000001] ---XG------- +--* IND int <l:$143, c:$142> | |
N003 ( 2, 2) [000088] -------N---- | \--* ADD byref $c0 | |
N001 ( 1, 1) [000000] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000087] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] $42 | |
N005 ( 1, 1) [000002] ------------ \--* CNS_INT int -1 $41 | |
***** BB01 | |
STMT00001 (IL 0x009...0x00F) | |
N006 ( 4, 4) [000009] -A--GO--R--- * ASG ref <l:$1c4, c:$1c3> | |
N005 ( 1, 1) [000008] D------N---- +--* LCL_VAR ref V02 loc1 d:1 <l:$1c2, c:$200> | |
N004 ( 4, 4) [000007] n---GO------ \--* IND ref <l:$1c4, c:$1c3> | |
N003 ( 2, 2) [000090] -------N---- \--* ADD byref $c1 | |
N001 ( 1, 1) [000006] ------------ +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000089] ------------ \--* CNS_INT int 4 field offset Fseq[_array] $43 | |
***** BB01 | |
STMT00002 (IL 0x010...0x014) | |
N009 ( 14, 12) [000014] -A-X-------- * JTRUE void | |
N008 ( 12, 10) [000013] NA-X---N-U-- \--* LE int <l:$14d, c:$14c> | |
N006 ( 10, 8) [000173] -A-X-------- +--* COMMA int <l:$149, c:$148> | |
N004 ( 7, 6) [000171] -A-X----R--- | +--* ASG int $VN.Void | |
N003 ( 3, 2) [000170] D------N---- | | +--* LCL_VAR int V10 cse1 d:1 <l:$149, c:$148> | |
N002 ( 3, 3) [000012] ---X-------- | | \--* ARR_LENGTH int <l:$149, c:$148> | |
N001 ( 1, 1) [000011] ------------ | | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N005 ( 3, 2) [000172] ------------ | \--* LCL_VAR int V10 cse1 u:1 <l:$149, c:$148> | |
N007 ( 1, 1) [000010] ------------ \--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
------------ BB02 [01C..040) -> BB04 (cond), preds={BB01} succs={BB03,BB04} | |
***** BB02 | |
STMT00003 (IL 0x01C...0x025) | |
N011 ( 11, 11) [000021] -A--GO--R--- * ASG int $VN.Void | |
N010 ( 4, 4) [000020] n---GO-N---- +--* IND int $153 | |
N009 ( 2, 2) [000093] -------N---- | \--* ADD byref $c2 | |
N007 ( 1, 1) [000015] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N008 ( 1, 1) [000092] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N006 ( 6, 6) [000019] ----GO------ \--* ADD int <l:$155, c:$154> | |
N004 ( 4, 4) [000017] n---GO------ +--* IND int <l:$151, c:$150> | |
N003 ( 2, 2) [000095] -------N---- | \--* ADD byref $c2 | |
N001 ( 1, 1) [000016] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000094] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N005 ( 1, 1) [000018] ------------ \--* CNS_INT int 1 $45 | |
***** BB02 | |
STMT00004 (IL 0x02A...0x02C) | |
N006 ( 6, 6) [000025] -A--GO------ * ASG int $VN.Void | |
N004 ( 4, 4) [000024] n---GO-N---- +--* IND int $145 | |
N003 ( 2, 2) [000097] -------N---- | \--* ADD byref $c0 | |
N001 ( 1, 1) [000022] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000096] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] $42 | |
N005 ( 1, 1) [000023] ------------ \--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
***** BB02 | |
STMT00005 (IL 0x031...0x038) | |
N016 ( 23, 19) [000125] -A-XG---R--- * ASG ref <l:$341, c:$204> | |
N015 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 <l:$340, c:$204> | |
N014 ( 19, 16) [000124] -A-XG------- \--* IND ref <l:$341, c:$204> | |
N013 ( 16, 14) [000168] -A--G------- \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N011 ( 13, 12) [000166] -A--G---R--- +--* ASG byref $VN.Void | |
N010 ( 3, 2) [000165] D------N---- | +--* LCL_VAR byref V09 cse0 d:1 <l:$c6, c:$c5> | |
N009 ( 9, 9) [000115] ----G--N---- | \--* ADDR byref $300 | |
N008 ( 5, 5) [000116] a---G--N---- | \--* IND struct <l:$340, c:$380> | |
N007 ( 4, 4) [000117] -------N---- | \--* ADD byref $300 | |
N001 ( 1, 1) [000118] ------------ | +--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N006 ( 3, 3) [000119] -------N---- | \--* ADD int <l:$159, c:$158> | |
N004 ( 2, 2) [000120] -------N---- | +--* LSH int <l:$157, c:$156> | |
N002 ( 1, 1) [000121] i----------- | | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 1, 1) [000122] -------N---- | | \--* CNS_INT int 2 $46 | |
N005 ( 1, 1) [000123] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
N012 ( 3, 2) [000167] ------------ \--* LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] <l:$c6, c:$c5> | |
***** BB02 | |
STMT00006 (IL 0x039...0x03E) | |
N004 ( 3, 3) [000038] -A---O--R--- * ASG int $1d3 | |
N003 ( 1, 1) [000037] D------N---- +--* LCL_VAR int V05 tmp0 d:1 $1d3 | |
N002 ( 3, 2) [000036] #----O------ \--* IND int $1d3 | |
N001 ( 1, 1) [000035] ------------ \--* LCL_VAR ref V00 this u:1 (last use) $80 | |
***** BB02 | |
STMT00014 (IL ???... ???) | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
N010 ( 12, 11) [000051] J------N---- \--* EQ int <l:$15e, c:$15d> | |
N008 ( 10, 9) [000047] n----------- +--* IND int <l:$284, c:$184> | |
N007 ( 8, 7) [000046] -------N---- | \--* ADD int $15c | |
N005 ( 7, 6) [000044] #----------- | +--* IND int $1d5 | |
N004 ( 4, 4) [000043] #----------- | | \--* IND int $1d4 | |
N003 ( 2, 2) [000042] -------N---- | | \--* ADD int $15b | |
N001 ( 1, 1) [000040] ------------ | | +--* LCL_VAR int V05 tmp0 u:1 (last use) $1d3 | |
N002 ( 1, 1) [000041] ------------ | | \--* CNS_INT int 32 $47 | |
N006 ( 1, 1) [000045] ------------ | \--* CNS_INT int 12 $44 | |
N009 ( 1, 1) [000050] ------------ \--* CNS_INT int 0 $40 | |
------------ BB03 [???..???) -> BB05 (always), preds={BB02} succs={BB05} | |
------------ BB04 [???..???), preds={BB02} succs={BB05} | |
------------ BB05 [040..052) (return), preds={BB04,BB03} succs={} | |
***** BB05 | |
STMT00011 (IL 0x040...0x045) | |
N003 ( 5, 4) [000130] -A------R--- * ASG ref $VN.Null | |
N002 ( 3, 2) [000128] D------N---- +--* LCL_VAR ref V08 tmp3 d:1 $VN.Null | |
N001 ( 1, 1) [000129] ------------ \--* CNS_INT ref null $VN.Null | |
***** BB05 | |
STMT00012 (IL ???...0x04B) | |
N004 ( 8, 6) [000159] -A-XG------- * ASG ref $VN.Void | |
N002 ( 6, 4) [000157] *--XG--N---- +--* IND ref $VN.Null | |
N001 ( 3, 2) [000169] ------------ | \--* LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] $300 | |
N003 ( 1, 1) [000175] ------------ \--* CNS_INT ref null $VN.Null | |
***** BB05 | |
STMT00010 (IL 0x050...0x051) | |
N002 ( 4, 3) [000071] ------------ * RETURN ref $208 | |
N001 ( 3, 2) [000070] ------------ \--* LCL_VAR ref V07 tmp2 u:1 (last use) <l:$340, c:$204> | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
***** BB06 | |
STMT00013 (IL 0x016...0x017) | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack $VN.Void | |
N002 ( 1, 1) [000082] ------------ this in ecx \--* LCL_VAR ref V00 this u:1 (last use) $80 | |
------------------------------------------------------------------------------------------------------------------- | |
*************** Finishing PHASE Optimize index checks | |
*************** 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..016)-> BB06 ( cond ) i label target idxlen | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen | |
BB03 [0009] 1 BB02 0.25 [???..???)-> BB05 (always) i | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
***** BB01 | |
STMT00000 (IL 0x000...0x008) | |
N008 ( 6, 6) [000005] -A-XG---R--- * ASG int <l:$147, c:$146> | |
N007 ( 1, 1) [000004] D------N---- +--* LCL_VAR int V01 loc0 d:1 <l:$145, c:$144> | |
N006 ( 6, 6) [000003] ---XG------- \--* ADD int <l:$147, c:$146> | |
N004 ( 4, 4) [000001] ---XG------- +--* IND int <l:$143, c:$142> | |
N003 ( 2, 2) [000088] -------N---- | \--* ADD byref $c0 | |
N001 ( 1, 1) [000000] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000087] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] $42 | |
N005 ( 1, 1) [000002] ------------ \--* CNS_INT int -1 $41 | |
***** BB01 | |
STMT00001 (IL 0x009...0x00F) | |
N006 ( 4, 4) [000009] -A--GO--R--- * ASG ref <l:$1c4, c:$1c3> | |
N005 ( 1, 1) [000008] D------N---- +--* LCL_VAR ref V02 loc1 d:1 <l:$1c2, c:$200> | |
N004 ( 4, 4) [000007] n---GO------ \--* IND ref <l:$1c4, c:$1c3> | |
N003 ( 2, 2) [000090] -------N---- \--* ADD byref $c1 | |
N001 ( 1, 1) [000006] ------------ +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000089] ------------ \--* CNS_INT int 4 field offset Fseq[_array] $43 | |
***** BB01 | |
STMT00002 (IL 0x010...0x014) | |
N009 ( 14, 12) [000014] -A-X-------- * JTRUE void | |
N008 ( 12, 10) [000013] NA-X---N-U-- \--* LE int <l:$14d, c:$14c> | |
N006 ( 10, 8) [000173] -A-X-------- +--* COMMA int <l:$149, c:$148> | |
N004 ( 7, 6) [000171] -A-X----R--- | +--* ASG int $VN.Void | |
N003 ( 3, 2) [000170] D------N---- | | +--* LCL_VAR int V10 cse1 d:1 <l:$149, c:$148> | |
N002 ( 3, 3) [000012] ---X-------- | | \--* ARR_LENGTH int <l:$149, c:$148> | |
N001 ( 1, 1) [000011] ------------ | | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N005 ( 3, 2) [000172] ------------ | \--* LCL_VAR int V10 cse1 u:1 <l:$149, c:$148> | |
N007 ( 1, 1) [000010] ------------ \--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
------------ BB02 [01C..040) -> BB04 (cond), preds={BB01} succs={BB03,BB04} | |
***** BB02 | |
STMT00003 (IL 0x01C...0x025) | |
N011 ( 11, 11) [000021] -A--GO--R--- * ASG int $VN.Void | |
N010 ( 4, 4) [000020] n---GO-N---- +--* IND int $153 | |
N009 ( 2, 2) [000093] -------N---- | \--* ADD byref $c2 | |
N007 ( 1, 1) [000015] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N008 ( 1, 1) [000092] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N006 ( 6, 6) [000019] ----GO------ \--* ADD int <l:$155, c:$154> | |
N004 ( 4, 4) [000017] n---GO------ +--* IND int <l:$151, c:$150> | |
N003 ( 2, 2) [000095] -------N---- | \--* ADD byref $c2 | |
N001 ( 1, 1) [000016] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000094] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N005 ( 1, 1) [000018] ------------ \--* CNS_INT int 1 $45 | |
***** BB02 | |
STMT00004 (IL 0x02A...0x02C) | |
N006 ( 6, 6) [000025] -A--GO------ * ASG int $VN.Void | |
N004 ( 4, 4) [000024] n---GO-N---- +--* IND int $145 | |
N003 ( 2, 2) [000097] -------N---- | \--* ADD byref $c0 | |
N001 ( 1, 1) [000022] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000096] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] $42 | |
N005 ( 1, 1) [000023] ------------ \--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
***** BB02 | |
STMT00005 (IL 0x031...0x038) | |
N016 ( 23, 19) [000125] -A-XG---R--- * ASG ref <l:$341, c:$204> | |
N015 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 <l:$340, c:$204> | |
N014 ( 19, 16) [000124] -A-XG------- \--* IND ref <l:$341, c:$204> | |
N013 ( 16, 14) [000168] -A--G------- \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N011 ( 13, 12) [000166] -A--G---R--- +--* ASG byref $VN.Void | |
N010 ( 3, 2) [000165] D------N---- | +--* LCL_VAR byref V09 cse0 d:1 <l:$c6, c:$c5> | |
N009 ( 9, 9) [000115] ----G--N---- | \--* ADDR byref $300 | |
N008 ( 5, 5) [000116] a---G--N---- | \--* IND struct <l:$340, c:$380> | |
N007 ( 4, 4) [000117] -------N---- | \--* ADD byref $300 | |
N001 ( 1, 1) [000118] ------------ | +--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N006 ( 3, 3) [000119] -------N---- | \--* ADD int <l:$159, c:$158> | |
N004 ( 2, 2) [000120] -------N---- | +--* LSH int <l:$157, c:$156> | |
N002 ( 1, 1) [000121] i----------- | | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 1, 1) [000122] -------N---- | | \--* CNS_INT int 2 $46 | |
N005 ( 1, 1) [000123] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
N012 ( 3, 2) [000167] ------------ \--* LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] <l:$c6, c:$c5> | |
***** BB02 | |
STMT00006 (IL 0x039...0x03E) | |
N004 ( 3, 3) [000038] -A---O--R--- * ASG int $1d3 | |
N003 ( 1, 1) [000037] D------N---- +--* LCL_VAR int V05 tmp0 d:1 $1d3 | |
N002 ( 3, 2) [000036] #----O------ \--* IND int $1d3 | |
N001 ( 1, 1) [000035] ------------ \--* LCL_VAR ref V00 this u:1 (last use) $80 | |
***** BB02 | |
STMT00014 (IL ???... ???) | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
N010 ( 12, 11) [000051] J------N---- \--* EQ int <l:$15e, c:$15d> | |
N008 ( 10, 9) [000047] n----------- +--* IND int <l:$284, c:$184> | |
N007 ( 8, 7) [000046] -------N---- | \--* ADD int $15c | |
N005 ( 7, 6) [000044] #----------- | +--* IND int $1d5 | |
N004 ( 4, 4) [000043] #----------- | | \--* IND int $1d4 | |
N003 ( 2, 2) [000042] -------N---- | | \--* ADD int $15b | |
N001 ( 1, 1) [000040] ------------ | | +--* LCL_VAR int V05 tmp0 u:1 (last use) $1d3 | |
N002 ( 1, 1) [000041] ------------ | | \--* CNS_INT int 32 $47 | |
N006 ( 1, 1) [000045] ------------ | \--* CNS_INT int 12 $44 | |
N009 ( 1, 1) [000050] ------------ \--* CNS_INT int 0 $40 | |
------------ BB03 [???..???) -> BB05 (always), preds={BB02} succs={BB05} | |
------------ BB04 [???..???), preds={BB02} succs={BB05} | |
------------ BB05 [040..052) (return), preds={BB04,BB03} succs={} | |
***** BB05 | |
STMT00011 (IL 0x040...0x045) | |
N003 ( 5, 4) [000130] -A------R--- * ASG ref $VN.Null | |
N002 ( 3, 2) [000128] D------N---- +--* LCL_VAR ref V08 tmp3 d:1 $VN.Null | |
N001 ( 1, 1) [000129] ------------ \--* CNS_INT ref null $VN.Null | |
***** BB05 | |
STMT00012 (IL ???...0x04B) | |
N004 ( 8, 6) [000159] -A-XG------- * ASG ref $VN.Void | |
N002 ( 6, 4) [000157] *--XG--N---- +--* IND ref $VN.Null | |
N001 ( 3, 2) [000169] ------------ | \--* LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] $300 | |
N003 ( 1, 1) [000175] ------------ \--* CNS_INT ref null $VN.Null | |
***** BB05 | |
STMT00010 (IL 0x050...0x051) | |
N002 ( 4, 3) [000071] ------------ * RETURN ref $208 | |
N001 ( 3, 2) [000070] ------------ \--* LCL_VAR ref V07 tmp2 u:1 (last use) <l:$340, c:$204> | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
***** BB06 | |
STMT00013 (IL 0x016...0x017) | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack $VN.Void | |
N002 ( 1, 1) [000082] ------------ this in ecx \--* LCL_VAR ref V00 this u:1 (last use) $80 | |
------------------------------------------------------------------------------------------------------------------- | |
*************** Starting PHASE Rationalize IR | |
rewriting asg(LCL_VAR, X) to STORE_LCL_VAR(X) | |
N008 ( 6, 6) [000005] DA-XG------- * STORE_LCL_VAR int V01 loc0 d:1 | |
rewriting asg(LCL_VAR, X) to STORE_LCL_VAR(X) | |
N006 ( 4, 4) [000009] DA--GO------ * STORE_LCL_VAR ref V02 loc1 d:1 | |
rewriting asg(LCL_VAR, X) to STORE_LCL_VAR(X) | |
N004 ( 7, 6) [000171] DA-X-------- * STORE_LCL_VAR int V10 cse1 d:1 | |
Rewriting GT_ADDR(GT_IND(X)) to X: | |
N001 ( 1, 1) [000118] ------------ t118 = LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N002 ( 1, 1) [000121] ------------ t121 = LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 1, 1) [000122] -------N---- t122 = CNS_INT int 2 $46 | |
/--* t121 int | |
+--* t122 int | |
N004 ( 2, 2) [000120] -------N---- t120 = * LSH int <l:$157, c:$156> | |
N005 ( 1, 1) [000123] ------------ t123 = CNS_INT int 8 Fseq[#FirstElem] $42 | |
/--* t120 int | |
+--* t123 int | |
N006 ( 3, 3) [000119] -------N---- t119 = * ADD int <l:$159, c:$158> | |
/--* t118 ref | |
+--* t119 int | |
N007 ( 4, 4) [000117] -------N---- t117 = * ADD byref $300 | |
rewriting asg(LCL_VAR, X) to STORE_LCL_VAR(X) | |
N011 ( 13, 12) [000166] DA--G------- * STORE_LCL_VAR byref V09 cse0 d:1 | |
rewriting asg(LCL_VAR, X) to STORE_LCL_VAR(X) | |
N016 ( 23, 19) [000125] DA-XG------- * STORE_LCL_VAR ref V07 tmp2 d:1 | |
rewriting asg(LCL_VAR, X) to STORE_LCL_VAR(X) | |
N004 ( 3, 3) [000038] DA---O------ * STORE_LCL_VAR int V05 tmp0 d:1 | |
rewriting asg(LCL_VAR, X) to STORE_LCL_VAR(X) | |
N003 ( 5, 4) [000130] DA---------- * STORE_LCL_VAR ref V08 tmp3 d:1 | |
*************** 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..016)-> BB06 ( cond ) i label target idxlen LIR | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen LIR | |
BB03 [0009] 1 BB02 0.25 [???..???)-> BB05 (always) i LIR | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target LIR | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen LIR | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe LIR | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
[000177] ------------ IL_OFFSET void IL offset: 0x0 | |
N001 ( 1, 1) [000000] ------------ t0 = LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000087] ------------ t87 = CNS_INT int 8 field offset Fseq[_size] $42 | |
/--* t0 ref | |
+--* t87 int | |
N003 ( 2, 2) [000088] -------N---- t88 = * ADD byref $c0 | |
/--* t88 byref | |
N004 ( 4, 4) [000001] ---XG------- t1 = * IND int <l:$143, c:$142> | |
N005 ( 1, 1) [000002] ------------ t2 = CNS_INT int -1 $41 | |
/--* t1 int | |
+--* t2 int | |
N006 ( 6, 6) [000003] ---XG------- t3 = * ADD int <l:$147, c:$146> | |
/--* t3 int | |
N008 ( 6, 6) [000005] DA-XG------- * STORE_LCL_VAR int V01 loc0 d:1 | |
[000178] ------------ IL_OFFSET void IL offset: 0x9 | |
N001 ( 1, 1) [000006] ------------ t6 = LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000089] ------------ t89 = CNS_INT int 4 field offset Fseq[_array] $43 | |
/--* t6 ref | |
+--* t89 int | |
N003 ( 2, 2) [000090] -------N---- t90 = * ADD byref $c1 | |
/--* t90 byref | |
N004 ( 4, 4) [000007] n---GO------ t7 = * IND ref <l:$1c4, c:$1c3> | |
/--* t7 ref | |
N006 ( 4, 4) [000009] DA--GO------ * STORE_LCL_VAR ref V02 loc1 d:1 | |
[000179] ------------ IL_OFFSET void IL offset: 0x10 | |
N001 ( 1, 1) [000011] ------------ t11 = LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
/--* t11 ref | |
N002 ( 3, 3) [000012] ---X-------- t12 = * ARR_LENGTH int <l:$149, c:$148> | |
/--* t12 int | |
N004 ( 7, 6) [000171] DA-X-------- * STORE_LCL_VAR int V10 cse1 d:1 | |
N005 ( 3, 2) [000172] ------------ t172 = LCL_VAR int V10 cse1 u:1 <l:$149, c:$148> | |
N007 ( 1, 1) [000010] ------------ t10 = LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
/--* t172 int | |
+--* t10 int | |
N008 ( 12, 10) [000013] N--X---N-U-- t13 = * LE int <l:$14d, c:$14c> | |
/--* t13 int | |
N009 ( 14, 12) [000014] ---X-------- * JTRUE void | |
------------ BB02 [01C..040) -> BB04 (cond), preds={BB01} succs={BB03,BB04} | |
[000180] ------------ IL_OFFSET void IL offset: 0x1c | |
N001 ( 1, 1) [000016] ------------ t16 = LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000094] ------------ t94 = CNS_INT int 12 field offset Fseq[_version] $44 | |
/--* t16 ref | |
+--* t94 int | |
N003 ( 2, 2) [000095] -------N---- t95 = * ADD byref $c2 | |
/--* t95 byref | |
N004 ( 4, 4) [000017] n---GO------ t17 = * IND int <l:$151, c:$150> | |
N005 ( 1, 1) [000018] ------------ t18 = CNS_INT int 1 $45 | |
/--* t17 int | |
+--* t18 int | |
N006 ( 6, 6) [000019] ----GO------ t19 = * ADD int <l:$155, c:$154> | |
N007 ( 1, 1) [000015] ------------ t15 = LCL_VAR ref V00 this u:1 $80 | |
N008 ( 1, 1) [000092] ------------ t92 = CNS_INT int 12 field offset Fseq[_version] $44 | |
/--* t15 ref | |
+--* t92 int | |
N009 ( 2, 2) [000093] -------N---- t93 = * ADD byref $c2 | |
/--* t93 byref | |
+--* t19 int | |
[000181] -A--GO------ * STOREIND int | |
[000182] ------------ IL_OFFSET void IL offset: 0x2a | |
N001 ( 1, 1) [000022] ------------ t22 = LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000096] ------------ t96 = CNS_INT int 8 field offset Fseq[_size] $42 | |
/--* t22 ref | |
+--* t96 int | |
N003 ( 2, 2) [000097] -------N---- t97 = * ADD byref $c0 | |
N005 ( 1, 1) [000023] ------------ t23 = LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
/--* t97 byref | |
+--* t23 int | |
[000183] -A--GO------ * STOREIND int | |
[000184] ------------ IL_OFFSET void IL offset: 0x31 | |
N001 ( 1, 1) [000118] ------------ t118 = LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N002 ( 1, 1) [000121] ------------ t121 = LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 1, 1) [000122] -------N---- t122 = CNS_INT int 2 $46 | |
/--* t121 int | |
+--* t122 int | |
N004 ( 2, 2) [000120] -------N---- t120 = * LSH int <l:$157, c:$156> | |
N005 ( 1, 1) [000123] ------------ t123 = CNS_INT int 8 Fseq[#FirstElem] $42 | |
/--* t120 int | |
+--* t123 int | |
N006 ( 3, 3) [000119] -------N---- t119 = * ADD int <l:$159, c:$158> | |
/--* t118 ref | |
+--* t119 int | |
N007 ( 4, 4) [000117] -------N---- t117 = * ADD byref $300 | |
/--* t117 byref | |
N011 ( 13, 12) [000166] DA--G------- * STORE_LCL_VAR byref V09 cse0 d:1 | |
N012 ( 3, 2) [000167] ------------ t167 = LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] <l:$c6, c:$c5> | |
/--* t167 byref | |
N014 ( 19, 16) [000124] ---XG------- t124 = * IND ref <l:$341, c:$204> | |
/--* t124 ref | |
N016 ( 23, 19) [000125] DA-XG------- * STORE_LCL_VAR ref V07 tmp2 d:1 | |
[000185] ------------ IL_OFFSET void IL offset: 0x39 | |
N001 ( 1, 1) [000035] ------------ t35 = LCL_VAR ref V00 this u:1 (last use) $80 | |
/--* t35 ref | |
N002 ( 3, 2) [000036] #----O------ t36 = * IND int $1d3 | |
/--* t36 int | |
N004 ( 3, 3) [000038] DA---O------ * STORE_LCL_VAR int V05 tmp0 d:1 | |
N001 ( 1, 1) [000040] ------------ t40 = LCL_VAR int V05 tmp0 u:1 (last use) $1d3 | |
N002 ( 1, 1) [000041] ------------ t41 = CNS_INT int 32 $47 | |
/--* t40 int | |
+--* t41 int | |
N003 ( 2, 2) [000042] -------N---- t42 = * ADD int $15b | |
/--* t42 int | |
N004 ( 4, 4) [000043] #----------- t43 = * IND int $1d4 | |
/--* t43 int | |
N005 ( 7, 6) [000044] #----------- t44 = * IND int $1d5 | |
N006 ( 1, 1) [000045] ------------ t45 = CNS_INT int 12 $44 | |
/--* t44 int | |
+--* t45 int | |
N007 ( 8, 7) [000046] -------N---- t46 = * ADD int $15c | |
/--* t46 int | |
N008 ( 10, 9) [000047] n----------- t47 = * IND int <l:$284, c:$184> | |
N009 ( 1, 1) [000050] ------------ t50 = CNS_INT int 0 $40 | |
/--* t47 int | |
+--* t50 int | |
N010 ( 12, 11) [000051] J------N---- t51 = * EQ int <l:$15e, c:$15d> | |
/--* t51 int | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
------------ BB03 [???..???) -> BB05 (always), preds={BB02} succs={BB05} | |
------------ BB04 [???..???), preds={BB02} succs={BB05} | |
------------ BB05 [040..052) (return), preds={BB04,BB03} succs={} | |
[000186] ------------ IL_OFFSET void IL offset: 0x40 | |
N001 ( 1, 1) [000129] ------------ t129 = CNS_INT ref null $VN.Null | |
/--* t129 ref | |
N003 ( 5, 4) [000130] DA---------- * STORE_LCL_VAR ref V08 tmp3 d:1 | |
N001 ( 3, 2) [000169] ------------ t169 = LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] $300 | |
N003 ( 1, 1) [000175] ------------ t175 = CNS_INT ref null $VN.Null | |
/--* t169 byref | |
+--* t175 ref | |
[000187] -A-XG------- * STOREIND ref | |
[000188] ------------ IL_OFFSET void IL offset: 0x50 | |
N001 ( 3, 2) [000070] ------------ t70 = LCL_VAR ref V07 tmp2 u:1 (last use) <l:$340, c:$204> | |
/--* t70 ref | |
N002 ( 4, 3) [000071] ------------ * RETURN ref $208 | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
[000189] ------------ IL_OFFSET void IL offset: 0x16 | |
N002 ( 1, 1) [000082] ------------ t82 = LCL_VAR ref V00 this u:1 (last use) $80 | |
/--* t82 ref this in ecx | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack $VN.Void | |
------------------------------------------------------------------------------------------------------------------- | |
*************** In fgDebugCheckBBlist | |
*************** Starting PHASE Do 'simple' lowering | |
*************** 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..016)-> BB06 ( cond ) i label target idxlen LIR | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen LIR | |
BB03 [0009] 1 BB02 0.25 [???..???)-> BB05 (always) i LIR | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target LIR | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen LIR | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe LIR | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
[000177] ------------ IL_OFFSET void IL offset: 0x0 | |
N001 ( 1, 1) [000000] ------------ t0 = LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000087] ------------ t87 = CNS_INT int 8 field offset Fseq[_size] $42 | |
/--* t0 ref | |
+--* t87 int | |
N003 ( 2, 2) [000088] -------N---- t88 = * ADD byref $c0 | |
/--* t88 byref | |
N004 ( 4, 4) [000001] ---XG------- t1 = * IND int <l:$143, c:$142> | |
N005 ( 1, 1) [000002] ------------ t2 = CNS_INT int -1 $41 | |
/--* t1 int | |
+--* t2 int | |
N006 ( 6, 6) [000003] ---XG------- t3 = * ADD int <l:$147, c:$146> | |
/--* t3 int | |
N008 ( 6, 6) [000005] DA-XG------- * STORE_LCL_VAR int V01 loc0 d:1 | |
[000178] ------------ IL_OFFSET void IL offset: 0x9 | |
N001 ( 1, 1) [000006] ------------ t6 = LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000089] ------------ t89 = CNS_INT int 4 field offset Fseq[_array] $43 | |
/--* t6 ref | |
+--* t89 int | |
N003 ( 2, 2) [000090] -------N---- t90 = * ADD byref $c1 | |
/--* t90 byref | |
N004 ( 4, 4) [000007] n---GO------ t7 = * IND ref <l:$1c4, c:$1c3> | |
/--* t7 ref | |
N006 ( 4, 4) [000009] DA--GO------ * STORE_LCL_VAR ref V02 loc1 d:1 | |
[000179] ------------ IL_OFFSET void IL offset: 0x10 | |
N001 ( 1, 1) [000011] ------------ t11 = LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
[000190] ------------ t190 = CNS_INT int 4 | |
/--* t11 ref | |
+--* t190 int | |
[000191] ------------ t191 = * ADD ref | |
/--* t191 ref | |
N002 ( 3, 3) [000012] ---X-------- t12 = * IND int <l:$149, c:$148> | |
/--* t12 int | |
N004 ( 7, 6) [000171] DA-X-------- * STORE_LCL_VAR int V10 cse1 d:1 | |
N005 ( 3, 2) [000172] ------------ t172 = LCL_VAR int V10 cse1 u:1 <l:$149, c:$148> | |
N007 ( 1, 1) [000010] ------------ t10 = LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
/--* t172 int | |
+--* t10 int | |
N008 ( 12, 10) [000013] N--X---N-U-- t13 = * LE int <l:$14d, c:$14c> | |
/--* t13 int | |
N009 ( 14, 12) [000014] ---X-------- * JTRUE void | |
------------ BB02 [01C..040) -> BB04 (cond), preds={BB01} succs={BB03,BB04} | |
[000180] ------------ IL_OFFSET void IL offset: 0x1c | |
N001 ( 1, 1) [000016] ------------ t16 = LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000094] ------------ t94 = CNS_INT int 12 field offset Fseq[_version] $44 | |
/--* t16 ref | |
+--* t94 int | |
N003 ( 2, 2) [000095] -------N---- t95 = * ADD byref $c2 | |
/--* t95 byref | |
N004 ( 4, 4) [000017] n---GO------ t17 = * IND int <l:$151, c:$150> | |
N005 ( 1, 1) [000018] ------------ t18 = CNS_INT int 1 $45 | |
/--* t17 int | |
+--* t18 int | |
N006 ( 6, 6) [000019] ----GO------ t19 = * ADD int <l:$155, c:$154> | |
N007 ( 1, 1) [000015] ------------ t15 = LCL_VAR ref V00 this u:1 $80 | |
N008 ( 1, 1) [000092] ------------ t92 = CNS_INT int 12 field offset Fseq[_version] $44 | |
/--* t15 ref | |
+--* t92 int | |
N009 ( 2, 2) [000093] -------N---- t93 = * ADD byref $c2 | |
/--* t93 byref | |
+--* t19 int | |
[000181] -A--GO------ * STOREIND int | |
[000182] ------------ IL_OFFSET void IL offset: 0x2a | |
N001 ( 1, 1) [000022] ------------ t22 = LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000096] ------------ t96 = CNS_INT int 8 field offset Fseq[_size] $42 | |
/--* t22 ref | |
+--* t96 int | |
N003 ( 2, 2) [000097] -------N---- t97 = * ADD byref $c0 | |
N005 ( 1, 1) [000023] ------------ t23 = LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
/--* t97 byref | |
+--* t23 int | |
[000183] -A--GO------ * STOREIND int | |
[000184] ------------ IL_OFFSET void IL offset: 0x31 | |
N001 ( 1, 1) [000118] ------------ t118 = LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N002 ( 1, 1) [000121] ------------ t121 = LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 1, 1) [000122] -------N---- t122 = CNS_INT int 2 $46 | |
/--* t121 int | |
+--* t122 int | |
N004 ( 2, 2) [000120] -------N---- t120 = * LSH int <l:$157, c:$156> | |
N005 ( 1, 1) [000123] ------------ t123 = CNS_INT int 8 Fseq[#FirstElem] $42 | |
/--* t120 int | |
+--* t123 int | |
N006 ( 3, 3) [000119] -------N---- t119 = * ADD int <l:$159, c:$158> | |
/--* t118 ref | |
+--* t119 int | |
N007 ( 4, 4) [000117] -------N---- t117 = * ADD byref $300 | |
/--* t117 byref | |
N011 ( 13, 12) [000166] DA--G------- * STORE_LCL_VAR byref V09 cse0 d:1 | |
N012 ( 3, 2) [000167] ------------ t167 = LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] <l:$c6, c:$c5> | |
/--* t167 byref | |
N014 ( 19, 16) [000124] ---XG------- t124 = * IND ref <l:$341, c:$204> | |
/--* t124 ref | |
N016 ( 23, 19) [000125] DA-XG------- * STORE_LCL_VAR ref V07 tmp2 d:1 | |
[000185] ------------ IL_OFFSET void IL offset: 0x39 | |
N001 ( 1, 1) [000035] ------------ t35 = LCL_VAR ref V00 this u:1 (last use) $80 | |
/--* t35 ref | |
N002 ( 3, 2) [000036] #----O------ t36 = * IND int $1d3 | |
/--* t36 int | |
N004 ( 3, 3) [000038] DA---O------ * STORE_LCL_VAR int V05 tmp0 d:1 | |
N001 ( 1, 1) [000040] ------------ t40 = LCL_VAR int V05 tmp0 u:1 (last use) $1d3 | |
N002 ( 1, 1) [000041] ------------ t41 = CNS_INT int 32 $47 | |
/--* t40 int | |
+--* t41 int | |
N003 ( 2, 2) [000042] -------N---- t42 = * ADD int $15b | |
/--* t42 int | |
N004 ( 4, 4) [000043] #----------- t43 = * IND int $1d4 | |
/--* t43 int | |
N005 ( 7, 6) [000044] #----------- t44 = * IND int $1d5 | |
N006 ( 1, 1) [000045] ------------ t45 = CNS_INT int 12 $44 | |
/--* t44 int | |
+--* t45 int | |
N007 ( 8, 7) [000046] -------N---- t46 = * ADD int $15c | |
/--* t46 int | |
N008 ( 10, 9) [000047] n----------- t47 = * IND int <l:$284, c:$184> | |
N009 ( 1, 1) [000050] ------------ t50 = CNS_INT int 0 $40 | |
/--* t47 int | |
+--* t50 int | |
N010 ( 12, 11) [000051] J------N---- t51 = * EQ int <l:$15e, c:$15d> | |
/--* t51 int | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
------------ BB03 [???..???) -> BB05 (always), preds={BB02} succs={BB05} | |
------------ BB04 [???..???), preds={BB02} succs={BB05} | |
------------ BB05 [040..052) (return), preds={BB04,BB03} succs={} | |
[000186] ------------ IL_OFFSET void IL offset: 0x40 | |
N001 ( 1, 1) [000129] ------------ t129 = CNS_INT ref null $VN.Null | |
/--* t129 ref | |
N003 ( 5, 4) [000130] DA---------- * STORE_LCL_VAR ref V08 tmp3 d:1 | |
N001 ( 3, 2) [000169] ------------ t169 = LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] $300 | |
N003 ( 1, 1) [000175] ------------ t175 = CNS_INT ref null $VN.Null | |
/--* t169 byref | |
+--* t175 ref | |
[000187] -A-XG------- * STOREIND ref | |
[000188] ------------ IL_OFFSET void IL offset: 0x50 | |
N001 ( 3, 2) [000070] ------------ t70 = LCL_VAR ref V07 tmp2 u:1 (last use) <l:$340, c:$204> | |
/--* t70 ref | |
N002 ( 4, 3) [000071] ------------ * RETURN ref $208 | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
[000189] ------------ IL_OFFSET void IL offset: 0x16 | |
N002 ( 1, 1) [000082] ------------ t82 = LCL_VAR ref V00 this u:1 (last use) $80 | |
/--* t82 ref this in ecx | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack $VN.Void | |
------------------------------------------------------------------------------------------------------------------- | |
*************** Starting PHASE Lowering nodeinfo | |
Addressing mode: | |
Base | |
N001 ( 1, 1) [000000] ------------ * LCL_VAR ref V00 this u:1 $80 | |
+ 8 | |
Removing unused node: | |
N002 ( 1, 1) [000087] -c---------- * CNS_INT int 8 field offset Fseq[_size] $42 | |
New addressing mode node: | |
N003 ( 2, 2) [000088] ------------ * LEA(b+8) byref | |
Addressing mode: | |
Base | |
N001 ( 1, 1) [000006] ------------ * LCL_VAR ref V00 this u:1 $80 | |
+ 4 | |
Removing unused node: | |
N002 ( 1, 1) [000089] -c---------- * CNS_INT int 4 field offset Fseq[_array] $43 | |
New addressing mode node: | |
N003 ( 2, 2) [000090] ------------ * LEA(b+4) byref | |
Addressing mode: | |
Base | |
N001 ( 1, 1) [000011] ------------ * LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
+ 4 | |
Removing unused node: | |
[000190] -c---------- * CNS_INT int 4 | |
New addressing mode node: | |
[000191] ------------ * LEA(b+4) ref | |
Addressing mode: | |
Base | |
N001 ( 1, 1) [000016] ------------ * LCL_VAR ref V00 this u:1 $80 | |
+ 12 | |
Removing unused node: | |
N002 ( 1, 1) [000094] -c---------- * CNS_INT int 12 field offset Fseq[_version] $44 | |
New addressing mode node: | |
N003 ( 2, 2) [000095] ------------ * LEA(b+12) byref | |
Addressing mode: | |
Base | |
N007 ( 1, 1) [000015] ------------ * LCL_VAR ref V00 this u:1 $80 | |
+ 12 | |
Removing unused node: | |
N008 ( 1, 1) [000092] -c---------- * CNS_INT int 12 field offset Fseq[_version] $44 | |
New addressing mode node: | |
N009 ( 2, 2) [000093] ------------ * LEA(b+12) byref | |
Lower succesfully detected an assignment of the form: *addrMode BinOp= source | |
N001 ( 1, 1) [000016] ------------ t16 = LCL_VAR ref V00 this u:1 $80 | |
/--* t16 ref | |
N003 ( 2, 2) [000095] -c---------- t95 = * LEA(b+12) byref | |
/--* t95 byref | |
N004 ( 4, 4) [000017] n---GO------ t17 = * IND int <l:$151, c:$150> | |
N005 ( 1, 1) [000018] -c---------- t18 = CNS_INT int 1 $45 | |
/--* t17 int | |
+--* t18 int | |
N006 ( 6, 6) [000019] ----GO------ t19 = * ADD int <l:$155, c:$154> | |
N007 ( 1, 1) [000015] ------------ t15 = LCL_VAR ref V00 this u:1 $80 | |
/--* t15 ref | |
N009 ( 2, 2) [000093] ------------ t93 = * LEA(b+12) byref | |
/--* t93 byref | |
+--* t19 int | |
[000181] -A--GO------ * STOREIND int | |
Addressing mode: | |
Base | |
N001 ( 1, 1) [000022] ------------ * LCL_VAR ref V00 this u:1 $80 | |
+ 8 | |
Removing unused node: | |
N002 ( 1, 1) [000096] -c---------- * CNS_INT int 8 field offset Fseq[_size] $42 | |
New addressing mode node: | |
N003 ( 2, 2) [000097] ------------ * LEA(b+8) byref | |
Lower of StoreInd didn't mark the node as self contained for reason: 4 | |
N001 ( 1, 1) [000022] ------------ t22 = LCL_VAR ref V00 this u:1 $80 | |
/--* t22 ref | |
N003 ( 2, 2) [000097] ------------ t97 = * LEA(b+8) byref | |
N005 ( 1, 1) [000023] ------------ t23 = LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
/--* t97 byref | |
+--* t23 int | |
[000183] -A--GO------ * STOREIND int | |
Addressing mode: | |
Base | |
N001 ( 1, 1) [000118] ------------ * LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
+ Index * 4 + 8 | |
N002 ( 1, 1) [000121] ------------ * LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
Removing unused node: | |
N006 ( 3, 3) [000119] -------N---- * ADD int <l:$159, c:$158> | |
Removing unused node: | |
N005 ( 1, 1) [000123] -c---------- * CNS_INT int 8 Fseq[#FirstElem] $42 | |
Removing unused node: | |
N004 ( 2, 2) [000120] -------N---- * LSH int <l:$157, c:$156> | |
Removing unused node: | |
N003 ( 1, 1) [000122] -c-----N---- * CNS_INT int 2 $46 | |
New addressing mode node: | |
N007 ( 4, 4) [000117] -------N---- * LEA(b+(i*4)+8) byref | |
Addressing mode: | |
Base | |
N001 ( 1, 1) [000040] ------------ * LCL_VAR int V05 tmp0 u:1 (last use) $1d3 | |
+ 32 | |
Removing unused node: | |
N002 ( 1, 1) [000041] -c---------- * CNS_INT int 32 $47 | |
New addressing mode node: | |
N003 ( 2, 2) [000042] ------------ * LEA(b+32) int | |
Addressing mode: | |
Base | |
N005 ( 7, 6) [000044] #----------- * IND int $1d5 | |
+ 12 | |
Removing unused node: | |
N006 ( 1, 1) [000045] -c---------- * CNS_INT int 12 $44 | |
New addressing mode node: | |
N007 ( 8, 7) [000046] ------------ * LEA(b+12) int | |
Lower of StoreInd didn't mark the node as self contained for reason: 4 | |
N001 ( 3, 2) [000169] ------------ t169 = LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] $300 | |
N003 ( 1, 1) [000175] ------------ t175 = CNS_INT ref null $VN.Null | |
/--* t169 byref | |
+--* t175 ref | |
[000187] -A-XG------- * STOREIND ref | |
lowering GT_RETURN | |
N002 ( 4, 3) [000071] ------------ * RETURN ref $208 | |
============lowering call (before): | |
N002 ( 1, 1) [000082] ------------ t82 = LCL_VAR ref V00 this u:1 (last use) $80 | |
/--* t82 ref this in ecx | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack $VN.Void | |
objp: | |
====== | |
lowering arg : N001 ( 0, 0) [000091] ----------L- * ARGPLACE ref $202 | |
args: | |
====== | |
late: | |
====== | |
lowering arg : N002 ( 1, 1) [000082] ------------ * LCL_VAR ref V00 this u:1 (last use) $80 | |
new node is : [000192] ------------ * PUTARG_REG ref REG ecx | |
lowering call (after): | |
N002 ( 1, 1) [000082] ------------ t82 = LCL_VAR ref V00 this u:1 (last use) $80 | |
/--* t82 ref | |
[000192] ------------ t192 = * PUTARG_REG ref REG ecx | |
/--* t192 ref this in ecx | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack $VN.Void | |
Lower has completed modifying nodes. | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB06 ( cond ) i label target idxlen LIR | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen LIR | |
BB03 [0009] 1 BB02 0.25 [???..???)-> BB05 (always) i LIR | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target LIR | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen LIR | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe LIR | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
[000177] ------------ IL_OFFSET void IL offset: 0x0 | |
N001 ( 1, 1) [000000] ------------ t0 = LCL_VAR ref V00 this u:1 $80 | |
/--* t0 ref | |
N003 ( 2, 2) [000088] -c---------- t88 = * LEA(b+8) byref | |
/--* t88 byref | |
N004 ( 4, 4) [000001] ---XG------- t1 = * IND int <l:$143, c:$142> | |
N005 ( 1, 1) [000002] -c---------- t2 = CNS_INT int -1 $41 | |
/--* t1 int | |
+--* t2 int | |
N006 ( 6, 6) [000003] ---XG------- t3 = * ADD int <l:$147, c:$146> | |
/--* t3 int | |
N008 ( 6, 6) [000005] DA-XG------- * STORE_LCL_VAR int V01 loc0 d:1 | |
[000178] ------------ IL_OFFSET void IL offset: 0x9 | |
N001 ( 1, 1) [000006] ------------ t6 = LCL_VAR ref V00 this u:1 $80 | |
/--* t6 ref | |
N003 ( 2, 2) [000090] -c---------- t90 = * LEA(b+4) byref | |
/--* t90 byref | |
N004 ( 4, 4) [000007] n---GO------ t7 = * IND ref <l:$1c4, c:$1c3> | |
/--* t7 ref | |
N006 ( 4, 4) [000009] DA--GO------ * STORE_LCL_VAR ref V02 loc1 d:1 | |
[000179] ------------ IL_OFFSET void IL offset: 0x10 | |
N001 ( 1, 1) [000011] ------------ t11 = LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
/--* t11 ref | |
[000191] -c---------- t191 = * LEA(b+4) ref | |
/--* t191 ref | |
N002 ( 3, 3) [000012] ---X-------- t12 = * IND int <l:$149, c:$148> | |
/--* t12 int | |
N004 ( 7, 6) [000171] DA-X-------- * STORE_LCL_VAR int V10 cse1 d:1 | |
N005 ( 3, 2) [000172] ------------ t172 = LCL_VAR int V10 cse1 u:1 <l:$149, c:$148> | |
N007 ( 1, 1) [000010] ------------ t10 = LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
/--* t172 int | |
+--* t10 int | |
N008 ( 12, 10) [000013] N--X---N-U-- * LE void <l:$14d, c:$14c> | |
N009 ( 14, 12) [000014] ---X-------- * JTRUE void | |
------------ BB02 [01C..040) -> BB04 (cond), preds={BB01} succs={BB03,BB04} | |
[000180] ------------ IL_OFFSET void IL offset: 0x1c | |
N001 ( 1, 1) [000016] -c---------- t16 = LCL_VAR ref V00 this u:1 $80 | |
/--* t16 ref | |
N003 ( 2, 2) [000095] -c---------- t95 = * LEA(b+12) byref | |
/--* t95 byref | |
N004 ( 4, 4) [000017] nc--GO------ t17 = * IND int <l:$151, c:$150> | |
N005 ( 1, 1) [000018] -c---------- t18 = CNS_INT int 1 $45 | |
/--* t17 int | |
+--* t18 int | |
N006 ( 6, 6) [000019] -c--GO------ t19 = * ADD int <l:$155, c:$154> | |
N007 ( 1, 1) [000015] ------------ t15 = LCL_VAR ref V00 this u:1 $80 | |
/--* t15 ref | |
N009 ( 2, 2) [000093] -c---------- t93 = * LEA(b+12) byref | |
/--* t93 byref | |
+--* t19 int | |
[000181] -A--GO------ * STOREIND int | |
[000182] ------------ IL_OFFSET void IL offset: 0x2a | |
N001 ( 1, 1) [000022] ------------ t22 = LCL_VAR ref V00 this u:1 $80 | |
/--* t22 ref | |
N003 ( 2, 2) [000097] -c---------- t97 = * LEA(b+8) byref | |
N005 ( 1, 1) [000023] ------------ t23 = LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
/--* t97 byref | |
+--* t23 int | |
[000183] -A--GO------ * STOREIND int | |
[000184] ------------ IL_OFFSET void IL offset: 0x31 | |
N001 ( 1, 1) [000118] ------------ t118 = LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N002 ( 1, 1) [000121] ------------ t121 = LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
/--* t118 ref | |
+--* t121 int | |
N007 ( 4, 4) [000117] -------N---- t117 = * LEA(b+(i*4)+8) byref | |
/--* t117 byref | |
N011 ( 13, 12) [000166] DA--G------- * STORE_LCL_VAR byref V09 cse0 d:1 | |
N012 ( 3, 2) [000167] ------------ t167 = LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] <l:$c6, c:$c5> | |
/--* t167 byref | |
N014 ( 19, 16) [000124] ---XG------- t124 = * IND ref <l:$341, c:$204> | |
/--* t124 ref | |
N016 ( 23, 19) [000125] DA-XG------- * STORE_LCL_VAR ref V07 tmp2 d:1 | |
[000185] ------------ IL_OFFSET void IL offset: 0x39 | |
N001 ( 1, 1) [000035] ------------ t35 = LCL_VAR ref V00 this u:1 (last use) $80 | |
/--* t35 ref | |
N002 ( 3, 2) [000036] #----O------ t36 = * IND int $1d3 | |
/--* t36 int | |
N004 ( 3, 3) [000038] DA---O------ * STORE_LCL_VAR int V05 tmp0 d:1 | |
N001 ( 1, 1) [000040] ------------ t40 = LCL_VAR int V05 tmp0 u:1 (last use) $1d3 | |
/--* t40 int | |
N003 ( 2, 2) [000042] -c---------- t42 = * LEA(b+32) int | |
/--* t42 int | |
N004 ( 4, 4) [000043] #----------- t43 = * IND int $1d4 | |
/--* t43 int | |
N005 ( 7, 6) [000044] #----------- t44 = * IND int $1d5 | |
/--* t44 int | |
N007 ( 8, 7) [000046] -c---------- t46 = * LEA(b+12) int | |
/--* t46 int | |
N008 ( 10, 9) [000047] nc---------- t47 = * IND int <l:$284, c:$184> | |
N009 ( 1, 1) [000050] -c---------- t50 = CNS_INT int 0 $40 | |
/--* t47 int | |
+--* t50 int | |
N010 ( 12, 11) [000051] J------N---- * EQ void <l:$15e, c:$15d> | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
------------ BB03 [???..???) -> BB05 (always), preds={BB02} succs={BB05} | |
------------ BB04 [???..???), preds={BB02} succs={BB05} | |
------------ BB05 [040..052) (return), preds={BB04,BB03} succs={} | |
[000186] ------------ IL_OFFSET void IL offset: 0x40 | |
N001 ( 1, 1) [000129] ------------ t129 = CNS_INT ref null $VN.Null | |
/--* t129 ref | |
N003 ( 5, 4) [000130] DA---------- * STORE_LCL_VAR ref V08 tmp3 d:1 | |
N001 ( 3, 2) [000169] ------------ t169 = LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] $300 | |
N003 ( 1, 1) [000175] ------------ t175 = CNS_INT ref null $VN.Null | |
/--* t169 byref | |
+--* t175 ref | |
[000187] -A-XG------- * STOREIND ref | |
[000188] ------------ IL_OFFSET void IL offset: 0x50 | |
N001 ( 3, 2) [000070] ------------ t70 = LCL_VAR ref V07 tmp2 u:1 (last use) <l:$340, c:$204> | |
/--* t70 ref | |
N002 ( 4, 3) [000071] ------------ * RETURN ref $208 | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
[000189] ------------ IL_OFFSET void IL offset: 0x16 | |
N002 ( 1, 1) [000082] ------------ t82 = LCL_VAR ref V00 this u:1 (last use) $80 | |
/--* t82 ref | |
[000192] ------------ t192 = * PUTARG_REG ref REG ecx | |
/--* t192 ref this in ecx | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack $VN.Void | |
------------------------------------------------------------------------------------------------------------------- | |
*** lvaComputeRefCounts *** | |
*** lvaComputeRefCounts -- explicit counts *** | |
New refCnts for V00: refCnt = 1, refCntWtd = 1 | |
New refCnts for V01: refCnt = 1, refCntWtd = 1 | |
New refCnts for V00: refCnt = 2, refCntWtd = 2 | |
New refCnts for V02: refCnt = 1, refCntWtd = 1 | |
New refCnts for V02: refCnt = 2, refCntWtd = 2 | |
New refCnts for V10: refCnt = 1, refCntWtd = 1 | |
New refCnts for V10: refCnt = 2, refCntWtd = 2 | |
New refCnts for V01: refCnt = 2, refCntWtd = 2 | |
New refCnts for V00: refCnt = 3, refCntWtd = 3 | |
New refCnts for V00: refCnt = 4, refCntWtd = 4 | |
New refCnts for V00: refCnt = 5, refCntWtd = 5 | |
New refCnts for V01: refCnt = 3, refCntWtd = 3 | |
New refCnts for V02: refCnt = 3, refCntWtd = 3 | |
New refCnts for V01: refCnt = 4, refCntWtd = 4 | |
New refCnts for V09: refCnt = 1, refCntWtd = 1 | |
New refCnts for V09: refCnt = 2, refCntWtd = 2 | |
New refCnts for V07: refCnt = 1, refCntWtd = 1 | |
New refCnts for V00: refCnt = 6, refCntWtd = 6 | |
New refCnts for V05: refCnt = 1, refCntWtd = 2 | |
New refCnts for V05: refCnt = 2, refCntWtd = 4 | |
New refCnts for V08: refCnt = 1, refCntWtd = 1 | |
New refCnts for V09: refCnt = 3, refCntWtd = 3 | |
New refCnts for V07: refCnt = 2, refCntWtd = 2 | |
New refCnts for V00: refCnt = 7, refCntWtd = 6 | |
*** lvaComputeRefCounts -- implicit counts *** | |
New refCnts for V00: refCnt = 8, refCntWtd = 7 | |
New refCnts for V00: refCnt = 9, refCntWtd = 8 | |
*************** In fgLocalVarLiveness() | |
; Initial local variable assignments | |
; | |
; V00 this ref this class-hnd | |
; V01 loc0 int | |
; V02 loc1 ref class-hnd | |
; V03 loc2 struct ( 4) | |
; V04 loc3 struct ( 4) ld-addr-op | |
; V05 tmp0 int "impRuntimeLookup slot" | |
; V06 tmp1 int "spilling Runtime Lookup tree" | |
; V07 tmp2 ref V03.Value(offs=0x00) P-INDEP "field V03.Value (fldOffset=0x0)" | |
; V08 tmp3 ref V04.Value(offs=0x00) P-INDEP "field V04.Value (fldOffset=0x0)" | |
; V09 cse0 byref "CSE - aggressive" | |
; V10 cse1 int "CSE - aggressive" | |
In fgLocalVarLivenessInit | |
Tracked variable (8 out of 11) table: | |
V00 this [ ref]: refCnt = 9, refCntWtd = 8 | |
V01 loc0 [ int]: refCnt = 4, refCntWtd = 4 | |
V05 tmp0 [ int]: refCnt = 2, refCntWtd = 4 | |
V02 loc1 [ ref]: refCnt = 3, refCntWtd = 3 | |
V09 cse0 [ byref]: refCnt = 3, refCntWtd = 3 | |
V07 tmp2 [ ref]: refCnt = 2, refCntWtd = 2 | |
V10 cse1 [ int]: refCnt = 2, refCntWtd = 2 | |
V08 tmp3 [ ref]: refCnt = 1, refCntWtd = 1 | |
*************** In fgPerBlockLocalVarLiveness() | |
BB01 USE(1)={V00 } + ByrefExposed + GcHeap | |
DEF(3)={ V01 V02 V10} | |
BB02 USE(3)={V00 V01 V02 } + ByrefExposed + GcHeap | |
DEF(3)={ V05 V09 V07} | |
BB03 USE(0)={} | |
DEF(0)={} | |
BB04 USE(0)={} | |
DEF(0)={} | |
BB05 USE(2)={V09 V07 } | |
DEF(1)={ V08} | |
BB06 USE(1)={V00} + ByrefExposed + GcHeap | |
DEF(0)={ } + ByrefExposed* + GcHeap* | |
** Memory liveness computed, GcHeap states and ByrefExposed states match | |
*************** In fgInterBlockLocalVarLiveness() | |
BB liveness after fgLiveVarAnalysis(): | |
BB01 IN (1)={V00 } + ByrefExposed + GcHeap | |
OUT(3)={V00 V01 V02} + ByrefExposed + GcHeap | |
BB02 IN (3)={V00 V01 V02 } + ByrefExposed + GcHeap | |
OUT(2)={ V09 V07} | |
BB03 IN (2)={V09 V07} | |
OUT(2)={V09 V07} | |
BB04 IN (2)={V09 V07} | |
OUT(2)={V09 V07} | |
BB05 IN (2)={V09 V07} | |
OUT(0)={ } | |
BB06 IN (1)={V00} + ByrefExposed + GcHeap | |
OUT(0)={ } | |
Removing dead store: | |
N003 ( 5, 4) [000130] DA---------- * STORE_LCL_VAR ref V08 tmp3 d:1 (last use) | |
Removing dead node: | |
N001 ( 1, 1) [000129] ------------ * CNS_INT ref null $VN.Null | |
*************** 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..016)-> BB06 ( cond ) i label target idxlen LIR | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen LIR | |
BB03 [0009] 1 BB02 0.25 [???..???)-> BB05 (always) i LIR | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target LIR | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen LIR | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe LIR | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
Reversing a conditional jump around an unconditional jump (BB02 -> BB04 -> BB05) | |
After reversing the jump: | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB06 ( cond ) i label target idxlen LIR | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB05 ( cond ) i label target idxlen LIR | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target LIR | |
BB05 [0006] 2 BB02,BB04 1 [040..052) (return) i label target idxlen LIR | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe LIR | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
Compacting blocks BB04 and BB05: | |
Second block has multiple incoming edges | |
*************** In fgDebugCheckBBlist | |
Removing conditional jump to next block (BB02 -> BB04) | |
Compacting blocks BB02 and BB04: | |
*************** 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..016)-> BB06 ( cond ) i label target idxlen LIR | |
BB02 [0002] 1 BB01 1 [01C..052) (return) i label target idxlen LIR | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe LIR | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
*************** In fgDebugCheckBBlist | |
had to run another liveness pass: | |
*************** In fgLocalVarLiveness() | |
; Initial local variable assignments | |
; | |
; V00 this ref this class-hnd | |
; V01 loc0 int | |
; V02 loc1 ref class-hnd | |
; V03 loc2 struct ( 4) | |
; V04 loc3 struct ( 4) ld-addr-op | |
; V05 tmp0 int "impRuntimeLookup slot" | |
; V06 tmp1 int "spilling Runtime Lookup tree" | |
; V07 tmp2 ref V03.Value(offs=0x00) P-INDEP "field V03.Value (fldOffset=0x0)" | |
; V08 tmp3 ref V04.Value(offs=0x00) P-INDEP "field V04.Value (fldOffset=0x0)" | |
; V09 cse0 byref "CSE - aggressive" | |
; V10 cse1 int "CSE - aggressive" | |
In fgLocalVarLivenessInit | |
Tracked variable (8 out of 11) table: | |
V00 this [ ref]: refCnt = 9, refCntWtd = 8 | |
V01 loc0 [ int]: refCnt = 4, refCntWtd = 4 | |
V05 tmp0 [ int]: refCnt = 2, refCntWtd = 4 | |
V02 loc1 [ ref]: refCnt = 3, refCntWtd = 3 | |
V09 cse0 [ byref]: refCnt = 3, refCntWtd = 3 | |
V07 tmp2 [ ref]: refCnt = 2, refCntWtd = 2 | |
V10 cse1 [ int]: refCnt = 2, refCntWtd = 2 | |
V08 tmp3 [ ref]: refCnt = 1, refCntWtd = 1 | |
*************** In fgPerBlockLocalVarLiveness() | |
BB01 USE(1)={V00 } + ByrefExposed + GcHeap | |
DEF(3)={ V01 V02 V10} | |
BB02 USE(3)={V00 V01 V02 } + ByrefExposed + GcHeap | |
DEF(3)={ V05 V09 V07} | |
BB06 USE(1)={V00} + ByrefExposed + GcHeap | |
DEF(0)={ } + ByrefExposed* + GcHeap* | |
** Memory liveness computed, GcHeap states and ByrefExposed states match | |
*************** In fgInterBlockLocalVarLiveness() | |
BB liveness after fgLiveVarAnalysis(): | |
BB01 IN (1)={V00 } + ByrefExposed + GcHeap | |
OUT(3)={V00 V01 V02} + ByrefExposed + GcHeap | |
BB02 IN (3)={V00 V01 V02} + ByrefExposed + GcHeap | |
OUT(0)={ } | |
BB06 IN (1)={V00} + ByrefExposed + GcHeap | |
OUT(0)={ } | |
Removing dead store: | |
N004 ( 3, 3) [000038] DA---O------ * STORE_LCL_VAR int V05 tmp0 d:1 (last use) | |
Removing dead node: | |
N002 ( 3, 2) [000036] #----O------ * IND int $1d3 | |
Removing dead LclVar use: | |
N001 ( 1, 1) [000035] ------------ * LCL_VAR ref V00 this u:1 (last use) $80 | |
*** lvaComputeRefCounts *** | |
*** lvaComputeRefCounts -- explicit counts *** | |
New refCnts for V00: refCnt = 1, refCntWtd = 1 | |
New refCnts for V01: refCnt = 1, refCntWtd = 1 | |
New refCnts for V00: refCnt = 2, refCntWtd = 2 | |
New refCnts for V02: refCnt = 1, refCntWtd = 1 | |
New refCnts for V02: refCnt = 2, refCntWtd = 2 | |
New refCnts for V10: refCnt = 1, refCntWtd = 1 | |
New refCnts for V10: refCnt = 2, refCntWtd = 2 | |
New refCnts for V01: refCnt = 2, refCntWtd = 2 | |
New refCnts for V00: refCnt = 3, refCntWtd = 3 | |
New refCnts for V00: refCnt = 4, refCntWtd = 4 | |
New refCnts for V00: refCnt = 5, refCntWtd = 5 | |
New refCnts for V01: refCnt = 3, refCntWtd = 3 | |
New refCnts for V02: refCnt = 3, refCntWtd = 3 | |
New refCnts for V01: refCnt = 4, refCntWtd = 4 | |
New refCnts for V09: refCnt = 1, refCntWtd = 1 | |
New refCnts for V09: refCnt = 2, refCntWtd = 2 | |
New refCnts for V07: refCnt = 1, refCntWtd = 1 | |
New refCnts for V09: refCnt = 3, refCntWtd = 3 | |
New refCnts for V07: refCnt = 2, refCntWtd = 2 | |
New refCnts for V00: refCnt = 6, refCntWtd = 5 | |
*** lvaComputeRefCounts -- implicit counts *** | |
New refCnts for V00: refCnt = 7, refCntWtd = 6 | |
New refCnts for V00: refCnt = 8, refCntWtd = 7 | |
*************** 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..016)-> BB06 ( cond ) i label target idxlen LIR | |
BB02 [0002] 1 BB01 1 [01C..052) (return) i label target idxlen LIR | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe LIR | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
[000177] ------------ IL_OFFSET void IL offset: 0x0 | |
N001 ( 1, 1) [000000] ------------ t0 = LCL_VAR ref V00 this u:1 $80 | |
/--* t0 ref | |
N003 ( 2, 2) [000088] -c---------- t88 = * LEA(b+8) byref | |
/--* t88 byref | |
N004 ( 4, 4) [000001] ---XG------- t1 = * IND int <l:$143, c:$142> | |
N005 ( 1, 1) [000002] -c---------- t2 = CNS_INT int -1 $41 | |
/--* t1 int | |
+--* t2 int | |
N006 ( 6, 6) [000003] ---XG------- t3 = * ADD int <l:$147, c:$146> | |
/--* t3 int | |
N008 ( 6, 6) [000005] DA-XG------- * STORE_LCL_VAR int V01 loc0 d:1 | |
[000178] ------------ IL_OFFSET void IL offset: 0x9 | |
N001 ( 1, 1) [000006] ------------ t6 = LCL_VAR ref V00 this u:1 $80 | |
/--* t6 ref | |
N003 ( 2, 2) [000090] -c---------- t90 = * LEA(b+4) byref | |
/--* t90 byref | |
N004 ( 4, 4) [000007] n---GO------ t7 = * IND ref <l:$1c4, c:$1c3> | |
/--* t7 ref | |
N006 ( 4, 4) [000009] DA--GO------ * STORE_LCL_VAR ref V02 loc1 d:1 | |
[000179] ------------ IL_OFFSET void IL offset: 0x10 | |
N001 ( 1, 1) [000011] ------------ t11 = LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
/--* t11 ref | |
[000191] -c---------- t191 = * LEA(b+4) ref | |
/--* t191 ref | |
N002 ( 3, 3) [000012] ---X-------- t12 = * IND int <l:$149, c:$148> | |
/--* t12 int | |
N004 ( 7, 6) [000171] DA-X-------- * STORE_LCL_VAR int V10 cse1 d:1 | |
N005 ( 3, 2) [000172] ------------ t172 = LCL_VAR int V10 cse1 u:1 (last use) <l:$149, c:$148> | |
N007 ( 1, 1) [000010] ------------ t10 = LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
/--* t172 int | |
+--* t10 int | |
N008 ( 12, 10) [000013] N--X---N-U-- * LE void <l:$14d, c:$14c> | |
N009 ( 14, 12) [000014] ---X-------- * JTRUE void | |
------------ BB02 [01C..052) (return), preds={BB01} succs={} | |
[000180] ------------ IL_OFFSET void IL offset: 0x1c | |
N001 ( 1, 1) [000016] -c---------- t16 = LCL_VAR ref V00 this u:1 $80 | |
/--* t16 ref | |
N003 ( 2, 2) [000095] -c---------- t95 = * LEA(b+12) byref | |
/--* t95 byref | |
N004 ( 4, 4) [000017] nc--GO------ t17 = * IND int <l:$151, c:$150> | |
N005 ( 1, 1) [000018] -c---------- t18 = CNS_INT int 1 $45 | |
/--* t17 int | |
+--* t18 int | |
N006 ( 6, 6) [000019] -c--GO------ t19 = * ADD int <l:$155, c:$154> | |
N007 ( 1, 1) [000015] ------------ t15 = LCL_VAR ref V00 this u:1 $80 | |
/--* t15 ref | |
N009 ( 2, 2) [000093] -c---------- t93 = * LEA(b+12) byref | |
/--* t93 byref | |
+--* t19 int | |
[000181] -A--GO------ * STOREIND int | |
[000182] ------------ IL_OFFSET void IL offset: 0x2a | |
N001 ( 1, 1) [000022] ------------ t22 = LCL_VAR ref V00 this u:1 (last use) $80 | |
/--* t22 ref | |
N003 ( 2, 2) [000097] -c---------- t97 = * LEA(b+8) byref | |
N005 ( 1, 1) [000023] ------------ t23 = LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
/--* t97 byref | |
+--* t23 int | |
[000183] -A--GO------ * STOREIND int | |
[000184] ------------ IL_OFFSET void IL offset: 0x31 | |
N001 ( 1, 1) [000118] ------------ t118 = LCL_VAR ref V02 loc1 u:1 (last use) <l:$1c2, c:$200> | |
N002 ( 1, 1) [000121] ------------ t121 = LCL_VAR int V01 loc0 u:1 (last use) <l:$145, c:$144> | |
/--* t118 ref | |
+--* t121 int | |
N007 ( 4, 4) [000117] -------N---- t117 = * LEA(b+(i*4)+8) byref | |
/--* t117 byref | |
N011 ( 13, 12) [000166] DA--G------- * STORE_LCL_VAR byref V09 cse0 d:1 | |
N012 ( 3, 2) [000167] ------------ t167 = LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] <l:$c6, c:$c5> | |
/--* t167 byref | |
N014 ( 19, 16) [000124] ---XG------- t124 = * IND ref <l:$341, c:$204> | |
/--* t124 ref | |
N016 ( 23, 19) [000125] DA-XG------- * STORE_LCL_VAR ref V07 tmp2 d:1 | |
[000185] ------------ IL_OFFSET void IL offset: 0x39 | |
[000186] ------------ IL_OFFSET void IL offset: 0x40 | |
N001 ( 3, 2) [000169] ------------ t169 = LCL_VAR byref V09 cse0 u:1 (last use) Zero Fseq[Value] $300 | |
N003 ( 1, 1) [000175] ------------ t175 = CNS_INT ref null $VN.Null | |
/--* t169 byref | |
+--* t175 ref | |
[000187] -A-XG------- * STOREIND ref | |
[000188] ------------ IL_OFFSET void IL offset: 0x50 | |
N001 ( 3, 2) [000070] ------------ t70 = LCL_VAR ref V07 tmp2 u:1 (last use) <l:$340, c:$204> | |
/--* t70 ref | |
N002 ( 4, 3) [000071] ------------ * RETURN ref $208 | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
[000189] ------------ IL_OFFSET void IL offset: 0x16 | |
N002 ( 1, 1) [000082] ------------ t82 = LCL_VAR ref V00 this u:1 (last use) $80 | |
/--* t82 ref | |
[000192] ------------ t192 = * PUTARG_REG ref REG ecx | |
/--* t192 ref this in ecx | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack $VN.Void | |
------------------------------------------------------------------------------------------------------------------- | |
*************** 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..016)-> BB06 ( cond ) i label target idxlen LIR | |
BB02 [0002] 1 BB01 1 [01C..052) (return) i label target idxlen LIR | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe LIR | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
[000177] ------------ IL_OFFSET void IL offset: 0x0 | |
N001 ( 1, 1) [000000] ------------ t0 = LCL_VAR ref V00 this u:1 $80 | |
/--* t0 ref | |
N003 ( 2, 2) [000088] -c---------- t88 = * LEA(b+8) byref | |
/--* t88 byref | |
N004 ( 4, 4) [000001] ---XG------- t1 = * IND int <l:$143, c:$142> | |
N005 ( 1, 1) [000002] -c---------- t2 = CNS_INT int -1 $41 | |
/--* t1 int | |
+--* t2 int | |
N006 ( 6, 6) [000003] ---XG------- t3 = * ADD int <l:$147, c:$146> | |
/--* t3 int | |
N008 ( 6, 6) [000005] DA-XG------- * STORE_LCL_VAR int V01 loc0 d:1 | |
[000178] ------------ IL_OFFSET void IL offset: 0x9 | |
N001 ( 1, 1) [000006] ------------ t6 = LCL_VAR ref V00 this u:1 $80 | |
/--* t6 ref | |
N003 ( 2, 2) [000090] -c---------- t90 = * LEA(b+4) byref | |
/--* t90 byref | |
N004 ( 4, 4) [000007] n---GO------ t7 = * IND ref <l:$1c4, c:$1c3> | |
/--* t7 ref | |
N006 ( 4, 4) [000009] DA--GO------ * STORE_LCL_VAR ref V02 loc1 d:1 | |
[000179] ------------ IL_OFFSET void IL offset: 0x10 | |
N001 ( 1, 1) [000011] ------------ t11 = LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
/--* t11 ref | |
[000191] -c---------- t191 = * LEA(b+4) ref | |
/--* t191 ref | |
N002 ( 3, 3) [000012] ---X-------- t12 = * IND int <l:$149, c:$148> | |
/--* t12 int | |
N004 ( 7, 6) [000171] DA-X-------- * STORE_LCL_VAR int V10 cse1 d:1 | |
N005 ( 3, 2) [000172] ------------ t172 = LCL_VAR int V10 cse1 u:1 (last use) <l:$149, c:$148> | |
N007 ( 1, 1) [000010] ------------ t10 = LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
/--* t172 int | |
+--* t10 int | |
N008 ( 12, 10) [000013] N--X---N-U-- * LE void <l:$14d, c:$14c> | |
N009 ( 14, 12) [000014] ---X-------- * JTRUE void | |
------------ BB02 [01C..052) (return), preds={BB01} succs={} | |
[000180] ------------ IL_OFFSET void IL offset: 0x1c | |
N001 ( 1, 1) [000016] -c---------- t16 = LCL_VAR ref V00 this u:1 $80 | |
/--* t16 ref | |
N003 ( 2, 2) [000095] -c---------- t95 = * LEA(b+12) byref | |
/--* t95 byref | |
N004 ( 4, 4) [000017] nc--GO------ t17 = * IND int <l:$151, c:$150> | |
N005 ( 1, 1) [000018] -c---------- t18 = CNS_INT int 1 $45 | |
/--* t17 int | |
+--* t18 int | |
N006 ( 6, 6) [000019] -c--GO------ t19 = * ADD int <l:$155, c:$154> | |
N007 ( 1, 1) [000015] ------------ t15 = LCL_VAR ref V00 this u:1 $80 | |
/--* t15 ref | |
N009 ( 2, 2) [000093] -c---------- t93 = * LEA(b+12) byref | |
/--* t93 byref | |
+--* t19 int | |
[000181] -A--GO------ * STOREIND int | |
[000182] ------------ IL_OFFSET void IL offset: 0x2a | |
N001 ( 1, 1) [000022] ------------ t22 = LCL_VAR ref V00 this u:1 (last use) $80 | |
/--* t22 ref | |
N003 ( 2, 2) [000097] -c---------- t97 = * LEA(b+8) byref | |
N005 ( 1, 1) [000023] ------------ t23 = LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
/--* t97 byref | |
+--* t23 int | |
[000183] -A--GO------ * STOREIND int | |
[000184] ------------ IL_OFFSET void IL offset: 0x31 | |
N001 ( 1, 1) [000118] ------------ t118 = LCL_VAR ref V02 loc1 u:1 (last use) <l:$1c2, c:$200> | |
N002 ( 1, 1) [000121] ------------ t121 = LCL_VAR int V01 loc0 u:1 (last use) <l:$145, c:$144> | |
/--* t118 ref | |
+--* t121 int | |
N007 ( 4, 4) [000117] -------N---- t117 = * LEA(b+(i*4)+8) byref | |
/--* t117 byref | |
N011 ( 13, 12) [000166] DA--G------- * STORE_LCL_VAR byref V09 cse0 d:1 | |
N012 ( 3, 2) [000167] ------------ t167 = LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] <l:$c6, c:$c5> | |
/--* t167 byref | |
N014 ( 19, 16) [000124] ---XG------- t124 = * IND ref <l:$341, c:$204> | |
/--* t124 ref | |
N016 ( 23, 19) [000125] DA-XG------- * STORE_LCL_VAR ref V07 tmp2 d:1 | |
[000185] ------------ IL_OFFSET void IL offset: 0x39 | |
[000186] ------------ IL_OFFSET void IL offset: 0x40 | |
N001 ( 3, 2) [000169] ------------ t169 = LCL_VAR byref V09 cse0 u:1 (last use) Zero Fseq[Value] $300 | |
N003 ( 1, 1) [000175] ------------ t175 = CNS_INT ref null $VN.Null | |
/--* t169 byref | |
+--* t175 ref | |
[000187] -A-XG------- * STOREIND ref | |
[000188] ------------ IL_OFFSET void IL offset: 0x50 | |
N001 ( 3, 2) [000070] ------------ t70 = LCL_VAR ref V07 tmp2 u:1 (last use) <l:$340, c:$204> | |
/--* t70 ref | |
N002 ( 4, 3) [000071] ------------ * RETURN ref $208 | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
[000189] ------------ IL_OFFSET void IL offset: 0x16 | |
N002 ( 1, 1) [000082] ------------ t82 = LCL_VAR ref V00 this u:1 (last use) $80 | |
/--* t82 ref | |
[000192] ------------ t192 = * PUTARG_REG ref REG ecx | |
/--* t192 ref this in ecx | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack $VN.Void | |
------------------------------------------------------------------------------------------------------------------- | |
*************** Starting PHASE Calculate stack level slots | |
*************** Finishing PHASE Calculate stack level slots | |
Trees after Calculate stack level slots | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB06 ( cond ) i label target idxlen LIR | |
BB02 [0002] 1 BB01 1 [01C..052) (return) i label target idxlen LIR | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe LIR | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
[000177] ------------ IL_OFFSET void IL offset: 0x0 | |
N001 ( 1, 1) [000000] ------------ t0 = LCL_VAR ref V00 this u:1 $80 | |
/--* t0 ref | |
N003 ( 2, 2) [000088] -c---------- t88 = * LEA(b+8) byref | |
/--* t88 byref | |
N004 ( 4, 4) [000001] ---XG------- t1 = * IND int <l:$143, c:$142> | |
N005 ( 1, 1) [000002] -c---------- t2 = CNS_INT int -1 $41 | |
/--* t1 int | |
+--* t2 int | |
N006 ( 6, 6) [000003] ---XG------- t3 = * ADD int <l:$147, c:$146> | |
/--* t3 int | |
N008 ( 6, 6) [000005] DA-XG------- * STORE_LCL_VAR int V01 loc0 d:1 | |
[000178] ------------ IL_OFFSET void IL offset: 0x9 | |
N001 ( 1, 1) [000006] ------------ t6 = LCL_VAR ref V00 this u:1 $80 | |
/--* t6 ref | |
N003 ( 2, 2) [000090] -c---------- t90 = * LEA(b+4) byref | |
/--* t90 byref | |
N004 ( 4, 4) [000007] n---GO------ t7 = * IND ref <l:$1c4, c:$1c3> | |
/--* t7 ref | |
N006 ( 4, 4) [000009] DA--GO------ * STORE_LCL_VAR ref V02 loc1 d:1 | |
[000179] ------------ IL_OFFSET void IL offset: 0x10 | |
N001 ( 1, 1) [000011] ------------ t11 = LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
/--* t11 ref | |
[000191] -c---------- t191 = * LEA(b+4) ref | |
/--* t191 ref | |
N002 ( 3, 3) [000012] ---X-------- t12 = * IND int <l:$149, c:$148> | |
/--* t12 int | |
N004 ( 7, 6) [000171] DA-X-------- * STORE_LCL_VAR int V10 cse1 d:1 | |
N005 ( 3, 2) [000172] ------------ t172 = LCL_VAR int V10 cse1 u:1 (last use) <l:$149, c:$148> | |
N007 ( 1, 1) [000010] ------------ t10 = LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
/--* t172 int | |
+--* t10 int | |
N008 ( 12, 10) [000013] N--X---N-U-- * LE void <l:$14d, c:$14c> | |
N009 ( 14, 12) [000014] ---X-------- * JTRUE void | |
------------ BB02 [01C..052) (return), preds={BB01} succs={} | |
[000180] ------------ IL_OFFSET void IL offset: 0x1c | |
N001 ( 1, 1) [000016] -c---------- t16 = LCL_VAR ref V00 this u:1 $80 | |
/--* t16 ref | |
N003 ( 2, 2) [000095] -c---------- t95 = * LEA(b+12) byref | |
/--* t95 byref | |
N004 ( 4, 4) [000017] nc--GO------ t17 = * IND int <l:$151, c:$150> | |
N005 ( 1, 1) [000018] -c---------- t18 = CNS_INT int 1 $45 | |
/--* t17 int | |
+--* t18 int | |
N006 ( 6, 6) [000019] -c--GO------ t19 = * ADD int <l:$155, c:$154> | |
N007 ( 1, 1) [000015] ------------ t15 = LCL_VAR ref V00 this u:1 $80 | |
/--* t15 ref | |
N009 ( 2, 2) [000093] -c---------- t93 = * LEA(b+12) byref | |
/--* t93 byref | |
+--* t19 int | |
[000181] -A--GO------ * STOREIND int | |
[000182] ------------ IL_OFFSET void IL offset: 0x2a | |
N001 ( 1, 1) [000022] ------------ t22 = LCL_VAR ref V00 this u:1 (last use) $80 | |
/--* t22 ref | |
N003 ( 2, 2) [000097] -c---------- t97 = * LEA(b+8) byref | |
N005 ( 1, 1) [000023] ------------ t23 = LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
/--* t97 byref | |
+--* t23 int | |
[000183] -A--GO------ * STOREIND int | |
[000184] ------------ IL_OFFSET void IL offset: 0x31 | |
N001 ( 1, 1) [000118] ------------ t118 = LCL_VAR ref V02 loc1 u:1 (last use) <l:$1c2, c:$200> | |
N002 ( 1, 1) [000121] ------------ t121 = LCL_VAR int V01 loc0 u:1 (last use) <l:$145, c:$144> | |
/--* t118 ref | |
+--* t121 int | |
N007 ( 4, 4) [000117] -------N---- t117 = * LEA(b+(i*4)+8) byref | |
/--* t117 byref | |
N011 ( 13, 12) [000166] DA--G------- * STORE_LCL_VAR byref V09 cse0 d:1 | |
N012 ( 3, 2) [000167] ------------ t167 = LCL_VAR byref V09 cse0 u:1 Zero Fseq[Value] <l:$c6, c:$c5> | |
/--* t167 byref | |
N014 ( 19, 16) [000124] ---XG------- t124 = * IND ref <l:$341, c:$204> | |
/--* t124 ref | |
N016 ( 23, 19) [000125] DA-XG------- * STORE_LCL_VAR ref V07 tmp2 d:1 | |
[000185] ------------ IL_OFFSET void IL offset: 0x39 | |
[000186] ------------ IL_OFFSET void IL offset: 0x40 | |
N001 ( 3, 2) [000169] ------------ t169 = LCL_VAR byref V09 cse0 u:1 (last use) Zero Fseq[Value] $300 | |
N003 ( 1, 1) [000175] ------------ t175 = CNS_INT ref null $VN.Null | |
/--* t169 byref | |
+--* t175 ref | |
[000187] -A-XG------- * STOREIND ref | |
[000188] ------------ IL_OFFSET void IL offset: 0x50 | |
N001 ( 3, 2) [000070] ------------ t70 = LCL_VAR ref V07 tmp2 u:1 (last use) <l:$340, c:$204> | |
/--* t70 ref | |
N002 ( 4, 3) [000071] ------------ * RETURN ref $208 | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
[000189] ------------ IL_OFFSET void IL offset: 0x16 | |
N002 ( 1, 1) [000082] ------------ t82 = LCL_VAR ref V00 this u:1 (last use) $80 | |
/--* t82 ref | |
[000192] ------------ t192 = * PUTARG_REG ref REG ecx | |
/--* t192 ref this in ecx | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack $VN.Void | |
------------------------------------------------------------------------------------------------------------------- | |
*************** In fgDebugCheckBBlist | |
*************** Starting PHASE Linear scan register alloc | |
Clearing modified regs. | |
buildIntervals ======== | |
----------------- | |
LIVENESS: | |
----------------- | |
BB01 use def in out | |
{V00} | |
{V01 V02 V10} | |
{V00} | |
{V00 V01 V02} | |
BB02 use def in out | |
{V00 V01 V02} | |
{V05 V07 V09} | |
{V00 V01 V02} | |
{} | |
BB06 use def in out | |
{V00} | |
{} | |
{V00} | |
{} | |
Interval 0: ref RefPositions {} physReg:NA Preferences=[allInt] | |
Interval 1: int RefPositions {} physReg:NA Preferences=[allInt] | |
Interval 2: ref RefPositions {} physReg:NA Preferences=[allInt] | |
Interval 3: ref RefPositions {} physReg:NA Preferences=[allInt] | |
Interval 4: byref RefPositions {} physReg:NA Preferences=[allInt] | |
Interval 5: int RefPositions {} physReg:NA Preferences=[allInt] | |
Double alignment: | |
Bytes that could be saved by not using EBP frame: 9 | |
Sum of weighted ref counts for EBP enregistered variables: 262 | |
Sum of weighted ref counts for weighted stack based doubles: 0 | |
Predicting not to double-align ESP to save 9 bytes of code. | |
FP callee save candidate vars: None | |
floatVarCount = 0; hasLoops = 0, singleExit = 1 | |
; Decided to create an EBP based frame for ETW stackwalking (BasicBlock Count) | |
TUPLE STYLE DUMP BEFORE LSRA | |
LSRA Block Sequence: BB01( 1 ) | |
BB02( 1 ) | |
BB06( 0 ) | |
BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
===== | |
N000. IL_OFFSET IL offset: 0x0 | |
N001. V00(t0) | |
N003. t88 = LEA(b+8) ; t0 | |
N004. t1 = IND ; t88 | |
N005. CNS_INT -1 | |
N006. t3 = ADD ; t1 | |
N008. V01(t5); t3 | |
N000. IL_OFFSET IL offset: 0x9 | |
N001. V00(t6) | |
N003. t90 = LEA(b+4) ; t6 | |
N004. t7 = IND ; t90 | |
N006. V02(t9); t7 | |
N000. IL_OFFSET IL offset: 0x10 | |
N001. V02(t11) | |
N000. t191 = LEA(b+4) ; t11 | |
N002. t12 = IND ; t191 | |
N004. V10(t171); t12 | |
N005. V10(t172*) | |
N007. V01(t10) | |
N008. LE ; t172*,t10 | |
N009. JTRUE | |
BB02 [01C..052) (return), preds={BB01} succs={} | |
===== | |
N000. IL_OFFSET IL offset: 0x1c | |
N001. V00(t16) | |
N003. LEA(b+12) | |
N004. IND | |
N005. CNS_INT 1 | |
N006. ADD | |
N007. V00(t15) | |
N009. t93 = LEA(b+12); t15 | |
N000. STOREIND ; t93 | |
N000. IL_OFFSET IL offset: 0x2a | |
N001. V00(t22*) | |
N003. t97 = LEA(b+8) ; t22* | |
N005. V01(t23) | |
N000. STOREIND ; t97,t23 | |
N000. IL_OFFSET IL offset: 0x31 | |
N001. V02(t118*) | |
N002. V01(t121*) | |
N007. t117 = LEA(b+(i*4)+8); t118*,t121* | |
N011. V09(t166); t117 | |
N012. V09(t167) | |
N014. t124 = IND ; t167 | |
N016. V07(t125); t124 | |
N000. IL_OFFSET IL offset: 0x39 | |
N000. IL_OFFSET IL offset: 0x40 | |
N001. V09(t169*) | |
N003. t175 = CNS_INT null | |
N000. STOREIND ; t169*,t175 | |
N000. IL_OFFSET IL offset: 0x50 | |
N001. V07(t70*) | |
N002. RETURN ; t70* | |
BB06 [016..01C) (throw), preds={BB01} succs={} | |
===== | |
N000. IL_OFFSET IL offset: 0x16 | |
N002. V00(t82*) | |
N000. t192 = PUTARG_REG; t82* | |
N003. CALL ; t192 | |
buildIntervals second part ======== | |
Int arg V00 in reg ecx | |
<RefPosition #0 @0 RefTypeParamDef <Ivl:0 V00> BB00 regmask=[ecx] minReg=1 fixed> | |
NEW BLOCK BB01 | |
<RefPosition #1 @1 RefTypeBB BB01 regmask=[] minReg=1> | |
DefList: { } | |
N003 (???,???) [000177] ------------ * IL_OFFSET void IL offset: 0x0 REG NA | |
DefList: { } | |
N005 ( 1, 1) [000000] ------------ * LCL_VAR ref V00 this u:1 NA REG NA $80 | |
DefList: { } | |
N007 ( 2, 2) [000088] -c---------- * LEA(b+8) byref REG NA | |
Contained | |
DefList: { } | |
N009 ( 4, 4) [000001] ---XG------- * IND int REG NA <l:$143, c:$142> | |
<RefPosition #2 @9 RefTypeUse <Ivl:0 V00> LCL_VAR BB01 regmask=[allInt] minReg=1 last> | |
Interval 6: int RefPositions {} physReg:NA Preferences=[allInt] | |
<RefPosition #3 @10 RefTypeDef <Ivl:6> IND BB01 regmask=[allInt] minReg=1> | |
DefList: { N009.t1. IND } | |
N011 ( 1, 1) [000002] -c---------- * CNS_INT int -1 REG NA $41 | |
Contained | |
DefList: { N009.t1. IND } | |
N013 ( 6, 6) [000003] ---XG------- * ADD int REG NA <l:$147, c:$146> | |
<RefPosition #4 @13 RefTypeUse <Ivl:6> BB01 regmask=[allInt] minReg=1 last> | |
Interval 7: int RefPositions {} physReg:NA Preferences=[allInt] | |
<RefPosition #5 @14 RefTypeDef <Ivl:7> ADD BB01 regmask=[allInt] minReg=1> | |
Assigning related <I7> to <I6> | |
DefList: { N013.t3. ADD } | |
N015 ( 6, 6) [000005] DA-XG------- * STORE_LCL_VAR int V01 loc0 d:1 NA REG NA | |
<RefPosition #6 @15 RefTypeUse <Ivl:7> BB01 regmask=[allInt] minReg=1 last> | |
Assigning related <V01/L1> to <I7> | |
<RefPosition #7 @16 RefTypeDef <Ivl:1 V01> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1 last> | |
DefList: { } | |
N017 (???,???) [000178] ------------ * IL_OFFSET void IL offset: 0x9 REG NA | |
DefList: { } | |
N019 ( 1, 1) [000006] ------------ * LCL_VAR ref V00 this u:1 NA REG NA $80 | |
DefList: { } | |
N021 ( 2, 2) [000090] -c---------- * LEA(b+4) byref REG NA | |
Contained | |
DefList: { } | |
N023 ( 4, 4) [000007] n---GO------ * IND ref REG NA <l:$1c4, c:$1c3> | |
<RefPosition #8 @23 RefTypeUse <Ivl:0 V00> LCL_VAR BB01 regmask=[allInt] minReg=1 last> | |
Interval 8: ref RefPositions {} physReg:NA Preferences=[allInt] | |
<RefPosition #9 @24 RefTypeDef <Ivl:8> IND BB01 regmask=[allInt] minReg=1> | |
DefList: { N023.t7. IND } | |
N025 ( 4, 4) [000009] DA--GO------ * STORE_LCL_VAR ref V02 loc1 d:1 NA REG NA | |
<RefPosition #10 @25 RefTypeUse <Ivl:8> BB01 regmask=[allInt] minReg=1 last> | |
Assigning related <V02/L2> to <I8> | |
<RefPosition #11 @26 RefTypeDef <Ivl:2 V02> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1 last> | |
DefList: { } | |
N027 (???,???) [000179] ------------ * IL_OFFSET void IL offset: 0x10 REG NA | |
DefList: { } | |
N029 ( 1, 1) [000011] ------------ * LCL_VAR ref V02 loc1 u:1 NA REG NA <l:$1c2, c:$200> | |
DefList: { } | |
N031 (???,???) [000191] -c---------- * LEA(b+4) ref REG NA | |
Contained | |
DefList: { } | |
N033 ( 3, 3) [000012] ---X-------- * IND int REG NA <l:$149, c:$148> | |
<RefPosition #12 @33 RefTypeUse <Ivl:2 V02> LCL_VAR BB01 regmask=[allInt] minReg=1 last> | |
Interval 9: int RefPositions {} physReg:NA Preferences=[allInt] | |
<RefPosition #13 @34 RefTypeDef <Ivl:9> IND BB01 regmask=[allInt] minReg=1> | |
DefList: { N033.t12. IND } | |
N035 ( 7, 6) [000171] DA-X-------- * STORE_LCL_VAR int V10 cse1 d:1 NA REG NA | |
<RefPosition #14 @35 RefTypeUse <Ivl:9> BB01 regmask=[allInt] minReg=1 last> | |
Assigning related <V10/L5> to <I9> | |
<RefPosition #15 @36 RefTypeDef <Ivl:5 V10> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1 last> | |
DefList: { } | |
N037 ( 3, 2) [000172] ------------ * LCL_VAR int V10 cse1 u:1 NA (last use) REG NA <l:$149, c:$148> | |
DefList: { } | |
N039 ( 1, 1) [000010] ------------ * LCL_VAR int V01 loc0 u:1 NA REG NA <l:$145, c:$144> | |
DefList: { } | |
N041 ( 12, 10) [000013] N--X---N-U-- * LE void REG NA <l:$14d, c:$14c> | |
<RefPosition #16 @41 RefTypeUse <Ivl:5 V10> LCL_VAR BB01 regmask=[allInt] minReg=1 last> | |
<RefPosition #17 @41 RefTypeUse <Ivl:1 V01> LCL_VAR BB01 regmask=[allInt] minReg=1 last> | |
DefList: { } | |
N043 ( 14, 12) [000014] ---X-------- * JTRUE void REG NA | |
CHECKING LAST USES for BB01, liveout={V00 V01 V02} | |
============================== | |
use: {V00} | |
def: {V01 V02 V10} | |
NEW BLOCK BB02 | |
Setting BB01 as the predecessor for determining incoming variable registers of BB02 | |
<RefPosition #18 @45 RefTypeBB BB02 regmask=[] minReg=1> | |
DefList: { } | |
N047 (???,???) [000180] ------------ * IL_OFFSET void IL offset: 0x1c REG NA | |
DefList: { } | |
N049 ( 1, 1) [000016] -c---------- * LCL_VAR ref V00 this u:1 NA REG NA $80 | |
Contained | |
DefList: { } | |
N051 ( 2, 2) [000095] -c---------- * LEA(b+12) byref REG NA | |
Contained | |
DefList: { } | |
N053 ( 4, 4) [000017] nc--GO------ * IND int REG NA <l:$151, c:$150> | |
Contained | |
DefList: { } | |
N055 ( 1, 1) [000018] -c---------- * CNS_INT int 1 REG NA $45 | |
Contained | |
DefList: { } | |
N057 ( 6, 6) [000019] -c--GO------ * ADD int REG NA <l:$155, c:$154> | |
Contained | |
DefList: { } | |
N059 ( 1, 1) [000015] ------------ * LCL_VAR ref V00 this u:1 NA REG NA $80 | |
DefList: { } | |
N061 ( 2, 2) [000093] -c---------- * LEA(b+12) byref REG NA | |
Contained | |
DefList: { } | |
N063 (???,???) [000181] -A--GO------ * STOREIND int REG NA | |
<RefPosition #19 @63 RefTypeUse <Ivl:0 V00> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
DefList: { } | |
N065 (???,???) [000182] ------------ * IL_OFFSET void IL offset: 0x2a REG NA | |
DefList: { } | |
N067 ( 1, 1) [000022] ------------ * LCL_VAR ref V00 this u:1 NA (last use) REG NA $80 | |
DefList: { } | |
N069 ( 2, 2) [000097] -c---------- * LEA(b+8) byref REG NA | |
Contained | |
DefList: { } | |
N071 ( 1, 1) [000023] ------------ * LCL_VAR int V01 loc0 u:1 NA REG NA <l:$145, c:$144> | |
DefList: { } | |
N073 (???,???) [000183] -A--GO------ * STOREIND int REG NA | |
<RefPosition #20 @73 RefTypeUse <Ivl:0 V00> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
<RefPosition #21 @73 RefTypeUse <Ivl:1 V01> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
DefList: { } | |
N075 (???,???) [000184] ------------ * IL_OFFSET void IL offset: 0x31 REG NA | |
DefList: { } | |
N077 ( 1, 1) [000118] ------------ * LCL_VAR ref V02 loc1 u:1 NA (last use) REG NA <l:$1c2, c:$200> | |
DefList: { } | |
N079 ( 1, 1) [000121] ------------ * LCL_VAR int V01 loc0 u:1 NA (last use) REG NA <l:$145, c:$144> | |
DefList: { } | |
N081 ( 4, 4) [000117] -------N---- * LEA(b+(i*4)+8) byref REG NA | |
<RefPosition #22 @81 RefTypeUse <Ivl:2 V02> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
<RefPosition #23 @81 RefTypeUse <Ivl:1 V01> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
Interval 10: byref RefPositions {} physReg:NA Preferences=[allInt] | |
<RefPosition #24 @82 RefTypeDef <Ivl:10> LEA BB02 regmask=[allInt] minReg=1> | |
DefList: { N081.t117. LEA } | |
N083 ( 13, 12) [000166] DA--G------- * STORE_LCL_VAR byref V09 cse0 d:1 NA REG NA | |
<RefPosition #25 @83 RefTypeUse <Ivl:10> BB02 regmask=[allInt] minReg=1 last> | |
Assigning related <V09/L4> to <I10> | |
<RefPosition #26 @84 RefTypeDef <Ivl:4 V09> STORE_LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
DefList: { } | |
N085 ( 3, 2) [000167] ------------ * LCL_VAR byref V09 cse0 u:1 NA Zero Fseq[Value] REG NA <l:$c6, c:$c5> | |
DefList: { } | |
N087 ( 19, 16) [000124] ---XG------- * IND ref REG NA <l:$341, c:$204> | |
<RefPosition #27 @87 RefTypeUse <Ivl:4 V09> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
Interval 11: ref RefPositions {} physReg:NA Preferences=[allInt] | |
<RefPosition #28 @88 RefTypeDef <Ivl:11> IND BB02 regmask=[allInt] minReg=1> | |
DefList: { N087.t124. IND } | |
N089 ( 23, 19) [000125] DA-XG------- * STORE_LCL_VAR ref V07 tmp2 d:1 NA REG NA | |
<RefPosition #29 @89 RefTypeUse <Ivl:11> BB02 regmask=[allInt] minReg=1 last> | |
Assigning related <V07/L3> to <I11> | |
<RefPosition #30 @90 RefTypeDef <Ivl:3 V07> STORE_LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
DefList: { } | |
N091 (???,???) [000185] ------------ * IL_OFFSET void IL offset: 0x39 REG NA | |
DefList: { } | |
N093 (???,???) [000186] ------------ * IL_OFFSET void IL offset: 0x40 REG NA | |
DefList: { } | |
N095 ( 3, 2) [000169] ------------ * LCL_VAR byref V09 cse0 u:1 NA (last use) Zero Fseq[Value] REG NA $300 | |
DefList: { } | |
N097 ( 1, 1) [000175] ------------ * CNS_INT ref null REG NA $VN.Null | |
Interval 12: ref RefPositions {} physReg:NA Preferences=[allInt] | |
<RefPosition #31 @98 RefTypeDef <Ivl:12> CNS_INT BB02 regmask=[allInt] minReg=1> | |
DefList: { N097.t175. CNS_INT } | |
N099 (???,???) [000187] -A-XG------- * STOREIND ref REG NA | |
<RefPosition #32 @99 RefTypeUse <Ivl:4 V09> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
<RefPosition #33 @99 RefTypeUse <Ivl:12> BB02 regmask=[allInt] minReg=1 last> | |
DefList: { } | |
N101 (???,???) [000188] ------------ * IL_OFFSET void IL offset: 0x50 REG NA | |
DefList: { } | |
N103 ( 3, 2) [000070] ------------ * LCL_VAR ref V07 tmp2 u:1 NA (last use) REG NA <l:$340, c:$204> | |
DefList: { } | |
N105 ( 4, 3) [000071] ------------ * RETURN ref REG NA $208 | |
<RefPosition #34 @105 RefTypeFixedReg <Reg:eax> BB02 regmask=[eax] minReg=1> | |
<RefPosition #35 @105 RefTypeUse <Ivl:3 V07> LCL_VAR BB02 regmask=[eax] minReg=1 last fixed> | |
CHECKING LAST USES for BB02, liveout={} | |
============================== | |
use: {V00 V01 V02} | |
def: {V05 V07 V09} | |
NEW BLOCK BB06 | |
Setting BB01 as the predecessor for determining incoming variable registers of BB06 | |
<RefPosition #36 @107 RefTypeBB BB06 regmask=[] minReg=1> | |
firstColdLoc = 109 | |
DefList: { } | |
N109 (???,???) [000189] ------------ * IL_OFFSET void IL offset: 0x16 REG NA | |
DefList: { } | |
N111 ( 1, 1) [000082] ------------ * LCL_VAR ref V00 this u:1 NA (last use) REG NA $80 | |
DefList: { } | |
N113 (???,???) [000192] ------------ * PUTARG_REG ref REG ecx | |
<RefPosition #37 @113 RefTypeFixedReg <Reg:ecx> BB06 regmask=[ecx] minReg=1> | |
<RefPosition #38 @113 RefTypeUse <Ivl:0 V00> LCL_VAR BB06 regmask=[ecx] minReg=1 last fixed> | |
Interval 13: ref RefPositions {} physReg:NA Preferences=[allInt] | |
<RefPosition #39 @114 RefTypeFixedReg <Reg:ecx> BB06 regmask=[ecx] minReg=1> | |
<RefPosition #40 @114 RefTypeDef <Ivl:13> PUTARG_REG BB06 regmask=[ecx] minReg=1 fixed> | |
DefList: { N113.t192. PUTARG_REG } | |
N115 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack REG NA $VN.Void | |
<RefPosition #41 @115 RefTypeFixedReg <Reg:ecx> BB06 regmask=[ecx] minReg=1> | |
<RefPosition #42 @115 RefTypeUse <Ivl:13> BB06 regmask=[ecx] minReg=1 last fixed> | |
<RefPosition #43 @116 RefTypeKill <Reg:eax> BB06 regmask=[eax] minReg=1> | |
<RefPosition #44 @116 RefTypeKill <Reg:ecx> BB06 regmask=[ecx] minReg=1> | |
<RefPosition #45 @116 RefTypeKill <Reg:edx> BB06 regmask=[edx] minReg=1> | |
CHECKING LAST USES for BB06, liveout={} | |
============================== | |
use: {V00} | |
def: {} | |
Linear scan intervals BEFORE VALIDATING INTERVALS: | |
Interval 0: (V00) ref RefPositions {#0@0 #2@9 #8@23 #19@63 #20@73 #38@113} physReg:ecx Preferences=[ecx] | |
Interval 1: (V01) int RefPositions {#7@16 #17@41 #21@73 #23@81} physReg:NA Preferences=[allInt] | |
Interval 2: (V02) ref RefPositions {#11@26 #12@33 #22@81} physReg:NA Preferences=[allInt] | |
Interval 3: (V07) ref (struct) RefPositions {#30@90 #35@105} physReg:NA Preferences=[eax] | |
Interval 4: (V09) byref RefPositions {#26@84 #27@87 #32@99} physReg:NA Preferences=[allInt] | |
Interval 5: (V10) int RefPositions {#15@36 #16@41} physReg:NA Preferences=[allInt] | |
Interval 6: int RefPositions {#3@10 #4@13} physReg:NA Preferences=[allInt] RelatedInterval <I7> | |
Interval 7: int RefPositions {#5@14 #6@15} physReg:NA Preferences=[allInt] RelatedInterval <V01/L1> | |
Interval 8: ref RefPositions {#9@24 #10@25} physReg:NA Preferences=[allInt] RelatedInterval <V02/L2> | |
Interval 9: int RefPositions {#13@34 #14@35} physReg:NA Preferences=[allInt] RelatedInterval <V10/L5> | |
Interval 10: byref RefPositions {#24@82 #25@83} physReg:NA Preferences=[allInt] RelatedInterval <V09/L4> | |
Interval 11: ref RefPositions {#28@88 #29@89} physReg:NA Preferences=[allInt] RelatedInterval <V07/L3> | |
Interval 12: ref (constant) RefPositions {#31@98 #33@99} physReg:NA Preferences=[allInt] | |
Interval 13: ref RefPositions {#40@114 #42@115} physReg:NA Preferences=[ecx] | |
------------ | |
REFPOSITIONS BEFORE VALIDATING INTERVALS: | |
------------ | |
<RefPosition #0 @0 RefTypeParamDef <Ivl:0 V00> BB00 regmask=[ecx] minReg=1 fixed regOptional> | |
<RefPosition #1 @1 RefTypeBB BB01 regmask=[] minReg=1> | |
<RefPosition #2 @9 RefTypeUse <Ivl:0 V00> LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #3 @10 RefTypeDef <Ivl:6> IND BB01 regmask=[allInt] minReg=1> | |
<RefPosition #4 @13 RefTypeUse <Ivl:6> BB01 regmask=[allInt] minReg=1 last> | |
<RefPosition #5 @14 RefTypeDef <Ivl:7> ADD BB01 regmask=[allInt] minReg=1> | |
<RefPosition #6 @15 RefTypeUse <Ivl:7> BB01 regmask=[allInt] minReg=1 last> | |
<RefPosition #7 @16 RefTypeDef <Ivl:1 V01> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #8 @23 RefTypeUse <Ivl:0 V00> LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #9 @24 RefTypeDef <Ivl:8> IND BB01 regmask=[allInt] minReg=1> | |
<RefPosition #10 @25 RefTypeUse <Ivl:8> BB01 regmask=[allInt] minReg=1 last> | |
<RefPosition #11 @26 RefTypeDef <Ivl:2 V02> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #12 @33 RefTypeUse <Ivl:2 V02> LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #13 @34 RefTypeDef <Ivl:9> IND BB01 regmask=[allInt] minReg=1> | |
<RefPosition #14 @35 RefTypeUse <Ivl:9> BB01 regmask=[allInt] minReg=1 last> | |
<RefPosition #15 @36 RefTypeDef <Ivl:5 V10> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #16 @41 RefTypeUse <Ivl:5 V10> LCL_VAR BB01 regmask=[allInt] minReg=1 last regOptional> | |
<RefPosition #17 @41 RefTypeUse <Ivl:1 V01> LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #18 @45 RefTypeBB BB02 regmask=[] minReg=1> | |
<RefPosition #19 @63 RefTypeUse <Ivl:0 V00> LCL_VAR BB02 regmask=[allInt] minReg=1> | |
<RefPosition #20 @73 RefTypeUse <Ivl:0 V00> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
<RefPosition #21 @73 RefTypeUse <Ivl:1 V01> LCL_VAR BB02 regmask=[allInt] minReg=1> | |
<RefPosition #22 @81 RefTypeUse <Ivl:2 V02> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
<RefPosition #23 @81 RefTypeUse <Ivl:1 V01> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
<RefPosition #24 @82 RefTypeDef <Ivl:10> LEA BB02 regmask=[allInt] minReg=1> | |
<RefPosition #25 @83 RefTypeUse <Ivl:10> BB02 regmask=[allInt] minReg=1 last> | |
<RefPosition #26 @84 RefTypeDef <Ivl:4 V09> STORE_LCL_VAR BB02 regmask=[allInt] minReg=1> | |
<RefPosition #27 @87 RefTypeUse <Ivl:4 V09> LCL_VAR BB02 regmask=[allInt] minReg=1> | |
<RefPosition #28 @88 RefTypeDef <Ivl:11> IND BB02 regmask=[allInt] minReg=1> | |
<RefPosition #29 @89 RefTypeUse <Ivl:11> BB02 regmask=[allInt] minReg=1 last> | |
<RefPosition #30 @90 RefTypeDef <Ivl:3 V07> STORE_LCL_VAR BB02 regmask=[allInt] minReg=1> | |
<RefPosition #31 @98 RefTypeDef <Ivl:12> CNS_INT BB02 regmask=[allInt] minReg=1> | |
<RefPosition #32 @99 RefTypeUse <Ivl:4 V09> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
<RefPosition #33 @99 RefTypeUse <Ivl:12> BB02 regmask=[allInt] minReg=1 last> | |
<RefPosition #34 @105 RefTypeFixedReg <Reg:eax> BB02 regmask=[eax] minReg=1> | |
<RefPosition #35 @105 RefTypeUse <Ivl:3 V07> LCL_VAR BB02 regmask=[eax] minReg=1 last fixed> | |
<RefPosition #36 @107 RefTypeBB BB06 regmask=[] minReg=1> | |
<RefPosition #37 @113 RefTypeFixedReg <Reg:ecx> BB06 regmask=[ecx] minReg=1> | |
<RefPosition #38 @113 RefTypeUse <Ivl:0 V00> LCL_VAR BB06 regmask=[ecx] minReg=1 last fixed> | |
<RefPosition #39 @114 RefTypeFixedReg <Reg:ecx> BB06 regmask=[ecx] minReg=1> | |
<RefPosition #40 @114 RefTypeDef <Ivl:13> PUTARG_REG BB06 regmask=[ecx] minReg=1 fixed> | |
<RefPosition #41 @115 RefTypeFixedReg <Reg:ecx> BB06 regmask=[ecx] minReg=1> | |
<RefPosition #42 @115 RefTypeUse <Ivl:13> BB06 regmask=[ecx] minReg=1 last fixed> | |
<RefPosition #43 @116 RefTypeKill <Reg:eax> BB06 regmask=[eax] minReg=1 last> | |
<RefPosition #44 @116 RefTypeKill <Reg:ecx> BB06 regmask=[ecx] minReg=1 last> | |
<RefPosition #45 @116 RefTypeKill <Reg:edx> BB06 regmask=[edx] minReg=1 last> | |
----------------- | |
<RefPosition #0 @0 RefTypeParamDef <Ivl:0 V00> BB00 regmask=[ecx] minReg=1 fixed regOptional> | |
<RefPosition #2 @9 RefTypeUse <Ivl:0 V00> LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #8 @23 RefTypeUse <Ivl:0 V00> LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #19 @63 RefTypeUse <Ivl:0 V00> LCL_VAR BB02 regmask=[allInt] minReg=1> | |
<RefPosition #20 @73 RefTypeUse <Ivl:0 V00> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
<RefPosition #38 @113 RefTypeUse <Ivl:0 V00> LCL_VAR BB06 regmask=[ecx] minReg=1 last fixed> | |
Pop: LocalVar V00: undefined use at 113 | |
----------------- | |
<RefPosition #7 @16 RefTypeDef <Ivl:1 V01> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #17 @41 RefTypeUse <Ivl:1 V01> LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #21 @73 RefTypeUse <Ivl:1 V01> LCL_VAR BB02 regmask=[allInt] minReg=1> | |
<RefPosition #23 @81 RefTypeUse <Ivl:1 V01> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
----------------- | |
<RefPosition #11 @26 RefTypeDef <Ivl:2 V02> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #12 @33 RefTypeUse <Ivl:2 V02> LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #22 @81 RefTypeUse <Ivl:2 V02> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
----------------- | |
<RefPosition #26 @84 RefTypeDef <Ivl:4 V09> STORE_LCL_VAR BB02 regmask=[allInt] minReg=1> | |
<RefPosition #27 @87 RefTypeUse <Ivl:4 V09> LCL_VAR BB02 regmask=[allInt] minReg=1> | |
<RefPosition #32 @99 RefTypeUse <Ivl:4 V09> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
----------------- | |
<RefPosition #30 @90 RefTypeDef <Ivl:3 V07> STORE_LCL_VAR BB02 regmask=[allInt] minReg=1> | |
<RefPosition #35 @105 RefTypeUse <Ivl:3 V07> LCL_VAR BB02 regmask=[eax] minReg=1 last fixed> | |
----------------- | |
<RefPosition #15 @36 RefTypeDef <Ivl:5 V10> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #16 @41 RefTypeUse <Ivl:5 V10> LCL_VAR BB01 regmask=[allInt] minReg=1 last regOptional> | |
TUPLE STYLE DUMP WITH REF POSITIONS | |
Incoming Parameters: V00 | |
BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
===== | |
N003. IL_OFFSET IL offset: 0x0 | |
N005. V00(L0) | |
N007. LEA(b+8) | |
N009. IND | |
Use:<V00/L0>(#2) | |
Def:<I6>(#3) Pref:<I7> | |
N011. CNS_INT -1 | |
N013. ADD | |
Use:<I6>(#4) * | |
Def:<I7>(#5) Pref:<V01/L1> | |
N015. V01(L1) | |
Use:<I7>(#6) * | |
Def:<V01/L1>(#7) | |
N017. IL_OFFSET IL offset: 0x9 | |
N019. V00(L0) | |
N021. LEA(b+4) | |
N023. IND | |
Use:<V00/L0>(#8) | |
Def:<I8>(#9) Pref:<V02/L2> | |
N025. V02(L2) | |
Use:<I8>(#10) * | |
Def:<V02/L2>(#11) | |
N027. IL_OFFSET IL offset: 0x10 | |
N029. V02(L2) | |
N031. LEA(b+4) | |
N033. IND | |
Use:<V02/L2>(#12) | |
Def:<I9>(#13) Pref:<V10/L5> | |
N035. V10(L5) | |
Use:<I9>(#14) * | |
Def:<V10/L5>(#15) | |
N037. V10(L5) | |
N039. V01(L1) | |
N041. LE | |
Use:<V10/L5>(#16) * | |
Use:<V01/L1>(#17) | |
N043. JTRUE | |
BB02 [01C..052) (return), preds={BB01} succs={} | |
===== | |
N047. IL_OFFSET IL offset: 0x1c | |
N049. V00(L0) | |
N051. LEA(b+12) | |
N053. IND | |
N055. CNS_INT 1 | |
N057. ADD | |
N059. V00(L0) | |
N061. LEA(b+12) | |
N063. STOREIND | |
Use:<V00/L0>(#19) | |
N065. IL_OFFSET IL offset: 0x2a | |
N067. V00(L0) | |
N069. LEA(b+8) | |
N071. V01(L1) | |
N073. STOREIND | |
Use:<V00/L0>(#20) * | |
Use:<V01/L1>(#21) | |
N075. IL_OFFSET IL offset: 0x31 | |
N077. V02(L2) | |
N079. V01(L1) | |
N081. LEA(b+(i*4)+8) | |
Use:<V02/L2>(#22) * | |
Use:<V01/L1>(#23) * | |
Def:<I10>(#24) Pref:<V09/L4> | |
N083. V09(L4) | |
Use:<I10>(#25) * | |
Def:<V09/L4>(#26) | |
N085. V09(L4) | |
N087. IND | |
Use:<V09/L4>(#27) | |
Def:<I11>(#28) Pref:<V07/L3> | |
N089. V07(L3) | |
Use:<I11>(#29) * | |
Def:<V07/L3>(#30) | |
N091. IL_OFFSET IL offset: 0x39 | |
N093. IL_OFFSET IL offset: 0x40 | |
N095. V09(L4) | |
N097. CNS_INT null | |
Def:<I12>(#31) | |
N099. STOREIND | |
Use:<V09/L4>(#32) * | |
Use:<I12>(#33) * | |
N101. IL_OFFSET IL offset: 0x50 | |
N103. V07(L3) | |
N105. RETURN | |
Use:<V07/L3>(#35) Fixed:eax(#34) * | |
BB06 [016..01C) (throw), preds={BB01} succs={} | |
===== | |
N109. IL_OFFSET IL offset: 0x16 | |
N111. V00(L0) | |
N113. PUTARG_REG | |
Use:<V00/L0>(#38) Fixed:ecx(#37) * | |
Def:<I13>(#40) ecx | |
N115. CALL | |
Use:<I13>(#42) Fixed:ecx(#41) * | |
Kill: eax ecx edx | |
Linear scan intervals after buildIntervals: | |
Interval 0: (V00) ref RefPositions {#0@0 #2@9 #8@23 #19@63 #20@73 #38@113} physReg:ecx Preferences=[ecx] | |
Interval 1: (V01) int RefPositions {#7@16 #17@41 #21@73 #23@81} physReg:NA Preferences=[allInt] | |
Interval 2: (V02) ref RefPositions {#11@26 #12@33 #22@81} physReg:NA Preferences=[allInt] | |
Interval 3: (V07) ref (struct) RefPositions {#30@90 #35@105} physReg:NA Preferences=[eax] | |
Interval 4: (V09) byref RefPositions {#26@84 #27@87 #32@99} physReg:NA Preferences=[allInt] | |
Interval 5: (V10) int RefPositions {#15@36 #16@41} physReg:NA Preferences=[allInt] | |
Interval 6: int RefPositions {#3@10 #4@13} physReg:NA Preferences=[allInt] RelatedInterval <I7> | |
Interval 7: int RefPositions {#5@14 #6@15} physReg:NA Preferences=[allInt] RelatedInterval <V01/L1> | |
Interval 8: ref RefPositions {#9@24 #10@25} physReg:NA Preferences=[allInt] RelatedInterval <V02/L2> | |
Interval 9: int RefPositions {#13@34 #14@35} physReg:NA Preferences=[allInt] RelatedInterval <V10/L5> | |
Interval 10: byref RefPositions {#24@82 #25@83} physReg:NA Preferences=[allInt] RelatedInterval <V09/L4> | |
Interval 11: ref RefPositions {#28@88 #29@89} physReg:NA Preferences=[allInt] RelatedInterval <V07/L3> | |
Interval 12: ref (constant) RefPositions {#31@98 #33@99} physReg:NA Preferences=[allInt] | |
Interval 13: ref RefPositions {#40@114 #42@115} physReg:NA Preferences=[ecx] | |
*************** In LinearScan::allocateRegisters() | |
Linear scan intervals before allocateRegisters: | |
Interval 0: (V00) ref RefPositions {#0@0 #2@9 #8@23 #19@63 #20@73 #38@113} physReg:ecx Preferences=[ecx] | |
Interval 1: (V01) int RefPositions {#7@16 #17@41 #21@73 #23@81} physReg:NA Preferences=[allInt] | |
Interval 2: (V02) ref RefPositions {#11@26 #12@33 #22@81} physReg:NA Preferences=[allInt] | |
Interval 3: (V07) ref (struct) RefPositions {#30@90 #35@105} physReg:NA Preferences=[eax] | |
Interval 4: (V09) byref RefPositions {#26@84 #27@87 #32@99} physReg:NA Preferences=[allInt] | |
Interval 5: (V10) int RefPositions {#15@36 #16@41} physReg:NA Preferences=[allInt] | |
Interval 6: int RefPositions {#3@10 #4@13} physReg:NA Preferences=[allInt] RelatedInterval <I7> | |
Interval 7: int RefPositions {#5@14 #6@15} physReg:NA Preferences=[allInt] RelatedInterval <V01/L1> | |
Interval 8: ref RefPositions {#9@24 #10@25} physReg:NA Preferences=[allInt] RelatedInterval <V02/L2> | |
Interval 9: int RefPositions {#13@34 #14@35} physReg:NA Preferences=[allInt] RelatedInterval <V10/L5> | |
Interval 10: byref RefPositions {#24@82 #25@83} physReg:NA Preferences=[allInt] RelatedInterval <V09/L4> | |
Interval 11: ref RefPositions {#28@88 #29@89} physReg:NA Preferences=[allInt] RelatedInterval <V07/L3> | |
Interval 12: ref (constant) RefPositions {#31@98 #33@99} physReg:NA Preferences=[allInt] | |
Interval 13: ref RefPositions {#40@114 #42@115} physReg:NA Preferences=[ecx] | |
------------ | |
REFPOSITIONS BEFORE ALLOCATION: | |
------------ | |
<RefPosition #0 @0 RefTypeParamDef <Ivl:0 V00> BB00 regmask=[ecx] minReg=1 fixed regOptional> | |
<RefPosition #1 @1 RefTypeBB BB01 regmask=[] minReg=1> | |
<RefPosition #2 @9 RefTypeUse <Ivl:0 V00> LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #3 @10 RefTypeDef <Ivl:6> IND BB01 regmask=[allInt] minReg=1> | |
<RefPosition #4 @13 RefTypeUse <Ivl:6> BB01 regmask=[allInt] minReg=1 last> | |
<RefPosition #5 @14 RefTypeDef <Ivl:7> ADD BB01 regmask=[allInt] minReg=1> | |
<RefPosition #6 @15 RefTypeUse <Ivl:7> BB01 regmask=[allInt] minReg=1 last> | |
<RefPosition #7 @16 RefTypeDef <Ivl:1 V01> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #8 @23 RefTypeUse <Ivl:0 V00> LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #9 @24 RefTypeDef <Ivl:8> IND BB01 regmask=[allInt] minReg=1> | |
<RefPosition #10 @25 RefTypeUse <Ivl:8> BB01 regmask=[allInt] minReg=1 last> | |
<RefPosition #11 @26 RefTypeDef <Ivl:2 V02> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #12 @33 RefTypeUse <Ivl:2 V02> LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #13 @34 RefTypeDef <Ivl:9> IND BB01 regmask=[allInt] minReg=1> | |
<RefPosition #14 @35 RefTypeUse <Ivl:9> BB01 regmask=[allInt] minReg=1 last> | |
<RefPosition #15 @36 RefTypeDef <Ivl:5 V10> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #16 @41 RefTypeUse <Ivl:5 V10> LCL_VAR BB01 regmask=[allInt] minReg=1 last regOptional> | |
<RefPosition #17 @41 RefTypeUse <Ivl:1 V01> LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #18 @45 RefTypeBB BB02 regmask=[] minReg=1> | |
<RefPosition #19 @63 RefTypeUse <Ivl:0 V00> LCL_VAR BB02 regmask=[allInt] minReg=1> | |
<RefPosition #20 @73 RefTypeUse <Ivl:0 V00> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
<RefPosition #21 @73 RefTypeUse <Ivl:1 V01> LCL_VAR BB02 regmask=[allInt] minReg=1> | |
<RefPosition #22 @81 RefTypeUse <Ivl:2 V02> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
<RefPosition #23 @81 RefTypeUse <Ivl:1 V01> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
<RefPosition #24 @82 RefTypeDef <Ivl:10> LEA BB02 regmask=[allInt] minReg=1> | |
<RefPosition #25 @83 RefTypeUse <Ivl:10> BB02 regmask=[allInt] minReg=1 last> | |
<RefPosition #26 @84 RefTypeDef <Ivl:4 V09> STORE_LCL_VAR BB02 regmask=[allInt] minReg=1> | |
<RefPosition #27 @87 RefTypeUse <Ivl:4 V09> LCL_VAR BB02 regmask=[allInt] minReg=1> | |
<RefPosition #28 @88 RefTypeDef <Ivl:11> IND BB02 regmask=[allInt] minReg=1> | |
<RefPosition #29 @89 RefTypeUse <Ivl:11> BB02 regmask=[allInt] minReg=1 last> | |
<RefPosition #30 @90 RefTypeDef <Ivl:3 V07> STORE_LCL_VAR BB02 regmask=[allInt] minReg=1> | |
<RefPosition #31 @98 RefTypeDef <Ivl:12> CNS_INT BB02 regmask=[allInt] minReg=1> | |
<RefPosition #32 @99 RefTypeUse <Ivl:4 V09> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
<RefPosition #33 @99 RefTypeUse <Ivl:12> BB02 regmask=[allInt] minReg=1 last> | |
<RefPosition #34 @105 RefTypeFixedReg <Reg:eax> BB02 regmask=[eax] minReg=1> | |
<RefPosition #35 @105 RefTypeUse <Ivl:3 V07> LCL_VAR BB02 regmask=[eax] minReg=1 last fixed> | |
<RefPosition #36 @107 RefTypeBB BB06 regmask=[] minReg=1> | |
<RefPosition #37 @113 RefTypeFixedReg <Reg:ecx> BB06 regmask=[ecx] minReg=1> | |
<RefPosition #38 @113 RefTypeUse <Ivl:0 V00> LCL_VAR BB06 regmask=[ecx] minReg=1 last fixed> | |
<RefPosition #39 @114 RefTypeFixedReg <Reg:ecx> BB06 regmask=[ecx] minReg=1> | |
<RefPosition #40 @114 RefTypeDef <Ivl:13> PUTARG_REG BB06 regmask=[ecx] minReg=1 fixed> | |
<RefPosition #41 @115 RefTypeFixedReg <Reg:ecx> BB06 regmask=[ecx] minReg=1> | |
<RefPosition #42 @115 RefTypeUse <Ivl:13> BB06 regmask=[ecx] minReg=1 last fixed> | |
<RefPosition #43 @116 RefTypeKill <Reg:eax> BB06 regmask=[eax] minReg=1 last> | |
<RefPosition #44 @116 RefTypeKill <Reg:ecx> BB06 regmask=[ecx] minReg=1 last> | |
<RefPosition #45 @116 RefTypeKill <Reg:edx> BB06 regmask=[edx] minReg=1 last> | |
VAR REFPOSITIONS BEFORE ALLOCATION | |
--- V00 (Interval 0) | |
<RefPosition #0 @0 RefTypeParamDef <Ivl:0 V00> BB00 regmask=[ecx] minReg=1 fixed regOptional> | |
<RefPosition #2 @9 RefTypeUse <Ivl:0 V00> LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #8 @23 RefTypeUse <Ivl:0 V00> LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #19 @63 RefTypeUse <Ivl:0 V00> LCL_VAR BB02 regmask=[allInt] minReg=1> | |
<RefPosition #20 @73 RefTypeUse <Ivl:0 V00> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
<RefPosition #38 @113 RefTypeUse <Ivl:0 V00> LCL_VAR BB06 regmask=[ecx] minReg=1 last fixed> | |
--- V01 (Interval 1) | |
<RefPosition #7 @16 RefTypeDef <Ivl:1 V01> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #17 @41 RefTypeUse <Ivl:1 V01> LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #21 @73 RefTypeUse <Ivl:1 V01> LCL_VAR BB02 regmask=[allInt] minReg=1> | |
<RefPosition #23 @81 RefTypeUse <Ivl:1 V01> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
--- V02 (Interval 2) | |
<RefPosition #11 @26 RefTypeDef <Ivl:2 V02> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #12 @33 RefTypeUse <Ivl:2 V02> LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #22 @81 RefTypeUse <Ivl:2 V02> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
--- V03 | |
--- V04 | |
--- V05 | |
--- V06 | |
--- V07 (Interval 3) | |
<RefPosition #30 @90 RefTypeDef <Ivl:3 V07> STORE_LCL_VAR BB02 regmask=[allInt] minReg=1> | |
<RefPosition #35 @105 RefTypeUse <Ivl:3 V07> LCL_VAR BB02 regmask=[eax] minReg=1 last fixed> | |
--- V08 | |
--- V09 (Interval 4) | |
<RefPosition #26 @84 RefTypeDef <Ivl:4 V09> STORE_LCL_VAR BB02 regmask=[allInt] minReg=1> | |
<RefPosition #27 @87 RefTypeUse <Ivl:4 V09> LCL_VAR BB02 regmask=[allInt] minReg=1> | |
<RefPosition #32 @99 RefTypeUse <Ivl:4 V09> LCL_VAR BB02 regmask=[allInt] minReg=1 last> | |
--- V10 (Interval 5) | |
<RefPosition #15 @36 RefTypeDef <Ivl:5 V10> STORE_LCL_VAR BB01 regmask=[allInt] minReg=1> | |
<RefPosition #16 @41 RefTypeUse <Ivl:5 V10> LCL_VAR BB01 regmask=[allInt] minReg=1 last regOptional> | |
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 |eax |ecx |edx |edi | | |
-------------------------------+----+----+----+----+ | |
| |V0 a| | | | |
0.#0 V0 Parm Keep ecx | |V0 a| | | | |
1.#1 BB1 PredBB0 | |V0 a| | | | |
9.#2 V0 Use Keep ecx | |V0 a| | | | |
10.#3 I6 Def Alloc eax |I6 a|V0 a| | | | |
13.#4 I6 Use * Keep eax |I6 a|V0 a| | | | |
14.#5 I7 Def Alloc eax |I7 a|V0 a| | | | |
15.#6 I7 Use * Keep eax |I7 a|V0 a| | | | |
16.#7 V1 Def Alloc eax |V1 a|V0 a| | | | |
23.#8 V0 Use Keep ecx |V1 a|V0 a| | | | |
24.#9 I8 Def Alloc edx |V1 a|V0 a|I8 a| | | |
25.#10 I8 Use * Keep edx |V1 a|V0 a|I8 a| | | |
26.#11 V2 Def Alloc edx |V1 a|V0 a|V2 a| | | |
33.#12 V2 Use Keep edx |V1 a|V0 a|V2 a| | | |
-------------------------------+----+----+----+----+----+ | |
Loc RP# Name Type Action Reg |eax |ecx |edx |esi |edi | | |
-------------------------------+----+----+----+----+----+ | |
34.#13 I9 Def Alloc esi |V1 a|V0 a|V2 a|I9 a| | | |
35.#14 I9 Use * Keep esi |V1 a|V0 a|V2 a|I9 a| | | |
36.#15 V10 Def Alloc esi |V1 a|V0 a|V2 a|V10a| | | |
41.#16 V10 Use * Keep esi |V1 a|V0 a|V2 a|V10a| | | |
41.#17 V1 Use Keep eax |V1 a|V0 a|V2 a|V10a| | | |
-------------------------------+----+----+----+----+----+ | |
Loc RP# Name Type Action Reg |eax |ecx |edx |esi |edi | | |
-------------------------------+----+----+----+----+----+ | |
45.#18 BB2 PredBB1 |V1 a|V0 a|V2 a| | | | |
63.#19 V0 Use Keep ecx |V1 a|V0 a|V2 a| | | | |
73.#20 V0 Use * Keep ecx |V1 a|V0 i|V2 a| | | | |
73.#21 V1 Use Keep eax |V1 a|V0 i|V2 a| | | | |
81.#22 V2 Use * Keep edx |V1 a|V0 i|V2 a| | | | |
81.#23 V1 Use * Keep eax |V1 a|V0 i|V2 a| | | | |
82.#24 I10 Def Alloc eax |I10a|V0 i| | | | | |
83.#25 I10 Use * Keep eax |I10a|V0 i| | | | | |
84.#26 V9 Def Alloc eax |V9 a|V0 i| | | | | |
87.#27 V9 Use Keep eax |V9 a|V0 i| | | | | |
88.#28 I11 Def Alloc ecx |V9 a|I11a| | | | | |
89.#29 I11 Use * Keep ecx |V9 a|I11a| | | | | |
Restr ecx |V9 a|V0 i| | | | | |
90.#30 V7 Def Alloc ecx |V9 a|V7 a| | | | | |
98.#31 C12 Def Alloc edx |V9 a|V7 a|C12a| | | | |
99.#32 V9 Use * Keep eax |V9 a|V7 a|C12a| | | | |
99.#33 C12 Use * Keep edx |V9 a|V7 a|C12a| | | | |
105.#34 eax Fixd Keep eax | |V7 a|C12i| | | | |
105.#35 V7 Use * Copy eax |V7 a|V7 a|C12i| | | | |
Restr ecx | |V0 i|C12i| | | | |
-------------------------------+----+----+----+----+----+ | |
Loc RP# Name Type Action Reg |eax |ecx |edx |esi |edi | | |
-------------------------------+----+----+----+----+----+ | |
107.#36 BB6 PredBB1 | |V0 a| | | | | |
113.#37 ecx Fixd Keep ecx | |V0 a| | | | | |
113.#38 V0 Use * Keep ecx | |V0 a| | | | | |
114.#39 ecx Fixd Keep ecx | | | | | | | |
114.#40 I13 Def Alloc ecx | |I13a| | | | | |
115.#41 ecx Fixd Keep ecx | |I13a| | | | | |
115.#42 I13 Use * Keep ecx | |I13a| | | | | |
116.#43 eax Kill Keep eax | | | | | | | |
116.#44 ecx Kill Keep ecx | | | | | | | |
116.#45 edx Kill Keep edx | | | | | | | |
------------ | |
REFPOSITIONS AFTER ALLOCATION: | |
------------ | |
<RefPosition #0 @0 RefTypeParamDef <Ivl:0 V00> BB00 regmask=[ecx] minReg=1 fixed regOptional> | |
<RefPosition #1 @1 RefTypeBB BB01 regmask=[] minReg=1> | |
<RefPosition #2 @9 RefTypeUse <Ivl:0 V00> LCL_VAR BB01 regmask=[ecx] minReg=1> | |
<RefPosition #3 @10 RefTypeDef <Ivl:6> IND BB01 regmask=[eax] minReg=1> | |
<RefPosition #4 @13 RefTypeUse <Ivl:6> BB01 regmask=[eax] minReg=1 last> | |
<RefPosition #5 @14 RefTypeDef <Ivl:7> ADD BB01 regmask=[eax] minReg=1> | |
<RefPosition #6 @15 RefTypeUse <Ivl:7> BB01 regmask=[eax] minReg=1 last> | |
<RefPosition #7 @16 RefTypeDef <Ivl:1 V01> STORE_LCL_VAR BB01 regmask=[eax] minReg=1> | |
<RefPosition #8 @23 RefTypeUse <Ivl:0 V00> LCL_VAR BB01 regmask=[ecx] minReg=1> | |
<RefPosition #9 @24 RefTypeDef <Ivl:8> IND BB01 regmask=[edx] minReg=1> | |
<RefPosition #10 @25 RefTypeUse <Ivl:8> BB01 regmask=[edx] minReg=1 last> | |
<RefPosition #11 @26 RefTypeDef <Ivl:2 V02> STORE_LCL_VAR BB01 regmask=[edx] minReg=1> | |
<RefPosition #12 @33 RefTypeUse <Ivl:2 V02> LCL_VAR BB01 regmask=[edx] minReg=1> | |
<RefPosition #13 @34 RefTypeDef <Ivl:9> IND BB01 regmask=[esi] minReg=1> | |
<RefPosition #14 @35 RefTypeUse <Ivl:9> BB01 regmask=[esi] minReg=1 last> | |
<RefPosition #15 @36 RefTypeDef <Ivl:5 V10> STORE_LCL_VAR BB01 regmask=[esi] minReg=1> | |
<RefPosition #16 @41 RefTypeUse <Ivl:5 V10> LCL_VAR BB01 regmask=[esi] minReg=1 last regOptional> | |
<RefPosition #17 @41 RefTypeUse <Ivl:1 V01> LCL_VAR BB01 regmask=[eax] minReg=1> | |
<RefPosition #18 @45 RefTypeBB BB02 regmask=[] minReg=1> | |
<RefPosition #19 @63 RefTypeUse <Ivl:0 V00> LCL_VAR BB02 regmask=[ecx] minReg=1> | |
<RefPosition #20 @73 RefTypeUse <Ivl:0 V00> LCL_VAR BB02 regmask=[ecx] minReg=1 last> | |
<RefPosition #21 @73 RefTypeUse <Ivl:1 V01> LCL_VAR BB02 regmask=[eax] minReg=1> | |
<RefPosition #22 @81 RefTypeUse <Ivl:2 V02> LCL_VAR BB02 regmask=[edx] minReg=1 last> | |
<RefPosition #23 @81 RefTypeUse <Ivl:1 V01> LCL_VAR BB02 regmask=[eax] minReg=1 last> | |
<RefPosition #24 @82 RefTypeDef <Ivl:10> LEA BB02 regmask=[eax] minReg=1> | |
<RefPosition #25 @83 RefTypeUse <Ivl:10> BB02 regmask=[eax] minReg=1 last> | |
<RefPosition #26 @84 RefTypeDef <Ivl:4 V09> STORE_LCL_VAR BB02 regmask=[eax] minReg=1> | |
<RefPosition #27 @87 RefTypeUse <Ivl:4 V09> LCL_VAR BB02 regmask=[eax] minReg=1> | |
<RefPosition #28 @88 RefTypeDef <Ivl:11> IND BB02 regmask=[ecx] minReg=1> | |
<RefPosition #29 @89 RefTypeUse <Ivl:11> BB02 regmask=[ecx] minReg=1 last> | |
<RefPosition #30 @90 RefTypeDef <Ivl:3 V07> STORE_LCL_VAR BB02 regmask=[ecx] minReg=1> | |
<RefPosition #31 @98 RefTypeDef <Ivl:12> CNS_INT BB02 regmask=[edx] minReg=1> | |
<RefPosition #32 @99 RefTypeUse <Ivl:4 V09> LCL_VAR BB02 regmask=[eax] minReg=1 last> | |
<RefPosition #33 @99 RefTypeUse <Ivl:12> BB02 regmask=[edx] minReg=1 last> | |
<RefPosition #34 @105 RefTypeFixedReg <Reg:eax> BB02 regmask=[eax] minReg=1> | |
<RefPosition #35 @105 RefTypeUse <Ivl:3 V07> LCL_VAR BB02 regmask=[eax] minReg=1 last copy fixed> | |
<RefPosition #36 @107 RefTypeBB BB06 regmask=[] minReg=1> | |
<RefPosition #37 @113 RefTypeFixedReg <Reg:ecx> BB06 regmask=[ecx] minReg=1> | |
<RefPosition #38 @113 RefTypeUse <Ivl:0 V00> LCL_VAR BB06 regmask=[ecx] minReg=1 last fixed> | |
<RefPosition #39 @114 RefTypeFixedReg <Reg:ecx> BB06 regmask=[ecx] minReg=1> | |
<RefPosition #40 @114 RefTypeDef <Ivl:13> PUTARG_REG BB06 regmask=[ecx] minReg=1 fixed> | |
<RefPosition #41 @115 RefTypeFixedReg <Reg:ecx> BB06 regmask=[ecx] minReg=1> | |
<RefPosition #42 @115 RefTypeUse <Ivl:13> BB06 regmask=[ecx] minReg=1 last fixed> | |
<RefPosition #43 @116 RefTypeKill <Reg:eax> BB06 regmask=[eax] minReg=1 last> | |
<RefPosition #44 @116 RefTypeKill <Reg:ecx> BB06 regmask=[ecx] minReg=1 last> | |
<RefPosition #45 @116 RefTypeKill <Reg:edx> BB06 regmask=[edx] minReg=1 last> | |
VAR REFPOSITIONS AFTER ALLOCATION | |
--- V00 (Interval 0) | |
<RefPosition #0 @0 RefTypeParamDef <Ivl:0 V00> BB00 regmask=[ecx] minReg=1 fixed regOptional> | |
<RefPosition #2 @9 RefTypeUse <Ivl:0 V00> LCL_VAR BB01 regmask=[ecx] minReg=1> | |
<RefPosition #8 @23 RefTypeUse <Ivl:0 V00> LCL_VAR BB01 regmask=[ecx] minReg=1> | |
<RefPosition #19 @63 RefTypeUse <Ivl:0 V00> LCL_VAR BB02 regmask=[ecx] minReg=1> | |
<RefPosition #20 @73 RefTypeUse <Ivl:0 V00> LCL_VAR BB02 regmask=[ecx] minReg=1 last> | |
<RefPosition #38 @113 RefTypeUse <Ivl:0 V00> LCL_VAR BB06 regmask=[ecx] minReg=1 last fixed> | |
--- V01 (Interval 1) | |
<RefPosition #7 @16 RefTypeDef <Ivl:1 V01> STORE_LCL_VAR BB01 regmask=[eax] minReg=1> | |
<RefPosition #17 @41 RefTypeUse <Ivl:1 V01> LCL_VAR BB01 regmask=[eax] minReg=1> | |
<RefPosition #21 @73 RefTypeUse <Ivl:1 V01> LCL_VAR BB02 regmask=[eax] minReg=1> | |
<RefPosition #23 @81 RefTypeUse <Ivl:1 V01> LCL_VAR BB02 regmask=[eax] minReg=1 last> | |
--- V02 (Interval 2) | |
<RefPosition #11 @26 RefTypeDef <Ivl:2 V02> STORE_LCL_VAR BB01 regmask=[edx] minReg=1> | |
<RefPosition #12 @33 RefTypeUse <Ivl:2 V02> LCL_VAR BB01 regmask=[edx] minReg=1> | |
<RefPosition #22 @81 RefTypeUse <Ivl:2 V02> LCL_VAR BB02 regmask=[edx] minReg=1 last> | |
--- V03 | |
--- V04 | |
--- V05 | |
--- V06 | |
--- V07 (Interval 3) | |
<RefPosition #30 @90 RefTypeDef <Ivl:3 V07> STORE_LCL_VAR BB02 regmask=[ecx] minReg=1> | |
<RefPosition #35 @105 RefTypeUse <Ivl:3 V07> LCL_VAR BB02 regmask=[eax] minReg=1 last copy fixed> | |
--- V08 | |
--- V09 (Interval 4) | |
<RefPosition #26 @84 RefTypeDef <Ivl:4 V09> STORE_LCL_VAR BB02 regmask=[eax] minReg=1> | |
<RefPosition #27 @87 RefTypeUse <Ivl:4 V09> LCL_VAR BB02 regmask=[eax] minReg=1> | |
<RefPosition #32 @99 RefTypeUse <Ivl:4 V09> LCL_VAR BB02 regmask=[eax] minReg=1 last> | |
--- V10 (Interval 5) | |
<RefPosition #15 @36 RefTypeDef <Ivl:5 V10> STORE_LCL_VAR BB01 regmask=[esi] minReg=1> | |
<RefPosition #16 @41 RefTypeUse <Ivl:5 V10> LCL_VAR BB01 regmask=[esi] minReg=1 last regOptional> | |
Active intervals at end of allocation: | |
----------------------- | |
RESOLVING BB BOUNDARIES | |
----------------------- | |
Resolution Candidates: {V00 V01 V02} | |
Has NoCritical Edges | |
Prior to Resolution | |
BB01 | |
use def in out | |
{V00} | |
{V01 V02 V10} | |
{V00} | |
{V00 V01 V02} | |
Var=Reg beg of BB01: V00=ecx | |
Var=Reg end of BB01: V00=ecx V01=eax V02=edx | |
BB02 | |
use def in out | |
{V00 V01 V02} | |
{V05 V07 V09} | |
{V00 V01 V02} | |
{} | |
Var=Reg beg of BB02: V00=ecx V01=eax V02=edx | |
Var=Reg end of BB02: none | |
BB06 | |
use def in out | |
{V00} | |
{} | |
{V00} | |
{} | |
Var=Reg beg of BB06: V00=ecx | |
Var=Reg end of BB06: none | |
RESOLVING EDGES | |
Set V00 argument initial register to ecx | |
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..016)-> BB06 ( cond ) i label target idxlen LIR | |
BB02 [0002] 1 BB01 1 [01C..052) (return) i label target idxlen LIR | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe LIR | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
N003 (???,???) [000177] ------------ IL_OFFSET void IL offset: 0x0 REG NA | |
N005 ( 1, 1) [000000] ------------ t0 = LCL_VAR ref V00 this u:1 ecx REG ecx $80 | |
/--* t0 ref | |
N007 ( 2, 2) [000088] -c---------- t88 = * LEA(b+8) byref REG NA | |
/--* t88 byref | |
N009 ( 4, 4) [000001] ---XG------- t1 = * IND int REG eax <l:$143, c:$142> | |
N011 ( 1, 1) [000002] -c---------- t2 = CNS_INT int -1 REG NA $41 | |
/--* t1 int | |
+--* t2 int | |
N013 ( 6, 6) [000003] ---XG------- t3 = * ADD int REG eax <l:$147, c:$146> | |
/--* t3 int | |
N015 ( 6, 6) [000005] DA-XG------- * STORE_LCL_VAR int V01 loc0 d:1 eax REG eax | |
N017 (???,???) [000178] ------------ IL_OFFSET void IL offset: 0x9 REG NA | |
N019 ( 1, 1) [000006] ------------ t6 = LCL_VAR ref V00 this u:1 ecx REG ecx $80 | |
/--* t6 ref | |
N021 ( 2, 2) [000090] -c---------- t90 = * LEA(b+4) byref REG NA | |
/--* t90 byref | |
N023 ( 4, 4) [000007] n---GO------ t7 = * IND ref REG edx <l:$1c4, c:$1c3> | |
/--* t7 ref | |
N025 ( 4, 4) [000009] DA--GO------ * STORE_LCL_VAR ref V02 loc1 d:1 edx REG edx | |
N027 (???,???) [000179] ------------ IL_OFFSET void IL offset: 0x10 REG NA | |
N029 ( 1, 1) [000011] ------------ t11 = LCL_VAR ref V02 loc1 u:1 edx REG edx <l:$1c2, c:$200> | |
/--* t11 ref | |
N031 (???,???) [000191] -c---------- t191 = * LEA(b+4) ref REG NA | |
/--* t191 ref | |
N033 ( 3, 3) [000012] ---X-------- t12 = * IND int REG esi <l:$149, c:$148> | |
/--* t12 int | |
N035 ( 7, 6) [000171] DA-X-------- * STORE_LCL_VAR int V10 cse1 d:1 esi REG esi | |
N037 ( 3, 2) [000172] ------------ t172 = LCL_VAR int V10 cse1 u:1 esi (last use) REG esi <l:$149, c:$148> | |
N039 ( 1, 1) [000010] ------------ t10 = LCL_VAR int V01 loc0 u:1 eax REG eax <l:$145, c:$144> | |
/--* t172 int | |
+--* t10 int | |
N041 ( 12, 10) [000013] N--X---N-U-- * LE void REG NA <l:$14d, c:$14c> | |
N043 ( 14, 12) [000014] ---X-------- * JTRUE void REG NA | |
------------ BB02 [01C..052) (return), preds={BB01} succs={} | |
N047 (???,???) [000180] ------------ IL_OFFSET void IL offset: 0x1c REG NA | |
N049 ( 1, 1) [000016] -c---------- t16 = LCL_VAR ref V00 this u:1 ecx REG NA $80 | |
/--* t16 ref | |
N051 ( 2, 2) [000095] -c---------- t95 = * LEA(b+12) byref REG NA | |
/--* t95 byref | |
N053 ( 4, 4) [000017] nc--GO------ t17 = * IND int REG NA <l:$151, c:$150> | |
N055 ( 1, 1) [000018] -c---------- t18 = CNS_INT int 1 REG NA $45 | |
/--* t17 int | |
+--* t18 int | |
N057 ( 6, 6) [000019] -c--GO------ t19 = * ADD int REG NA <l:$155, c:$154> | |
N059 ( 1, 1) [000015] ------------ t15 = LCL_VAR ref V00 this u:1 ecx REG ecx $80 | |
/--* t15 ref | |
N061 ( 2, 2) [000093] -c---------- t93 = * LEA(b+12) byref REG NA | |
/--* t93 byref | |
+--* t19 int | |
N063 (???,???) [000181] -A--GO------ * STOREIND int REG NA | |
N065 (???,???) [000182] ------------ IL_OFFSET void IL offset: 0x2a REG NA | |
N067 ( 1, 1) [000022] ------------ t22 = LCL_VAR ref V00 this u:1 ecx (last use) REG ecx $80 | |
/--* t22 ref | |
N069 ( 2, 2) [000097] -c---------- t97 = * LEA(b+8) byref REG NA | |
N071 ( 1, 1) [000023] ------------ t23 = LCL_VAR int V01 loc0 u:1 eax REG eax <l:$145, c:$144> | |
/--* t97 byref | |
+--* t23 int | |
N073 (???,???) [000183] -A--GO------ * STOREIND int REG NA | |
N075 (???,???) [000184] ------------ IL_OFFSET void IL offset: 0x31 REG NA | |
N077 ( 1, 1) [000118] ------------ t118 = LCL_VAR ref V02 loc1 u:1 edx (last use) REG edx <l:$1c2, c:$200> | |
N079 ( 1, 1) [000121] ------------ t121 = LCL_VAR int V01 loc0 u:1 eax (last use) REG eax <l:$145, c:$144> | |
/--* t118 ref | |
+--* t121 int | |
N081 ( 4, 4) [000117] -------N---- t117 = * LEA(b+(i*4)+8) byref REG eax | |
/--* t117 byref | |
N083 ( 13, 12) [000166] DA--G------- * STORE_LCL_VAR byref V09 cse0 d:1 eax REG eax | |
N085 ( 3, 2) [000167] ------------ t167 = LCL_VAR byref V09 cse0 u:1 eax Zero Fseq[Value] REG eax <l:$c6, c:$c5> | |
/--* t167 byref | |
N087 ( 19, 16) [000124] ---XG------- t124 = * IND ref REG ecx <l:$341, c:$204> | |
/--* t124 ref | |
N089 ( 23, 19) [000125] DA-XG------- * STORE_LCL_VAR ref V07 tmp2 d:1 ecx REG ecx | |
N091 (???,???) [000185] ------------ IL_OFFSET void IL offset: 0x39 REG NA | |
N093 (???,???) [000186] ------------ IL_OFFSET void IL offset: 0x40 REG NA | |
N095 ( 3, 2) [000169] ------------ t169 = LCL_VAR byref V09 cse0 u:1 eax (last use) Zero Fseq[Value] REG eax $300 | |
N097 ( 1, 1) [000175] ------------ t175 = CNS_INT ref null REG edx $VN.Null | |
/--* t169 byref | |
+--* t175 ref | |
N099 (???,???) [000187] -A-XG------- * STOREIND ref REG NA | |
N101 (???,???) [000188] ------------ IL_OFFSET void IL offset: 0x50 REG NA | |
N103 ( 3, 2) [000070] ------------ t70 = LCL_VAR ref V07 tmp2 u:1 ecx (last use) REG ecx <l:$340, c:$204> | |
/--* t70 ref | |
N105 ( 4, 3) [000071] ------------ * RETURN ref REG NA $208 | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
N109 (???,???) [000189] ------------ IL_OFFSET void IL offset: 0x16 REG NA | |
N111 ( 1, 1) [000082] ------------ t82 = LCL_VAR ref V00 this u:1 ecx (last use) REG ecx $80 | |
/--* t82 ref | |
N113 (???,???) [000192] ------------ t192 = * PUTARG_REG ref REG ecx | |
/--* t192 ref this in ecx | |
N115 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack REG NA $VN.Void | |
------------------------------------------------------------------------------------------------------------------- | |
Final allocation | |
-------------------------------+----+----+----+----+----+ | |
Loc RP# Name Type Action Reg |eax |ecx |edx |esi |edi | | |
-------------------------------+----+----+----+----+----+ | |
0.#0 V0 Parm Alloc ecx | |V0 a| | | | | |
1.#1 BB1 PredBB0 | |V0 a| | | | | |
9.#2 V0 Use Keep ecx | |V0 a| | | | | |
10.#3 I6 Def Alloc eax |I6 a|V0 a| | | | | |
13.#4 I6 Use * Keep eax |I6 i|V0 a| | | | | |
14.#5 I7 Def Alloc eax |I7 a|V0 a| | | | | |
15.#6 I7 Use * Keep eax |I7 i|V0 a| | | | | |
16.#7 V1 Def Alloc eax |V1 a|V0 a| | | | | |
23.#8 V0 Use Keep ecx |V1 a|V0 a| | | | | |
24.#9 I8 Def Alloc edx |V1 a|V0 a|I8 a| | | | |
25.#10 I8 Use * Keep edx |V1 a|V0 a|I8 i| | | | |
26.#11 V2 Def Alloc edx |V1 a|V0 a|V2 a| | | | |
33.#12 V2 Use Keep edx |V1 a|V0 a|V2 a| | | | |
34.#13 I9 Def Alloc esi |V1 a|V0 a|V2 a|I9 a| | | |
35.#14 I9 Use * Keep esi |V1 a|V0 a|V2 a|I9 i| | | |
36.#15 V10 Def Alloc esi |V1 a|V0 a|V2 a|V10a| | | |
41.#16 V10 Use * Keep esi |V1 a|V0 a|V2 a|V10i| | | |
41.#17 V1 Use Keep eax |V1 a|V0 a|V2 a| | | | |
-------------------------------+----+----+----+----+----+ | |
Loc RP# Name Type Action Reg |eax |ecx |edx |esi |edi | | |
-------------------------------+----+----+----+----+----+ | |
45.#18 BB2 PredBB1 |V1 a|V0 a|V2 a| | | | |
63.#19 V0 Use Keep ecx |V1 a|V0 a|V2 a| | | | |
73.#20 V0 Use * Keep ecx |V1 a|V0 i|V2 a| | | | |
73.#21 V1 Use Keep eax |V1 a| |V2 a| | | | |
81.#22 V2 Use * Keep edx |V1 a| |V2 i| | | | |
81.#23 V1 Use * Keep eax |V1 i| | | | | | |
82.#24 I10 Def Alloc eax |I10a| | | | | | |
83.#25 I10 Use * Keep eax |I10i| | | | | | |
84.#26 V9 Def Alloc eax |V9 a| | | | | | |
87.#27 V9 Use Keep eax |V9 a| | | | | | |
88.#28 I11 Def Alloc ecx |V9 a|I11a| | | | | |
89.#29 I11 Use * Keep ecx |V9 a|I11i| | | | | |
90.#30 V7 Def Alloc ecx |V9 a|V7 a| | | | | |
98.#31 C12 Def Alloc edx |V9 a|V7 a|C12a| | | | |
99.#32 V9 Use * Keep eax |V9 i|V7 a|C12a| | | | |
99.#33 C12 Use * Keep edx | |V7 a|C12i| | | | |
105.#34 eax Fixd Keep eax | |V7 a| | | | | |
105.#35 V7 Use * Copy eax |V7 i|V7 i| | | | | |
-------------------------------+----+----+----+----+----+ | |
Loc RP# Name Type Action Reg |eax |ecx |edx |esi |edi | | |
-------------------------------+----+----+----+----+----+ | |
107.#36 BB6 PredBB1 | |V0 a| | | | | |
113.#37 ecx Fixd Keep ecx | |V0 a| | | | | |
113.#38 V0 Use * Keep ecx | |V0 i| | | | | |
114.#39 ecx Fixd Keep ecx | | | | | | | |
114.#40 I13 Def Alloc ecx | |I13a| | | | | |
115.#41 ecx Fixd Keep ecx | |I13a| | | | | |
115.#42 I13 Use * Keep ecx | |I13i| | | | | |
116.#43 eax Kill Keep eax | | | | | | | |
116.#44 ecx Kill Keep ecx | | | | | | | |
116.#45 edx Kill Keep edx | | | | | | | |
Recording the maximum number of concurrent spills: | |
---------- | |
LSRA Stats | |
---------- | |
Total Tracked Vars: 8 | |
Total Reg Cand Vars: 6 | |
Total number of Intervals: 13 | |
Total number of RefPositions: 45 | |
Total Spill Count: 0 Weighted: 0 | |
Total CopyReg Count: 0 Weighted: 0 | |
Total ResolutionMov Count: 0 Weighted: 0 | |
Total number of split edges: 0 | |
Total Number of spill temps created: 0 | |
TUPLE STYLE DUMP WITH REGISTER ASSIGNMENTS | |
Incoming Parameters: V00(ecx) | |
BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
===== | |
N003. IL_OFFSET IL offset: 0x0 | |
N005. V00(ecx) | |
N007. STK = LEA(b+8) ; ecx | |
N009. eax = IND ; STK | |
N011. CNS_INT -1 | |
N013. eax = ADD ; eax | |
* N015. V01(eax); eax | |
N017. IL_OFFSET IL offset: 0x9 | |
N019. V00(ecx) | |
N021. STK = LEA(b+4) ; ecx | |
N023. edx = IND ; STK | |
* N025. V02(edx); edx | |
N027. IL_OFFSET IL offset: 0x10 | |
N029. V02(edx) | |
N031. STK = LEA(b+4) ; edx | |
N033. esi = IND ; STK | |
* N035. V10(esi); esi | |
N037. V10(esi*) | |
N039. V01(eax) | |
N041. LE ; esi*,eax | |
N043. JTRUE | |
Var=Reg end of BB01: V00=ecx V01=eax V02=edx | |
BB02 [01C..052) (return), preds={BB01} succs={} | |
===== | |
Predecessor for variable locations: BB01 | |
Var=Reg beg of BB02: V00=ecx V01=eax V02=edx | |
N047. IL_OFFSET IL offset: 0x1c | |
N049. V00(STK) | |
N051. LEA(b+12) | |
N053. IND | |
N055. CNS_INT 1 | |
N057. ADD | |
N059. V00(ecx) | |
N061. STK = LEA(b+12); ecx | |
N063. STOREIND ; STK | |
N065. IL_OFFSET IL offset: 0x2a | |
N067. V00(ecx*) | |
N069. STK = LEA(b+8) ; ecx* | |
N071. V01(eax) | |
N073. STOREIND ; STK,eax | |
N075. IL_OFFSET IL offset: 0x31 | |
N077. V02(edx*) | |
N079. V01(eax*) | |
N081. eax = LEA(b+(i*4)+8); edx*,eax* | |
* N083. V09(eax); eax | |
N085. V09(eax) | |
N087. ecx = IND ; eax | |
* N089. V07(ecx); ecx | |
N091. IL_OFFSET IL offset: 0x39 | |
N093. IL_OFFSET IL offset: 0x40 | |
N095. V09(eax*) | |
N097. edx = CNS_INT null | |
N099. STOREIND ; eax*,edx | |
N101. IL_OFFSET IL offset: 0x50 | |
N103. V07(ecx*) | |
N105. RETURN ; ecx* | |
Var=Reg end of BB02: none | |
BB06 [016..01C) (throw), preds={BB01} succs={} | |
===== | |
Predecessor for variable locations: BB01 | |
Var=Reg beg of BB06: V00=ecx | |
N109. IL_OFFSET IL offset: 0x16 | |
N111. V00(ecx*) | |
N113. ecx = PUTARG_REG; ecx* | |
N115. CALL ; ecx | |
Var=Reg end of BB06: none | |
*************** Finishing PHASE Linear scan register alloc | |
*************** In genGenerateCode() | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB06 ( cond ) i label target idxlen LIR | |
BB02 [0002] 1 BB01 1 [01C..052) (return) i label target idxlen LIR | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe LIR | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Starting PHASE Generate code | |
*************** In fgDebugCheckBBlist | |
Finalizing stack frame | |
Recording Var Locations at start of BB01 | |
V00(ecx) | |
Modified regs: [eax ecx edx esi] | |
Callee-saved registers pushed: 1 [esi] | |
*************** In lvaAssignFrameOffsets(FINAL_FRAME_LAYOUT) | |
; Final local variable assignments | |
; | |
; V00 this [V00,T00] ( 8, 7 ) ref -> ecx this class-hnd | |
; V01 loc0 [V01,T01] ( 4, 4 ) int -> eax | |
; V02 loc1 [V02,T03] ( 3, 3 ) ref -> edx class-hnd | |
;* V03 loc2 [V03 ] ( 0, 0 ) struct ( 4) zero-ref | |
;* V04 loc3 [V04 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op | |
;* V05 tmp0 [V05,T02] ( 0, 0 ) int -> zero-ref "impRuntimeLookup slot" | |
;* V06 tmp1 [V06 ] ( 0, 0 ) int -> zero-ref "spilling Runtime Lookup tree" | |
; V07 tmp2 [V07,T05] ( 2, 2 ) ref -> ecx V03.Value(offs=0x00) P-INDEP "field V03.Value (fldOffset=0x0)" | |
;* V08 tmp3 [V08,T07] ( 0, 0 ) ref -> zero-ref V04.Value(offs=0x00) P-INDEP "field V04.Value (fldOffset=0x0)" | |
; V09 cse0 [V09,T04] ( 3, 3 ) byref -> eax "CSE - aggressive" | |
; V10 cse1 [V10,T06] ( 2, 2 ) int -> esi "CSE - aggressive" | |
; | |
; Lcl frame size = 0 | |
Setting stack level from -572662307 to 0 | |
=============== Generating BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} flags=0x00000000.40230020: i label target idxlen LIR | |
BB01 IN (1)={V00 } + ByrefExposed + GcHeap | |
OUT(3)={V00 V01 V02} + ByrefExposed + GcHeap | |
Recording Var Locations at start of BB01 | |
V00(ecx) | |
Change life 00000000 {} -> 00000001 {V00} | |
V00 in reg ecx is becoming live [------] | |
Live regs: 00000000 {} => 00000002 {ecx} | |
Live regs: (unchanged) 00000002 {ecx} | |
GC regs: (unchanged) 00000002 {ecx} | |
Byref regs: (unchanged) 00000000 {} | |
L_M50390_BB01: | |
Label: IG02, GCvars=00000000 {}, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {} | |
Scope info: begin block BB01, IL range [000..016) | |
Scope info: open scopes = | |
0 (V00 this) [000..052) | |
Added IP mapping: 0x0000 STACK_EMPTY (G_M50390_IG02,ins#0,ofs#0) label | |
Generating: N003 (???,???) [000177] ------------ IL_OFFSET void IL offset: 0x0 REG NA | |
Generating: N005 ( 1, 1) [000000] ------------ t0 = LCL_VAR ref V00 this u:1 ecx REG ecx $80 | |
/--* t0 ref | |
Generating: N007 ( 2, 2) [000088] -c---------- t88 = * LEA(b+8) byref REG NA | |
/--* t88 byref | |
Generating: N009 ( 4, 4) [000001] ---XG------- t1 = * IND int REG eax <l:$143, c:$142> | |
IN0001: mov eax, dword ptr [ecx+8] | |
Generating: N011 ( 1, 1) [000002] -c---------- t2 = CNS_INT int -1 REG NA $41 | |
/--* t1 int | |
+--* t2 int | |
Generating: N013 ( 6, 6) [000003] ---XG------- t3 = * ADD int REG eax <l:$147, c:$146> | |
IN0002: dec eax | |
/--* t3 int | |
Generating: N015 ( 6, 6) [000005] DA-XG------- * STORE_LCL_VAR int V01 loc0 d:1 eax REG eax | |
V01 in reg eax is becoming live [000005] | |
Live regs: 00000002 {ecx} => 00000003 {eax ecx} | |
Live vars: {V00} => {V00 V01} | |
Added IP mapping: 0x0009 STACK_EMPTY (G_M50390_IG02,ins#2,ofs#4) | |
Generating: N017 (???,???) [000178] ------------ IL_OFFSET void IL offset: 0x9 REG NA | |
Generating: N019 ( 1, 1) [000006] ------------ t6 = LCL_VAR ref V00 this u:1 ecx REG ecx $80 | |
/--* t6 ref | |
Generating: N021 ( 2, 2) [000090] -c---------- t90 = * LEA(b+4) byref REG NA | |
/--* t90 byref | |
Generating: N023 ( 4, 4) [000007] n---GO------ t7 = * IND ref REG edx <l:$1c4, c:$1c3> | |
IN0003: mov edx, gword ptr [ecx+4] | |
GC regs: 00000002 {ecx} => 00000006 {ecx edx} | |
/--* t7 ref | |
Generating: N025 ( 4, 4) [000009] DA--GO------ * STORE_LCL_VAR ref V02 loc1 d:1 edx REG edx | |
GC regs: 00000006 {ecx edx} => 00000002 {ecx} | |
V02 in reg edx is becoming live [000009] | |
Live regs: 00000003 {eax ecx} => 00000007 {eax ecx edx} | |
Live vars: {V00 V01} => {V00 V01 V02} | |
GC regs: 00000002 {ecx} => 00000006 {ecx edx} | |
Added IP mapping: 0x0010 STACK_EMPTY (G_M50390_IG02,ins#3,ofs#7) | |
Generating: N027 (???,???) [000179] ------------ IL_OFFSET void IL offset: 0x10 REG NA | |
Generating: N029 ( 1, 1) [000011] ------------ t11 = LCL_VAR ref V02 loc1 u:1 edx REG edx <l:$1c2, c:$200> | |
/--* t11 ref | |
Generating: N031 (???,???) [000191] -c---------- t191 = * LEA(b+4) ref REG NA | |
/--* t191 ref | |
Generating: N033 ( 3, 3) [000012] ---X-------- t12 = * IND int REG esi <l:$149, c:$148> | |
IN0004: mov esi, dword ptr [edx+4] | |
/--* t12 int | |
Generating: N035 ( 7, 6) [000171] DA-X-------- * STORE_LCL_VAR int V10 cse1 d:1 esi REG esi | |
V10 in reg esi is becoming live [000171] | |
Live regs: 00000007 {eax ecx edx} => 00000047 {eax ecx edx esi} | |
Live vars: {V00 V01 V02} => {V00 V01 V02 V10} | |
Generating: N037 ( 3, 2) [000172] ------------ t172 = LCL_VAR int V10 cse1 u:1 esi (last use) REG esi <l:$149, c:$148> | |
Generating: N039 ( 1, 1) [000010] ------------ t10 = LCL_VAR int V01 loc0 u:1 eax REG eax <l:$145, c:$144> | |
/--* t172 int | |
+--* t10 int | |
Generating: N041 ( 12, 10) [000013] N--X---N-U-- * LE void REG NA <l:$14d, c:$14c> | |
V10 in reg esi is becoming dead [000172] | |
Live regs: 00000047 {eax ecx edx esi} => 00000007 {eax ecx edx} | |
Live vars: {V00 V01 V02 V10} => {V00 V01 V02} | |
IN0005: cmp esi, eax | |
Generating: N043 ( 14, 12) [000014] ---X-------- * JTRUE void REG NA | |
IN0006: jbe L_M50390_BB06 | |
Scope info: end block BB01, IL range [000..016) | |
Scope info: open scopes = | |
0 (V00 this) [000..052) | |
=============== Generating BB02 [01C..052) (return), preds={BB01} succs={} flags=0x00000004.40230020: i label target idxlen LIR | |
BB02 IN (3)={V00 V01 V02} + ByrefExposed + GcHeap | |
OUT(0)={ } | |
Recording Var Locations at start of BB02 | |
V00(ecx) V01(eax) V02(edx) | |
Liveness not changing: 0000000B {V00 V01 V02} | |
Live regs: 00000000 {} => 00000007 {eax ecx edx} | |
GC regs: 00000000 {} => 00000006 {ecx edx} | |
Byref regs: (unchanged) 00000000 {} | |
L_M50390_BB02: | |
G_M50390_IG02: ; offs=000000H, funclet=00, bbWeight=1 | |
Label: IG03, GCvars=00000000 {}, gcrefRegs=00000006 {ecx edx}, byrefRegs=00000000 {} | |
Scope info: begin block BB02, IL range [01C..052) | |
Scope info: open scopes = | |
0 (V00 this) [000..052) | |
1 (V01 loc0) [000..052) | |
2 (V02 loc1) [000..052) | |
Added IP mapping: 0x001C STACK_EMPTY (G_M50390_IG03,ins#0,ofs#0) label | |
Generating: N047 (???,???) [000180] ------------ IL_OFFSET void IL offset: 0x1c REG NA | |
Generating: N049 ( 1, 1) [000016] -c---------- t16 = LCL_VAR ref V00 this u:1 ecx REG NA $80 | |
/--* t16 ref | |
Generating: N051 ( 2, 2) [000095] -c---------- t95 = * LEA(b+12) byref REG NA | |
/--* t95 byref | |
Generating: N053 ( 4, 4) [000017] nc--GO------ t17 = * IND int REG NA <l:$151, c:$150> | |
Generating: N055 ( 1, 1) [000018] -c---------- t18 = CNS_INT int 1 REG NA $45 | |
/--* t17 int | |
+--* t18 int | |
Generating: N057 ( 6, 6) [000019] -c--GO------ t19 = * ADD int REG NA <l:$155, c:$154> | |
Generating: N059 ( 1, 1) [000015] ------------ t15 = LCL_VAR ref V00 this u:1 ecx REG ecx $80 | |
/--* t15 ref | |
Generating: N061 ( 2, 2) [000093] -c---------- t93 = * LEA(b+12) byref REG NA | |
/--* t93 byref | |
+--* t19 int | |
Generating: N063 (???,???) [000181] -A--GO------ * STOREIND int REG NA | |
IN0007: inc dword ptr [ecx+12] | |
Added IP mapping: 0x002A STACK_EMPTY (G_M50390_IG03,ins#1,ofs#3) | |
Generating: N065 (???,???) [000182] ------------ IL_OFFSET void IL offset: 0x2a REG NA | |
Generating: N067 ( 1, 1) [000022] ------------ t22 = LCL_VAR ref V00 this u:1 ecx (last use) REG ecx $80 | |
/--* t22 ref | |
Generating: N069 ( 2, 2) [000097] -c---------- t97 = * LEA(b+8) byref REG NA | |
Generating: N071 ( 1, 1) [000023] ------------ t23 = LCL_VAR int V01 loc0 u:1 eax REG eax <l:$145, c:$144> | |
/--* t97 byref | |
+--* t23 int | |
Generating: N073 (???,???) [000183] -A--GO------ * STOREIND int REG NA | |
V00 in reg ecx is becoming dead [000022] | |
Live regs: 00000007 {eax ecx edx} => 00000005 {eax edx} | |
Live vars: {V00 V01 V02} => {V01 V02} | |
GC regs: 00000006 {ecx edx} => 00000004 {edx} | |
IN0008: mov dword ptr [ecx+8], eax | |
Added IP mapping: 0x0031 STACK_EMPTY (G_M50390_IG03,ins#2,ofs#6) | |
Generating: N075 (???,???) [000184] ------------ IL_OFFSET void IL offset: 0x31 REG NA | |
Generating: N077 ( 1, 1) [000118] ------------ t118 = LCL_VAR ref V02 loc1 u:1 edx (last use) REG edx <l:$1c2, c:$200> | |
Generating: N079 ( 1, 1) [000121] ------------ t121 = LCL_VAR int V01 loc0 u:1 eax (last use) REG eax <l:$145, c:$144> | |
/--* t118 ref | |
+--* t121 int | |
Generating: N081 ( 4, 4) [000117] -------N---- t117 = * LEA(b+(i*4)+8) byref REG eax | |
V02 in reg edx is becoming dead [000118] | |
Live regs: 00000005 {eax edx} => 00000001 {eax} | |
Live vars: {V01 V02} => {V01} | |
GC regs: 00000004 {edx} => 00000000 {} | |
V01 in reg eax is becoming dead [000121] | |
Live regs: 00000001 {eax} => 00000000 {} | |
Live vars: {V01} => {} | |
IN0009: lea eax, bword ptr [edx+4*eax+8] | |
Byref regs: 00000000 {} => 00000001 {eax} | |
/--* t117 byref | |
Generating: N083 ( 13, 12) [000166] DA--G------- * STORE_LCL_VAR byref V09 cse0 d:1 eax REG eax | |
Byref regs: 00000001 {eax} => 00000000 {} | |
V09 in reg eax is becoming live [000166] | |
Live regs: 00000000 {} => 00000001 {eax} | |
Live vars: {} => {V09} | |
Byref regs: 00000000 {} => 00000001 {eax} | |
Generating: N085 ( 3, 2) [000167] ------------ t167 = LCL_VAR byref V09 cse0 u:1 eax Zero Fseq[Value] REG eax <l:$c6, c:$c5> | |
/--* t167 byref | |
Generating: N087 ( 19, 16) [000124] ---XG------- t124 = * IND ref REG ecx <l:$341, c:$204> | |
IN000a: mov ecx, gword ptr [eax] | |
GC regs: 00000000 {} => 00000002 {ecx} | |
/--* t124 ref | |
Generating: N089 ( 23, 19) [000125] DA-XG------- * STORE_LCL_VAR ref V07 tmp2 d:1 ecx REG ecx | |
GC regs: 00000002 {ecx} => 00000000 {} | |
V07 in reg ecx is becoming live [000125] | |
Live regs: 00000001 {eax} => 00000003 {eax ecx} | |
Live vars: {V09} => {V07 V09} | |
GC regs: 00000000 {} => 00000002 {ecx} | |
Added IP mapping: 0x0039 STACK_EMPTY (G_M50390_IG03,ins#4,ofs#12) | |
Generating: N091 (???,???) [000185] ------------ IL_OFFSET void IL offset: 0x39 REG NA | |
Added IP mapping: 0x0040 STACK_EMPTY (G_M50390_IG03,ins#4,ofs#12) | |
Generating: N093 (???,???) [000186] ------------ IL_OFFSET void IL offset: 0x40 REG NA | |
Generating: N095 ( 3, 2) [000169] ------------ t169 = LCL_VAR byref V09 cse0 u:1 eax (last use) Zero Fseq[Value] REG eax $300 | |
Generating: N097 ( 1, 1) [000175] ------------ t175 = CNS_INT ref null REG edx $VN.Null | |
IN000b: xor edx, edx | |
GC regs: 00000002 {ecx} => 00000006 {ecx edx} | |
/--* t169 byref | |
+--* t175 ref | |
Generating: N099 (???,???) [000187] -A-XG------- * STOREIND ref REG NA | |
V09 in reg eax is becoming dead [000169] | |
Live regs: 00000003 {eax ecx} => 00000002 {ecx} | |
Live vars: {V07 V09} => {V07} | |
Byref regs: 00000001 {eax} => 00000000 {} | |
GC regs: 00000006 {ecx edx} => 00000002 {ecx} | |
IN000c: mov gword ptr [eax], edx | |
Added IP mapping: 0x0050 STACK_EMPTY (G_M50390_IG03,ins#6,ofs#16) | |
Generating: N101 (???,???) [000188] ------------ IL_OFFSET void IL offset: 0x50 REG NA | |
Generating: N103 ( 3, 2) [000070] ------------ t70 = LCL_VAR ref V07 tmp2 u:1 ecx (last use) REG ecx <l:$340, c:$204> | |
/--* t70 ref | |
Generating: N105 ( 4, 3) [000071] ------------ * RETURN ref REG NA $208 | |
V07 in reg ecx is becoming dead [000070] | |
Live regs: 00000002 {ecx} => 00000000 {} | |
Live vars: {V07} => {} | |
GC regs: 00000002 {ecx} => 00000000 {} | |
IN000d: mov eax, ecx | |
Scope info: end block BB02, IL range [01C..052) | |
Scope info: ending scope, LVnum=1 [000..052) | |
Scope info: ending scope, LVnum=2 [000..052) | |
Scope info: ending scope, LVnum=3 [000..052) | |
siEndScope: Failed to end scope for V03 | |
Scope info: ending scope, LVnum=4 [000..052) | |
siEndScope: Failed to end scope for V04 | |
Scope info: ending scope, LVnum=0 [000..052) | |
Scope info: open scopes = | |
<none> | |
Added IP mapping: EPILOG STACK_EMPTY (G_M50390_IG03,ins#7,ofs#18) label | |
Reserving epilog IG for block BB02 | |
G_M50390_IG03: ; offs=000012H, funclet=00, bbWeight=1 | |
*************** After placeholder IG creation | |
G_M50390_IG01: ; func=00, offs=000000H, size=0000H, gcrefRegs=00000000 {} <-- Prolog IG | |
G_M50390_IG02: ; offs=000000H, size=0012H, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref | |
G_M50390_IG03: ; offs=000012H, size=0012H, gcrefRegs=00000006 {ecx edx}, byrefRegs=00000000 {}, byref | |
G_M50390_IG04: ; epilog placeholder, next placeholder=<END>, BB02 [0002], epilog, extend <-- First placeholder <-- Last placeholder | |
; PrevGCVars=00000000 {}, PrevGCrefRegs=00000002 {ecx}, PrevByrefRegs=00000000 {} | |
; InitGCVars=00000000 {}, InitGCrefRegs=00000006 {ecx edx}, InitByrefRegs=00000000 {} | |
G_M50390_IG05: ; offs=000124H, size=0000H, gcrefRegs=00000000 {} <-- Current IG | |
=============== Generating BB06 [016..01C) (throw), preds={BB01} succs={} flags=0x00000004.400b1020: i rare label target gcsafe LIR | |
BB06 IN (1)={V00} + ByrefExposed + GcHeap | |
OUT(0)={ } | |
Recording Var Locations at start of BB06 | |
V00(ecx) | |
Change life 00000000 {} -> 00000001 {V00} | |
V00 in reg ecx is becoming live [------] | |
Live regs: 00000000 {} => 00000002 {ecx} | |
Live regs: (unchanged) 00000002 {ecx} | |
GC regs: (unchanged) 00000002 {ecx} | |
Byref regs: (unchanged) 00000000 {} | |
L_M50390_BB06: | |
Label: IG05, GCvars=00000000 {}, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {} | |
Scope info: begin block BB06, IL range [016..01C) | |
Scope info: open scopes = | |
0 (V00 this) [000..052) | |
Added IP mapping: 0x0016 STACK_EMPTY (G_M50390_IG05,ins#0,ofs#0) label | |
Generating: N109 (???,???) [000189] ------------ IL_OFFSET void IL offset: 0x16 REG NA | |
Generating: N111 ( 1, 1) [000082] ------------ t82 = LCL_VAR ref V00 this u:1 ecx (last use) REG ecx $80 | |
/--* t82 ref | |
Generating: N113 (???,???) [000192] ------------ t192 = * PUTARG_REG ref REG ecx | |
V00 in reg ecx is becoming dead [000082] | |
Live regs: 00000002 {ecx} => 00000000 {} | |
Live vars: {V00} => {} | |
GC regs: 00000002 {ecx} => 00000000 {} | |
GC regs: 00000000 {} => 00000002 {ecx} | |
/--* t192 ref this in ecx | |
Generating: N115 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack REG NA $VN.Void | |
GC regs: 00000002 {ecx} => 00000000 {} | |
Call: GCvars=00000000 {}, gcrefRegs=00000000 {}, byrefRegs=00000000 {} | |
IN000e: call Stack`1:ThrowForEmptyStack():this | |
Scope info: end block BB06, IL range [016..01C) | |
Scope info: open scopes = | |
<none> | |
IN000f: int3 | |
Liveness not changing: 00000000 {} | |
# compCycleEstimate = 113, compSizeEstimate = 95 Stack`1:Pop():RefAsValueType`1:this | |
; Final local variable assignments | |
; | |
; V00 this [V00,T00] ( 8, 7 ) ref -> ecx this class-hnd | |
; V01 loc0 [V01,T01] ( 4, 4 ) int -> eax | |
; V02 loc1 [V02,T03] ( 3, 3 ) ref -> edx class-hnd | |
;* V03 loc2 [V03 ] ( 0, 0 ) struct ( 4) zero-ref | |
;* V04 loc3 [V04 ] ( 0, 0 ) struct ( 4) zero-ref ld-addr-op | |
;* V05 tmp0 [V05,T02] ( 0, 0 ) int -> zero-ref "impRuntimeLookup slot" | |
;* V06 tmp1 [V06 ] ( 0, 0 ) int -> zero-ref "spilling Runtime Lookup tree" | |
; V07 tmp2 [V07,T05] ( 2, 2 ) ref -> ecx V03.Value(offs=0x00) P-INDEP "field V03.Value (fldOffset=0x0)" | |
;* V08 tmp3 [V08,T07] ( 0, 0 ) ref -> zero-ref V04.Value(offs=0x00) P-INDEP "field V04.Value (fldOffset=0x0)" | |
; V09 cse0 [V09,T04] ( 3, 3 ) byref -> eax "CSE - aggressive" | |
; V10 cse1 [V10,T06] ( 2, 2 ) int -> esi "CSE - aggressive" | |
; | |
; Lcl frame size = 0 | |
*************** Before prolog / epilog generation | |
G_M50390_IG01: ; func=00, offs=000000H, size=0000H, gcrefRegs=00000000 {} <-- Prolog IG | |
G_M50390_IG02: ; offs=000000H, size=0012H, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref | |
G_M50390_IG03: ; offs=000012H, size=0012H, gcrefRegs=00000006 {ecx edx}, byrefRegs=00000000 {}, byref | |
G_M50390_IG04: ; epilog placeholder, next placeholder=<END>, BB02 [0002], epilog, extend <-- First placeholder <-- Last placeholder | |
; PrevGCVars=00000000 {}, PrevGCrefRegs=00000002 {ecx}, PrevByrefRegs=00000000 {} | |
; InitGCVars=00000000 {}, InitGCrefRegs=00000006 {ecx edx}, InitByrefRegs=00000000 {} | |
G_M50390_IG05: ; offs=000124H, size=0000H, gcrefRegs=00000000 {} <-- Current IG | |
Recording Var Locations at start of BB01 | |
V00(ecx) | |
G_M50390_IG05: ; offs=000124H, funclet=00, bbWeight=0 | |
*************** In genFnProlog() | |
Added IP mapping to front: PROLOG STACK_EMPTY (G_M50390_IG01,ins#0,ofs#0) label | |
__prolog: | |
IN0010: push ebp | |
IN0011: mov ebp, esp | |
IN0012: push esi | |
*************** In genFnPrologCalleeRegArgs() for int regs | |
*************** In genEnregisterIncomingStackArgs() | |
G_M50390_IG01: ; offs=000000H, funclet=00, bbWeight=1 | |
*************** In genFnEpilog() | |
__epilog: | |
gcVarPtrSetCur=00000000 {}, gcRegGCrefSetCur=00000006 {ecx edx}, gcRegByrefSetCur=00000000 {} | |
IN0013: pop esi | |
IN0014: pop ebp | |
IN0015: ret | |
G_M50390_IG04: ; offs=000024H, funclet=00, bbWeight=1 | |
0 prologs, 1 epilogs | |
*************** After prolog / epilog generation | |
G_M50390_IG01: ; func=00, offs=000000H, size=0004H, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG | |
G_M50390_IG02: ; offs=000004H, size=0012H, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref | |
G_M50390_IG03: ; offs=000016H, size=0012H, gcrefRegs=00000006 {ecx edx}, byrefRegs=00000000 {}, byref | |
G_M50390_IG04: ; offs=000028H, size=0003H, epilog, nogc, extend | |
G_M50390_IG05: ; offs=00002BH, size=0006H, gcVars=00000000 {}, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, gcvars, byref | |
*************** In emitJumpDistBind() | |
Binding: IN0006: 000000 jbe L_M50390_BB06 | |
Binding L_M50390_BB06to G_M50390_IG05 | |
Estimate of fwd jump [02DB519C/006]: 0010 -> 002B = 0019 | |
Shrinking jump [02DB519C/006] | |
Adjusted offset of BB03 from 0016 to 0012 | |
Adjusted offset of BB04 from 0028 to 0024 | |
Adjusted offset of BB05 from 002B to 0027 | |
Total shrinkage = 4, min extra jump size = 4294967295 | |
*************** Finishing PHASE Generate code | |
*************** Starting PHASE Emit code | |
Hot code size = 0x2D bytes | |
Cold code size = 0x0 bytes | |
*************** In emitEndCodeGen() | |
Converting emitMaxStackDepth from bytes (0) to elements (0) | |
*************************************************************************** | |
Instructions as they come out of the scheduler | |
G_M50390_IG01: ; func=00, offs=000000H, size=0004H, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG | |
IN0010: 000000 55 push ebp | |
IN0011: 000001 8BEC mov ebp, esp | |
IN0012: 000003 56 push esi | |
;; bbWeight=1 PerfScore 2.25 | |
G_M50390_IG02: ; func=00, offs=000004H, size=000EH, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz | |
New gcrReg live regs=00000002 {ecx} | |
IN0001: 000004 8B4108 mov eax, dword ptr [ecx+8] | |
IN0002: 000007 48 dec eax | |
gcrReg +[edx] | |
IN0003: 000008 8B5104 mov edx, gword ptr [ecx+4] | |
IN0004: 00000B 8B7204 mov esi, dword ptr [edx+4] | |
IN0005: 00000E 3BF0 cmp esi, eax | |
IN0006: 000010 7615 jbe SHORT G_M50390_IG05 | |
;; bbWeight=1 PerfScore 7.50 | |
G_M50390_IG03: ; func=00, offs=000012H, size=0012H, gcrefRegs=00000006 {ecx edx}, byrefRegs=00000000 {}, byref | |
IN0007: 000012 FF410C inc dword ptr [ecx+12] | |
IN0008: 000015 894108 mov dword ptr [ecx+8], eax | |
byrReg +[eax] | |
IN0009: 000018 8D448208 lea eax, bword ptr [edx+4*eax+8] | |
IN000a: 00001C 8B08 mov ecx, gword ptr [eax] | |
IN000b: 00001E 33D2 xor edx, edx | |
IN000c: 000020 8910 mov gword ptr [eax], edx | |
byrReg -[eax] | |
gcrReg +[eax] | |
IN000d: 000022 8BC1 mov eax, ecx | |
;; bbWeight=1 PerfScore 10.50 | |
G_M50390_IG04: ; func=00, offs=000024H, size=0003H, epilog, nogc, extend | |
IN0013: 000024 5E pop esi | |
IN0014: 000025 5D pop ebp | |
IN0015: 000026 C3 ret | |
;; bbWeight=1 PerfScore 2.00 | |
G_M50390_IG05: ; func=00, offs=000027H, size=0006H, gcVars=00000000 {}, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, gcvars, byref | |
New gcrReg live regs=00000002 {ecx} | |
New gcrReg live regs=00000000 {} | |
IN000e: 000027 E8DCF8FFFF call Stack`1:ThrowForEmptyStack():this | |
IN000f: 00002C CC int3 | |
;; bbWeight=0 PerfScore 0.00Allocated method code size = 45 , actual size = 45 | |
; Total bytes of code 45, prolog size 4, PerfScore 26.75, (MethodHash=b85a3b29) for method Stack`1:Pop():RefAsValueType`1:this | |
; ============================================================ | |
*************** After end code gen, before unwindEmit() | |
G_M50390_IG01: ; func=00, offs=000000H, size=0004H, bbWeight=1 PerfScore 2.25, gcrefRegs=00000000 {}, byrefRegs=00000000 {}, byref, nogc <-- Prolog IG | |
IN0010: 000000 push ebp | |
IN0011: 000001 mov ebp, esp | |
IN0012: 000003 push esi | |
G_M50390_IG02: ; offs=000004H, size=000EH, bbWeight=1 PerfScore 7.50, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, byref, isz | |
IN0001: 000004 mov eax, dword ptr [ecx+8] | |
IN0002: 000007 dec eax | |
IN0003: 000008 mov edx, gword ptr [ecx+4] | |
IN0004: 00000B mov esi, dword ptr [edx+4] | |
IN0005: 00000E cmp esi, eax | |
IN0006: 000010 jbe SHORT G_M50390_IG05 | |
G_M50390_IG03: ; offs=000012H, size=0012H, bbWeight=1 PerfScore 10.50, gcrefRegs=00000006 {ecx edx}, byrefRegs=00000000 {}, byref | |
IN0007: 000012 inc dword ptr [ecx+12] | |
IN0008: 000015 mov dword ptr [ecx+8], eax | |
IN0009: 000018 lea eax, bword ptr [edx+4*eax+8] | |
IN000a: 00001C mov ecx, gword ptr [eax] | |
IN000b: 00001E xor edx, edx | |
IN000c: 000020 mov gword ptr [eax], edx | |
IN000d: 000022 mov eax, ecx | |
G_M50390_IG04: ; offs=000024H, size=0003H, bbWeight=1 PerfScore 2.00, epilog, nogc, extend | |
IN0013: 000024 pop esi | |
IN0014: 000025 pop ebp | |
IN0015: 000026 ret | |
G_M50390_IG05: ; offs=000027H, size=0006H, bbWeight=0 PerfScore 0.00, gcVars=00000000 {}, gcrefRegs=00000002 {ecx}, byrefRegs=00000000 {}, gcvars, byref | |
IN000e: 000027 call Stack`1:ThrowForEmptyStack():this | |
IN000f: 00002C int3 | |
*************** Finishing PHASE Emit code | |
*************** Starting PHASE Emit GC+EH tables | |
*************** In genIPmappingGen() | |
IP mapping count : 11 | |
IL offs PROLOG : 0x00000000 ( STACK_EMPTY ) | |
IL offs 0x0000 : 0x00000004 ( STACK_EMPTY ) | |
IL offs 0x0009 : 0x00000008 ( STACK_EMPTY ) | |
IL offs 0x0010 : 0x0000000B ( STACK_EMPTY ) | |
IL offs 0x001C : 0x00000012 ( STACK_EMPTY ) | |
IL offs 0x002A : 0x00000015 ( STACK_EMPTY ) | |
IL offs 0x0031 : 0x00000018 ( STACK_EMPTY ) | |
IL offs 0x0040 : 0x0000001E ( STACK_EMPTY ) | |
IL offs 0x0050 : 0x00000022 ( STACK_EMPTY ) | |
IL offs EPILOG : 0x00000024 ( STACK_EMPTY ) | |
IL offs 0x0016 : 0x00000027 ( STACK_EMPTY ) | |
*************** In genSetScopeInfo() | |
VarLocInfo count is 4 | |
*************** Variable debug info | |
4 live ranges | |
0( UNKNOWN) : From 00000000h to 00000004h, in ecx | |
0( UNKNOWN) : From 00000004h to 00000015h, in ecx | |
2( UNKNOWN) : From 00000012h to 00000018h, in edx | |
1( UNKNOWN) : From 00000012h to 00000018h, in eax | |
*************** In gcInfoBlockHdrSave() | |
GCINFO: untrckVars = 0 | |
GCINFO: trackdLcls = 0 | |
GCINFO: untrckVars = 0 | |
GCINFO: trackdLcls = 0 | |
*************** In gcInfoBlockHdrSave() | |
GCINFO: methodSize = 002D | |
GCINFO: prologSize = 0004 | |
GCINFO: epilogSize = 0003 | |
GCINFO: untrckVars = 0 | |
GCINFO: trackdLcls = 0 | |
GC Info for method Stack`1:Pop():RefAsValueType`1:this | |
GC info size = 10 | |
Method info block: | |
method size = 002D | |
prolog size = 4 | |
epilog size = 3 | |
epilog count = 1 | |
epilog end = no | |
callee-saved regs = ESI EBP | |
ebp frame = yes | |
fully interruptible= no | |
double align = no | |
arguments size = 0 DWORDs | |
stack frame size = 0 DWORDs | |
untracked count = 0 | |
var ptr tab count = 0 | |
epilog # 0 at 0024 | |
2D BD A5 BB BD | | |
BF CF 01 24 | | |
Pointer table: | |
FF | | |
*************** Finishing PHASE Emit GC+EH tables | |
Method code size: 45 | |
Allocations for Stack`1:Pop():RefAsValueType`1:this (MethodHash=b85a3b29) | |
count: 1569, size: 87323, max = 3072 | |
allocateMemory: 131072, nraUsed: 90488 | |
Alloc'd bytes by kind: | |
kind | size | pct | |
---------------------+------------+-------- | |
AssertionProp | 6436 | 7.37% | |
ASTNode | 17832 | 20.42% | |
InstDesc | 2124 | 2.43% | |
ImpStack | 192 | 0.22% | |
BasicBlock | 1964 | 2.25% | |
fgArgInfo | 132 | 0.15% | |
fgArgInfoPtrArr | 12 | 0.01% | |
FlowList | 240 | 0.27% | |
TreeStatementList | 112 | 0.13% | |
SiScope | 220 | 0.25% | |
DominatorMemory | 196 | 0.22% | |
LSRA | 1668 | 1.91% | |
LSRA_Interval | 672 | 0.77% | |
LSRA_RefPosition | 2024 | 2.32% | |
Reachability | 8 | 0.01% | |
SSA | 580 | 0.66% | |
ValueNumber | 15099 | 17.29% | |
LvaTable | 1424 | 1.63% | |
UnwindInfo | 0 | 0.00% | |
hashBv | 104 | 0.12% | |
bitset | 1176 | 1.35% | |
FixedBitVect | 32 | 0.04% | |
Generic | 1238 | 1.42% | |
LocalAddressVisitor | 320 | 0.37% | |
FieldSeqStore | 192 | 0.22% | |
ZeroOffsetFieldMap | 152 | 0.17% | |
ArrayInfoMap | 188 | 0.22% | |
MemoryPhiArg | 0 | 0.00% | |
CSE | 1352 | 1.55% | |
GC | 12 | 0.01% | |
CorSig | 104 | 0.12% | |
Inlining | 1056 | 1.21% | |
ArrayStack | 128 | 0.15% | |
DebugInfo | 380 | 0.44% | |
DebugOnly | 28689 | 32.85% | |
Codegen | 592 | 0.68% | |
LoopOpt | 0 | 0.00% | |
LoopHoist | 0 | 0.00% | |
Unknown | 237 | 0.27% | |
RangeCheck | 0 | 0.00% | |
CopyProp | 396 | 0.45% | |
SideEffects | 0 | 0.00% | |
ObjectAllocator | 0 | 0.00% | |
VariableLiveRanges | 0 | 0.00% | |
ClassLayout | 40 | 0.05% | |
TailMergeThrows | 0 | 0.00% | |
EarlyProp | 0 | 0.00% | |
****** DONE compiling Stack`1:Pop():RefAsValueType`1:this | |
ERRORLEVEL=100 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
c:\repos\runtime4\artifacts\tests\coreclr\Windows_NT.x86.release\Tests\Core_Root\corerun.exe ex.exe | |
Compiling 0 CastHelpers::StelemRef, IL size = 86, hash=0x93aaa786 FullOpts | |
Compiling 1 CastHelpers::LdelemaRef, IL size = 42, hash=0xffd2fc9e FullOpts | |
Compiling 2 SpanHelpers::IndexOf, IL size = 705, hash=0xdb3370c7 FullOpts | |
Compiling 3 Utf16Utility::GetPointerToFirstInvalidChar, IL size = 972, hash=0x137a51fe FullOpts | |
Compiling 4 Vector128::CreateScalarUnsafe, IL size = 21, hash=0xcd46d192 FullOpts | |
Compiling 5 Vector128::AsUInt32, IL size = 7, hash=0x8f8eda53 FullOpts | |
Compiling 6 Vector128::AsUInt16, IL size = 7, hash=0x7bc35b55 FullOpts | |
Compiling 7 Vector128::AsByte, IL size = 7, hash=0x9ea1d9de FullOpts | |
Compiling 8 Sse41::get_IsSupported, IL size = 6, hash=0x6da8cf37 FullOpts | |
Compiling 9 ASCIIUtility::NarrowUtf16ToAscii, IL size = 637, hash=0x150d5dc8 FullOpts | |
Compiling 10 X::Main, IL size = 51, hash=0x17874944 FullOpts | |
Compiling 11 EmptyArray`1::.cctor, IL size = 12, hash=0xaece4604 Tier-1/FullOpts switched to MinOpts | |
Compiling 12 Stack`1::Push, IL size = 60, hash=0x3bffc3a2 FullOpts | |
Compiling 13 Stack`1::PushWithResize, IL size = 80, hash=0xa06e2af2 FullOpts | |
Compiling 14 Array::Resize, IL size = 66, hash=0x16e8e9e0 FullOpts | |
****** START compiling Stack`1:Pop():RefAsValueType`1:this (MethodHash=b85a3b29) | |
Generating code for Windows x86 | |
OPTIONS: compCodeOpt = BLENDED_CODE | |
OPTIONS: compDbgCode = false | |
OPTIONS: compDbgInfo = true | |
OPTIONS: compDbgEnC = false | |
OPTIONS: compProcedureSplitting = false | |
OPTIONS: compProcedureSplittingEH = false | |
IL to import: | |
IL_0000 02 ldarg.0 | |
IL_0001 7b 54 02 00 0a ldfld 0xA000254 | |
IL_0006 17 ldc.i4.1 | |
IL_0007 59 sub | |
IL_0008 0a stloc.0 | |
IL_0009 02 ldarg.0 | |
IL_000a 7b 53 02 00 0a ldfld 0xA000253 | |
IL_000f 0b stloc.1 | |
IL_0010 06 ldloc.0 | |
IL_0011 07 ldloc.1 | |
IL_0012 8e ldlen | |
IL_0013 69 conv.i4 | |
IL_0014 37 06 blt.un.s 6 (IL_001c) | |
IL_0016 02 ldarg.0 | |
IL_0017 28 59 02 00 0a call 0xA000259 | |
IL_001c 02 ldarg.0 | |
IL_001d 02 ldarg.0 | |
IL_001e 7b 55 02 00 0a ldfld 0xA000255 | |
IL_0023 17 ldc.i4.1 | |
IL_0024 58 add | |
IL_0025 7d 55 02 00 0a stfld 0xA000255 | |
IL_002a 02 ldarg.0 | |
IL_002b 06 ldloc.0 | |
IL_002c 7d 54 02 00 0a stfld 0xA000254 | |
IL_0031 07 ldloc.1 | |
IL_0032 06 ldloc.0 | |
IL_0033 a3 11 00 00 1b ldelem 0x1B000011 | |
IL_0038 0c stloc.2 | |
IL_0039 28 0b 00 00 2b call 0x2B00000B | |
IL_003e 2c 10 brfalse.s 16 (IL_0050) | |
IL_0040 07 ldloc.1 | |
IL_0041 06 ldloc.0 | |
IL_0042 12 03 ldloca.s 0x3 | |
IL_0044 fe 15 11 00 00 1b initobj 0x1B000011 | |
IL_004a 09 ldloc.3 | |
IL_004b a4 11 00 00 1b stelem 0x1B000011 | |
IL_0050 08 ldloc.2 | |
IL_0051 2a ret | |
lvaSetClass: setting class for V00 to (08A6A8B8) Stack`1 | |
'this' passed in register ecx | |
lvaSetClass: setting class for V02 to (08A6AD18) (null) | |
; Initial local variable assignments | |
; | |
; V00 this ref this class-hnd | |
; V01 loc0 int | |
; V02 loc1 ref class-hnd | |
; V03 loc2 struct ( 4) | |
; V04 loc3 struct ( 4) | |
*************** In compInitDebuggingInfo() for Stack`1:Pop():RefAsValueType`1:this | |
getVars() returned cVars = 0, extendOthers = true | |
info.compVarScopesCount = 5 | |
VarNum LVNum Name Beg End | |
0: 00h 00h V00 this 000h 052h | |
1: 01h 01h V01 loc0 000h 052h | |
2: 02h 02h V02 loc1 000h 052h | |
3: 03h 03h V03 loc2 000h 052h | |
4: 04h 04h V04 loc3 000h 052h | |
info.compStmtOffsetsCount = 0 | |
info.compStmtOffsetsImplicit = 0005h ( STACK_EMPTY CALL_SITE ) | |
*************** In fgFindBasicBlocks() for Stack`1:Pop():RefAsValueType`1:this | |
Marked V01 as a single def local | |
Marked V02 as a single def local | |
Marked V03 as a single def local | |
Jump targets: | |
IL_001c | |
IL_0050 | |
New Basic Block BB01 [0000] created. | |
BB01 [000..016) | |
New Basic Block BB02 [0001] created. | |
BB02 [016..01C) | |
New Basic Block BB03 [0002] created. | |
BB03 [01C..040) | |
New Basic Block BB04 [0003] created. | |
BB04 [040..050) | |
New Basic Block BB05 [0004] created. | |
BB05 [050..052) | |
IL Code Size,Instr 82, 38, Basic Block count 5, Local Variable Num,Ref count 5, 19 for method Stack`1:Pop():RefAsValueType`1:this | |
OPTIONS: opts.MinOpts() == false | |
Basic block list for 'Stack`1:Pop():RefAsValueType`1:this' | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB03 ( cond ) | |
BB02 [0001] 1 1 [016..01C) | |
BB03 [0002] 2 1 [01C..040)-> BB05 ( cond ) | |
BB04 [0003] 1 1 [040..050) | |
BB05 [0004] 2 1 [050..052) (return) | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
Compiling 15 Stack`1::Pop, IL size = 82, hash=0xb85a3b29 FullOpts | |
*************** Starting PHASE Pre-import | |
*************** Finishing PHASE Pre-import | |
*************** Starting PHASE Importation | |
*************** In impImport() for Stack`1:Pop():RefAsValueType`1:this | |
impImportBlockPending for BB01 | |
Importing BB01 (PC=000) of 'Stack`1:Pop():RefAsValueType`1:this' | |
[ 0] 0 (0x000) ldarg.0 | |
[ 1] 1 (0x001) ldfld 0A000254 | |
[ 1] 6 (0x006) ldc.i4.1 1 | |
[ 2] 7 (0x007) sub | |
[ 1] 8 (0x008) stloc.0 | |
STMT00000 (IL 0x000... ???) | |
[000005] -A-XG------- * ASG int | |
[000004] D------N---- +--* LCL_VAR int V01 loc0 | |
[000003] ---XG------- \--* SUB int | |
[000001] ---XG------- +--* FIELD int _size | |
[000000] ------------ | \--* LCL_VAR ref V00 this | |
[000002] ------------ \--* CNS_INT int 1 | |
[ 0] 9 (0x009) ldarg.0 | |
[ 1] 10 (0x00a) ldfld 0A000253 | |
[ 1] 15 (0x00f) stloc.1Querying runtime about current class of field Stack`1._array (declared as (null)) | |
Field's current class not available | |
STMT00001 (IL 0x009... ???) | |
[000009] -A-XG------- * ASG ref | |
[000008] D------N---- +--* LCL_VAR ref V02 loc1 | |
[000007] ---XG------- \--* FIELD ref _array | |
[000006] ------------ \--* LCL_VAR ref V00 this | |
[ 0] 16 (0x010) ldloc.0 | |
[ 1] 17 (0x011) ldloc.1 | |
[ 2] 18 (0x012) ldlen | |
[ 2] 19 (0x013) conv.i4 | |
[ 2] 20 (0x014) blt.un.s | |
STMT00002 (IL 0x010... ???) | |
[000014] ---X-------- * JTRUE void | |
[000013] N--X-----U-- \--* LT int | |
[000010] ------------ +--* LCL_VAR int V01 loc0 | |
[000012] ---X-------- \--* ARR_LENGTH int | |
[000011] ------------ \--* LCL_VAR ref V02 loc1 | |
impImportBlockPending for BB02 | |
impImportBlockPending for BB03 | |
Importing BB03 (PC=028) of 'Stack`1:Pop():RefAsValueType`1:this' | |
[ 0] 28 (0x01c) ldarg.0 | |
[ 1] 29 (0x01d) ldarg.0 | |
[ 2] 30 (0x01e) ldfld 0A000255 | |
[ 2] 35 (0x023) ldc.i4.1 1 | |
[ 3] 36 (0x024) add | |
[ 2] 37 (0x025) stfld 0A000255 | |
STMT00003 (IL 0x01C... ???) | |
[000021] -A-XG------- * ASG int | |
[000020] ---XG--N---- +--* FIELD int _version | |
[000015] ------------ | \--* LCL_VAR ref V00 this | |
[000019] ---XG------- \--* ADD int | |
[000017] ---XG------- +--* FIELD int _version | |
[000016] ------------ | \--* LCL_VAR ref V00 this | |
[000018] ------------ \--* CNS_INT int 1 | |
[ 0] 42 (0x02a) ldarg.0 | |
[ 1] 43 (0x02b) ldloc.0 | |
[ 2] 44 (0x02c) stfld 0A000254 | |
STMT00004 (IL 0x02A... ???) | |
[000025] -A-XG------- * ASG int | |
[000024] ---XG--N---- +--* FIELD int _size | |
[000022] ------------ | \--* LCL_VAR ref V00 this | |
[000023] ------------ \--* LCL_VAR int V01 loc0 | |
[ 0] 49 (0x031) ldloc.1 | |
[ 1] 50 (0x032) ldloc.0 | |
[ 2] 51 (0x033) ldelem 1B000011 | |
[ 1] 56 (0x038) stloc.2 | |
STMT00005 (IL 0x031... ???) | |
[000033] -A-XG------- * ASG struct (copy) | |
[000031] D----------- +--* LCL_VAR struct<RefAsValueType`1, 4> V03 loc2 | |
[000030] ---XG------- \--* OBJ struct<RefAsValueType`1, 4> | |
[000029] ---XG------- \--* ADDR byref | |
[000028] ---XG------- \--* INDEX struct | |
[000026] ------------ +--* LCL_VAR ref V02 loc1 | |
[000027] ------------ \--* LCL_VAR int V01 loc0 | |
[ 0] 57 (0x039) call 2B00000B | |
In Compiler::impImportCall: opcode is call, kind=0, callRetType is bool, structSize is 0 | |
Named Intrinsic System.Runtime.CompilerServices.RuntimeHelpersIsReferenceOrContainsReferences: Not recognized | |
lvaGrabTemp returning 5 (V05 tmp0) called for impRuntimeLookup slot. | |
STMT00006 (IL 0x039... ???) | |
[000038] -A-X-------- * ASG int | |
[000037] D------N---- +--* LCL_VAR int V05 tmp0 | |
[000036] #--X-------- \--* IND int | |
[000035] ------------ \--* LCL_VAR ref V00 this | |
lvaGrabTemp returning 6 (V06 tmp1) called for spilling Runtime Lookup tree. | |
STMT00007 (IL ???... ???) | |
[000063] -AC-G------- * ASG int | |
[000062] D------N---- +--* LCL_VAR int V06 tmp1 | |
[000061] --C-G------- \--* QMARK int | |
[000051] Q----------- if +--* NE int | |
[000047] n----------- | +--* IND int | |
[000046] ------------ | | \--* ADD int | |
[000044] #----------- | | +--* IND int | |
[000043] #----------- | | | \--* IND int | |
[000042] ------------ | | | \--* ADD int | |
[000040] ------------ | | | +--* LCL_VAR int V05 tmp0 | |
[000041] ------------ | | | \--* CNS_INT int 32 | |
[000045] ------------ | | \--* CNS_INT int 12 | |
[000050] ------------ | \--* CNS_INT int 0 | |
[000060] --C-G------- if \--* COLON int | |
[000049] --C-G------- else +--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] ------------ arg0 | +--* LCL_VAR int V05 tmp0 | |
[000048] ------------ arg1 | \--* CNS_INT(h) int 0x8A93EB8 token | |
[000052] n----------- then \--* IND int | |
[000053] ------------ \--* ADD int | |
[000054] #----------- +--* IND int | |
[000055] #----------- | \--* IND int | |
[000056] ------------ | \--* ADD int | |
[000057] ------------ | +--* LCL_VAR int V05 tmp0 | |
[000058] ------------ | \--* CNS_INT int 32 | |
[000059] ------------ \--* CNS_INT int 12 | |
STMT00008 (IL ???... ???) | |
[000034] I-C-G------- * CALL int RuntimeHelpers.IsReferenceOrContainsReferences (exactContextHnd=0x08A6B810) | |
[000065] ------------ arg0 \--* RUNTIMELOOKUP int 0x8a6b854 method | |
[000064] ------------ \--* LCL_VAR int V06 tmp1 | |
[ 1] 62 (0x03e) brfalse.s | |
STMT00009 (IL ???... ???) | |
[000069] --C--------- * JTRUE void | |
[000068] --C--------- \--* EQ int | |
[000066] --C--------- +--* RET_EXPR int (inl return from call [000034]) | |
[000067] ------------ \--* CNS_INT int 0 | |
impImportBlockPending for BB04 | |
impImportBlockPending for BB05 | |
Importing BB05 (PC=080) of 'Stack`1:Pop():RefAsValueType`1:this' | |
[ 0] 80 (0x050) ldloc.2 | |
[ 1] 81 (0x051) ret | |
impFixupStructReturnType: retyping | |
[000070] ------------ * LCL_VAR struct<RefAsValueType`1, 4> V03 loc2 | |
impFixupStructReturnType: result of retyping is | |
[000070] ------------ * LCL_FLD ref V03 loc2 [+0] | |
STMT00010 (IL 0x050... ???) | |
[000071] ------------ * RETURN ref | |
[000070] ------------ \--* LCL_FLD ref V03 loc2 [+0] | |
Importing BB04 (PC=064) of 'Stack`1:Pop():RefAsValueType`1:this' | |
[ 0] 64 (0x040) ldloc.1 | |
[ 1] 65 (0x041) ldloc.0 | |
[ 2] 66 (0x042) ldloca.s 3 | |
[ 3] 68 (0x044) initobj 1B000011 | |
STMT00011 (IL 0x040... ???) | |
[000077] IA---------- * ASG struct (init) | |
[000074] D------N---- +--* LCL_VAR struct<RefAsValueType`1, 4> V04 loc3 | |
[000076] ------------ \--* CNS_INT int 0 | |
[ 2] 74 (0x04a) ldloc.3 | |
[ 3] 75 (0x04b) stelem 1B000011 | |
STMT00012 (IL ???... ???) | |
[000081] -A-XG------- * ASG struct (copy) | |
[000079] ---XG------- +--* INDEX struct | |
[000072] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000073] ------------ | \--* LCL_VAR int V01 loc0 | |
[000078] ------------ \--* LCL_VAR struct<RefAsValueType`1, 4> V04 loc3 | |
impImportBlockPending for BB05 | |
Importing BB02 (PC=022) of 'Stack`1:Pop():RefAsValueType`1:this' | |
[ 0] 22 (0x016) ldarg.0 | |
[ 1] 23 (0x017) call 0A000259 | |
In Compiler::impImportCall: opcode is call, kind=0, callRetType is void, structSize is 0 | |
STMT00013 (IL 0x016... ???) | |
[000083] I-C-G------- * CALL void Stack`1.ThrowForEmptyStack (exactContextHnd=0x08A6A8A0) | |
[000082] ------------ this in ecx \--* LCL_VAR ref V00 this | |
impImportBlockPending for BB03 | |
*************** Finishing PHASE Importation | |
*************** Starting PHASE Indirect call transform | |
*************** in fgTransformIndirectCalls(root) | |
-- no candidates to transform | |
*************** Finishing PHASE Indirect call transform | |
*************** Starting PHASE Post-import | |
*************** Finishing PHASE Post-import | |
*************** Starting PHASE Morph - Init | |
New BlockSet epoch 1, # of blocks (including unused BB00): 6, bitset array size: 1 (short) | |
*************** Finishing PHASE Morph - Init | |
*************** In fgDebugCheckBBlist | |
*************** Starting PHASE Morph - Inlining | |
*************** In fgInline() | |
Querying runtime about current class of field Stack`1._array (declared as (null)) | |
Field's current class not available | |
Expanding INLINE_CANDIDATE in statement STMT00013 in BB02: | |
STMT00013 (IL 0x016...0x017) | |
[000083] I-C-G------- * CALL void Stack`1.ThrowForEmptyStack (exactContextHnd=0x08A6A8A0) | |
[000082] ------------ this in ecx \--* LCL_VAR ref V00 this | |
thisArg: is a local var | |
[000082] ------------ * LCL_VAR ref V00 this | |
INLINER: inlineInfo.tokenLookupContextHandle for Stack`1:ThrowForEmptyStack():this set to 0x08A6A8A0: | |
Invoking compiler for the inlinee method Stack`1:ThrowForEmptyStack():this : | |
IL to import: | |
IL_0000 28 16 00 00 06 call 0x6000016 | |
IL_0005 73 51 00 00 0a newobj 0xA000051 | |
IL_000a 7a throw | |
INLINER impTokenLookupContextHandle for Stack`1:ThrowForEmptyStack():this is 0x08A6A8A0. | |
*************** In fgFindBasicBlocks() for Stack`1:ThrowForEmptyStack():this | |
Jump targets: | |
none | |
New Basic Block BB06 [0005] created. | |
BB06 [000..00B) | |
Basic block list for 'Stack`1:ThrowForEmptyStack():this' | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB06 [0005] 1 0 [000..00B) (throw ) rare | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
INLINER: during 'fgInline' result 'failed this callee' reason 'does not return' for 'Stack`1:Pop():RefAsValueType`1:this' calling 'Stack`1:ThrowForEmptyStack():this' | |
INLINER: during 'fgInline' result 'failed this callee' reason 'does not return' | |
Expanding INLINE_CANDIDATE in statement STMT00008 in BB03: | |
STMT00008 (IL ???... ???) | |
[000034] I-C-G------- * CALL int RuntimeHelpers.IsReferenceOrContainsReferences (exactContextHnd=0x08A6B810) | |
[000065] ------------ arg0 \--* RUNTIMELOOKUP int 0x8a6b854 method | |
[000064] ------------ \--* LCL_VAR int V06 tmp1 | |
INLINER: inlineInfo.tokenLookupContextHandle for RuntimeHelpers:IsReferenceOrContainsReferences():bool set to 0x08A6B810: | |
Invoking compiler for the inlinee method RuntimeHelpers:IsReferenceOrContainsReferences():bool : | |
IL to import: | |
IL_0000 17 ldc.i4.1 | |
IL_0001 2a ret | |
INLINER impTokenLookupContextHandle for RuntimeHelpers:IsReferenceOrContainsReferences():bool is 0x08A6B810. | |
*************** In fgFindBasicBlocks() for RuntimeHelpers:IsReferenceOrContainsReferences():bool | |
Jump targets: | |
none | |
New Basic Block BB07 [0005] created. | |
BB07 [000..002) | |
Basic block list for 'RuntimeHelpers:IsReferenceOrContainsReferences():bool' | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB07 [0005] 1 1 [000..002) (return) | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Inline @[000034] Starting PHASE Pre-import | |
*************** Inline @[000034] Finishing PHASE Pre-import | |
*************** Inline @[000034] Starting PHASE Importation | |
*************** In impImport() for RuntimeHelpers:IsReferenceOrContainsReferences():bool | |
impImportBlockPending for BB07 | |
Importing BB07 (PC=000) of 'RuntimeHelpers:IsReferenceOrContainsReferences():bool' | |
[ 0] 0 (0x000) ldc.i4.1 1 | |
[ 1] 1 (0x001) ret | |
Inlinee Return expression (before normalization) => | |
[000084] ------------ * CNS_INT int 1 | |
Inlinee Return expression (after normalization) => | |
[000085] ------------ * CAST int <- bool <- int | |
[000084] ------------ \--* CNS_INT int 1 | |
** Note: inlinee IL was partially imported -- imported 0 of 2 bytes of method IL | |
*************** Inline @[000034] Finishing PHASE Importation | |
*************** Inline @[000034] Starting PHASE Indirect call transform | |
*************** in fgTransformIndirectCalls(inlinee) | |
-- no candidates to transform | |
*************** Inline @[000034] Finishing PHASE Indirect call transform | |
*************** Inline @[000034] Starting PHASE Post-import | |
*************** Inline @[000034] Finishing PHASE Post-import | |
----------- Statements (and blocks) added due to the inlining of call [000034] ----------- | |
Inlinee method body:Inlinee ignores runtime lookup generics context | |
fgInlineAppendStatements: no gc ref inline locals. | |
Return expression for call at [000034] is | |
[000085] ------------ * CAST int <- bool <- int | |
[000084] ------------ \--* CNS_INT int 1 | |
Successfully inlined RuntimeHelpers:IsReferenceOrContainsReferences():bool (2 IL bytes) (depth 1) [below ALWAYS_INLINE size] | |
-------------------------------------------------------------------------------------------- | |
INLINER: during 'fgInline' result 'success' reason 'below ALWAYS_INLINE size' for 'Stack`1:Pop():RefAsValueType`1:this' calling 'RuntimeHelpers:IsReferenceOrContainsReferences():bool' | |
INLINER: during 'fgInline' result 'success' reason 'below ALWAYS_INLINE size' | |
Folding operator with constant nodes into a constant: | |
[000085] ------------ * CAST int <- bool <- int | |
[000084] ------------ \--* CNS_INT int 1 | |
Bashed to int constant: | |
[000085] ------------ * CNS_INT int 1 | |
Replacing the return expression placeholder [000066] with [000085] | |
[000066] --C--------- * RET_EXPR int (inl return from call [000085]) | |
Inserting the inline return expression | |
[000085] ------------ * CNS_INT int 1 | |
Folding operator with constant nodes into a constant: | |
[000068] --C--------- * EQ int | |
[000085] ------------ +--* CNS_INT int 1 | |
[000067] ------------ \--* CNS_INT int 0 | |
Bashed to int constant: | |
[000068] ------------ * CNS_INT int 0 | |
... found foldable jtrue at [000069] in BB03 | |
*************** After fgInline() | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB03 ( cond ) i idxlen | |
BB02 [0001] 1 1 [016..01C) i | |
BB03 [0002] 2 1 [01C..040) i idxlen | |
BB04 [0003] 1 1 [040..050) i idxlen | |
BB05 [0004] 1 1 [050..052) (return) i | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB03 (cond), preds={} succs={BB02,BB03} | |
***** BB01 | |
STMT00000 (IL 0x000...0x008) | |
[000005] -A-XG------- * ASG int | |
[000004] D------N---- +--* LCL_VAR int V01 loc0 | |
[000003] ---XG------- \--* SUB int | |
[000001] ---XG------- +--* FIELD int _size | |
[000000] ------------ | \--* LCL_VAR ref V00 this | |
[000002] ------------ \--* CNS_INT int 1 | |
***** BB01 | |
STMT00001 (IL 0x009...0x00F) | |
[000009] -A-XG------- * ASG ref | |
[000008] D------N---- +--* LCL_VAR ref V02 loc1 | |
[000007] ---XG------- \--* FIELD ref _array | |
[000006] ------------ \--* LCL_VAR ref V00 this | |
***** BB01 | |
STMT00002 (IL 0x010...0x014) | |
[000014] ---X-------- * JTRUE void | |
[000013] N--X-----U-- \--* LT int | |
[000010] ------------ +--* LCL_VAR int V01 loc0 | |
[000012] ---X-------- \--* ARR_LENGTH int | |
[000011] ------------ \--* LCL_VAR ref V02 loc1 | |
------------ BB02 [016..01C), preds={} succs={BB03} | |
***** BB02 | |
STMT00013 (IL 0x016...0x017) | |
[000083] --C-G------- * CALL void Stack`1.ThrowForEmptyStack | |
[000082] ------------ this in ecx \--* LCL_VAR ref V00 this | |
------------ BB03 [01C..040), preds={} succs={BB04} | |
***** BB03 | |
STMT00003 (IL 0x01C...0x025) | |
[000021] -A-XG------- * ASG int | |
[000020] ---XG--N---- +--* FIELD int _version | |
[000015] ------------ | \--* LCL_VAR ref V00 this | |
[000019] ---XG------- \--* ADD int | |
[000017] ---XG------- +--* FIELD int _version | |
[000016] ------------ | \--* LCL_VAR ref V00 this | |
[000018] ------------ \--* CNS_INT int 1 | |
***** BB03 | |
STMT00004 (IL 0x02A...0x02C) | |
[000025] -A-XG------- * ASG int | |
[000024] ---XG--N---- +--* FIELD int _size | |
[000022] ------------ | \--* LCL_VAR ref V00 this | |
[000023] ------------ \--* LCL_VAR int V01 loc0 | |
***** BB03 | |
STMT00005 (IL 0x031...0x038) | |
[000033] -A-XG------- * ASG struct (copy) | |
[000031] D----------- +--* LCL_VAR struct<RefAsValueType`1, 4> V03 loc2 | |
[000030] ---XG------- \--* OBJ struct<RefAsValueType`1, 4> | |
[000029] ---XG------- \--* ADDR byref | |
[000028] ---XG------- \--* INDEX struct | |
[000026] ------------ +--* LCL_VAR ref V02 loc1 | |
[000027] ------------ \--* LCL_VAR int V01 loc0 | |
***** BB03 | |
STMT00006 (IL 0x039...0x03E) | |
[000038] -A-X-------- * ASG int | |
[000037] D------N---- +--* LCL_VAR int V05 tmp0 | |
[000036] #--X-------- \--* IND int | |
[000035] ------------ \--* LCL_VAR ref V00 this | |
***** BB03 | |
STMT00007 (IL ???... ???) | |
[000063] -AC-G------- * ASG int | |
[000062] D------N---- +--* LCL_VAR int V06 tmp1 | |
[000061] --C-G------- \--* QMARK int | |
[000051] Q----------- if +--* NE int | |
[000047] n----------- | +--* IND int | |
[000046] ------------ | | \--* ADD int | |
[000044] #----------- | | +--* IND int | |
[000043] #----------- | | | \--* IND int | |
[000042] ------------ | | | \--* ADD int | |
[000040] ------------ | | | +--* LCL_VAR int V05 tmp0 | |
[000041] ------------ | | | \--* CNS_INT int 32 | |
[000045] ------------ | | \--* CNS_INT int 12 | |
[000050] ------------ | \--* CNS_INT int 0 | |
[000060] --C-G------- if \--* COLON int | |
[000049] --C-G------- else +--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] ------------ arg0 | +--* LCL_VAR int V05 tmp0 | |
[000048] ------------ arg1 | \--* CNS_INT(h) int 0x8A93EB8 token | |
[000052] n----------- then \--* IND int | |
[000053] ------------ \--* ADD int | |
[000054] #----------- +--* IND int | |
[000055] #----------- | \--* IND int | |
[000056] ------------ | \--* ADD int | |
[000057] ------------ | +--* LCL_VAR int V05 tmp0 | |
[000058] ------------ | \--* CNS_INT int 32 | |
[000059] ------------ \--* CNS_INT int 12 | |
***** BB03 | |
STMT00009 (IL ???... ???) | |
[000069] ------------ * NOP void | |
------------ BB04 [040..050), preds={} succs={BB05} | |
***** BB04 | |
STMT00011 (IL 0x040...0x045) | |
[000077] IA---------- * ASG struct (init) | |
[000074] D------N---- +--* LCL_VAR struct<RefAsValueType`1, 4> V04 loc3 | |
[000076] ------------ \--* CNS_INT int 0 | |
***** BB04 | |
STMT00012 (IL ???...0x04B) | |
[000081] -A-XG------- * ASG struct (copy) | |
[000079] ---XG------- +--* INDEX struct | |
[000072] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000073] ------------ | \--* LCL_VAR int V01 loc0 | |
[000078] ------------ \--* LCL_VAR struct<RefAsValueType`1, 4> V04 loc3 | |
------------ BB05 [050..052) (return), preds={} succs={} | |
***** BB05 | |
STMT00010 (IL 0x050...0x051) | |
[000071] ------------ * RETURN ref | |
[000070] ------------ \--* LCL_FLD ref V03 loc2 [+0] | |
------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
**************** Inline Tree | |
Inlines into 0600029B Stack`1:Pop():RefAsValueType`1:this | |
[0 IL=0023 TR=000083 060002A0] [FAILED: does not return] Stack`1:ThrowForEmptyStack():this | |
[1 IL=0057 TR=000034 06003C89] [below ALWAYS_INLINE size] RuntimeHelpers:IsReferenceOrContainsReferences():bool | |
Budget: initialTime=306, finalTime=292, initialBudget=3060, currentBudget=3060 | |
Budget: initialSize=2000, finalSize=2000 | |
*************** Finishing PHASE Morph - Inlining | |
Trees before Allocate Objects | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB03 ( cond ) i idxlen | |
BB02 [0001] 1 1 [016..01C) i | |
BB03 [0002] 2 1 [01C..040) i idxlen | |
BB04 [0003] 1 1 [040..050) i idxlen | |
BB05 [0004] 1 1 [050..052) (return) i | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB03 (cond), preds={} succs={BB02,BB03} | |
***** BB01 | |
STMT00000 (IL 0x000...0x008) | |
[000005] -A-XG------- * ASG int | |
[000004] D------N---- +--* LCL_VAR int V01 loc0 | |
[000003] ---XG------- \--* SUB int | |
[000001] ---XG------- +--* FIELD int _size | |
[000000] ------------ | \--* LCL_VAR ref V00 this | |
[000002] ------------ \--* CNS_INT int 1 | |
***** BB01 | |
STMT00001 (IL 0x009...0x00F) | |
[000009] -A-XG------- * ASG ref | |
[000008] D------N---- +--* LCL_VAR ref V02 loc1 | |
[000007] ---XG------- \--* FIELD ref _array | |
[000006] ------------ \--* LCL_VAR ref V00 this | |
***** BB01 | |
STMT00002 (IL 0x010...0x014) | |
[000014] ---X-------- * JTRUE void | |
[000013] N--X-----U-- \--* LT int | |
[000010] ------------ +--* LCL_VAR int V01 loc0 | |
[000012] ---X-------- \--* ARR_LENGTH int | |
[000011] ------------ \--* LCL_VAR ref V02 loc1 | |
------------ BB02 [016..01C), preds={} succs={BB03} | |
***** BB02 | |
STMT00013 (IL 0x016...0x017) | |
[000083] --C-G------- * CALL void Stack`1.ThrowForEmptyStack | |
[000082] ------------ this in ecx \--* LCL_VAR ref V00 this | |
------------ BB03 [01C..040), preds={} succs={BB04} | |
***** BB03 | |
STMT00003 (IL 0x01C...0x025) | |
[000021] -A-XG------- * ASG int | |
[000020] ---XG--N---- +--* FIELD int _version | |
[000015] ------------ | \--* LCL_VAR ref V00 this | |
[000019] ---XG------- \--* ADD int | |
[000017] ---XG------- +--* FIELD int _version | |
[000016] ------------ | \--* LCL_VAR ref V00 this | |
[000018] ------------ \--* CNS_INT int 1 | |
***** BB03 | |
STMT00004 (IL 0x02A...0x02C) | |
[000025] -A-XG------- * ASG int | |
[000024] ---XG--N---- +--* FIELD int _size | |
[000022] ------------ | \--* LCL_VAR ref V00 this | |
[000023] ------------ \--* LCL_VAR int V01 loc0 | |
***** BB03 | |
STMT00005 (IL 0x031...0x038) | |
[000033] -A-XG------- * ASG struct (copy) | |
[000031] D----------- +--* LCL_VAR struct<RefAsValueType`1, 4> V03 loc2 | |
[000030] ---XG------- \--* OBJ struct<RefAsValueType`1, 4> | |
[000029] ---XG------- \--* ADDR byref | |
[000028] ---XG------- \--* INDEX struct | |
[000026] ------------ +--* LCL_VAR ref V02 loc1 | |
[000027] ------------ \--* LCL_VAR int V01 loc0 | |
***** BB03 | |
STMT00006 (IL 0x039...0x03E) | |
[000038] -A-X-------- * ASG int | |
[000037] D------N---- +--* LCL_VAR int V05 tmp0 | |
[000036] #--X-------- \--* IND int | |
[000035] ------------ \--* LCL_VAR ref V00 this | |
***** BB03 | |
STMT00007 (IL ???... ???) | |
[000063] -AC-G------- * ASG int | |
[000062] D------N---- +--* LCL_VAR int V06 tmp1 | |
[000061] --C-G------- \--* QMARK int | |
[000051] Q----------- if +--* NE int | |
[000047] n----------- | +--* IND int | |
[000046] ------------ | | \--* ADD int | |
[000044] #----------- | | +--* IND int | |
[000043] #----------- | | | \--* IND int | |
[000042] ------------ | | | \--* ADD int | |
[000040] ------------ | | | +--* LCL_VAR int V05 tmp0 | |
[000041] ------------ | | | \--* CNS_INT int 32 | |
[000045] ------------ | | \--* CNS_INT int 12 | |
[000050] ------------ | \--* CNS_INT int 0 | |
[000060] --C-G------- if \--* COLON int | |
[000049] --C-G------- else +--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] ------------ arg0 | +--* LCL_VAR int V05 tmp0 | |
[000048] ------------ arg1 | \--* CNS_INT(h) int 0x8A93EB8 token | |
[000052] n----------- then \--* IND int | |
[000053] ------------ \--* ADD int | |
[000054] #----------- +--* IND int | |
[000055] #----------- | \--* IND int | |
[000056] ------------ | \--* ADD int | |
[000057] ------------ | +--* LCL_VAR int V05 tmp0 | |
[000058] ------------ | \--* CNS_INT int 32 | |
[000059] ------------ \--* CNS_INT int 12 | |
***** BB03 | |
STMT00009 (IL ???... ???) | |
[000069] ------------ * NOP void | |
------------ BB04 [040..050), preds={} succs={BB05} | |
***** BB04 | |
STMT00011 (IL 0x040...0x045) | |
[000077] IA---------- * ASG struct (init) | |
[000074] D------N---- +--* LCL_VAR struct<RefAsValueType`1, 4> V04 loc3 | |
[000076] ------------ \--* CNS_INT int 0 | |
***** BB04 | |
STMT00012 (IL ???...0x04B) | |
[000081] -A-XG------- * ASG struct (copy) | |
[000079] ---XG------- +--* INDEX struct | |
[000072] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000073] ------------ | \--* LCL_VAR int V01 loc0 | |
[000078] ------------ \--* LCL_VAR struct<RefAsValueType`1, 4> V04 loc3 | |
------------ BB05 [050..052) (return), preds={} succs={} | |
***** BB05 | |
STMT00010 (IL 0x050...0x051) | |
[000071] ------------ * RETURN ref | |
[000070] ------------ \--* LCL_FLD ref V03 loc2 [+0] | |
------------------------------------------------------------------------------------------------------------------- | |
*************** Starting PHASE Allocate Objects | |
*** ObjectAllocationPhase: no newobjs in this method; punting | |
*************** Finishing PHASE Allocate Objects | |
Trees after Allocate Objects | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB03 ( cond ) i idxlen | |
BB02 [0001] 1 1 [016..01C) i | |
BB03 [0002] 2 1 [01C..040) i idxlen | |
BB04 [0003] 1 1 [040..050) i idxlen | |
BB05 [0004] 1 1 [050..052) (return) i | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB03 (cond), preds={} succs={BB02,BB03} | |
***** BB01 | |
STMT00000 (IL 0x000...0x008) | |
[000005] -A-XG------- * ASG int | |
[000004] D------N---- +--* LCL_VAR int V01 loc0 | |
[000003] ---XG------- \--* SUB int | |
[000001] ---XG------- +--* FIELD int _size | |
[000000] ------------ | \--* LCL_VAR ref V00 this | |
[000002] ------------ \--* CNS_INT int 1 | |
***** BB01 | |
STMT00001 (IL 0x009...0x00F) | |
[000009] -A-XG------- * ASG ref | |
[000008] D------N---- +--* LCL_VAR ref V02 loc1 | |
[000007] ---XG------- \--* FIELD ref _array | |
[000006] ------------ \--* LCL_VAR ref V00 this | |
***** BB01 | |
STMT00002 (IL 0x010...0x014) | |
[000014] ---X-------- * JTRUE void | |
[000013] N--X-----U-- \--* LT int | |
[000010] ------------ +--* LCL_VAR int V01 loc0 | |
[000012] ---X-------- \--* ARR_LENGTH int | |
[000011] ------------ \--* LCL_VAR ref V02 loc1 | |
------------ BB02 [016..01C), preds={} succs={BB03} | |
***** BB02 | |
STMT00013 (IL 0x016...0x017) | |
[000083] --C-G------- * CALL void Stack`1.ThrowForEmptyStack | |
[000082] ------------ this in ecx \--* LCL_VAR ref V00 this | |
------------ BB03 [01C..040), preds={} succs={BB04} | |
***** BB03 | |
STMT00003 (IL 0x01C...0x025) | |
[000021] -A-XG------- * ASG int | |
[000020] ---XG--N---- +--* FIELD int _version | |
[000015] ------------ | \--* LCL_VAR ref V00 this | |
[000019] ---XG------- \--* ADD int | |
[000017] ---XG------- +--* FIELD int _version | |
[000016] ------------ | \--* LCL_VAR ref V00 this | |
[000018] ------------ \--* CNS_INT int 1 | |
***** BB03 | |
STMT00004 (IL 0x02A...0x02C) | |
[000025] -A-XG------- * ASG int | |
[000024] ---XG--N---- +--* FIELD int _size | |
[000022] ------------ | \--* LCL_VAR ref V00 this | |
[000023] ------------ \--* LCL_VAR int V01 loc0 | |
***** BB03 | |
STMT00005 (IL 0x031...0x038) | |
[000033] -A-XG------- * ASG struct (copy) | |
[000031] D----------- +--* LCL_VAR struct<RefAsValueType`1, 4> V03 loc2 | |
[000030] ---XG------- \--* OBJ struct<RefAsValueType`1, 4> | |
[000029] ---XG------- \--* ADDR byref | |
[000028] ---XG------- \--* INDEX struct | |
[000026] ------------ +--* LCL_VAR ref V02 loc1 | |
[000027] ------------ \--* LCL_VAR int V01 loc0 | |
***** BB03 | |
STMT00006 (IL 0x039...0x03E) | |
[000038] -A-X-------- * ASG int | |
[000037] D------N---- +--* LCL_VAR int V05 tmp0 | |
[000036] #--X-------- \--* IND int | |
[000035] ------------ \--* LCL_VAR ref V00 this | |
***** BB03 | |
STMT00007 (IL ???... ???) | |
[000063] -AC-G------- * ASG int | |
[000062] D------N---- +--* LCL_VAR int V06 tmp1 | |
[000061] --C-G------- \--* QMARK int | |
[000051] Q----------- if +--* NE int | |
[000047] n----------- | +--* IND int | |
[000046] ------------ | | \--* ADD int | |
[000044] #----------- | | +--* IND int | |
[000043] #----------- | | | \--* IND int | |
[000042] ------------ | | | \--* ADD int | |
[000040] ------------ | | | +--* LCL_VAR int V05 tmp0 | |
[000041] ------------ | | | \--* CNS_INT int 32 | |
[000045] ------------ | | \--* CNS_INT int 12 | |
[000050] ------------ | \--* CNS_INT int 0 | |
[000060] --C-G------- if \--* COLON int | |
[000049] --C-G------- else +--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] ------------ arg0 | +--* LCL_VAR int V05 tmp0 | |
[000048] ------------ arg1 | \--* CNS_INT(h) int 0x8A93EB8 token | |
[000052] n----------- then \--* IND int | |
[000053] ------------ \--* ADD int | |
[000054] #----------- +--* IND int | |
[000055] #----------- | \--* IND int | |
[000056] ------------ | \--* ADD int | |
[000057] ------------ | +--* LCL_VAR int V05 tmp0 | |
[000058] ------------ | \--* CNS_INT int 32 | |
[000059] ------------ \--* CNS_INT int 12 | |
***** BB03 | |
STMT00009 (IL ???... ???) | |
[000069] ------------ * NOP void | |
------------ BB04 [040..050), preds={} succs={BB05} | |
***** BB04 | |
STMT00011 (IL 0x040...0x045) | |
[000077] IA---------- * ASG struct (init) | |
[000074] D------N---- +--* LCL_VAR struct<RefAsValueType`1, 4> V04 loc3 | |
[000076] ------------ \--* CNS_INT int 0 | |
***** BB04 | |
STMT00012 (IL ???...0x04B) | |
[000081] -A-XG------- * ASG struct (copy) | |
[000079] ---XG------- +--* INDEX struct | |
[000072] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000073] ------------ | \--* LCL_VAR int V01 loc0 | |
[000078] ------------ \--* LCL_VAR struct<RefAsValueType`1, 4> V04 loc3 | |
------------ BB05 [050..052) (return), preds={} succs={} | |
***** BB05 | |
STMT00010 (IL 0x050...0x051) | |
[000071] ------------ * RETURN ref | |
[000070] ------------ \--* LCL_FLD ref V03 loc2 [+0] | |
------------------------------------------------------------------------------------------------------------------- | |
*************** 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..016)-> BB03 ( cond ) i idxlen | |
BB02 [0001] 1 1 [016..01C) i | |
BB03 [0002] 2 1 [01C..040) i idxlen | |
BB04 [0003] 1 1 [040..050) i idxlen | |
BB05 [0004] 1 1 [050..052) (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 | |
*************** Starting PHASE Remove empty finally | |
*************** In fgRemoveEmptyFinally() | |
No EH in this method, nothing to remove. | |
*************** Finishing PHASE Remove empty finally | |
*************** Starting PHASE Merge callfinally chains | |
*************** In fgMergeFinallyChains() | |
No EH in this method, nothing to merge. | |
*************** Finishing PHASE Merge callfinally chains | |
*************** Starting PHASE Clone finally | |
*************** In fgCloneFinally() | |
No EH in this method, no cloning. | |
*************** Finishing PHASE Clone finally | |
*************** 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..016)-> BB03 ( cond ) i idxlen | |
BB02 [0001] 1 1 [016..01C) i | |
BB03 [0002] 2 1 [01C..040) i idxlen | |
BB04 [0003] 1 1 [040..050) i idxlen | |
BB05 [0004] 1 1 [050..052) (return) i | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
*************** After renumbering the basic blocks | |
=============== No blocks renumbered! | |
New BlockSet epoch 2, # of blocks (including unused BB00): 6, 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..016)-> BB03 ( cond ) i idxlen | |
BB02 [0001] 1 1 [016..01C) i | |
BB03 [0002] 2 1 [01C..040) i idxlen | |
BB04 [0003] 1 1 [040..050) i idxlen | |
BB05 [0004] 1 1 [050..052) (return) i | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** After fgComputePreds() | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB03 ( cond ) i label target idxlen | |
BB02 [0001] 1 BB01 1 [016..01C) i | |
BB03 [0002] 2 BB01,BB02 1 [01C..040) i label target idxlen | |
BB04 [0003] 1 BB03 1 [040..050) i idxlen | |
BB05 [0004] 1 BB04 1 [050..052) (return) i | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Finishing PHASE Compute preds | |
*************** 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..016)-> BB03 ( cond ) i label target idxlen | |
BB02 [0001] 1 BB01 1 [016..01C) i | |
BB03 [0002] 2 BB01,BB02 1 [01C..040) i label target idxlen | |
BB04 [0003] 1 BB03 1 [040..050) i idxlen | |
BB05 [0004] 1 BB04 1 [050..052) (return) i | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
Compacting blocks BB03 and BB04: | |
*************** In fgDebugCheckBBlist | |
Compacting blocks BB03 and BB05: | |
*************** 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..016)-> BB03 ( cond ) i label target idxlen | |
BB02 [0001] 1 BB01 1 [016..01C) i | |
BB03 [0002] 2 BB01,BB02 1 [01C..052) (return) i label target idxlen | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
*************** In fgDebugCheckBBlist | |
*************** Finishing PHASE Update flow graph early pass | |
*************** Starting PHASE Morph - Promote Structs | |
*************** In fgPromoteStructs() | |
lvaTable before fgPromoteStructs | |
; Initial local variable assignments | |
; | |
; V00 this ref this class-hnd | |
; V01 loc0 int | |
; V02 loc1 ref class-hnd | |
; V03 loc2 struct ( 4) | |
; V04 loc3 struct ( 4) ld-addr-op | |
; V05 tmp0 int "impRuntimeLookup slot" | |
; V06 tmp1 int "spilling Runtime Lookup tree" | |
Promoting struct local V03 (RefAsValueType`1): | |
lvaGrabTemp returning 7 (V07 tmp2) (a long lifetime temp) called for field V03.Value (fldOffset=0x0). | |
Promoting struct local V04 (RefAsValueType`1): | |
lvaGrabTemp returning 8 (V08 tmp3) (a long lifetime temp) called for field V04.Value (fldOffset=0x0). | |
lvaTable after fgPromoteStructs | |
; Initial local variable assignments | |
; | |
; V00 this ref this class-hnd | |
; V01 loc0 int | |
; V02 loc1 ref class-hnd | |
; V03 loc2 struct ( 4) | |
; V04 loc3 struct ( 4) ld-addr-op | |
; V05 tmp0 int "impRuntimeLookup slot" | |
; V06 tmp1 int "spilling Runtime Lookup tree" | |
; V07 tmp2 ref V03.Value(offs=0x00) P-INDEP "field V03.Value (fldOffset=0x0)" | |
; V08 tmp3 ref V04.Value(offs=0x00) P-INDEP "field V04.Value (fldOffset=0x0)" | |
*************** Finishing PHASE Morph - Promote Structs | |
*************** Starting PHASE Morph - Structs/AddrExp | |
*************** In fgMarkAddressExposedLocals() | |
LocalAddressVisitor visiting statement: | |
STMT00000 (IL 0x000...0x008) | |
[000005] -A-XG------- * ASG int | |
[000004] D------N---- +--* LCL_VAR int V01 loc0 | |
[000003] ---XG------- \--* SUB int | |
[000001] ---XG------- +--* FIELD int _size | |
[000000] ------------ | \--* LCL_VAR ref V00 this | |
[000002] ------------ \--* CNS_INT int 1 | |
LocalAddressVisitor visiting statement: | |
STMT00001 (IL 0x009...0x00F) | |
[000009] -A-XG------- * ASG ref | |
[000008] D------N---- +--* LCL_VAR ref V02 loc1 | |
[000007] ---XG------- \--* FIELD ref _array | |
[000006] ------------ \--* LCL_VAR ref V00 this | |
LocalAddressVisitor visiting statement: | |
STMT00002 (IL 0x010...0x014) | |
[000014] ---X-------- * JTRUE void | |
[000013] N--X-----U-- \--* LT int | |
[000010] ------------ +--* LCL_VAR int V01 loc0 | |
[000012] ---X-------- \--* ARR_LENGTH int | |
[000011] ------------ \--* LCL_VAR ref V02 loc1 | |
LocalAddressVisitor visiting statement: | |
STMT00013 (IL 0x016...0x017) | |
[000083] --C-G------- * CALL void Stack`1.ThrowForEmptyStack | |
[000082] ------------ this in ecx \--* LCL_VAR ref V00 this | |
LocalAddressVisitor visiting statement: | |
STMT00003 (IL 0x01C...0x025) | |
[000021] -A-XG------- * ASG int | |
[000020] ---XG--N---- +--* FIELD int _version | |
[000015] ------------ | \--* LCL_VAR ref V00 this | |
[000019] ---XG------- \--* ADD int | |
[000017] ---XG------- +--* FIELD int _version | |
[000016] ------------ | \--* LCL_VAR ref V00 this | |
[000018] ------------ \--* CNS_INT int 1 | |
LocalAddressVisitor visiting statement: | |
STMT00004 (IL 0x02A...0x02C) | |
[000025] -A-XG------- * ASG int | |
[000024] ---XG--N---- +--* FIELD int _size | |
[000022] ------------ | \--* LCL_VAR ref V00 this | |
[000023] ------------ \--* LCL_VAR int V01 loc0 | |
LocalAddressVisitor visiting statement: | |
STMT00005 (IL 0x031...0x038) | |
[000033] -A-XG------- * ASG struct (copy) | |
[000031] D----------- +--* LCL_VAR struct<RefAsValueType`1, 4>(P) V03 loc2 | |
+--* ref V03.Value (offs=0x00) -> V07 tmp2 | |
[000030] ---XG------- \--* OBJ struct<RefAsValueType`1, 4> | |
[000029] ---XG------- \--* ADDR byref | |
[000028] ---XG------- \--* INDEX struct | |
[000026] ------------ +--* LCL_VAR ref V02 loc1 | |
[000027] ------------ \--* LCL_VAR int V01 loc0 | |
LocalAddressVisitor visiting statement: | |
STMT00006 (IL 0x039...0x03E) | |
[000038] -A-X-------- * ASG int | |
[000037] D------N---- +--* LCL_VAR int V05 tmp0 | |
[000036] #--X-------- \--* IND int | |
[000035] ------------ \--* LCL_VAR ref V00 this | |
LocalAddressVisitor visiting statement: | |
STMT00007 (IL ???... ???) | |
[000063] -AC-G------- * ASG int | |
[000062] D------N---- +--* LCL_VAR int V06 tmp1 | |
[000061] --C-G------- \--* QMARK int | |
[000051] Q----------- if +--* NE int | |
[000047] n----------- | +--* IND int | |
[000046] ------------ | | \--* ADD int | |
[000044] #----------- | | +--* IND int | |
[000043] #----------- | | | \--* IND int | |
[000042] ------------ | | | \--* ADD int | |
[000040] ------------ | | | +--* LCL_VAR int V05 tmp0 | |
[000041] ------------ | | | \--* CNS_INT int 32 | |
[000045] ------------ | | \--* CNS_INT int 12 | |
[000050] ------------ | \--* CNS_INT int 0 | |
[000060] --C-G------- if \--* COLON int | |
[000049] --C-G------- else +--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] ------------ arg0 | +--* LCL_VAR int V05 tmp0 | |
[000048] ------------ arg1 | \--* CNS_INT(h) int 0x8A93EB8 token | |
[000052] n----------- then \--* IND int | |
[000053] ------------ \--* ADD int | |
[000054] #----------- +--* IND int | |
[000055] #----------- | \--* IND int | |
[000056] ------------ | \--* ADD int | |
[000057] ------------ | +--* LCL_VAR int V05 tmp0 | |
[000058] ------------ | \--* CNS_INT int 32 | |
[000059] ------------ \--* CNS_INT int 12 | |
LocalAddressVisitor visiting statement: | |
STMT00009 (IL ???... ???) | |
[000069] ------------ * NOP void | |
LocalAddressVisitor visiting statement: | |
STMT00011 (IL 0x040...0x045) | |
[000077] IA---------- * ASG struct (init) | |
[000074] D------N---- +--* LCL_VAR struct<RefAsValueType`1, 4>(P) V04 loc3 | |
+--* ref V04.Value (offs=0x00) -> V08 tmp3 | |
[000076] ------------ \--* CNS_INT int 0 | |
LocalAddressVisitor visiting statement: | |
STMT00012 (IL ???...0x04B) | |
[000081] -A-XG------- * ASG struct (copy) | |
[000079] ---XG------- +--* INDEX struct | |
[000072] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000073] ------------ | \--* LCL_VAR int V01 loc0 | |
[000078] ------------ \--* LCL_VAR struct<RefAsValueType`1, 4>(P) V04 loc3 | |
\--* ref V04.Value (offs=0x00) -> V08 tmp3 | |
LocalAddressVisitor visiting statement: | |
STMT00010 (IL 0x050...0x051) | |
[000071] ------------ * RETURN ref | |
[000070] ------------ \--* LCL_FLD ref V03 loc2 [+0] | |
\--* ref V03.Value (offs=0x00) -> V07 tmp2 | |
Replacing the GT_LCL_FLD in promoted struct with local var V07 | |
LocalAddressVisitor modified statement: | |
STMT00010 (IL 0x050...0x051) | |
[000071] ------------ * RETURN ref | |
[000070] ------------ \--* LCL_VAR ref V07 tmp2 | |
*************** Finishing PHASE Morph - Structs/AddrExp | |
*************** Starting PHASE Morph - ByRefs | |
*************** Finishing PHASE Morph - ByRefs | |
*************** Starting PHASE Morph - Global | |
*************** In fgMorphBlocks() | |
Morphing BB01 of 'Stack`1:Pop():RefAsValueType`1:this' | |
fgMorphTree BB01, STMT00000 (before) | |
[000005] -A-XG------- * ASG int | |
[000004] D------N---- +--* LCL_VAR int V01 loc0 | |
[000003] ---XG------- \--* SUB int | |
[000001] ---XG------- +--* FIELD int _size | |
[000000] ------------ | \--* LCL_VAR ref V00 this | |
[000002] ------------ \--* CNS_INT int 1 | |
Final value of Compiler::fgMorphField after calling fgMorphSmpOp: | |
[000001] ---XG------- * IND int | |
[000088] -----+------ \--* ADD byref | |
[000000] -----+------ +--* LCL_VAR ref V00 this | |
[000087] -----+------ \--* CNS_INT int 8 field offset Fseq[_size] | |
GenTreeNode creates assertion: | |
[000001] ---XG------- * IND int | |
In BB01 New Local Constant Assertion: V00 != null index=#01, mask=0000000000000001 | |
fgMorphTree BB01, STMT00000 (after) | |
[000005] -A-XG+------ * ASG int | |
[000004] D----+-N---- +--* LCL_VAR int V01 loc0 | |
[000003] ---XG+------ \--* ADD int | |
[000001] ---XG+------ +--* IND int | |
[000088] -----+------ | \--* ADD byref | |
[000000] -----+------ | +--* LCL_VAR ref V00 this | |
[000087] -----+------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
[000002] -----+------ \--* CNS_INT int -1 | |
fgMorphTree BB01, STMT00001 (before) | |
[000009] -A-XG------- * ASG ref | |
[000008] D------N---- +--* LCL_VAR ref V02 loc1 | |
[000007] ---XG------- \--* FIELD ref _array | |
[000006] ------------ \--* LCL_VAR ref V00 this | |
Final value of Compiler::fgMorphField after calling fgMorphSmpOp: | |
[000007] ---XG------- * IND ref | |
[000090] -----+------ \--* ADD byref | |
[000006] -----+------ +--* LCL_VAR ref V00 this | |
[000089] -----+------ \--* CNS_INT int 4 field offset Fseq[_array] | |
fgMorphTree BB01, STMT00001 (after) | |
[000009] -A-XG+------ * ASG ref | |
[000008] D----+-N---- +--* LCL_VAR ref V02 loc1 | |
[000007] ---XG+------ \--* IND ref | |
[000090] -----+------ \--* ADD byref | |
[000006] -----+------ +--* LCL_VAR ref V00 this | |
[000089] -----+------ \--* CNS_INT int 4 field offset Fseq[_array] | |
fgMorphTree BB01, STMT00002 (before) | |
[000014] ---X-------- * JTRUE void | |
[000013] N--X-----U-- \--* LT int | |
[000010] ------------ +--* LCL_VAR int V01 loc0 | |
[000012] ---X-------- \--* ARR_LENGTH int | |
[000011] ------------ \--* LCL_VAR ref V02 loc1 | |
GenTreeNode creates assertion: | |
[000012] ---X-------- * ARR_LENGTH int | |
In BB01 New Local Constant Assertion: V02 != null index=#02, mask=0000000000000002 | |
Morphing BB02 of 'Stack`1:Pop():RefAsValueType`1:this' | |
fgMorphTree BB02, STMT00013 (before) | |
[000083] --C-G------- * CALL void Stack`1.ThrowForEmptyStack | |
[000082] ------------ this in ecx \--* LCL_VAR ref V00 this | |
Initializing arg info for 83.CALL: | |
ArgTable for 83.CALL after fgInitArgInfo: | |
fgArgTabEntry[arg 0 82.LCL_VAR ref, 1 reg: ecx, align=1] | |
Morphing args for 83.CALL: | |
Sorting the arguments: | |
Deferred argument ('ecx'): | |
[000082] -----+------ * LCL_VAR ref V00 this | |
Replaced with placeholder node: | |
[000091] ----------L- * ARGPLACE ref | |
Shuffled argument table: ecx | |
ArgTable for 83.CALL after fgMorphArgs: | |
fgArgTabEntry[arg 0 82.LCL_VAR ref, 1 reg: ecx, align=1, lateArgInx=0, processed] | |
fgMorphTree BB02, STMT00013 (after) | |
[000083] --CXG+------ * CALL void Stack`1.ThrowForEmptyStack | |
[000082] -----+------ this in ecx \--* LCL_VAR ref V00 this | |
Converting BB02 to BBJ_THROW | |
Morphing BB03 of 'Stack`1:Pop():RefAsValueType`1:this' | |
fgMorphTree BB03, STMT00003 (before) | |
[000021] -A-XG------- * ASG int | |
[000020] ---XG--N---- +--* FIELD int _version | |
[000015] ------------ | \--* LCL_VAR ref V00 this | |
[000019] ---XG------- \--* ADD int | |
[000017] ---XG------- +--* FIELD int _version | |
[000016] ------------ | \--* LCL_VAR ref V00 this | |
[000018] ------------ \--* CNS_INT int 1 | |
Final value of Compiler::fgMorphField after calling fgMorphSmpOp: | |
[000020] ---XG--N---- * IND int | |
[000093] -----+------ \--* ADD byref | |
[000015] -----+------ +--* LCL_VAR ref V00 this | |
[000092] -----+------ \--* CNS_INT int 12 field offset Fseq[_version] | |
GenTreeNode creates assertion: | |
[000020] ---XG--N---- * IND int | |
In BB03 New Local Constant Assertion: V00 != null index=#01, mask=0000000000000001 | |
Final value of Compiler::fgMorphField after calling fgMorphSmpOp: | |
[000017] ---XG------- * IND int | |
[000095] -----+------ \--* ADD byref | |
[000016] -----+------ +--* LCL_VAR ref V00 this | |
[000094] -----+------ \--* CNS_INT int 12 field offset Fseq[_version] | |
fgMorphTree BB03, STMT00003 (after) | |
[000021] -A-XG+------ * ASG int | |
[000020] ---XG+-N---- +--* IND int | |
[000093] -----+------ | \--* ADD byref | |
[000015] -----+------ | +--* LCL_VAR ref V00 this | |
[000092] -----+------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
[000019] ---XG+------ \--* ADD int | |
[000017] ---XG+------ +--* IND int | |
[000095] -----+------ | \--* ADD byref | |
[000016] -----+------ | +--* LCL_VAR ref V00 this | |
[000094] -----+------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
[000018] -----+------ \--* CNS_INT int 1 | |
fgMorphTree BB03, STMT00004 (before) | |
[000025] -A-XG------- * ASG int | |
[000024] ---XG--N---- +--* FIELD int _size | |
[000022] ------------ | \--* LCL_VAR ref V00 this | |
[000023] ------------ \--* LCL_VAR int V01 loc0 | |
Final value of Compiler::fgMorphField after calling fgMorphSmpOp: | |
[000024] ---XG--N---- * IND int | |
[000097] -----+------ \--* ADD byref | |
[000022] -----+------ +--* LCL_VAR ref V00 this | |
[000096] -----+------ \--* CNS_INT int 8 field offset Fseq[_size] | |
fgMorphTree BB03, STMT00004 (after) | |
[000025] -A-XG+------ * ASG int | |
[000024] ---XG+-N---- +--* IND int | |
[000097] -----+------ | \--* ADD byref | |
[000022] -----+------ | +--* LCL_VAR ref V00 this | |
[000096] -----+------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
[000023] -----+------ \--* LCL_VAR int V01 loc0 | |
fgMorphTree BB03, STMT00005 (before) | |
[000033] -A-XG------- * ASG struct (copy) | |
[000031] D----------- +--* LCL_VAR struct<RefAsValueType`1, 4>(P) V03 loc2 | |
+--* ref V03.Value (offs=0x00) -> V07 tmp2 | |
[000030] ---XG------- \--* OBJ struct<RefAsValueType`1, 4> | |
[000029] ---XG------- \--* ADDR byref | |
[000028] ---XG------- \--* INDEX struct | |
[000026] ------------ +--* LCL_VAR ref V02 loc1 | |
[000027] ------------ \--* LCL_VAR int V01 loc0 | |
GenTreeNode creates assertion: | |
[000100] ---X-------- * ARR_LENGTH int | |
In BB03 New Local Constant Assertion: V02 != null index=#02, mask=0000000000000002 | |
fgMorphCopyBlock:block assignment to morph: | |
[000033] -A-XG------- * ASG struct (copy) | |
[000031] D----+-N---- +--* LCL_VAR struct<RefAsValueType`1, 4>(P) V03 loc2 | |
+--* ref V03.Value (offs=0x00) -> V07 tmp2 | |
[000030] ---XG+------ \--* OBJ struct<RefAsValueType`1, 4> | |
[000107] ---XG+------ \--* COMMA byref | |
[000101] ---X-+------ +--* ARR_BOUNDS_CHECK_Rng void | |
[000027] -----+------ | +--* LCL_VAR int V01 loc0 | |
[000100] ---X-+------ | \--* ARR_LENGTH int | |
[000026] -----+------ | \--* LCL_VAR ref V02 loc1 | |
[000108] ----G------- \--* ADDR byref | |
[000028] a---G+-N---- \--* IND struct | |
[000106] -----+------ \--* ADD byref | |
[000098] -----+------ +--* LCL_VAR ref V02 loc1 | |
[000105] -----+------ \--* ADD int | |
[000103] -----+------ +--* LSH int | |
[000099] i----+------ | +--* LCL_VAR int V01 loc0 | |
[000102] -----+-N---- | \--* CNS_INT int 2 | |
[000104] -----+------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
(destDoFldAsg=true) using field by field assignments. | |
fgAddFieldSeqForZeroOffset for Fseq[Value] | |
addr (Before) | |
[000110] ---XG------- COMMA byref | |
(After) | |
[000110] ---XG------- COMMA byref Zero Fseq[Value] | |
fgMorphCopyBlock (after): | |
[000125] -A-XG+------ * ASG ref | |
[000109] D------N---- +--* LCL_VAR ref V07 tmp2 | |
[000124] ---XG------- \--* IND ref | |
[000110] ---XG------- \--* COMMA byref Zero Fseq[Value] | |
[000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void | |
[000113] ------------ | +--* LCL_VAR int V01 loc0 | |
[000111] ---X-------- | \--* ARR_LENGTH int | |
[000112] ------------ | \--* LCL_VAR ref V02 loc1 | |
[000115] ----G------- \--* ADDR byref | |
[000116] a---G--N---- \--* IND struct | |
[000117] ------------ \--* ADD byref | |
[000118] ------------ +--* LCL_VAR ref V02 loc1 | |
[000119] ------------ \--* ADD int | |
[000120] ------------ +--* LSH int | |
[000121] i----------- | +--* LCL_VAR int V01 loc0 | |
[000122] -------N---- | \--* CNS_INT int 2 | |
[000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
fgMorphTree BB03, STMT00005 (after) | |
[000125] -A-XG+------ * ASG ref | |
[000109] D------N---- +--* LCL_VAR ref V07 tmp2 | |
[000124] ---XG------- \--* IND ref | |
[000110] ---XG------- \--* COMMA byref Zero Fseq[Value] | |
[000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void | |
[000113] ------------ | +--* LCL_VAR int V01 loc0 | |
[000111] ---X-------- | \--* ARR_LENGTH int | |
[000112] ------------ | \--* LCL_VAR ref V02 loc1 | |
[000115] ----G------- \--* ADDR byref | |
[000116] a---G--N---- \--* IND struct | |
[000117] ------------ \--* ADD byref | |
[000118] ------------ +--* LCL_VAR ref V02 loc1 | |
[000119] ------------ \--* ADD int | |
[000120] ------------ +--* LSH int | |
[000121] i----------- | +--* LCL_VAR int V01 loc0 | |
[000122] -------N---- | \--* CNS_INT int 2 | |
[000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
fgMorphTree BB03, STMT00006 (before) | |
[000038] -A-X-------- * ASG int | |
[000037] D------N---- +--* LCL_VAR int V05 tmp0 | |
[000036] #--X-------- \--* IND int | |
[000035] ------------ \--* LCL_VAR ref V00 this | |
Non-null prop for index #01 in BB03: | |
[000036] #--X-------- * IND int | |
fgMorphTree BB03, STMT00007 (before) | |
[000063] -AC-G------- * ASG int | |
[000062] D------N---- +--* LCL_VAR int V06 tmp1 | |
[000061] --C-G------- \--* QMARK int | |
[000051] Q----------- if +--* NE int | |
[000047] n----------- | +--* IND int | |
[000046] ------------ | | \--* ADD int | |
[000044] #----------- | | +--* IND int | |
[000043] #----------- | | | \--* IND int | |
[000042] ------------ | | | \--* ADD int | |
[000040] ------------ | | | +--* LCL_VAR int V05 tmp0 | |
[000041] ------------ | | | \--* CNS_INT int 32 | |
[000045] ------------ | | \--* CNS_INT int 12 | |
[000050] ------------ | \--* CNS_INT int 0 | |
[000060] --C-G------- if \--* COLON int | |
[000049] --C-G------- else +--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] ------------ arg0 | +--* LCL_VAR int V05 tmp0 | |
[000048] ------------ arg1 | \--* CNS_INT(h) int 0x8A93EB8 token | |
[000052] n----------- then \--* IND int | |
[000053] ------------ \--* ADD int | |
[000054] #----------- +--* IND int | |
[000055] #----------- | \--* IND int | |
[000056] ------------ | \--* ADD int | |
[000057] ------------ | +--* LCL_VAR int V05 tmp0 | |
[000058] ------------ | \--* CNS_INT int 32 | |
[000059] ------------ \--* CNS_INT int 12 | |
Initializing arg info for 49.CALL: | |
ArgTable for 49.CALL after fgInitArgInfo: | |
fgArgTabEntry[arg 0 39.LCL_VAR int, 1 reg: ecx, align=1] | |
fgArgTabEntry[arg 1 48.CNS_INT int, 1 reg: edx, align=1] | |
Morphing args for 49.CALL: | |
Sorting the arguments: | |
Deferred argument ('ecx'): | |
[000039] -----+------ * LCL_VAR int V05 tmp0 | |
Replaced with placeholder node: | |
[000126] ----------L- * ARGPLACE int | |
Deferred argument ('edx'): | |
[000048] -----+------ * CNS_INT(h) int 0x8A93EB8 token | |
Replaced with placeholder node: | |
[000127] ----------L- * ARGPLACE int | |
Shuffled argument table: ecx edx | |
ArgTable for 49.CALL after fgMorphArgs: | |
fgArgTabEntry[arg 0 39.LCL_VAR int, 1 reg: ecx, align=1, lateArgInx=0, processed] | |
fgArgTabEntry[arg 1 48.CNS_INT int, 1 reg: edx, align=1, lateArgInx=1, processed] | |
fgMorphTree BB03, STMT00007 (after) | |
[000063] -AC-G+------ * ASG int | |
[000062] D----+-N---- +--* LCL_VAR int V06 tmp1 | |
[000061] --C-G+------ \--* QMARK int | |
[000051] J----+-N---- if +--* NE int | |
[000047] n----+------ | +--* IND int | |
[000046] -----+------ | | \--* ADD int | |
[000044] #----+------ | | +--* IND int | |
[000043] #----+------ | | | \--* IND int | |
[000042] -----+------ | | | \--* ADD int | |
[000040] -----+------ | | | +--* LCL_VAR int V05 tmp0 | |
[000041] -----+------ | | | \--* CNS_INT int 32 | |
[000045] -----+------ | | \--* CNS_INT int 12 | |
[000050] -----+------ | \--* CNS_INT int 0 | |
[000060] --C-G+?----- if \--* COLON int | |
[000049] --C-G+?----- else +--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] -----+?----- arg0 in ecx | +--* LCL_VAR int V05 tmp0 | |
[000048] -----+?----- arg1 in edx | \--* CNS_INT(h) int 0x8A93EB8 token | |
[000052] n----+?----- then \--* IND int | |
[000053] -----+?----- \--* ADD int | |
[000054] #----+?----- +--* IND int | |
[000055] #----+?----- | \--* IND int | |
[000056] -----+?----- | \--* ADD int | |
[000057] -----+?----- | +--* LCL_VAR int V05 tmp0 | |
[000058] -----+?----- | \--* CNS_INT int 32 | |
[000059] -----+?----- \--* CNS_INT int 12 | |
fgMorphTree BB03, STMT00009 (before) | |
[000069] ------------ * NOP void | |
fgMorphTree BB03, STMT00011 (before) | |
[000077] IA---------- * ASG struct (init) | |
[000074] D------N---- +--* LCL_VAR struct<RefAsValueType`1, 4>(P) V04 loc3 | |
+--* ref V04.Value (offs=0x00) -> V08 tmp3 | |
[000076] ------------ \--* CNS_INT int 0 | |
fgMorphInitBlock: using field by field initialization. | |
GenTreeNode creates assertion: | |
[000130] -A---------- * ASG ref | |
In BB03 New Local Constant Assertion: V08 == null index=#03, mask=0000000000000004 | |
fgMorphInitBlock (after): | |
[000130] -A---+------ * ASG ref | |
[000128] D------N---- +--* LCL_VAR ref V08 tmp3 | |
[000129] ------------ \--* CNS_INT ref null | |
The assignment [000130] using V08 removes: Constant Assertion: V08 == null | |
GenTreeNode creates assertion: | |
[000130] -A---+------ * ASG ref | |
In BB03 New Local Constant Assertion: V08 == null index=#03, mask=0000000000000004 | |
fgMorphTree BB03, STMT00011 (after) | |
[000130] -A---+------ * ASG ref | |
[000128] D------N---- +--* LCL_VAR ref V08 tmp3 | |
[000129] ------------ \--* CNS_INT ref null | |
fgMorphTree BB03, STMT00012 (before) | |
[000081] -A-XG------- * ASG struct (copy) | |
[000079] ---XG------- +--* INDEX struct | |
[000072] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000073] ------------ | \--* LCL_VAR int V01 loc0 | |
[000078] ------------ \--* LCL_VAR struct<RefAsValueType`1, 4>(P) V04 loc3 | |
\--* ref V04.Value (offs=0x00) -> V08 tmp3 | |
fgMorphCopyBlock:block assignment to morph: | |
[000081] -A-XG------- * ASG struct (copy) | |
[000142] ---XG+------ +--* OBJ struct<RefAsValueType`1, 4> | |
[000140] ---XG+------ | \--* COMMA byref | |
[000134] ---X-+------ | +--* ARR_BOUNDS_CHECK_Rng void | |
[000073] -----+------ | | +--* LCL_VAR int V01 loc0 | |
[000133] ---X-+------ | | \--* ARR_LENGTH int | |
[000072] -----+------ | | \--* LCL_VAR ref V02 loc1 | |
[000141] ----G+------ | \--* ADDR byref | |
[000079] a---G+------ | \--* IND struct | |
[000139] -----+------ | \--* ADD byref | |
[000131] -----+------ | +--* LCL_VAR ref V02 loc1 | |
[000138] -----+------ | \--* ADD int | |
[000136] -----+------ | +--* LSH int | |
[000132] i----+------ | | +--* LCL_VAR int V01 loc0 | |
[000135] -----+-N---- | | \--* CNS_INT int 2 | |
[000137] -----+------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
[000078] -----+------ \--* LCL_VAR struct<RefAsValueType`1, 4>(P) V04 loc3 | |
\--* ref V04.Value (offs=0x00) -> V08 tmp3 | |
(srcDoFldAsg=true) using field by field assignments. | |
fgAddFieldSeqForZeroOffset for Fseq[Value] | |
addr (Before) | |
[000143] ---XG------- COMMA byref | |
(After) | |
[000143] ---XG------- COMMA byref Zero Fseq[Value] | |
fgMorphCopyBlock (after): | |
[000159] -A-XG+------ * ASG ref | |
[000157] *--XG--N---- +--* IND ref | |
[000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] | |
[000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void | |
[000146] ------------ | | +--* LCL_VAR int V01 loc0 | |
[000144] ---X-------- | | \--* ARR_LENGTH int | |
[000145] ------------ | | \--* LCL_VAR ref V02 loc1 | |
[000148] ----G------- | \--* ADDR byref | |
[000149] a---G------- | \--* IND struct | |
[000150] ------------ | \--* ADD byref | |
[000151] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000152] ------------ | \--* ADD int | |
[000153] ------------ | +--* LSH int | |
[000154] i----------- | | +--* LCL_VAR int V01 loc0 | |
[000155] -------N---- | | \--* CNS_INT int 2 | |
[000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
[000158] ------------ \--* LCL_VAR ref V08 tmp3 | |
fgMorphTree BB03, STMT00012 (after) | |
[000159] -A-XG+------ * ASG ref | |
[000157] *--XG--N---- +--* IND ref | |
[000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] | |
[000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void | |
[000146] ------------ | | +--* LCL_VAR int V01 loc0 | |
[000144] ---X-------- | | \--* ARR_LENGTH int | |
[000145] ------------ | | \--* LCL_VAR ref V02 loc1 | |
[000148] ----G------- | \--* ADDR byref | |
[000149] a---G------- | \--* IND struct | |
[000150] ------------ | \--* ADD byref | |
[000151] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000152] ------------ | \--* ADD int | |
[000153] ------------ | +--* LSH int | |
[000154] i----------- | | +--* LCL_VAR int V01 loc0 | |
[000155] -------N---- | | \--* CNS_INT int 2 | |
[000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
[000158] ------------ \--* LCL_VAR ref V08 tmp3 | |
fgMorphTree BB03, STMT00010 (before) | |
[000071] ------------ * RETURN ref | |
[000070] ------------ \--* LCL_VAR ref V07 tmp2 | |
Expanding top-level qmark in BB03 (before) | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB03 [0002] 1 BB01 1 [01C..052) (return) i label target idxlen | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB03 [01C..052) (return), preds={BB01} succs={} | |
***** BB03 | |
STMT00003 (IL 0x01C...0x025) | |
[000021] -A-XG+------ * ASG int | |
[000020] ---XG+-N---- +--* IND int | |
[000093] -----+------ | \--* ADD byref | |
[000015] -----+------ | +--* LCL_VAR ref V00 this | |
[000092] -----+------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
[000019] ---XG+------ \--* ADD int | |
[000017] ---XG+------ +--* IND int | |
[000095] -----+------ | \--* ADD byref | |
[000016] -----+------ | +--* LCL_VAR ref V00 this | |
[000094] -----+------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
[000018] -----+------ \--* CNS_INT int 1 | |
***** BB03 | |
STMT00004 (IL 0x02A...0x02C) | |
[000025] -A-XG+------ * ASG int | |
[000024] ---XG+-N---- +--* IND int | |
[000097] -----+------ | \--* ADD byref | |
[000022] -----+------ | +--* LCL_VAR ref V00 this | |
[000096] -----+------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
[000023] -----+------ \--* LCL_VAR int V01 loc0 | |
***** BB03 | |
STMT00005 (IL 0x031...0x038) | |
[000125] -A-XG+------ * ASG ref | |
[000109] D------N---- +--* LCL_VAR ref V07 tmp2 | |
[000124] ---XG------- \--* IND ref | |
[000110] ---XG------- \--* COMMA byref Zero Fseq[Value] | |
[000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void | |
[000113] ------------ | +--* LCL_VAR int V01 loc0 | |
[000111] ---X-------- | \--* ARR_LENGTH int | |
[000112] ------------ | \--* LCL_VAR ref V02 loc1 | |
[000115] ----G------- \--* ADDR byref | |
[000116] a---G--N---- \--* IND struct | |
[000117] ------------ \--* ADD byref | |
[000118] ------------ +--* LCL_VAR ref V02 loc1 | |
[000119] ------------ \--* ADD int | |
[000120] ------------ +--* LSH int | |
[000121] i----------- | +--* LCL_VAR int V01 loc0 | |
[000122] -------N---- | \--* CNS_INT int 2 | |
[000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
***** BB03 | |
STMT00006 (IL 0x039...0x03E) | |
[000038] -A---+------ * ASG int | |
[000037] D----+-N---- +--* LCL_VAR int V05 tmp0 | |
[000036] #----+------ \--* IND int | |
[000035] -----+------ \--* LCL_VAR ref V00 this | |
***** BB03 | |
STMT00007 (IL ???... ???) | |
[000063] -AC-G+------ * ASG int | |
[000062] D----+-N---- +--* LCL_VAR int V06 tmp1 | |
[000061] --C-G+------ \--* QMARK int | |
[000051] J----+-N---- if +--* NE int | |
[000047] n----+------ | +--* IND int | |
[000046] -----+------ | | \--* ADD int | |
[000044] #----+------ | | +--* IND int | |
[000043] #----+------ | | | \--* IND int | |
[000042] -----+------ | | | \--* ADD int | |
[000040] -----+------ | | | +--* LCL_VAR int V05 tmp0 | |
[000041] -----+------ | | | \--* CNS_INT int 32 | |
[000045] -----+------ | | \--* CNS_INT int 12 | |
[000050] -----+------ | \--* CNS_INT int 0 | |
[000060] --C-G+?----- if \--* COLON int | |
[000049] --C-G+?----- else +--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] -----+?----- arg0 in ecx | +--* LCL_VAR int V05 tmp0 | |
[000048] -----+?----- arg1 in edx | \--* CNS_INT(h) int 0x8A93EB8 token | |
[000052] n----+?----- then \--* IND int | |
[000053] -----+?----- \--* ADD int | |
[000054] #----+?----- +--* IND int | |
[000055] #----+?----- | \--* IND int | |
[000056] -----+?----- | \--* ADD int | |
[000057] -----+?----- | +--* LCL_VAR int V05 tmp0 | |
[000058] -----+?----- | \--* CNS_INT int 32 | |
[000059] -----+?----- \--* CNS_INT int 12 | |
***** BB03 | |
STMT00011 (IL 0x040...0x045) | |
[000130] -A---+------ * ASG ref | |
[000128] D------N---- +--* LCL_VAR ref V08 tmp3 | |
[000129] ------------ \--* CNS_INT ref null | |
***** BB03 | |
STMT00012 (IL ???...0x04B) | |
[000159] -A-XG+------ * ASG ref | |
[000157] *--XG--N---- +--* IND ref | |
[000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] | |
[000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void | |
[000146] ------------ | | +--* LCL_VAR int V01 loc0 | |
[000144] ---X-------- | | \--* ARR_LENGTH int | |
[000145] ------------ | | \--* LCL_VAR ref V02 loc1 | |
[000148] ----G------- | \--* ADDR byref | |
[000149] a---G------- | \--* IND struct | |
[000150] ------------ | \--* ADD byref | |
[000151] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000152] ------------ | \--* ADD int | |
[000153] ------------ | +--* LSH int | |
[000154] i----------- | | +--* LCL_VAR int V01 loc0 | |
[000155] -------N---- | | \--* CNS_INT int 2 | |
[000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
[000158] ------------ \--* LCL_VAR ref V08 tmp3 | |
***** BB03 | |
STMT00010 (IL 0x050...0x051) | |
[000071] -----+------ * RETURN ref | |
[000070] -----+------ \--* LCL_VAR ref V07 tmp2 | |
------------------------------------------------------------------------------------------------------------------- | |
New Basic Block BB06 [0006] created. | |
New Basic Block BB07 [0007] created. | |
New Basic Block BB08 [0008] created. | |
New Basic Block BB09 [0009] created. | |
Removing statement STMT00007 (IL ???... ???) | |
[000063] -AC-G+------ * ASG int | |
[000062] D----+-N---- +--* LCL_VAR int V06 tmp1 | |
[000061] --C-G+------ \--* QMARK int | |
[000051] J----+-N---- if +--* EQ int | |
[000047] n----+------ | +--* IND int | |
[000046] -----+------ | | \--* ADD int | |
[000044] #----+------ | | +--* IND int | |
[000043] #----+------ | | | \--* IND int | |
[000042] -----+------ | | | \--* ADD int | |
[000040] -----+------ | | | +--* LCL_VAR int V05 tmp0 | |
[000041] -----+------ | | | \--* CNS_INT int 32 | |
[000045] -----+------ | | \--* CNS_INT int 12 | |
[000050] -----+------ | \--* CNS_INT int 0 | |
[000060] --C-G+?----- if \--* COLON int | |
[000049] --C-G+?----- else +--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] -----+?----- arg0 in ecx | +--* LCL_VAR int V05 tmp0 | |
[000048] -----+?----- arg1 in edx | \--* CNS_INT(h) int 0x8A93EB8 token | |
[000052] n----+?----- then \--* IND int | |
[000053] -----+?----- \--* ADD int | |
[000054] #----+?----- +--* IND int | |
[000055] #----+?----- | \--* IND int | |
[000056] -----+?----- | \--* ADD int | |
[000057] -----+?----- | +--* LCL_VAR int V05 tmp0 | |
[000058] -----+?----- | \--* CNS_INT int 32 | |
[000059] -----+?----- \--* CNS_INT int 12 | |
in BB03 as useless: | |
Expanding top-level qmark in BB03 (after) | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB03 [0002] 1 BB01 1 [01C..040) i label target idxlen | |
BB07 [0007] 1 BB03 1 [???..???)-> BB08 ( cond ) i | |
BB09 [0009] 1 BB07 0.50 [???..???)-> BB06 (always) i | |
BB08 [0008] 1 BB07 0.50 [???..???) i label target | |
BB06 [0006] 2 BB08,BB09 1 [040..052) (return) i label target idxlen | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB03 [01C..040), preds={BB01} succs={BB07} | |
***** BB03 | |
STMT00003 (IL 0x01C...0x025) | |
[000021] -A-XG+------ * ASG int | |
[000020] ---XG+-N---- +--* IND int | |
[000093] -----+------ | \--* ADD byref | |
[000015] -----+------ | +--* LCL_VAR ref V00 this | |
[000092] -----+------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
[000019] ---XG+------ \--* ADD int | |
[000017] ---XG+------ +--* IND int | |
[000095] -----+------ | \--* ADD byref | |
[000016] -----+------ | +--* LCL_VAR ref V00 this | |
[000094] -----+------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
[000018] -----+------ \--* CNS_INT int 1 | |
***** BB03 | |
STMT00004 (IL 0x02A...0x02C) | |
[000025] -A-XG+------ * ASG int | |
[000024] ---XG+-N---- +--* IND int | |
[000097] -----+------ | \--* ADD byref | |
[000022] -----+------ | +--* LCL_VAR ref V00 this | |
[000096] -----+------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
[000023] -----+------ \--* LCL_VAR int V01 loc0 | |
***** BB03 | |
STMT00005 (IL 0x031...0x038) | |
[000125] -A-XG+------ * ASG ref | |
[000109] D------N---- +--* LCL_VAR ref V07 tmp2 | |
[000124] ---XG------- \--* IND ref | |
[000110] ---XG------- \--* COMMA byref Zero Fseq[Value] | |
[000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void | |
[000113] ------------ | +--* LCL_VAR int V01 loc0 | |
[000111] ---X-------- | \--* ARR_LENGTH int | |
[000112] ------------ | \--* LCL_VAR ref V02 loc1 | |
[000115] ----G------- \--* ADDR byref | |
[000116] a---G--N---- \--* IND struct | |
[000117] ------------ \--* ADD byref | |
[000118] ------------ +--* LCL_VAR ref V02 loc1 | |
[000119] ------------ \--* ADD int | |
[000120] ------------ +--* LSH int | |
[000121] i----------- | +--* LCL_VAR int V01 loc0 | |
[000122] -------N---- | \--* CNS_INT int 2 | |
[000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
***** BB03 | |
STMT00006 (IL 0x039...0x03E) | |
[000038] -A---+------ * ASG int | |
[000037] D----+-N---- +--* LCL_VAR int V05 tmp0 | |
[000036] #----+------ \--* IND int | |
[000035] -----+------ \--* LCL_VAR ref V00 this | |
------------ BB07 [???..???) -> BB08 (cond), preds={BB03} succs={BB09,BB08} | |
***** BB07 | |
STMT00014 (IL ???... ???) | |
[000160] ------------ * JTRUE void | |
[000051] J----+-N---- \--* EQ int | |
[000047] n----+------ +--* IND int | |
[000046] -----+------ | \--* ADD int | |
[000044] #----+------ | +--* IND int | |
[000043] #----+------ | | \--* IND int | |
[000042] -----+------ | | \--* ADD int | |
[000040] -----+------ | | +--* LCL_VAR int V05 tmp0 | |
[000041] -----+------ | | \--* CNS_INT int 32 | |
[000045] -----+------ | \--* CNS_INT int 12 | |
[000050] -----+------ \--* CNS_INT int 0 | |
------------ BB09 [???..???) -> BB06 (always), preds={BB07} succs={BB06} | |
***** BB09 | |
STMT00015 (IL ???... ???) | |
[000162] -A---------- * ASG int | |
[000161] D------N---- +--* LCL_VAR int V06 tmp1 | |
[000052] n----+?----- \--* IND int | |
[000053] -----+?----- \--* ADD int | |
[000054] #----+?----- +--* IND int | |
[000055] #----+?----- | \--* IND int | |
[000056] -----+?----- | \--* ADD int | |
[000057] -----+?----- | +--* LCL_VAR int V05 tmp0 | |
[000058] -----+?----- | \--* CNS_INT int 32 | |
[000059] -----+?----- \--* CNS_INT int 12 | |
------------ BB08 [???..???), preds={BB07} succs={BB06} | |
***** BB08 | |
STMT00016 (IL ???... ???) | |
[000164] -AC-G------- * ASG int | |
[000163] D------N---- +--* LCL_VAR int V06 tmp1 | |
[000049] --C-G+?----- \--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] -----+?----- arg0 in ecx +--* LCL_VAR int V05 tmp0 | |
[000048] -----+?----- arg1 in edx \--* CNS_INT(h) int 0x8A93EB8 token | |
------------ BB06 [040..052) (return), preds={BB08,BB09} succs={} | |
***** BB06 | |
STMT00011 (IL 0x040...0x045) | |
[000130] -A---+------ * ASG ref | |
[000128] D------N---- +--* LCL_VAR ref V08 tmp3 | |
[000129] ------------ \--* CNS_INT ref null | |
***** BB06 | |
STMT00012 (IL ???...0x04B) | |
[000159] -A-XG+------ * ASG ref | |
[000157] *--XG--N---- +--* IND ref | |
[000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] | |
[000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void | |
[000146] ------------ | | +--* LCL_VAR int V01 loc0 | |
[000144] ---X-------- | | \--* ARR_LENGTH int | |
[000145] ------------ | | \--* LCL_VAR ref V02 loc1 | |
[000148] ----G------- | \--* ADDR byref | |
[000149] a---G------- | \--* IND struct | |
[000150] ------------ | \--* ADD byref | |
[000151] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000152] ------------ | \--* ADD int | |
[000153] ------------ | +--* LSH int | |
[000154] i----------- | | +--* LCL_VAR int V01 loc0 | |
[000155] -------N---- | | \--* CNS_INT int 2 | |
[000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
[000158] ------------ \--* LCL_VAR ref V08 tmp3 | |
***** BB06 | |
STMT00010 (IL 0x050...0x051) | |
[000071] -----+------ * RETURN ref | |
[000070] -----+------ \--* LCL_VAR ref V07 tmp2 | |
------------------------------------------------------------------------------------------------------------------- | |
*************** Finishing PHASE Morph - Global | |
*************** Starting PHASE GS Cookie | |
No GS security needed | |
*************** Finishing PHASE GS Cookie | |
*************** Starting PHASE Mark GC poll blocks | |
*************** Before renumbering the basic blocks | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB03 ( cond ) i label target idxlen | |
BB02 [0001] 1 BB01 0 [016..01C) (throw ) i rare gcsafe | |
BB03 [0002] 1 BB01 1 [01C..040) i label target idxlen | |
BB07 [0007] 1 BB03 1 [???..???)-> BB08 ( cond ) i | |
BB09 [0009] 1 BB07 0.50 [???..???)-> BB06 (always) i | |
BB08 [0008] 1 BB07 0.50 [???..???) i label target | |
BB06 [0006] 2 BB08,BB09 1 [040..052) (return) i label target idxlen | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
Renumber BB07 to BB04 | |
Renumber BB09 to BB05 | |
Renumber BB08 to BB06 | |
Renumber BB06 to BB07 | |
*************** After renumbering the basic blocks | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB03 ( cond ) i label target idxlen | |
BB02 [0001] 1 BB01 0 [016..01C) (throw ) i rare gcsafe | |
BB03 [0002] 1 BB01 1 [01C..040) i label target idxlen | |
BB04 [0007] 1 BB03 1 [???..???)-> BB06 ( cond ) i | |
BB05 [0009] 1 BB04 0.50 [???..???)-> BB07 (always) i | |
BB06 [0008] 1 BB04 0.50 [???..???) i label target | |
BB07 [0006] 2 BB06,BB05 1 [040..052) (return) i label target idxlen | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
New BlockSet epoch 3, # of blocks (including unused BB00): 8, bitset array size: 1 (short) | |
*************** Finishing PHASE Mark GC poll blocks | |
*************** Starting PHASE Compute edge weights (1, false) | |
*************** In fgComputeBlockAndEdgeWeights() | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB03 ( cond ) i label target idxlen | |
BB02 [0001] 1 BB01 0 [016..01C) (throw ) i rare gcsafe | |
BB03 [0002] 1 BB01 1 [01C..040) i label target idxlen | |
BB04 [0007] 1 BB03 1 [???..???)-> BB06 ( cond ) i | |
BB05 [0009] 1 BB04 0.50 [???..???)-> BB07 (always) i | |
BB06 [0008] 1 BB04 0.50 [???..???) i label target | |
BB07 [0006] 2 BB06,BB05 1 [040..052) (return) i label target idxlen | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
-- no profile data, so using default called count | |
fgComputeEdgeWeights() was able to compute exact edge weights for all of the 7 edges, using 1 passes. | |
Edge weights into BB02 :BB01 (0) | |
Edge weights into BB03 :BB01 (100) | |
Edge weights into BB04 :BB03 (100) | |
Edge weights into BB05 :BB04 (50) | |
Edge weights into BB06 :BB04 (50) | |
Edge weights into BB07 :BB06 (50), BB05 (50) | |
*************** Finishing PHASE Compute edge weights (1, false) | |
*************** Starting PHASE Merge throw blocks | |
*************** In fgTailMergeThrows | |
Method does not have multiple noreturn calls. | |
*************** Finishing PHASE Merge throw blocks | |
*************** Starting PHASE Optimize layout | |
*************** In optOptimizeLayout() | |
*************** Exception Handling table is empty | |
*************** In fgDebugCheckBBlist | |
*************** In fgUpdateFlowGraph() | |
Before updating the flow graph: | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB03 ( cond ) i label target idxlen | |
BB02 [0001] 1 BB01 0 [016..01C) (throw ) i rare gcsafe | |
BB03 [0002] 1 BB01 1 [01C..040) i label target idxlen | |
BB04 [0007] 1 BB03 1 [???..???)-> BB06 ( cond ) i | |
BB05 [0009] 1 BB04 0.50 [???..???)-> BB07 (always) i | |
BB06 [0008] 1 BB04 0.50 [???..???) i label target | |
BB07 [0006] 2 BB06,BB05 1 [040..052) (return) i label target idxlen | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
Compacting blocks BB03 and BB04: | |
*************** 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..016)-> BB03 ( cond ) i label target idxlen | |
BB02 [0001] 1 BB01 0 [016..01C) (throw ) i rare gcsafe | |
BB03 [0002] 1 BB01 1 [01C..040)-> BB06 ( cond ) i label target idxlen | |
BB05 [0009] 1 BB03 0.50 [???..???)-> BB07 (always) i | |
BB06 [0008] 1 BB03 0.50 [???..???) i label target | |
BB07 [0006] 2 BB06,BB05 1 [040..052) (return) i label target idxlen | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
*************** In fgDebugCheckBBlist | |
*************** In fgExpandRarelyRunBlocks() | |
*************** In fgRelocateEHRegions() | |
*************** In fgReorderBlocks() | |
Initial BasicBlocks | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB03 ( cond ) i label target idxlen | |
BB02 [0001] 1 BB01 0 [016..01C) (throw ) i rare gcsafe | |
BB03 [0002] 1 BB01 1 [01C..040)-> BB06 ( cond ) i label target idxlen | |
BB05 [0009] 1 BB03 0.50 [???..???)-> BB07 (always) i | |
BB06 [0008] 1 BB03 0.50 [???..???) i label target | |
BB07 [0006] 2 BB06,BB05 1 [040..052) (return) i label target idxlen | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
Decided to reverse conditional branch at block BB01 branch to BB03 since it falls into a rarely run block | |
Relocated rarely run block BB02 by reversing conditional jump at BB01 | |
Relocated block [BB02..BB02] inserted after BB07 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..016)-> BB02 ( cond ) i label target idxlen | |
BB03 [0002] 1 BB01 1 [01C..040)-> BB06 ( cond ) i label target idxlen | |
BB05 [0009] 1 BB03 0.50 [???..???)-> BB07 (always) i | |
BB06 [0008] 1 BB03 0.50 [???..???) i label target | |
BB07 [0006] 2 BB06,BB05 1 [040..052) (return) i label target idxlen | |
BB02 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** 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..016)-> BB02 ( cond ) i label target idxlen | |
BB03 [0002] 1 BB01 1 [01C..040)-> BB06 ( cond ) i label target idxlen | |
BB05 [0009] 1 BB03 0.50 [???..???)-> BB07 (always) i | |
BB06 [0008] 1 BB03 0.50 [???..???) i label target | |
BB07 [0006] 2 BB06,BB05 1 [040..052) (return) i label target idxlen | |
BB02 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** In fgDebugCheckBBlist | |
*************** Finishing PHASE Optimize layout | |
*************** Starting PHASE Compute blocks reachability | |
*************** In fgComputeReachability | |
*************** In fgDebugCheckBBlist | |
Renumbering the basic blocks for fgComputeReachability pass #1 | |
*************** Before renumbering the basic blocks | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB02 ( cond ) i label target idxlen | |
BB03 [0002] 1 BB01 1 [01C..040)-> BB06 ( cond ) i label target idxlen | |
BB05 [0009] 1 BB03 0.50 [???..???)-> BB07 (always) i | |
BB06 [0008] 1 BB03 0.50 [???..???) i label target | |
BB07 [0006] 2 BB06,BB05 1 [040..052) (return) i label target idxlen | |
BB02 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
Renumber BB03 to BB02 | |
Renumber BB05 to BB03 | |
Renumber BB06 to BB04 | |
Renumber BB07 to BB05 | |
Renumber BB02 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..016)-> BB06 ( cond ) i label target idxlen | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen | |
BB03 [0009] 1 BB02 0.50 [???..???)-> BB05 (always) i | |
BB04 [0008] 1 BB02 0.50 [???..???) i label target | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** 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 BB04 | |
BB05 : BB01 BB02 BB03 BB04 BB05 | |
BB06 : BB01 BB06 | |
After computing reachability: | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB06 ( cond ) i label target idxlen | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen | |
BB03 [0009] 1 BB02 0.50 [???..???)-> BB05 (always) i | |
BB04 [0008] 1 BB02 0.50 [???..???) i label target | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** In fgDebugCheckBBlist | |
*************** In fgComputeDoms | |
*************** In fgDebugCheckBBlist | |
Dominator computation start blocks (those blocks with no incoming edges): | |
BB01 | |
------------------------------------------------ | |
BBnum Dominated by | |
------------------------------------------------ | |
BB01: BB01 | |
BB02: BB02 BB01 | |
BB03: BB03 BB02 BB01 | |
BB04: BB04 BB02 BB01 | |
BB05: BB05 BB02 BB01 | |
BB06: BB06 BB01 | |
Inside fgBuildDomTree | |
After computing the Dominance Tree: | |
BB01 : BB06 BB02 | |
BB02 : BB05 BB04 BB03 | |
After numbering the dominator tree: | |
BB01: pre=01, post=06 | |
BB02: pre=03, post=05 | |
BB03: pre=06, post=04 | |
BB04: pre=05, post=03 | |
BB05: pre=04, post=02 | |
BB06: pre=02, post=01 | |
*************** Finishing PHASE Compute blocks reachability | |
*************** Starting PHASE Optimize loops | |
*************** In optOptimizeLoops() | |
After optSetBlockWeights: | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB06 ( cond ) i label target idxlen | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen | |
BB03 [0009] 1 BB02 0.25 [???..???)-> BB05 (always) i | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** In fgDebugCheckBBlist | |
*************** Finishing PHASE Optimize loops | |
*************** Starting PHASE Clone loops | |
*************** In optCloneLoops() | |
*************** Finishing PHASE Clone loops | |
*************** Starting PHASE Unroll loops | |
*************** Finishing PHASE Unroll loops | |
*************** Starting PHASE Mark local vars | |
*************** In lvaMarkLocalVars() | |
*** lvaComputeRefCounts *** | |
*** lvaComputeRefCounts -- explicit counts *** | |
*** marking local variables in block BB01 (weight=1 ) | |
STMT00000 (IL 0x000...0x008) | |
[000005] -A-XG+------ * ASG int | |
[000004] D----+-N---- +--* LCL_VAR int V01 loc0 | |
[000003] ---XG+------ \--* ADD int | |
[000001] ---XG+------ +--* IND int | |
[000088] -----+------ | \--* ADD byref | |
[000000] -----+------ | +--* LCL_VAR ref V00 this | |
[000087] -----+------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
[000002] -----+------ \--* CNS_INT int -1 | |
New refCnts for V01: refCnt = 1, refCntWtd = 1 | |
New refCnts for V00: refCnt = 1, refCntWtd = 1 | |
STMT00001 (IL 0x009...0x00F) | |
[000009] -A-XG+------ * ASG ref | |
[000008] D----+-N---- +--* LCL_VAR ref V02 loc1 | |
[000007] ---XG+------ \--* IND ref | |
[000090] -----+------ \--* ADD byref | |
[000006] -----+------ +--* LCL_VAR ref V00 this | |
[000089] -----+------ \--* CNS_INT int 4 field offset Fseq[_array] | |
New refCnts for V02: refCnt = 1, refCntWtd = 1 | |
New refCnts for V00: refCnt = 2, refCntWtd = 2 | |
STMT00002 (IL 0x010...0x014) | |
[000014] ---X-+------ * JTRUE void | |
[000013] N--X-+-N-U-- \--* GE int | |
[000010] -----+------ +--* LCL_VAR int V01 loc0 | |
[000012] ---X-+------ \--* ARR_LENGTH int | |
[000011] -----+------ \--* LCL_VAR ref V02 loc1 | |
New refCnts for V01: refCnt = 2, refCntWtd = 2 | |
New refCnts for V02: refCnt = 2, refCntWtd = 2 | |
*** marking local variables in block BB02 (weight=1 ) | |
STMT00003 (IL 0x01C...0x025) | |
[000021] -A-XG+------ * ASG int | |
[000020] ---XG+-N---- +--* IND int | |
[000093] -----+------ | \--* ADD byref | |
[000015] -----+------ | +--* LCL_VAR ref V00 this | |
[000092] -----+------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
[000019] ---XG+------ \--* ADD int | |
[000017] ---XG+------ +--* IND int | |
[000095] -----+------ | \--* ADD byref | |
[000016] -----+------ | +--* LCL_VAR ref V00 this | |
[000094] -----+------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
[000018] -----+------ \--* CNS_INT int 1 | |
New refCnts for V00: refCnt = 3, refCntWtd = 3 | |
New refCnts for V00: refCnt = 4, refCntWtd = 4 | |
STMT00004 (IL 0x02A...0x02C) | |
[000025] -A-XG+------ * ASG int | |
[000024] ---XG+-N---- +--* IND int | |
[000097] -----+------ | \--* ADD byref | |
[000022] -----+------ | +--* LCL_VAR ref V00 this | |
[000096] -----+------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
[000023] -----+------ \--* LCL_VAR int V01 loc0 | |
New refCnts for V00: refCnt = 5, refCntWtd = 5 | |
New refCnts for V01: refCnt = 3, refCntWtd = 3 | |
STMT00005 (IL 0x031...0x038) | |
[000125] -A-XG+------ * ASG ref | |
[000109] D------N---- +--* LCL_VAR ref V07 tmp2 | |
[000124] ---XG------- \--* IND ref | |
[000110] ---XG------- \--* COMMA byref Zero Fseq[Value] | |
[000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void | |
[000113] ------------ | +--* LCL_VAR int V01 loc0 | |
[000111] ---X-------- | \--* ARR_LENGTH int | |
[000112] ------------ | \--* LCL_VAR ref V02 loc1 | |
[000115] ----G------- \--* ADDR byref | |
[000116] a---G--N---- \--* IND struct | |
[000117] ------------ \--* ADD byref | |
[000118] ------------ +--* LCL_VAR ref V02 loc1 | |
[000119] ------------ \--* ADD int | |
[000120] ------------ +--* LSH int | |
[000121] i----------- | +--* LCL_VAR int V01 loc0 | |
[000122] -------N---- | \--* CNS_INT int 2 | |
[000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
New refCnts for V07: refCnt = 1, refCntWtd = 1 | |
New refCnts for V01: refCnt = 4, refCntWtd = 4 | |
New refCnts for V02: refCnt = 3, refCntWtd = 3 | |
New refCnts for V02: refCnt = 4, refCntWtd = 4 | |
New refCnts for V01: refCnt = 5, refCntWtd = 5 | |
STMT00006 (IL 0x039...0x03E) | |
[000038] -A---+------ * ASG int | |
[000037] D----+-N---- +--* LCL_VAR int V05 tmp0 | |
[000036] #----+------ \--* IND int | |
[000035] -----+------ \--* LCL_VAR ref V00 this | |
New refCnts for V05: refCnt = 1, refCntWtd = 2 | |
New refCnts for V00: refCnt = 6, refCntWtd = 6 | |
STMT00014 (IL ???... ???) | |
[000160] ------------ * JTRUE void | |
[000051] J----+-N---- \--* EQ int | |
[000047] n----+------ +--* IND int | |
[000046] -----+------ | \--* ADD int | |
[000044] #----+------ | +--* IND int | |
[000043] #----+------ | | \--* IND int | |
[000042] -----+------ | | \--* ADD int | |
[000040] -----+------ | | +--* LCL_VAR int V05 tmp0 | |
[000041] -----+------ | | \--* CNS_INT int 32 | |
[000045] -----+------ | \--* CNS_INT int 12 | |
[000050] -----+------ \--* CNS_INT int 0 | |
New refCnts for V05: refCnt = 2, refCntWtd = 4 | |
*** marking local variables in block BB03 (weight=0.25) | |
STMT00015 (IL ???... ???) | |
[000162] -A---------- * ASG int | |
[000161] D------N---- +--* LCL_VAR int V06 tmp1 | |
[000052] n----+?----- \--* IND int | |
[000053] -----+?----- \--* ADD int | |
[000054] #----+?----- +--* IND int | |
[000055] #----+?----- | \--* IND int | |
[000056] -----+?----- | \--* ADD int | |
[000057] -----+?----- | +--* LCL_VAR int V05 tmp0 | |
[000058] -----+?----- | \--* CNS_INT int 32 | |
[000059] -----+?----- \--* CNS_INT int 12 | |
New refCnts for V06: refCnt = 1, refCntWtd = 0.50 | |
New refCnts for V05: refCnt = 3, refCntWtd = 4.50 | |
*** marking local variables in block BB04 (weight=0.25) | |
STMT00016 (IL ???... ???) | |
[000164] -AC-G------- * ASG int | |
[000163] D------N---- +--* LCL_VAR int V06 tmp1 | |
[000049] --C-G+?----- \--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
[000039] -----+?----- arg0 in ecx +--* LCL_VAR int V05 tmp0 | |
[000048] -----+?----- arg1 in edx \--* CNS_INT(h) int 0x8A93EB8 token | |
New refCnts for V06: refCnt = 2, refCntWtd = 1 | |
New refCnts for V05: refCnt = 4, refCntWtd = 5 | |
*** marking local variables in block BB05 (weight=1 ) | |
STMT00011 (IL 0x040...0x045) | |
[000130] -A---+------ * ASG ref | |
[000128] D------N---- +--* LCL_VAR ref V08 tmp3 | |
[000129] ------------ \--* CNS_INT ref null | |
New refCnts for V08: refCnt = 1, refCntWtd = 1 | |
STMT00012 (IL ???...0x04B) | |
[000159] -A-XG+------ * ASG ref | |
[000157] *--XG--N---- +--* IND ref | |
[000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] | |
[000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void | |
[000146] ------------ | | +--* LCL_VAR int V01 loc0 | |
[000144] ---X-------- | | \--* ARR_LENGTH int | |
[000145] ------------ | | \--* LCL_VAR ref V02 loc1 | |
[000148] ----G------- | \--* ADDR byref | |
[000149] a---G------- | \--* IND struct | |
[000150] ------------ | \--* ADD byref | |
[000151] ------------ | +--* LCL_VAR ref V02 loc1 | |
[000152] ------------ | \--* ADD int | |
[000153] ------------ | +--* LSH int | |
[000154] i----------- | | +--* LCL_VAR int V01 loc0 | |
[000155] -------N---- | | \--* CNS_INT int 2 | |
[000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
[000158] ------------ \--* LCL_VAR ref V08 tmp3 | |
New refCnts for V01: refCnt = 6, refCntWtd = 6 | |
New refCnts for V02: refCnt = 5, refCntWtd = 5 | |
New refCnts for V02: refCnt = 6, refCntWtd = 6 | |
New refCnts for V01: refCnt = 7, refCntWtd = 7 | |
New refCnts for V08: refCnt = 2, refCntWtd = 2 | |
STMT00010 (IL 0x050...0x051) | |
[000071] -----+------ * RETURN ref | |
[000070] -----+------ \--* LCL_VAR ref V07 tmp2 | |
New refCnts for V07: refCnt = 2, refCntWtd = 2 | |
*** marking local variables in block BB06 (weight=0 ) | |
STMT00013 (IL 0x016...0x017) | |
[000083] --CXG+------ * CALL void Stack`1.ThrowForEmptyStack | |
[000082] -----+------ this in ecx \--* LCL_VAR ref V00 this | |
New refCnts for V00: refCnt = 7, refCntWtd = 6 | |
*** lvaComputeRefCounts -- implicit counts *** | |
New refCnts for V00: refCnt = 8, refCntWtd = 7 | |
New refCnts for V00: refCnt = 9, refCntWtd = 8 | |
*************** 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 17 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..016)-> BB06 ( cond ) i label target idxlen | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen | |
BB03 [0009] 1 BB02 0.25 [???..???)-> BB05 (always) i | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
***** BB01 | |
STMT00000 (IL 0x000...0x008) | |
N008 ( 6, 6) [000005] -A-XG---R--- * ASG int | |
N007 ( 1, 1) [000004] D------N---- +--* LCL_VAR int V01 loc0 | |
N006 ( 6, 6) [000003] ---XG------- \--* ADD int | |
N004 ( 4, 4) [000001] ---XG------- +--* IND int | |
N003 ( 2, 2) [000088] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000000] ------------ | +--* LCL_VAR ref V00 this | |
N002 ( 1, 1) [000087] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
N005 ( 1, 1) [000002] ------------ \--* CNS_INT int -1 | |
***** BB01 | |
STMT00001 (IL 0x009...0x00F) | |
N006 ( 4, 4) [000009] -A-XG---R--- * ASG ref | |
N005 ( 1, 1) [000008] D------N---- +--* LCL_VAR ref V02 loc1 | |
N004 ( 4, 4) [000007] ---XG------- \--* IND ref | |
N003 ( 2, 2) [000090] -------N---- \--* ADD byref | |
N001 ( 1, 1) [000006] ------------ +--* LCL_VAR ref V00 this | |
N002 ( 1, 1) [000089] ------------ \--* CNS_INT int 4 field offset Fseq[_array] | |
***** BB01 | |
STMT00002 (IL 0x010...0x014) | |
N005 ( 7, 7) [000014] ---X-------- * JTRUE void | |
N004 ( 5, 5) [000013] N--X---N-U-- \--* LE int | |
N002 ( 3, 3) [000012] ---X-------- +--* ARR_LENGTH int | |
N001 ( 1, 1) [000011] ------------ | \--* LCL_VAR ref V02 loc1 | |
N003 ( 1, 1) [000010] ------------ \--* LCL_VAR int V01 loc0 | |
------------ BB02 [01C..040) -> BB04 (cond), preds={BB01} succs={BB03,BB04} | |
***** BB02 | |
STMT00003 (IL 0x01C...0x025) | |
N011 ( 11, 11) [000021] -A-XG---R--- * ASG int | |
N010 ( 4, 4) [000020] ---XG--N---- +--* IND int | |
N009 ( 2, 2) [000093] -------N---- | \--* ADD byref | |
N007 ( 1, 1) [000015] ------------ | +--* LCL_VAR ref V00 this | |
N008 ( 1, 1) [000092] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
N006 ( 6, 6) [000019] ---XG------- \--* ADD int | |
N004 ( 4, 4) [000017] ---XG------- +--* IND int | |
N003 ( 2, 2) [000095] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000016] ------------ | +--* LCL_VAR ref V00 this | |
N002 ( 1, 1) [000094] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
N005 ( 1, 1) [000018] ------------ \--* CNS_INT int 1 | |
***** BB02 | |
STMT00004 (IL 0x02A...0x02C) | |
N006 ( 6, 6) [000025] -A-XG------- * ASG int | |
N004 ( 4, 4) [000024] ---XG--N---- +--* IND int | |
N003 ( 2, 2) [000097] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000022] ------------ | +--* LCL_VAR ref V00 this | |
N002 ( 1, 1) [000096] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
N005 ( 1, 1) [000023] ------------ \--* LCL_VAR int V01 loc0 | |
***** BB02 | |
STMT00005 (IL 0x031...0x038) | |
N017 ( 24, 25) [000125] -A-XG---R--- * ASG ref | |
N016 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 | |
N015 ( 20, 22) [000124] ---XG------- \--* IND ref | |
N014 ( 17, 20) [000110] ---XG------- \--* COMMA byref Zero Fseq[Value] | |
N004 ( 8, 11) [000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void | |
N001 ( 1, 1) [000113] ------------ | +--* LCL_VAR int V01 loc0 | |
N003 ( 3, 3) [000111] ---X-------- | \--* ARR_LENGTH int | |
N002 ( 1, 1) [000112] ------------ | \--* LCL_VAR ref V02 loc1 | |
N013 ( 9, 9) [000115] ----G------- \--* ADDR byref | |
N012 ( 5, 5) [000116] a---G--N---- \--* IND struct | |
N011 ( 4, 4) [000117] -------N---- \--* ADD byref | |
N005 ( 1, 1) [000118] ------------ +--* LCL_VAR ref V02 loc1 | |
N010 ( 3, 3) [000119] -------N---- \--* ADD int | |
N008 ( 2, 2) [000120] -------N---- +--* LSH int | |
N006 ( 1, 1) [000121] i----------- | +--* LCL_VAR int V01 loc0 | |
N007 ( 1, 1) [000122] -------N---- | \--* CNS_INT int 2 | |
N009 ( 1, 1) [000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
***** BB02 | |
STMT00006 (IL 0x039...0x03E) | |
N004 ( 3, 3) [000038] -A---O--R--- * ASG int | |
N003 ( 1, 1) [000037] D------N---- +--* LCL_VAR int V05 tmp0 | |
N002 ( 3, 2) [000036] #----O------ \--* IND int | |
N001 ( 1, 1) [000035] ------------ \--* LCL_VAR ref V00 this | |
***** BB02 | |
STMT00014 (IL ???... ???) | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
N010 ( 12, 11) [000051] J------N---- \--* EQ int | |
N008 ( 10, 9) [000047] n----------- +--* IND int | |
N007 ( 8, 7) [000046] -------N---- | \--* ADD int | |
N005 ( 7, 6) [000044] #----------- | +--* IND int | |
N004 ( 4, 4) [000043] #----------- | | \--* IND int | |
N003 ( 2, 2) [000042] -------N---- | | \--* ADD int | |
N001 ( 1, 1) [000040] ------------ | | +--* LCL_VAR int V05 tmp0 | |
N002 ( 1, 1) [000041] ------------ | | \--* CNS_INT int 32 | |
N006 ( 1, 1) [000045] ------------ | \--* CNS_INT int 12 | |
N009 ( 1, 1) [000050] ------------ \--* CNS_INT int 0 | |
------------ BB03 [???..???) -> BB05 (always), preds={BB02} succs={BB05} | |
***** BB03 | |
STMT00015 (IL ???... ???) | |
N010 ( 14, 12) [000162] -A------R--- * ASG int | |
N009 ( 3, 2) [000161] D------N---- +--* LCL_VAR int V06 tmp1 | |
N008 ( 10, 9) [000052] n-----?----- \--* IND int | |
N007 ( 8, 7) [000053] ------?N---- \--* ADD int | |
N005 ( 7, 6) [000054] #-----?----- +--* IND int | |
N004 ( 4, 4) [000055] #-----?----- | \--* IND int | |
N003 ( 2, 2) [000056] ------?N---- | \--* ADD int | |
N001 ( 1, 1) [000057] ------?----- | +--* LCL_VAR int V05 tmp0 | |
N002 ( 1, 1) [000058] ------?----- | \--* CNS_INT int 32 | |
N006 ( 1, 1) [000059] ------?----- \--* CNS_INT int 12 | |
------------ BB04 [???..???), preds={BB02} succs={BB05} | |
***** BB04 | |
STMT00016 (IL ???... ???) | |
N007 ( 20, 15) [000164] -AC-G---R--- * ASG int | |
N006 ( 3, 2) [000163] D------N---- +--* LCL_VAR int V06 tmp1 | |
N005 ( 16, 12) [000049] --C-G-?----- \--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
N003 ( 1, 1) [000039] ------?----- arg0 in ecx +--* LCL_VAR int V05 tmp0 | |
N004 ( 1, 4) [000048] ------?----- arg1 in edx \--* CNS_INT(h) int 0x8A93EB8 token | |
------------ BB05 [040..052) (return), preds={BB04,BB03} succs={} | |
***** BB05 | |
STMT00011 (IL 0x040...0x045) | |
N003 ( 5, 4) [000130] -A------R--- * ASG ref | |
N002 ( 3, 2) [000128] D------N---- +--* LCL_VAR ref V08 tmp3 | |
N001 ( 1, 1) [000129] ------------ \--* CNS_INT ref null | |
***** BB05 | |
STMT00012 (IL ???...0x04B) | |
N017 ( 24, 25) [000159] -A-XG------- * ASG ref | |
N015 ( 20, 22) [000157] *--XG--N---- +--* IND ref | |
N014 ( 17, 20) [000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] | |
N004 ( 8, 11) [000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void | |
N001 ( 1, 1) [000146] ------------ | | +--* LCL_VAR int V01 loc0 | |
N003 ( 3, 3) [000144] ---X-------- | | \--* ARR_LENGTH int | |
N002 ( 1, 1) [000145] ------------ | | \--* LCL_VAR ref V02 loc1 | |
N013 ( 9, 9) [000148] ----G------- | \--* ADDR byref | |
N012 ( 5, 5) [000149] a---G------- | \--* IND struct | |
N011 ( 4, 4) [000150] -------N---- | \--* ADD byref | |
N005 ( 1, 1) [000151] ------------ | +--* LCL_VAR ref V02 loc1 | |
N010 ( 3, 3) [000152] -------N---- | \--* ADD int | |
N008 ( 2, 2) [000153] -------N---- | +--* LSH int | |
N006 ( 1, 1) [000154] i----------- | | +--* LCL_VAR int V01 loc0 | |
N007 ( 1, 1) [000155] -------N---- | | \--* CNS_INT int 2 | |
N009 ( 1, 1) [000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
N016 ( 3, 2) [000158] ------------ \--* LCL_VAR ref V08 tmp3 | |
***** BB05 | |
STMT00010 (IL 0x050...0x051) | |
N002 ( 4, 3) [000071] ------------ * RETURN ref | |
N001 ( 3, 2) [000070] ------------ \--* LCL_VAR ref V07 tmp2 | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
***** BB06 | |
STMT00013 (IL 0x016...0x017) | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack | |
N002 ( 1, 1) [000082] ------------ this in ecx \--* LCL_VAR ref V00 this | |
------------------------------------------------------------------------------------------------------------------- | |
*************** 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..016)-> BB06 ( cond ) i label target idxlen | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen | |
BB03 [0009] 1 BB02 0.25 [???..???)-> BB05 (always) i | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
[SsaBuilder] Topologically sorted the graph. | |
[SsaBuilder::ComputeImmediateDom] | |
Inside fgBuildDomTree | |
After computing the Dominance Tree: | |
BB01 : BB06 BB02 | |
BB02 : BB05 BB04 BB03 | |
*************** In fgLocalVarLiveness() | |
In fgLocalVarLivenessInit | |
Tracked variable (7 out of 9) table: | |
V00 this [ ref]: refCnt = 9, refCntWtd = 8 | |
V01 loc0 [ int]: refCnt = 7, refCntWtd = 7 | |
V02 loc1 [ ref]: refCnt = 6, refCntWtd = 6 | |
V05 tmp0 [ int]: refCnt = 4, refCntWtd = 5 | |
V07 tmp2 [ ref]: refCnt = 2, refCntWtd = 2 | |
V08 tmp3 [ ref]: refCnt = 2, refCntWtd = 2 | |
V06 tmp1 [ int]: refCnt = 2, refCntWtd = 1 | |
*************** In fgPerBlockLocalVarLiveness() | |
BB01 USE(1)={V00 } + ByrefExposed + GcHeap | |
DEF(2)={ V01 V02} | |
BB02 USE(3)={V00 V01 V02 } + ByrefExposed + GcHeap | |
DEF(2)={ V05 V07} + ByrefExposed + GcHeap | |
BB03 USE(1)={V05 } + ByrefExposed + GcHeap | |
DEF(1)={ V06} | |
BB04 USE(1)={V05 } | |
DEF(1)={ V06} | |
BB05 USE(3)={V01 V02 V07 } + ByrefExposed + GcHeap | |
DEF(1)={ V08} + ByrefExposed + GcHeap | |
BB06 USE(1)={V00} + ByrefExposed + GcHeap | |
DEF(0)={ } + ByrefExposed* + GcHeap* | |
** Memory liveness computed, GcHeap states and ByrefExposed states match | |
*************** In fgInterBlockLocalVarLiveness() | |
BB liveness after fgLiveVarAnalysis(): | |
BB01 IN (1)={V00 } + ByrefExposed + GcHeap | |
OUT(3)={V00 V01 V02} + ByrefExposed + GcHeap | |
BB02 IN (3)={V00 V01 V02 } + ByrefExposed + GcHeap | |
OUT(4)={ V01 V02 V05 V07} + ByrefExposed + GcHeap | |
BB03 IN (4)={V01 V02 V05 V07} + ByrefExposed + GcHeap | |
OUT(3)={V01 V02 V07} + ByrefExposed + GcHeap | |
BB04 IN (4)={V01 V02 V05 V07} + ByrefExposed + GcHeap | |
OUT(3)={V01 V02 V07} + ByrefExposed + GcHeap | |
BB05 IN (3)={V01 V02 V07} + ByrefExposed + GcHeap | |
OUT(0)={ } | |
BB06 IN (1)={V00} + ByrefExposed + GcHeap | |
OUT(0)={ } | |
top level assign | |
removing stmt with no side effects | |
Removing statement STMT00015 (IL ???... ???) | |
N010 ( 14, 12) [000162] -A------R--- * ASG int | |
N009 ( 3, 2) [000161] D------N---- +--* LCL_VAR int V06 tmp1 | |
N008 ( 10, 9) [000052] n-----?----- \--* IND int | |
N007 ( 8, 7) [000053] ------?N---- \--* ADD int | |
N005 ( 7, 6) [000054] #-----?----- +--* IND int | |
N004 ( 4, 4) [000055] #-----?----- | \--* IND int | |
N003 ( 2, 2) [000056] ------?N---- | \--* ADD int | |
N001 ( 1, 1) [000057] ------?----- | +--* LCL_VAR int V05 tmp0 | |
N002 ( 1, 1) [000058] ------?----- | \--* CNS_INT int 32 | |
N006 ( 1, 1) [000059] ------?----- \--* CNS_INT int 12 | |
in BB03 as useless: | |
BB03 becomes empty | |
BB04 - Dead assignment has side effects... | |
N007 ( 20, 15) [000164] -AC-G---R--- * ASG int | |
N006 ( 3, 2) [000163] D------N---- +--* LCL_VAR int V06 tmp1 | |
N005 ( 16, 12) [000049] --C-G-?----- \--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
N003 ( 1, 1) [000039] ------?----- arg0 in ecx +--* LCL_VAR int V05 tmp0 | |
N004 ( 1, 4) [000048] ------?----- arg1 in edx \--* CNS_INT(h) int 0x8A93EB8 token | |
top level assign | |
removing stmt with no side effects | |
Removing statement STMT00016 (IL ???... ???) | |
N007 ( 20, 15) [000164] -AC-G---R--- * ASG int | |
N006 ( 3, 2) [000163] D------N---- +--* LCL_VAR int V06 tmp1 | |
N005 ( 16, 12) [000049] --C-G-?----- \--* CALL help int HELPER.CORINFO_HELP_RUNTIMEHANDLE_CLASS | |
N003 ( 1, 1) [000039] ------?----- arg0 in ecx +--* LCL_VAR int V05 tmp0 | |
N004 ( 1, 4) [000048] ------?----- arg1 in edx \--* CNS_INT(h) int 0x8A93EB8 token | |
in BB04 as useless: | |
BB04 becomes empty | |
*************** In fgPerBlockLocalVarLiveness() | |
BB01 USE(1)={V00 } + ByrefExposed + GcHeap | |
DEF(2)={ V01 V02} | |
BB02 USE(3)={V00 V01 V02 } + ByrefExposed + GcHeap | |
DEF(2)={ V05 V07} + ByrefExposed + GcHeap | |
BB03 USE(0)={} | |
DEF(0)={} | |
BB04 USE(0)={} | |
DEF(0)={} | |
BB05 USE(3)={V01 V02 V07 } + ByrefExposed + GcHeap | |
DEF(1)={ V08} + ByrefExposed + GcHeap | |
BB06 USE(1)={V00} + ByrefExposed + GcHeap | |
DEF(0)={ } + ByrefExposed* + GcHeap* | |
** Memory liveness computed, GcHeap states and ByrefExposed states match | |
*************** In fgInterBlockLocalVarLiveness() | |
BB liveness after fgLiveVarAnalysis(): | |
BB01 IN (1)={V00 } + ByrefExposed + GcHeap | |
OUT(3)={V00 V01 V02} + ByrefExposed + GcHeap | |
BB02 IN (3)={V00 V01 V02 } + ByrefExposed + GcHeap | |
OUT(3)={ V01 V02 V07} + ByrefExposed + GcHeap | |
BB03 IN (3)={V01 V02 V07} + ByrefExposed + GcHeap | |
OUT(3)={V01 V02 V07} + ByrefExposed + GcHeap | |
BB04 IN (3)={V01 V02 V07} + ByrefExposed + GcHeap | |
OUT(3)={V01 V02 V07} + ByrefExposed + GcHeap | |
BB05 IN (3)={V01 V02 V07} + ByrefExposed + GcHeap | |
OUT(0)={ } | |
BB06 IN (1)={V00} + ByrefExposed + GcHeap | |
OUT(0)={ } | |
*************** 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..016)-> BB06 ( cond ) i label target idxlen | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen | |
BB03 [0009] 1 BB02 0.25 [???..???)-> BB05 (always) i | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
***** BB01 | |
STMT00000 (IL 0x000...0x008) | |
N008 ( 6, 6) [000005] -A-XG---R--- * ASG int | |
N007 ( 1, 1) [000004] D------N---- +--* LCL_VAR int V01 loc0 d:1 | |
N006 ( 6, 6) [000003] ---XG------- \--* ADD int | |
N004 ( 4, 4) [000001] ---XG------- +--* IND int | |
N003 ( 2, 2) [000088] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000000] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000087] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
N005 ( 1, 1) [000002] ------------ \--* CNS_INT int -1 | |
***** BB01 | |
STMT00001 (IL 0x009...0x00F) | |
N006 ( 4, 4) [000009] -A-XG---R--- * ASG ref | |
N005 ( 1, 1) [000008] D------N---- +--* LCL_VAR ref V02 loc1 d:1 | |
N004 ( 4, 4) [000007] ---XG------- \--* IND ref | |
N003 ( 2, 2) [000090] -------N---- \--* ADD byref | |
N001 ( 1, 1) [000006] ------------ +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000089] ------------ \--* CNS_INT int 4 field offset Fseq[_array] | |
***** BB01 | |
STMT00002 (IL 0x010...0x014) | |
N005 ( 7, 7) [000014] ---X-------- * JTRUE void | |
N004 ( 5, 5) [000013] N--X---N-U-- \--* LE int | |
N002 ( 3, 3) [000012] ---X-------- +--* ARR_LENGTH int | |
N001 ( 1, 1) [000011] ------------ | \--* LCL_VAR ref V02 loc1 u:1 | |
N003 ( 1, 1) [000010] ------------ \--* LCL_VAR int V01 loc0 u:1 | |
------------ BB02 [01C..040) -> BB04 (cond), preds={BB01} succs={BB03,BB04} | |
***** BB02 | |
STMT00003 (IL 0x01C...0x025) | |
N011 ( 11, 11) [000021] -A-XG---R--- * ASG int | |
N010 ( 4, 4) [000020] D--XG--N---- +--* IND int | |
N009 ( 2, 2) [000093] -------N---- | \--* ADD byref | |
N007 ( 1, 1) [000015] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N008 ( 1, 1) [000092] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
N006 ( 6, 6) [000019] ---XG------- \--* ADD int | |
N004 ( 4, 4) [000017] ---XG------- +--* IND int | |
N003 ( 2, 2) [000095] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000016] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000094] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
N005 ( 1, 1) [000018] ------------ \--* CNS_INT int 1 | |
***** BB02 | |
STMT00004 (IL 0x02A...0x02C) | |
N006 ( 6, 6) [000025] -A-XG------- * ASG int | |
N004 ( 4, 4) [000024] D--XG--N---- +--* IND int | |
N003 ( 2, 2) [000097] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000022] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000096] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
N005 ( 1, 1) [000023] ------------ \--* LCL_VAR int V01 loc0 u:1 | |
***** BB02 | |
STMT00005 (IL 0x031...0x038) | |
N017 ( 24, 25) [000125] -A-XG---R--- * ASG ref | |
N016 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 | |
N015 ( 20, 22) [000124] ---XG------- \--* IND ref | |
N014 ( 17, 20) [000110] ---XG------- \--* COMMA byref Zero Fseq[Value] | |
N004 ( 8, 11) [000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void | |
N001 ( 1, 1) [000113] ------------ | +--* LCL_VAR int V01 loc0 u:1 | |
N003 ( 3, 3) [000111] ---X-------- | \--* ARR_LENGTH int | |
N002 ( 1, 1) [000112] ------------ | \--* LCL_VAR ref V02 loc1 u:1 | |
N013 ( 9, 9) [000115] ----G------- \--* ADDR byref | |
N012 ( 5, 5) [000116] a---G--N---- \--* IND struct | |
N011 ( 4, 4) [000117] -------N---- \--* ADD byref | |
N005 ( 1, 1) [000118] ------------ +--* LCL_VAR ref V02 loc1 u:1 | |
N010 ( 3, 3) [000119] -------N---- \--* ADD int | |
N008 ( 2, 2) [000120] -------N---- +--* LSH int | |
N006 ( 1, 1) [000121] i----------- | +--* LCL_VAR int V01 loc0 u:1 | |
N007 ( 1, 1) [000122] -------N---- | \--* CNS_INT int 2 | |
N009 ( 1, 1) [000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
***** BB02 | |
STMT00006 (IL 0x039...0x03E) | |
N004 ( 3, 3) [000038] -A---O--R--- * ASG int | |
N003 ( 1, 1) [000037] D------N---- +--* LCL_VAR int V05 tmp0 d:1 | |
N002 ( 3, 2) [000036] #----O------ \--* IND int | |
N001 ( 1, 1) [000035] ------------ \--* LCL_VAR ref V00 this u:1 (last use) | |
***** BB02 | |
STMT00014 (IL ???... ???) | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
N010 ( 12, 11) [000051] J------N---- \--* EQ int | |
N008 ( 10, 9) [000047] n----------- +--* IND int | |
N007 ( 8, 7) [000046] -------N---- | \--* ADD int | |
N005 ( 7, 6) [000044] #----------- | +--* IND int | |
N004 ( 4, 4) [000043] #----------- | | \--* IND int | |
N003 ( 2, 2) [000042] -------N---- | | \--* ADD int | |
N001 ( 1, 1) [000040] ------------ | | +--* LCL_VAR int V05 tmp0 u:1 (last use) | |
N002 ( 1, 1) [000041] ------------ | | \--* CNS_INT int 32 | |
N006 ( 1, 1) [000045] ------------ | \--* CNS_INT int 12 | |
N009 ( 1, 1) [000050] ------------ \--* CNS_INT int 0 | |
------------ BB03 [???..???) -> BB05 (always), preds={BB02} succs={BB05} | |
------------ BB04 [???..???), preds={BB02} succs={BB05} | |
------------ BB05 [040..052) (return), preds={BB04,BB03} succs={} | |
***** BB05 | |
STMT00011 (IL 0x040...0x045) | |
N003 ( 5, 4) [000130] -A------R--- * ASG ref | |
N002 ( 3, 2) [000128] D------N---- +--* LCL_VAR ref V08 tmp3 d:1 | |
N001 ( 1, 1) [000129] ------------ \--* CNS_INT ref null | |
***** BB05 | |
STMT00012 (IL ???...0x04B) | |
N017 ( 24, 25) [000159] -A-XG------- * ASG ref | |
N015 ( 20, 22) [000157] *--XG--N---- +--* IND ref | |
N014 ( 17, 20) [000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] | |
N004 ( 8, 11) [000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void | |
N001 ( 1, 1) [000146] ------------ | | +--* LCL_VAR int V01 loc0 u:1 | |
N003 ( 3, 3) [000144] ---X-------- | | \--* ARR_LENGTH int | |
N002 ( 1, 1) [000145] ------------ | | \--* LCL_VAR ref V02 loc1 u:1 | |
N013 ( 9, 9) [000148] ----G------- | \--* ADDR byref | |
N012 ( 5, 5) [000149] a---G------- | \--* IND struct | |
N011 ( 4, 4) [000150] -------N---- | \--* ADD byref | |
N005 ( 1, 1) [000151] ------------ | +--* LCL_VAR ref V02 loc1 u:1 (last use) | |
N010 ( 3, 3) [000152] -------N---- | \--* ADD int | |
N008 ( 2, 2) [000153] -------N---- | +--* LSH int | |
N006 ( 1, 1) [000154] i----------- | | +--* LCL_VAR int V01 loc0 u:1 (last use) | |
N007 ( 1, 1) [000155] -------N---- | | \--* CNS_INT int 2 | |
N009 ( 1, 1) [000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
N016 ( 3, 2) [000158] ------------ \--* LCL_VAR ref V08 tmp3 u:1 (last use) | |
***** BB05 | |
STMT00010 (IL 0x050...0x051) | |
N002 ( 4, 3) [000071] ------------ * RETURN ref | |
N001 ( 3, 2) [000070] ------------ \--* LCL_VAR ref V07 tmp2 u:1 (last use) | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
***** BB06 | |
STMT00013 (IL 0x016...0x017) | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack | |
N002 ( 1, 1) [000082] ------------ this in ecx \--* LCL_VAR ref V00 this u:1 (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..016)-> BB06 ( cond ) i label target idxlen | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen | |
BB03 [0009] 1 BB02 0.25 [???..???)-> BB05 (always) i | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
***** BB01 | |
STMT00000 (IL 0x000...0x008) | |
N008 ( 6, 6) [000005] -A-XG---R--- * ASG int | |
N007 ( 1, 1) [000004] D------N---- +--* LCL_VAR int V01 loc0 d:1 | |
N006 ( 6, 6) [000003] ---XG------- \--* ADD int | |
N004 ( 4, 4) [000001] ---XG------- +--* IND int | |
N003 ( 2, 2) [000088] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000000] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000087] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
N005 ( 1, 1) [000002] ------------ \--* CNS_INT int -1 | |
***** BB01 | |
STMT00001 (IL 0x009...0x00F) | |
N006 ( 4, 4) [000009] -A-XG---R--- * ASG ref | |
N005 ( 1, 1) [000008] D------N---- +--* LCL_VAR ref V02 loc1 d:1 | |
N004 ( 4, 4) [000007] ---XG------- \--* IND ref | |
N003 ( 2, 2) [000090] -------N---- \--* ADD byref | |
N001 ( 1, 1) [000006] ------------ +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000089] ------------ \--* CNS_INT int 4 field offset Fseq[_array] | |
***** BB01 | |
STMT00002 (IL 0x010...0x014) | |
N005 ( 7, 7) [000014] ---X-------- * JTRUE void | |
N004 ( 5, 5) [000013] N--X---N-U-- \--* LE int | |
N002 ( 3, 3) [000012] ---X-------- +--* ARR_LENGTH int | |
N001 ( 1, 1) [000011] ------------ | \--* LCL_VAR ref V02 loc1 u:1 | |
N003 ( 1, 1) [000010] ------------ \--* LCL_VAR int V01 loc0 u:1 | |
------------ BB02 [01C..040) -> BB04 (cond), preds={BB01} succs={BB03,BB04} | |
***** BB02 | |
STMT00003 (IL 0x01C...0x025) | |
N011 ( 11, 11) [000021] -A-XG---R--- * ASG int | |
N010 ( 4, 4) [000020] D--XG--N---- +--* IND int | |
N009 ( 2, 2) [000093] -------N---- | \--* ADD byref | |
N007 ( 1, 1) [000015] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N008 ( 1, 1) [000092] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
N006 ( 6, 6) [000019] ---XG------- \--* ADD int | |
N004 ( 4, 4) [000017] ---XG------- +--* IND int | |
N003 ( 2, 2) [000095] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000016] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000094] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
N005 ( 1, 1) [000018] ------------ \--* CNS_INT int 1 | |
***** BB02 | |
STMT00004 (IL 0x02A...0x02C) | |
N006 ( 6, 6) [000025] -A-XG------- * ASG int | |
N004 ( 4, 4) [000024] D--XG--N---- +--* IND int | |
N003 ( 2, 2) [000097] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000022] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000096] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
N005 ( 1, 1) [000023] ------------ \--* LCL_VAR int V01 loc0 u:1 | |
***** BB02 | |
STMT00005 (IL 0x031...0x038) | |
N017 ( 24, 25) [000125] -A-XG---R--- * ASG ref | |
N016 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 | |
N015 ( 20, 22) [000124] ---XG------- \--* IND ref | |
N014 ( 17, 20) [000110] ---XG------- \--* COMMA byref Zero Fseq[Value] | |
N004 ( 8, 11) [000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void | |
N001 ( 1, 1) [000113] ------------ | +--* LCL_VAR int V01 loc0 u:1 | |
N003 ( 3, 3) [000111] ---X-------- | \--* ARR_LENGTH int | |
N002 ( 1, 1) [000112] ------------ | \--* LCL_VAR ref V02 loc1 u:1 | |
N013 ( 9, 9) [000115] ----G------- \--* ADDR byref | |
N012 ( 5, 5) [000116] a---G--N---- \--* IND struct | |
N011 ( 4, 4) [000117] -------N---- \--* ADD byref | |
N005 ( 1, 1) [000118] ------------ +--* LCL_VAR ref V02 loc1 u:1 | |
N010 ( 3, 3) [000119] -------N---- \--* ADD int | |
N008 ( 2, 2) [000120] -------N---- +--* LSH int | |
N006 ( 1, 1) [000121] i----------- | +--* LCL_VAR int V01 loc0 u:1 | |
N007 ( 1, 1) [000122] -------N---- | \--* CNS_INT int 2 | |
N009 ( 1, 1) [000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
***** BB02 | |
STMT00006 (IL 0x039...0x03E) | |
N004 ( 3, 3) [000038] -A---O--R--- * ASG int | |
N003 ( 1, 1) [000037] D------N---- +--* LCL_VAR int V05 tmp0 d:1 | |
N002 ( 3, 2) [000036] #----O------ \--* IND int | |
N001 ( 1, 1) [000035] ------------ \--* LCL_VAR ref V00 this u:1 (last use) | |
***** BB02 | |
STMT00014 (IL ???... ???) | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
N010 ( 12, 11) [000051] J------N---- \--* EQ int | |
N008 ( 10, 9) [000047] n----------- +--* IND int | |
N007 ( 8, 7) [000046] -------N---- | \--* ADD int | |
N005 ( 7, 6) [000044] #----------- | +--* IND int | |
N004 ( 4, 4) [000043] #----------- | | \--* IND int | |
N003 ( 2, 2) [000042] -------N---- | | \--* ADD int | |
N001 ( 1, 1) [000040] ------------ | | +--* LCL_VAR int V05 tmp0 u:1 (last use) | |
N002 ( 1, 1) [000041] ------------ | | \--* CNS_INT int 32 | |
N006 ( 1, 1) [000045] ------------ | \--* CNS_INT int 12 | |
N009 ( 1, 1) [000050] ------------ \--* CNS_INT int 0 | |
------------ BB03 [???..???) -> BB05 (always), preds={BB02} succs={BB05} | |
------------ BB04 [???..???), preds={BB02} succs={BB05} | |
------------ BB05 [040..052) (return), preds={BB04,BB03} succs={} | |
***** BB05 | |
STMT00011 (IL 0x040...0x045) | |
N003 ( 5, 4) [000130] -A------R--- * ASG ref | |
N002 ( 3, 2) [000128] D------N---- +--* LCL_VAR ref V08 tmp3 d:1 | |
N001 ( 1, 1) [000129] ------------ \--* CNS_INT ref null | |
***** BB05 | |
STMT00012 (IL ???...0x04B) | |
N017 ( 24, 25) [000159] -A-XG------- * ASG ref | |
N015 ( 20, 22) [000157] *--XG--N---- +--* IND ref | |
N014 ( 17, 20) [000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] | |
N004 ( 8, 11) [000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void | |
N001 ( 1, 1) [000146] ------------ | | +--* LCL_VAR int V01 loc0 u:1 | |
N003 ( 3, 3) [000144] ---X-------- | | \--* ARR_LENGTH int | |
N002 ( 1, 1) [000145] ------------ | | \--* LCL_VAR ref V02 loc1 u:1 | |
N013 ( 9, 9) [000148] ----G------- | \--* ADDR byref | |
N012 ( 5, 5) [000149] a---G------- | \--* IND struct | |
N011 ( 4, 4) [000150] -------N---- | \--* ADD byref | |
N005 ( 1, 1) [000151] ------------ | +--* LCL_VAR ref V02 loc1 u:1 (last use) | |
N010 ( 3, 3) [000152] -------N---- | \--* ADD int | |
N008 ( 2, 2) [000153] -------N---- | +--* LSH int | |
N006 ( 1, 1) [000154] i----------- | | +--* LCL_VAR int V01 loc0 u:1 (last use) | |
N007 ( 1, 1) [000155] -------N---- | | \--* CNS_INT int 2 | |
N009 ( 1, 1) [000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
N016 ( 3, 2) [000158] ------------ \--* LCL_VAR ref V08 tmp3 u:1 (last use) | |
***** BB05 | |
STMT00010 (IL 0x050...0x051) | |
N002 ( 4, 3) [000071] ------------ * RETURN ref | |
N001 ( 3, 2) [000070] ------------ \--* LCL_VAR ref V07 tmp2 u:1 (last use) | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
***** BB06 | |
STMT00013 (IL 0x016...0x017) | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack | |
N002 ( 1, 1) [000082] ------------ this in ecx \--* LCL_VAR ref V00 this u:1 (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..016)-> BB06 ( cond ) i label target idxlen | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen | |
BB03 [0009] 1 BB02 0.25 [???..???)-> BB05 (always) i | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
***** BB01 | |
STMT00000 (IL 0x000...0x008) | |
N008 ( 6, 6) [000005] -A-XG---R--- * ASG int | |
N007 ( 1, 1) [000004] D------N---- +--* LCL_VAR int V01 loc0 d:1 | |
N006 ( 6, 6) [000003] ---XG------- \--* ADD int | |
N004 ( 4, 4) [000001] ---XG------- +--* IND int | |
N003 ( 2, 2) [000088] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000000] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000087] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
N005 ( 1, 1) [000002] ------------ \--* CNS_INT int -1 | |
***** BB01 | |
STMT00001 (IL 0x009...0x00F) | |
N006 ( 4, 4) [000009] -A-XG---R--- * ASG ref | |
N005 ( 1, 1) [000008] D------N---- +--* LCL_VAR ref V02 loc1 d:1 | |
N004 ( 4, 4) [000007] ---XG------- \--* IND ref | |
N003 ( 2, 2) [000090] -------N---- \--* ADD byref | |
N001 ( 1, 1) [000006] ------------ +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000089] ------------ \--* CNS_INT int 4 field offset Fseq[_array] | |
***** BB01 | |
STMT00002 (IL 0x010...0x014) | |
N005 ( 7, 7) [000014] ---X-------- * JTRUE void | |
N004 ( 5, 5) [000013] N--X---N-U-- \--* LE int | |
N002 ( 3, 3) [000012] ---X-------- +--* ARR_LENGTH int | |
N001 ( 1, 1) [000011] ------------ | \--* LCL_VAR ref V02 loc1 u:1 | |
N003 ( 1, 1) [000010] ------------ \--* LCL_VAR int V01 loc0 u:1 | |
------------ BB02 [01C..040) -> BB04 (cond), preds={BB01} succs={BB03,BB04} | |
***** BB02 | |
STMT00003 (IL 0x01C...0x025) | |
N011 ( 11, 11) [000021] -A-XG---R--- * ASG int | |
N010 ( 4, 4) [000020] D--XG--N---- +--* IND int | |
N009 ( 2, 2) [000093] -------N---- | \--* ADD byref | |
N007 ( 1, 1) [000015] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N008 ( 1, 1) [000092] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
N006 ( 6, 6) [000019] ---XG------- \--* ADD int | |
N004 ( 4, 4) [000017] ---XG------- +--* IND int | |
N003 ( 2, 2) [000095] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000016] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000094] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
N005 ( 1, 1) [000018] ------------ \--* CNS_INT int 1 | |
***** BB02 | |
STMT00004 (IL 0x02A...0x02C) | |
N006 ( 6, 6) [000025] -A-XG------- * ASG int | |
N004 ( 4, 4) [000024] D--XG--N---- +--* IND int | |
N003 ( 2, 2) [000097] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000022] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000096] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
N005 ( 1, 1) [000023] ------------ \--* LCL_VAR int V01 loc0 u:1 | |
***** BB02 | |
STMT00005 (IL 0x031...0x038) | |
N017 ( 24, 25) [000125] -A-XG---R--- * ASG ref | |
N016 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 | |
N015 ( 20, 22) [000124] ---XG------- \--* IND ref | |
N014 ( 17, 20) [000110] ---XG------- \--* COMMA byref Zero Fseq[Value] | |
N004 ( 8, 11) [000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void | |
N001 ( 1, 1) [000113] ------------ | +--* LCL_VAR int V01 loc0 u:1 | |
N003 ( 3, 3) [000111] ---X-------- | \--* ARR_LENGTH int | |
N002 ( 1, 1) [000112] ------------ | \--* LCL_VAR ref V02 loc1 u:1 | |
N013 ( 9, 9) [000115] ----G------- \--* ADDR byref | |
N012 ( 5, 5) [000116] a---G--N---- \--* IND struct | |
N011 ( 4, 4) [000117] -------N---- \--* ADD byref | |
N005 ( 1, 1) [000118] ------------ +--* LCL_VAR ref V02 loc1 u:1 | |
N010 ( 3, 3) [000119] -------N---- \--* ADD int | |
N008 ( 2, 2) [000120] -------N---- +--* LSH int | |
N006 ( 1, 1) [000121] i----------- | +--* LCL_VAR int V01 loc0 u:1 | |
N007 ( 1, 1) [000122] -------N---- | \--* CNS_INT int 2 | |
N009 ( 1, 1) [000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
***** BB02 | |
STMT00006 (IL 0x039...0x03E) | |
N004 ( 3, 3) [000038] -A---O--R--- * ASG int | |
N003 ( 1, 1) [000037] D------N---- +--* LCL_VAR int V05 tmp0 d:1 | |
N002 ( 3, 2) [000036] #----O------ \--* IND int | |
N001 ( 1, 1) [000035] ------------ \--* LCL_VAR ref V00 this u:1 (last use) | |
***** BB02 | |
STMT00014 (IL ???... ???) | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
N010 ( 12, 11) [000051] J------N---- \--* EQ int | |
N008 ( 10, 9) [000047] n----------- +--* IND int | |
N007 ( 8, 7) [000046] -------N---- | \--* ADD int | |
N005 ( 7, 6) [000044] #----------- | +--* IND int | |
N004 ( 4, 4) [000043] #----------- | | \--* IND int | |
N003 ( 2, 2) [000042] -------N---- | | \--* ADD int | |
N001 ( 1, 1) [000040] ------------ | | +--* LCL_VAR int V05 tmp0 u:1 (last use) | |
N002 ( 1, 1) [000041] ------------ | | \--* CNS_INT int 32 | |
N006 ( 1, 1) [000045] ------------ | \--* CNS_INT int 12 | |
N009 ( 1, 1) [000050] ------------ \--* CNS_INT int 0 | |
------------ BB03 [???..???) -> BB05 (always), preds={BB02} succs={BB05} | |
------------ BB04 [???..???), preds={BB02} succs={BB05} | |
------------ BB05 [040..052) (return), preds={BB04,BB03} succs={} | |
***** BB05 | |
STMT00011 (IL 0x040...0x045) | |
N003 ( 5, 4) [000130] -A------R--- * ASG ref | |
N002 ( 3, 2) [000128] D------N---- +--* LCL_VAR ref V08 tmp3 d:1 | |
N001 ( 1, 1) [000129] ------------ \--* CNS_INT ref null | |
***** BB05 | |
STMT00012 (IL ???...0x04B) | |
N017 ( 24, 25) [000159] -A-XG------- * ASG ref | |
N015 ( 20, 22) [000157] *--XG--N---- +--* IND ref | |
N014 ( 17, 20) [000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] | |
N004 ( 8, 11) [000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void | |
N001 ( 1, 1) [000146] ------------ | | +--* LCL_VAR int V01 loc0 u:1 | |
N003 ( 3, 3) [000144] ---X-------- | | \--* ARR_LENGTH int | |
N002 ( 1, 1) [000145] ------------ | | \--* LCL_VAR ref V02 loc1 u:1 | |
N013 ( 9, 9) [000148] ----G------- | \--* ADDR byref | |
N012 ( 5, 5) [000149] a---G------- | \--* IND struct | |
N011 ( 4, 4) [000150] -------N---- | \--* ADD byref | |
N005 ( 1, 1) [000151] ------------ | +--* LCL_VAR ref V02 loc1 u:1 (last use) | |
N010 ( 3, 3) [000152] -------N---- | \--* ADD int | |
N008 ( 2, 2) [000153] -------N---- | +--* LSH int | |
N006 ( 1, 1) [000154] i----------- | | +--* LCL_VAR int V01 loc0 u:1 (last use) | |
N007 ( 1, 1) [000155] -------N---- | | \--* CNS_INT int 2 | |
N009 ( 1, 1) [000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
N016 ( 3, 2) [000158] ------------ \--* LCL_VAR ref V08 tmp3 u:1 (last use) | |
***** BB05 | |
STMT00010 (IL 0x050...0x051) | |
N002 ( 4, 3) [000071] ------------ * RETURN ref | |
N001 ( 3, 2) [000070] ------------ \--* LCL_VAR ref V07 tmp2 u:1 (last use) | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
***** BB06 | |
STMT00013 (IL 0x016...0x017) | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack | |
N002 ( 1, 1) [000082] ------------ this in ecx \--* LCL_VAR ref V00 this u:1 (last use) | |
------------------------------------------------------------------------------------------------------------------- | |
*************** Finishing PHASE Early Value Propagation | |
*************** Starting PHASE Do value numbering | |
*************** In fgValueNumber() | |
Memory Initial Value in BB01 is: $81 | |
The SSA definition for ByrefExposed (#1) at start of BB01 is $81 {InitVal($41)} | |
The SSA definition for GcHeap (#1) at start of BB01 is $81 {InitVal($41)} | |
***** BB01, STMT00000(before) | |
N008 ( 6, 6) [000005] -A-XG---R--- * ASG int | |
N007 ( 1, 1) [000004] D------N---- +--* LCL_VAR int V01 loc0 d:1 | |
N006 ( 6, 6) [000003] ---XG------- \--* ADD int | |
N004 ( 4, 4) [000001] ---XG------- +--* IND int | |
N003 ( 2, 2) [000088] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000000] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000087] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
N005 ( 1, 1) [000002] ------------ \--* CNS_INT int -1 | |
N001 [000000] LCL_VAR V00 this u:1 => $80 {InitVal($40)} | |
N002 [000087] CNS_INT 8 field offset Fseq[_size] => $42 {IntCns 8} | |
N003 [000088] ADD => $c0 {ADD($42, $80)} | |
VNApplySelectors: | |
VNForHandle(_size) is $100, fieldType is int | |
VNForMapSelect($81, $100):int returns $140 {$81[$100]} | |
VNForMapSelect($140, $80):int returns $141 {$140[$80]} | |
N004 [000001] IND => <l:$143 {norm=$141 {$140[$80]}, exc=$1c0 {NullPtrExc($80)}}, c:$142 {norm=$180 {180}, exc=$1c0 {NullPtrExc($80)}}> | |
N005 [000002] CNS_INT -1 => $41 {IntCns -1} | |
N006 [000003] ADD => <l:$147 {norm=$145 {ADD($41, $141)}, exc=$1c0 {NullPtrExc($80)}}, c:$146 {norm=$144 {ADD($41, $180)}, exc=$1c0 {NullPtrExc($80)}}> | |
N007 [000004] LCL_VAR V01 loc0 d:1 => <l:$145 {ADD($41, $141)}, c:$144 {ADD($41, $180)}> | |
N008 [000005] ASG => <l:$147 {norm=$145 {ADD($41, $141)}, exc=$1c0 {NullPtrExc($80)}}, c:$146 {norm=$144 {ADD($41, $180)}, exc=$1c0 {NullPtrExc($80)}}> | |
***** BB01, STMT00000(after) | |
N008 ( 6, 6) [000005] -A-XG---R--- * ASG int <l:$147, c:$146> | |
N007 ( 1, 1) [000004] D------N---- +--* LCL_VAR int V01 loc0 d:1 <l:$145, c:$144> | |
N006 ( 6, 6) [000003] ---XG------- \--* ADD int <l:$147, c:$146> | |
N004 ( 4, 4) [000001] ---XG------- +--* IND int <l:$143, c:$142> | |
N003 ( 2, 2) [000088] -------N---- | \--* ADD byref $c0 | |
N001 ( 1, 1) [000000] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000087] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] $42 | |
N005 ( 1, 1) [000002] ------------ \--* CNS_INT int -1 $41 | |
--------- | |
***** BB01, STMT00001(before) | |
N006 ( 4, 4) [000009] -A-XG---R--- * ASG ref | |
N005 ( 1, 1) [000008] D------N---- +--* LCL_VAR ref V02 loc1 d:1 | |
N004 ( 4, 4) [000007] ---XG------- \--* IND ref | |
N003 ( 2, 2) [000090] -------N---- \--* ADD byref | |
N001 ( 1, 1) [000006] ------------ +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000089] ------------ \--* CNS_INT int 4 field offset Fseq[_array] | |
N001 [000006] LCL_VAR V00 this u:1 => $80 {InitVal($40)} | |
N002 [000089] CNS_INT 4 field offset Fseq[_array] => $43 {IntCns 4} | |
N003 [000090] ADD => $c1 {ADD($43, $80)} | |
VNApplySelectors: | |
VNForHandle(_array) is $101, fieldType is ref | |
VNForMapSelect($81, $101):ref returns $1c1 {$81[$101]} | |
VNForMapSelect($1c1, $80):ref returns $1c2 {$1c1[$80]} | |
N004 [000007] IND => <l:$1c4 {norm=$1c2 {$1c1[$80]}, exc=$1c0 {NullPtrExc($80)}}, c:$1c3 {norm=$200 {200}, exc=$1c0 {NullPtrExc($80)}}> | |
N005 [000008] LCL_VAR V02 loc1 d:1 => <l:$1c2 {$1c1[$80]}, c:$200 {200}> | |
N006 [000009] ASG => <l:$1c4 {norm=$1c2 {$1c1[$80]}, exc=$1c0 {NullPtrExc($80)}}, c:$1c3 {norm=$200 {200}, exc=$1c0 {NullPtrExc($80)}}> | |
***** BB01, STMT00001(after) | |
N006 ( 4, 4) [000009] -A-XG---R--- * ASG ref <l:$1c4, c:$1c3> | |
N005 ( 1, 1) [000008] D------N---- +--* LCL_VAR ref V02 loc1 d:1 <l:$1c2, c:$200> | |
N004 ( 4, 4) [000007] ---XG------- \--* IND ref <l:$1c4, c:$1c3> | |
N003 ( 2, 2) [000090] -------N---- \--* ADD byref $c1 | |
N001 ( 1, 1) [000006] ------------ +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000089] ------------ \--* CNS_INT int 4 field offset Fseq[_array] $43 | |
--------- | |
***** BB01, STMT00002(before) | |
N005 ( 7, 7) [000014] ---X-------- * JTRUE void | |
N004 ( 5, 5) [000013] N--X---N-U-- \--* LE int | |
N002 ( 3, 3) [000012] ---X-------- +--* ARR_LENGTH int | |
N001 ( 1, 1) [000011] ------------ | \--* LCL_VAR ref V02 loc1 u:1 | |
N003 ( 1, 1) [000010] ------------ \--* LCL_VAR int V01 loc0 u:1 | |
N001 [000011] LCL_VAR V02 loc1 u:1 => <l:$1c2 {$1c1[$80]}, c:$200 {200}> | |
N002 [000012] ARR_LENGTH => <l:$149 {norm=$241 {ARR_LENGTH($1c2)}, exc=$1c6 {NullPtrExc($1c2)}}, c:$148 {norm=$240 {ARR_LENGTH($200)}, exc=$1c5 {NullPtrExc($200)}}> | |
N003 [000010] LCL_VAR V01 loc0 u:1 => <l:$145 {ADD($41, $141)}, c:$144 {ADD($41, $180)}> | |
N004 [000013] LE => <l:$14d {norm=$14b {LE_UN($241, $145)}, exc=$1c6 {NullPtrExc($1c2)}}, c:$14c {norm=$14a {LE_UN($240, $144)}, exc=$1c5 {NullPtrExc($200)}}> | |
***** BB01, STMT00002(after) | |
N005 ( 7, 7) [000014] ---X-------- * JTRUE void | |
N004 ( 5, 5) [000013] N--X---N-U-- \--* LE int <l:$14d, c:$14c> | |
N002 ( 3, 3) [000012] ---X-------- +--* ARR_LENGTH int <l:$149, c:$148> | |
N001 ( 1, 1) [000011] ------------ | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N003 ( 1, 1) [000010] ------------ \--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
finish(BB01). | |
Succ(BB02). | |
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 (#1) at start of BB06 is $81 {InitVal($41)} | |
The SSA definition for GcHeap (#1) at start of BB06 is $81 {InitVal($41)} | |
***** BB06, STMT00013(before) | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack | |
N002 ( 1, 1) [000082] ------------ this in ecx \--* LCL_VAR ref V00 this u:1 (last use) | |
N001 [000091] ARGPLACE => $202 {202} | |
N002 [000082] LCL_VAR V00 this u:1 (last use) => $80 {InitVal($40)} | |
fgCurMemoryVN[GcHeap] assigned for CALL at [000083] to VN: $203. | |
N003 [000083] CALL => $VN.Void | |
***** BB06, STMT00013(after) | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack $VN.Void | |
N002 ( 1, 1) [000082] ------------ this in ecx \--* LCL_VAR ref V00 this u:1 (last use) $80 | |
finish(BB06). | |
The SSA definition for ByrefExposed (#1) at start of BB02 is $81 {InitVal($41)} | |
The SSA definition for GcHeap (#1) at start of BB02 is $81 {InitVal($41)} | |
***** BB02, STMT00003(before) | |
N011 ( 11, 11) [000021] -A-XG---R--- * ASG int | |
N010 ( 4, 4) [000020] D--XG--N---- +--* IND int | |
N009 ( 2, 2) [000093] -------N---- | \--* ADD byref | |
N007 ( 1, 1) [000015] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N008 ( 1, 1) [000092] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
N006 ( 6, 6) [000019] ---XG------- \--* ADD int | |
N004 ( 4, 4) [000017] ---XG------- +--* IND int | |
N003 ( 2, 2) [000095] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000016] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000094] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] | |
N005 ( 1, 1) [000018] ------------ \--* CNS_INT int 1 | |
N001 [000016] LCL_VAR V00 this u:1 => $80 {InitVal($40)} | |
N002 [000094] CNS_INT 12 field offset Fseq[_version] => $44 {IntCns 12} | |
N003 [000095] ADD => $c2 {ADD($44, $80)} | |
VNApplySelectors: | |
VNForHandle(_version) is $102, fieldType is int | |
VNForMapSelect($81, $102):int returns $14e {$81[$102]} | |
VNForMapSelect($14e, $80):int returns $14f {$14e[$80]} | |
N004 [000017] IND => <l:$151 {norm=$14f {$14e[$80]}, exc=$1c0 {NullPtrExc($80)}}, c:$150 {norm=$182 {182}, exc=$1c0 {NullPtrExc($80)}}> | |
N005 [000018] CNS_INT 1 => $45 {IntCns 1} | |
N006 [000019] ADD => <l:$155 {norm=$153 {ADD($45, $14f)}, exc=$1c0 {NullPtrExc($80)}}, c:$154 {norm=$152 {ADD($45, $182)}, exc=$1c0 {NullPtrExc($80)}}> | |
N007 [000015] LCL_VAR V00 this u:1 => $80 {InitVal($40)} | |
N008 [000092] CNS_INT 12 field offset Fseq[_version] => $44 {IntCns 12} | |
N009 [000093] ADD => $c2 {ADD($44, $80)} | |
VNApplySelectors: | |
VNForHandle(_version) is $102, fieldType is int | |
VNForMapSelect($81, $102):int returns $14e {$81[$102]} | |
VNForMapSelect($14e, $80):int returns $14f {$14e[$80]} | |
VNForMapStore($14e, $80, $153):int returns $280 {$14e[$80 := $153]} | |
VNApplySelectorsAssign: | |
VNForHandle(_version) is $102, fieldType is int | |
VNForMapStore($81, $102, $280):int returns $281 {$81[$102 := $280]} | |
fgCurMemoryVN[GcHeap] assigned for StoreField at [000021] to VN: $281. | |
N011 [000021] ASG => $VN.Void | |
***** BB02, STMT00003(after) | |
N011 ( 11, 11) [000021] -A-XG---R--- * ASG int $VN.Void | |
N010 ( 4, 4) [000020] D--XG--N---- +--* IND int $153 | |
N009 ( 2, 2) [000093] -------N---- | \--* ADD byref $c2 | |
N007 ( 1, 1) [000015] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N008 ( 1, 1) [000092] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N006 ( 6, 6) [000019] ---XG------- \--* ADD int <l:$155, c:$154> | |
N004 ( 4, 4) [000017] ---XG------- +--* IND int <l:$151, c:$150> | |
N003 ( 2, 2) [000095] -------N---- | \--* ADD byref $c2 | |
N001 ( 1, 1) [000016] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000094] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N005 ( 1, 1) [000018] ------------ \--* CNS_INT int 1 $45 | |
--------- | |
***** BB02, STMT00004(before) | |
N006 ( 6, 6) [000025] -A-XG------- * ASG int | |
N004 ( 4, 4) [000024] D--XG--N---- +--* IND int | |
N003 ( 2, 2) [000097] -------N---- | \--* ADD byref | |
N001 ( 1, 1) [000022] ------------ | +--* LCL_VAR ref V00 this u:1 | |
N002 ( 1, 1) [000096] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] | |
N005 ( 1, 1) [000023] ------------ \--* LCL_VAR int V01 loc0 u:1 | |
N001 [000022] LCL_VAR V00 this u:1 => $80 {InitVal($40)} | |
N002 [000096] CNS_INT 8 field offset Fseq[_size] => $42 {IntCns 8} | |
N003 [000097] ADD => $c0 {ADD($42, $80)} | |
N005 [000023] LCL_VAR V01 loc0 u:1 => <l:$145 {ADD($41, $141)}, c:$144 {ADD($41, $180)}> | |
VNApplySelectors: | |
VNForHandle(_size) is $100, fieldType is int | |
AX2: $100 != $102 ==> select([$281]store($81, $102, $280), $100) ==> select($81, $100). | |
VNForMapSelect($281, $100):int returns $140 {$81[$100]} | |
VNForMapSelect($140, $80):int returns $141 {$140[$80]} | |
VNForMapStore($140, $80, $145):int returns $282 {$140[$80 := $145]} | |
VNApplySelectorsAssign: | |
VNForHandle(_size) is $100, fieldType is int | |
VNForMapStore($281, $100, $282):int returns $283 {$281[$100 := $282]} | |
fgCurMemoryVN[GcHeap] assigned for StoreField at [000025] to VN: $283. | |
N006 [000025] ASG => $VN.Void | |
***** BB02, STMT00004(after) | |
N006 ( 6, 6) [000025] -A-XG------- * ASG int $VN.Void | |
N004 ( 4, 4) [000024] D--XG--N---- +--* IND int $145 | |
N003 ( 2, 2) [000097] -------N---- | \--* ADD byref $c0 | |
N001 ( 1, 1) [000022] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000096] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] $42 | |
N005 ( 1, 1) [000023] ------------ \--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
--------- | |
***** BB02, STMT00005(before) | |
N017 ( 24, 25) [000125] -A-XG---R--- * ASG ref | |
N016 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 | |
N015 ( 20, 22) [000124] ---XG------- \--* IND ref | |
N014 ( 17, 20) [000110] ---XG------- \--* COMMA byref Zero Fseq[Value] | |
N004 ( 8, 11) [000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void | |
N001 ( 1, 1) [000113] ------------ | +--* LCL_VAR int V01 loc0 u:1 | |
N003 ( 3, 3) [000111] ---X-------- | \--* ARR_LENGTH int | |
N002 ( 1, 1) [000112] ------------ | \--* LCL_VAR ref V02 loc1 u:1 | |
N013 ( 9, 9) [000115] ----G------- \--* ADDR byref | |
N012 ( 5, 5) [000116] a---G--N---- \--* IND struct | |
N011 ( 4, 4) [000117] -------N---- \--* ADD byref | |
N005 ( 1, 1) [000118] ------------ +--* LCL_VAR ref V02 loc1 u:1 | |
N010 ( 3, 3) [000119] -------N---- \--* ADD int | |
N008 ( 2, 2) [000120] -------N---- +--* LSH int | |
N006 ( 1, 1) [000121] i----------- | +--* LCL_VAR int V01 loc0 u:1 | |
N007 ( 1, 1) [000122] -------N---- | \--* CNS_INT int 2 | |
N009 ( 1, 1) [000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] | |
N001 [000113] LCL_VAR V01 loc0 u:1 => <l:$145 {ADD($41, $141)}, c:$144 {ADD($41, $180)}> | |
N002 [000112] LCL_VAR V02 loc1 u:1 => <l:$1c2 {$1c1[$80]}, c:$200 {200}> | |
N003 [000111] ARR_LENGTH => <l:$149 {norm=$241 {ARR_LENGTH($1c2)}, exc=$1c6 {NullPtrExc($1c2)}}, c:$148 {norm=$240 {ARR_LENGTH($200)}, exc=$1c5 {NullPtrExc($200)}}> | |
N004 [000114] ARR_BOUNDS_CHECK_Rng => <l:$1d0 {norm=$3 {3}, exc=$1ce( {NullPtrExc($1c2)}, {IndexOutOfRangeExc($145, $241)})}, c:$1cf {norm=$3 {3}, exc=$1cd( {NullPtrExc($200)}, {IndexOutOfRangeExc($144, $240)})}> | |
N005 [000118] LCL_VAR V02 loc1 u:1 => <l:$1c2 {$1c1[$80]}, c:$200 {200}> | |
N006 [000121] LCL_VAR V01 loc0 u:1 => <l:$145 {ADD($41, $141)}, c:$144 {ADD($41, $180)}> | |
N007 [000122] CNS_INT 2 => $46 {IntCns 2} | |
N008 [000120] LSH => <l:$157 {LSH($145, $46)}, c:$156 {LSH($144, $46)}> | |
N009 [000123] CNS_INT 8 Fseq[#FirstElem] => $42 {IntCns 8} | |
N010 [000119] ADD => <l:$159 {ADD($42, $157)}, c:$158 {ADD($42, $156)}> | |
N011 [000117] ADD => <l:$c4 {ADD($159, $1c2)}, c:$c3 {ADD($158, $200)}> | |
VNForHandle(arrElemType: RefAsValueType`1) is $103 | |
Relabeled IND_ARR_INDEX address node [000117] with l:$300: {PtrToArrElem($103, $1c2, $145, $0)} | |
AX2: $103 != $100 ==> select([$283]store($281, $100, $282), $103) ==> select($281, $103). | |
AX2: $103 != $102 ==> select([$281]store($81, $102, $280), $103) ==> select($81, $103). | |
VNForMapSelect($283, $103):ref returns $1d1 {$81[$103]} | |
VNForMapSelect($1d1, $1c2):ref returns $1d2 {$1d1[$1c2]} | |
VNForMapSelect($1d2, $145):struct returns $340 {$1d2[$145]} | |
hAtArrType $1d1 is MapSelect(curGcHeap($283), RefAsValueType`1[]). | |
hAtArrTypeAtArr $1d2 is MapSelect(hAtArrType($1d1), arr=$1c2). | |
wholeElem $340 is MapSelect(hAtArrTypeAtArr($1d2), ind=$145). | |
N012 [000116] IND => <l:$340 {$1d2[$145]}, c:$380 {380}> | |
N013 [000115] ADDR => $300 {PtrToArrElem($103, $1c2, $145, $0)} | |
N014 [000110] COMMA => <l:$c6 {norm=$300 {PtrToArrElem($103, $1c2, $145, $0)}, exc=$1ce( {NullPtrExc($1c2)}, {IndexOutOfRangeExc($145, $241)})}, c:$c5 {norm=$300 {PtrToArrElem($103, $1c2, $145, $0)}, exc=$1cd( {NullPtrExc($200)}, {IndexOutOfRangeExc($144, $240)})}> | |
AX2: $103 != $100 ==> select([$283]store($281, $100, $282), $103) ==> select($281, $103). | |
AX2: $103 != $102 ==> select([$281]store($81, $102, $280), $103) ==> select($81, $103). | |
VNForMapSelect($283, $103):ref returns $1d1 {$81[$103]} | |
VNForMapSelect($1d1, $1c2):ref returns $1d2 {$1d1[$1c2]} | |
VNForMapSelect($1d2, $145):struct returns $340 {$1d2[$145]} | |
hAtArrType $1d1 is MapSelect(curGcHeap($283), RefAsValueType`1[]). | |
hAtArrTypeAtArr $1d2 is MapSelect(hAtArrType($1d1), arr=$1c2). | |
wholeElem $340 is MapSelect(hAtArrTypeAtArr($1d2), ind=$145). | |
selectedElem is $341 after applying selectors. | |
N015 [000124] IND => <l:$341 {norm=$340 {$1d2[$145]}, exc=$1ce( {NullPtrExc($1c2)}, {IndexOutOfRangeExc($145, $241)})}, c:$204 {204}> | |
N016 [000109] LCL_VAR V07 tmp2 d:1 => <l:$340 {$1d2[$145]}, c:$204 {204}> | |
N017 [000125] ASG => <l:$341 {norm=$340 {$1d2[$145]}, exc=$1ce( {NullPtrExc($1c2)}, {IndexOutOfRangeExc($145, $241)})}, c:$204 {204}> | |
***** BB02, STMT00005(after) | |
N017 ( 24, 25) [000125] -A-XG---R--- * ASG ref <l:$341, c:$204> | |
N016 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 <l:$340, c:$204> | |
N015 ( 20, 22) [000124] ---XG------- \--* IND ref <l:$341, c:$204> | |
N014 ( 17, 20) [000110] ---XG------- \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N004 ( 8, 11) [000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
N001 ( 1, 1) [000113] ------------ | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 3, 3) [000111] ---X-------- | \--* ARR_LENGTH int <l:$149, c:$148> | |
N002 ( 1, 1) [000112] ------------ | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N013 ( 9, 9) [000115] ----G------- \--* ADDR byref $300 | |
N012 ( 5, 5) [000116] a---G--N---- \--* IND struct <l:$340, c:$380> | |
N011 ( 4, 4) [000117] -------N---- \--* ADD byref $300 | |
N005 ( 1, 1) [000118] ------------ +--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N010 ( 3, 3) [000119] -------N---- \--* ADD int <l:$159, c:$158> | |
N008 ( 2, 2) [000120] -------N---- +--* LSH int <l:$157, c:$156> | |
N006 ( 1, 1) [000121] i----------- | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N007 ( 1, 1) [000122] -------N---- | \--* CNS_INT int 2 $46 | |
N009 ( 1, 1) [000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
--------- | |
***** BB02, STMT00006(before) | |
N004 ( 3, 3) [000038] -A---O--R--- * ASG int | |
N003 ( 1, 1) [000037] D------N---- +--* LCL_VAR int V05 tmp0 d:1 | |
N002 ( 3, 2) [000036] #----O------ \--* IND int | |
N001 ( 1, 1) [000035] ------------ \--* LCL_VAR ref V00 this u:1 (last use) | |
N001 [000035] LCL_VAR V00 this u:1 (last use) => $80 {InitVal($40)} | |
VNForMapSelect($2, $80):ref returns $1d3 {$VN.ReadOnlyHeap[$80]} | |
VNForMapSelect($2, $80):ref returns $1d3 {$VN.ReadOnlyHeap[$80]} | |
N002 [000036] IND => $1d3 {$VN.ReadOnlyHeap[$80]} | |
N003 [000037] LCL_VAR V05 tmp0 d:1 => $1d3 {$VN.ReadOnlyHeap[$80]} | |
N004 [000038] ASG => $1d3 {$VN.ReadOnlyHeap[$80]} | |
***** BB02, STMT00006(after) | |
N004 ( 3, 3) [000038] -A---O--R--- * ASG int $1d3 | |
N003 ( 1, 1) [000037] D------N---- +--* LCL_VAR int V05 tmp0 d:1 $1d3 | |
N002 ( 3, 2) [000036] #----O------ \--* IND int $1d3 | |
N001 ( 1, 1) [000035] ------------ \--* LCL_VAR ref V00 this u:1 (last use) $80 | |
--------- | |
***** BB02, STMT00014(before) | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
N010 ( 12, 11) [000051] J------N---- \--* EQ int | |
N008 ( 10, 9) [000047] n----------- +--* IND int | |
N007 ( 8, 7) [000046] -------N---- | \--* ADD int | |
N005 ( 7, 6) [000044] #----------- | +--* IND int | |
N004 ( 4, 4) [000043] #----------- | | \--* IND int | |
N003 ( 2, 2) [000042] -------N---- | | \--* ADD int | |
N001 ( 1, 1) [000040] ------------ | | +--* LCL_VAR int V05 tmp0 u:1 (last use) | |
N002 ( 1, 1) [000041] ------------ | | \--* CNS_INT int 32 | |
N006 ( 1, 1) [000045] ------------ | \--* CNS_INT int 12 | |
N009 ( 1, 1) [000050] ------------ \--* CNS_INT int 0 | |
N001 [000040] LCL_VAR V05 tmp0 u:1 (last use) => $1d3 {$VN.ReadOnlyHeap[$80]} | |
N002 [000041] CNS_INT 32 => $47 {IntCns 32} | |
N003 [000042] ADD => $15b {ADD($47, $1d3)} | |
VNForMapSelect($2, $15b):ref returns $1d4 {$VN.ReadOnlyHeap[$15b]} | |
VNForMapSelect($2, $15b):ref returns $1d4 {$VN.ReadOnlyHeap[$15b]} | |
N004 [000043] IND => $1d4 {$VN.ReadOnlyHeap[$15b]} | |
VNForMapSelect($2, $1d4):ref returns $1d5 {$VN.ReadOnlyHeap[$1d4]} | |
VNForMapSelect($2, $1d4):ref returns $1d5 {$VN.ReadOnlyHeap[$1d4]} | |
N005 [000044] IND => $1d5 {$VN.ReadOnlyHeap[$1d4]} | |
N006 [000045] CNS_INT 12 => $44 {IntCns 12} | |
N007 [000046] ADD => $15c {ADD($44, $1d5)} | |
N008 [000047] IND => <l:$284 {ByrefExposedLoad($48, $15c, $283)}, c:$184 {184}> | |
N009 [000050] CNS_INT 0 => $40 {IntCns 0} | |
N010 [000051] EQ => <l:$15e {EQ($284, $40)}, c:$15d {EQ($184, $40)}> | |
***** BB02, STMT00014(after) | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
N010 ( 12, 11) [000051] J------N---- \--* EQ int <l:$15e, c:$15d> | |
N008 ( 10, 9) [000047] n----------- +--* IND int <l:$284, c:$184> | |
N007 ( 8, 7) [000046] -------N---- | \--* ADD int $15c | |
N005 ( 7, 6) [000044] #----------- | +--* IND int $1d5 | |
N004 ( 4, 4) [000043] #----------- | | \--* IND int $1d4 | |
N003 ( 2, 2) [000042] -------N---- | | \--* ADD int $15b | |
N001 ( 1, 1) [000040] ------------ | | +--* LCL_VAR int V05 tmp0 u:1 (last use) $1d3 | |
N002 ( 1, 1) [000041] ------------ | | \--* CNS_INT int 32 $47 | |
N006 ( 1, 1) [000045] ------------ | \--* CNS_INT int 12 $44 | |
N009 ( 1, 1) [000050] ------------ \--* CNS_INT int 0 $40 | |
finish(BB02). | |
Succ(BB03). | |
Not yet completed. | |
All preds complete, adding to allDone. | |
Succ(BB04). | |
Not yet completed. | |
All preds complete, adding to allDone. | |
The SSA definition for ByrefExposed (#3) at start of BB04 is $283 {$281[$100 := $282]} | |
The SSA definition for GcHeap (#3) at start of BB04 is $283 {$281[$100 := $282]} | |
finish(BB04). | |
Succ(BB05). | |
Not yet completed. | |
Not all preds complete Adding to notallDone, if necessary... | |
Was necessary. | |
The SSA definition for ByrefExposed (#3) at start of BB03 is $283 {$281[$100 := $282]} | |
The SSA definition for GcHeap (#3) at start of BB03 is $283 {$281[$100 := $282]} | |
finish(BB03). | |
Succ(BB05). | |
Not yet completed. | |
All preds complete, adding to allDone. | |
The SSA definition for ByrefExposed (#3) at start of BB05 is $283 {$281[$100 := $282]} | |
The SSA definition for GcHeap (#3) at start of BB05 is $283 {$281[$100 := $282]} | |
***** BB05, STMT00011(before) | |
N003 ( 5, 4) [000130] -A------R--- * ASG ref | |
N002 ( 3, 2) [000128] D------N---- +--* LCL_VAR ref V08 tmp3 d:1 | |
N001 ( 1, 1) [000129] ------------ \--* CNS_INT ref null | |
N001 [000129] CNS_INT null => $VN.Null | |
N002 [000128] LCL_VAR V08 tmp3 d:1 => $VN.Null | |
N003 [000130] ASG => $VN.Null | |
***** BB05, STMT00011(after) | |
N003 ( 5, 4) [000130] -A------R--- * ASG ref $VN.Null | |
N002 ( 3, 2) [000128] D------N---- +--* LCL_VAR ref V08 tmp3 d:1 $VN.Null | |
N001 ( 1, 1) [000129] ------------ \--* CNS_INT ref null $VN.Null | |
--------- | |
***** BB05, STMT00012(before) | |
N017 ( 24, 25) [000159] -A-XG------- * ASG ref | |
N015 ( 20, 22) [000157] *--XG--N---- +--* IND ref | |
N014 ( 17, 20) [000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] | |
N004 ( 8, 11) [000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void | |
N001 ( 1, 1) [000146] ------------ | | +--* LCL_VAR int V01 loc0 u:1 | |
N003 ( 3, 3) [000144] ---X-------- | | \--* ARR_LENGTH int | |
N002 ( 1, 1) [000145] ------------ | | \--* LCL_VAR ref V02 loc1 u:1 | |
N013 ( 9, 9) [000148] ----G------- | \--* ADDR byref | |
N012 ( 5, 5) [000149] a---G------- | \--* IND struct | |
N011 ( 4, 4) [000150] -------N---- | \--* ADD byref | |
N005 ( 1, 1) [000151] ------------ | +--* LCL_VAR ref V02 loc1 u:1 (last use) | |
N010 ( 3, 3) [000152] -------N---- | \--* ADD int | |
N008 ( 2, 2) [000153] -------N---- | +--* LSH int | |
N006 ( 1, 1) [000154] i----------- | | +--* LCL_VAR int V01 loc0 u:1 (last use) | |
N007 ( 1, 1) [000155] -------N---- | | \--* CNS_INT int 2 | |
N009 ( 1, 1) [000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] | |
N016 ( 3, 2) [000158] ------------ \--* LCL_VAR ref V08 tmp3 u:1 (last use) | |
N001 [000146] LCL_VAR V01 loc0 u:1 => <l:$145 {ADD($41, $141)}, c:$144 {ADD($41, $180)}> | |
N002 [000145] LCL_VAR V02 loc1 u:1 => <l:$1c2 {$1c1[$80]}, c:$200 {200}> | |
N003 [000144] ARR_LENGTH => <l:$149 {norm=$241 {ARR_LENGTH($1c2)}, exc=$1c6 {NullPtrExc($1c2)}}, c:$148 {norm=$240 {ARR_LENGTH($200)}, exc=$1c5 {NullPtrExc($200)}}> | |
N004 [000147] ARR_BOUNDS_CHECK_Rng => <l:$1d0 {norm=$3 {3}, exc=$1ce( {NullPtrExc($1c2)}, {IndexOutOfRangeExc($145, $241)})}, c:$1cf {norm=$3 {3}, exc=$1cd( {NullPtrExc($200)}, {IndexOutOfRangeExc($144, $240)})}> | |
N005 [000151] LCL_VAR V02 loc1 u:1 (last use) => <l:$1c2 {$1c1[$80]}, c:$200 {200}> | |
N006 [000154] LCL_VAR V01 loc0 u:1 (last use) => <l:$145 {ADD($41, $141)}, c:$144 {ADD($41, $180)}> | |
N007 [000155] CNS_INT 2 => $46 {IntCns 2} | |
N008 [000153] LSH => <l:$157 {LSH($145, $46)}, c:$156 {LSH($144, $46)}> | |
N009 [000156] CNS_INT 8 Fseq[#FirstElem] => $42 {IntCns 8} | |
N010 [000152] ADD => <l:$159 {ADD($42, $157)}, c:$158 {ADD($42, $156)}> | |
N011 [000150] ADD => <l:$c4 {ADD($159, $1c2)}, c:$c3 {ADD($158, $200)}> | |
VNForHandle(arrElemType: RefAsValueType`1) is $103 | |
Relabeled IND_ARR_INDEX address node [000150] with l:$300: {PtrToArrElem($103, $1c2, $145, $0)} | |
AX2: $103 != $100 ==> select([$283]store($281, $100, $282), $103) ==> select($281, $103). | |
AX2: $103 != $102 ==> select([$281]store($81, $102, $280), $103) ==> select($81, $103). | |
VNForMapSelect($283, $103):ref returns $1d1 {$81[$103]} | |
VNForMapSelect($1d1, $1c2):ref returns $1d2 {$1d1[$1c2]} | |
VNForMapSelect($1d2, $145):struct returns $340 {$1d2[$145]} | |
hAtArrType $1d1 is MapSelect(curGcHeap($283), RefAsValueType`1[]). | |
hAtArrTypeAtArr $1d2 is MapSelect(hAtArrType($1d1), arr=$1c2). | |
wholeElem $340 is MapSelect(hAtArrTypeAtArr($1d2), ind=$145). | |
N012 [000149] IND => <l:$340 {$1d2[$145]}, c:$381 {381}> | |
N013 [000148] ADDR => $300 {PtrToArrElem($103, $1c2, $145, $0)} | |
N014 [000143] COMMA => <l:$c6 {norm=$300 {PtrToArrElem($103, $1c2, $145, $0)}, exc=$1ce( {NullPtrExc($1c2)}, {IndexOutOfRangeExc($145, $241)})}, c:$c5 {norm=$300 {PtrToArrElem($103, $1c2, $145, $0)}, exc=$1cd( {NullPtrExc($200)}, {IndexOutOfRangeExc($144, $240)})}> | |
N016 [000158] LCL_VAR V08 tmp3 u:1 (last use) => $VN.Null | |
Tree [000159] assigns to an array element: | |
AX2: $103 != $100 ==> select([$283]store($281, $100, $282), $103) ==> select($281, $103). | |
AX2: $103 != $102 ==> select([$281]store($81, $102, $280), $103) ==> select($81, $103). | |
VNForMapSelect($283, $103):ref returns $1d1 {$81[$103]} | |
VNForMapSelect($1d1, $1c2):ref returns $1d2 {$1d1[$1c2]} | |
VNForMapSelect($1d2, $145):struct returns $340 {$1d2[$145]} | |
*** Mismatched types in fgValueNumberArrIndexAssign | |
hAtArrType $1d1 is MapSelect(curGcHeap($283), RefAsValueType`1[]). | |
hAtArrTypeAtArr $1d2 is MapSelect(hAtArrType($1d1), arr=$1c2) | |
hAtArrTypeAtArrAtInx $340 is MapSelect(hAtArrTypeAtArr($1d2), inx=$145):struct | |
newValAtArrType $207 is {207} | |
VNForMapStore($283, $103, $207):ref returns $3c0 {$283[$103 := $207]} | |
fgCurMemoryVN[GcHeap] assigned for ArrIndexAssign (case 1) at [000159] to VN: $3c0. | |
N017 [000159] ASG => $VN.Void | |
***** BB05, STMT00012(after) | |
N017 ( 24, 25) [000159] -A-XG------- * ASG ref $VN.Void | |
N015 ( 20, 22) [000157] *--XG--N---- +--* IND ref $VN.Null | |
N014 ( 17, 20) [000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N004 ( 8, 11) [000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
N001 ( 1, 1) [000146] ------------ | | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 3, 3) [000144] ---X-------- | | \--* ARR_LENGTH int <l:$149, c:$148> | |
N002 ( 1, 1) [000145] ------------ | | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N013 ( 9, 9) [000148] ----G------- | \--* ADDR byref $300 | |
N012 ( 5, 5) [000149] a---G------- | \--* IND struct <l:$340, c:$381> | |
N011 ( 4, 4) [000150] -------N---- | \--* ADD byref $300 | |
N005 ( 1, 1) [000151] ------------ | +--* LCL_VAR ref V02 loc1 u:1 (last use) <l:$1c2, c:$200> | |
N010 ( 3, 3) [000152] -------N---- | \--* ADD int <l:$159, c:$158> | |
N008 ( 2, 2) [000153] -------N---- | +--* LSH int <l:$157, c:$156> | |
N006 ( 1, 1) [000154] i----------- | | +--* LCL_VAR int V01 loc0 u:1 (last use) <l:$145, c:$144> | |
N007 ( 1, 1) [000155] -------N---- | | \--* CNS_INT int 2 $46 | |
N009 ( 1, 1) [000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
N016 ( 3, 2) [000158] ------------ \--* LCL_VAR ref V08 tmp3 u:1 (last use) $VN.Null | |
--------- | |
***** BB05, STMT00010(before) | |
N002 ( 4, 3) [000071] ------------ * RETURN ref | |
N001 ( 3, 2) [000070] ------------ \--* LCL_VAR ref V07 tmp2 u:1 (last use) | |
N001 [000070] LCL_VAR V07 tmp2 u:1 (last use) => <l:$340 {$1d2[$145]}, c:$204 {204}> | |
N002 [000071] RETURN => $208 {208} | |
***** BB05, STMT00010(after) | |
N002 ( 4, 3) [000071] ------------ * RETURN ref $208 | |
N001 ( 3, 2) [000070] ------------ \--* LCL_VAR ref V07 tmp2 u:1 (last use) <l:$340, c:$204> | |
finish(BB05). | |
*************** Finishing PHASE Do value numbering | |
*************** Starting PHASE Hoist loop code | |
*************** Finishing PHASE Hoist loop code | |
*************** Starting PHASE VN based copy prop | |
*************** In optVnCopyProp() | |
Copy Assertion for BB01 | |
curSsaName stack: { } | |
Live vars: {V00} => {V00 V01} | |
Live vars: {V00 V01} => {V00 V01 V02} | |
Copy Assertion for BB06 | |
curSsaName stack: { 0-[000000]:V00 1-[000004]:V01 2-[000008]:V02 } | |
Live vars: {V00} => {} | |
Copy Assertion for BB02 | |
curSsaName stack: { 0-[000000]:V00 1-[000004]:V01 2-[000008]:V02 } | |
Live vars: {V00 V01 V02} => {V00 V01 V02 V07} | |
Live vars: {V00 V01 V02 V07} => {V01 V02 V07} | |
Live vars: {V01 V02 V07} => {V01 V02 V05 V07} | |
Live vars: {V01 V02 V05 V07} => {V01 V02 V07} | |
Copy Assertion for BB05 | |
curSsaName stack: { 0-[000000]:V00 1-[000004]:V01 2-[000008]:V02 5-[000037]:V05 7-[000109]:V07 } | |
Live vars: {V01 V02 V07} => {V01 V02 V07 V08} | |
Live vars: {V01 V02 V07 V08} => {V01 V07 V08} | |
Live vars: {V01 V07 V08} => {V07 V08} | |
Live vars: {V07 V08} => {V07} | |
Live vars: {V07} => {} | |
Copy Assertion for BB04 | |
curSsaName stack: { 0-[000000]:V00 1-[000004]:V01 2-[000008]:V02 5-[000037]:V05 7-[000109]:V07 } | |
Copy Assertion for BB03 | |
curSsaName stack: { 0-[000000]:V00 1-[000004]:V01 2-[000008]:V02 5-[000037]:V05 7-[000109]:V07 } | |
*************** Finishing PHASE VN based copy prop | |
*************** Starting PHASE Optimize Valnum CSEs | |
*************** In optOptimizeCSEs() | |
Blocks/Trees at start of optOptimizeCSE phase | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags] | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [0000] 1 1 [000..016)-> BB06 ( cond ) i label target idxlen | |
BB02 [0002] 1 BB01 1 [01C..040)-> BB04 ( cond ) i label target idxlen | |
BB03 [0009] 1 BB02 0.25 [???..???)-> BB05 (always) i | |
BB04 [0008] 1 BB02 0.25 [???..???) i label target | |
BB05 [0006] 2 BB04,BB03 1 [040..052) (return) i label target idxlen | |
BB06 [0001] 1 BB01 0 [016..01C) (throw ) i rare label target gcsafe | |
----------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
***** BB01 | |
STMT00000 (IL 0x000...0x008) | |
N008 ( 6, 6) [000005] -A-XG---R--- * ASG int <l:$147, c:$146> | |
N007 ( 1, 1) [000004] D------N---- +--* LCL_VAR int V01 loc0 d:1 <l:$145, c:$144> | |
N006 ( 6, 6) [000003] ---XG------- \--* ADD int <l:$147, c:$146> | |
N004 ( 4, 4) [000001] ---XG------- +--* IND int <l:$143, c:$142> | |
N003 ( 2, 2) [000088] -------N---- | \--* ADD byref $c0 | |
N001 ( 1, 1) [000000] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000087] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] $42 | |
N005 ( 1, 1) [000002] ------------ \--* CNS_INT int -1 $41 | |
***** BB01 | |
STMT00001 (IL 0x009...0x00F) | |
N006 ( 4, 4) [000009] -A-XG---R--- * ASG ref <l:$1c4, c:$1c3> | |
N005 ( 1, 1) [000008] D------N---- +--* LCL_VAR ref V02 loc1 d:1 <l:$1c2, c:$200> | |
N004 ( 4, 4) [000007] ---XG------- \--* IND ref <l:$1c4, c:$1c3> | |
N003 ( 2, 2) [000090] -------N---- \--* ADD byref $c1 | |
N001 ( 1, 1) [000006] ------------ +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000089] ------------ \--* CNS_INT int 4 field offset Fseq[_array] $43 | |
***** BB01 | |
STMT00002 (IL 0x010...0x014) | |
N005 ( 7, 7) [000014] ---X-------- * JTRUE void | |
N004 ( 5, 5) [000013] N--X---N-U-- \--* LE int <l:$14d, c:$14c> | |
N002 ( 3, 3) [000012] ---X-------- +--* ARR_LENGTH int <l:$149, c:$148> | |
N001 ( 1, 1) [000011] ------------ | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N003 ( 1, 1) [000010] ------------ \--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
------------ BB02 [01C..040) -> BB04 (cond), preds={BB01} succs={BB03,BB04} | |
***** BB02 | |
STMT00003 (IL 0x01C...0x025) | |
N011 ( 11, 11) [000021] -A-XG---R--- * ASG int $VN.Void | |
N010 ( 4, 4) [000020] D--XG--N---- +--* IND int $153 | |
N009 ( 2, 2) [000093] -------N---- | \--* ADD byref $c2 | |
N007 ( 1, 1) [000015] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N008 ( 1, 1) [000092] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N006 ( 6, 6) [000019] ---XG------- \--* ADD int <l:$155, c:$154> | |
N004 ( 4, 4) [000017] ---XG------- +--* IND int <l:$151, c:$150> | |
N003 ( 2, 2) [000095] -------N---- | \--* ADD byref $c2 | |
N001 ( 1, 1) [000016] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000094] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N005 ( 1, 1) [000018] ------------ \--* CNS_INT int 1 $45 | |
***** BB02 | |
STMT00004 (IL 0x02A...0x02C) | |
N006 ( 6, 6) [000025] -A-XG------- * ASG int $VN.Void | |
N004 ( 4, 4) [000024] D--XG--N---- +--* IND int $145 | |
N003 ( 2, 2) [000097] -------N---- | \--* ADD byref $c0 | |
N001 ( 1, 1) [000022] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000096] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] $42 | |
N005 ( 1, 1) [000023] ------------ \--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
***** BB02 | |
STMT00005 (IL 0x031...0x038) | |
N017 ( 24, 25) [000125] -A-XG---R--- * ASG ref <l:$341, c:$204> | |
N016 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 <l:$340, c:$204> | |
N015 ( 20, 22) [000124] ---XG------- \--* IND ref <l:$341, c:$204> | |
N014 ( 17, 20) [000110] ---XG------- \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N004 ( 8, 11) [000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
N001 ( 1, 1) [000113] ------------ | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 3, 3) [000111] ---X-------- | \--* ARR_LENGTH int <l:$149, c:$148> | |
N002 ( 1, 1) [000112] ------------ | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N013 ( 9, 9) [000115] ----G------- \--* ADDR byref $300 | |
N012 ( 5, 5) [000116] a---G--N---- \--* IND struct <l:$340, c:$380> | |
N011 ( 4, 4) [000117] -------N---- \--* ADD byref $300 | |
N005 ( 1, 1) [000118] ------------ +--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N010 ( 3, 3) [000119] -------N---- \--* ADD int <l:$159, c:$158> | |
N008 ( 2, 2) [000120] -------N---- +--* LSH int <l:$157, c:$156> | |
N006 ( 1, 1) [000121] i----------- | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N007 ( 1, 1) [000122] -------N---- | \--* CNS_INT int 2 $46 | |
N009 ( 1, 1) [000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
***** BB02 | |
STMT00006 (IL 0x039...0x03E) | |
N004 ( 3, 3) [000038] -A---O--R--- * ASG int $1d3 | |
N003 ( 1, 1) [000037] D------N---- +--* LCL_VAR int V05 tmp0 d:1 $1d3 | |
N002 ( 3, 2) [000036] #----O------ \--* IND int $1d3 | |
N001 ( 1, 1) [000035] ------------ \--* LCL_VAR ref V00 this u:1 (last use) $80 | |
***** BB02 | |
STMT00014 (IL ???... ???) | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
N010 ( 12, 11) [000051] J------N---- \--* EQ int <l:$15e, c:$15d> | |
N008 ( 10, 9) [000047] n----------- +--* IND int <l:$284, c:$184> | |
N007 ( 8, 7) [000046] -------N---- | \--* ADD int $15c | |
N005 ( 7, 6) [000044] #----------- | +--* IND int $1d5 | |
N004 ( 4, 4) [000043] #----------- | | \--* IND int $1d4 | |
N003 ( 2, 2) [000042] -------N---- | | \--* ADD int $15b | |
N001 ( 1, 1) [000040] ------------ | | +--* LCL_VAR int V05 tmp0 u:1 (last use) $1d3 | |
N002 ( 1, 1) [000041] ------------ | | \--* CNS_INT int 32 $47 | |
N006 ( 1, 1) [000045] ------------ | \--* CNS_INT int 12 $44 | |
N009 ( 1, 1) [000050] ------------ \--* CNS_INT int 0 $40 | |
------------ BB03 [???..???) -> BB05 (always), preds={BB02} succs={BB05} | |
------------ BB04 [???..???), preds={BB02} succs={BB05} | |
------------ BB05 [040..052) (return), preds={BB04,BB03} succs={} | |
***** BB05 | |
STMT00011 (IL 0x040...0x045) | |
N003 ( 5, 4) [000130] -A------R--- * ASG ref $VN.Null | |
N002 ( 3, 2) [000128] D------N---- +--* LCL_VAR ref V08 tmp3 d:1 $VN.Null | |
N001 ( 1, 1) [000129] ------------ \--* CNS_INT ref null $VN.Null | |
***** BB05 | |
STMT00012 (IL ???...0x04B) | |
N017 ( 24, 25) [000159] -A-XG------- * ASG ref $VN.Void | |
N015 ( 20, 22) [000157] *--XG--N---- +--* IND ref $VN.Null | |
N014 ( 17, 20) [000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N004 ( 8, 11) [000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
N001 ( 1, 1) [000146] ------------ | | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 3, 3) [000144] ---X-------- | | \--* ARR_LENGTH int <l:$149, c:$148> | |
N002 ( 1, 1) [000145] ------------ | | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N013 ( 9, 9) [000148] ----G------- | \--* ADDR byref $300 | |
N012 ( 5, 5) [000149] a---G------- | \--* IND struct <l:$340, c:$381> | |
N011 ( 4, 4) [000150] -------N---- | \--* ADD byref $300 | |
N005 ( 1, 1) [000151] ------------ | +--* LCL_VAR ref V02 loc1 u:1 (last use) <l:$1c2, c:$200> | |
N010 ( 3, 3) [000152] -------N---- | \--* ADD int <l:$159, c:$158> | |
N008 ( 2, 2) [000153] -------N---- | +--* LSH int <l:$157, c:$156> | |
N006 ( 1, 1) [000154] i----------- | | +--* LCL_VAR int V01 loc0 u:1 (last use) <l:$145, c:$144> | |
N007 ( 1, 1) [000155] -------N---- | | \--* CNS_INT int 2 $46 | |
N009 ( 1, 1) [000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
N016 ( 3, 2) [000158] ------------ \--* LCL_VAR ref V08 tmp3 u:1 (last use) $VN.Null | |
***** BB05 | |
STMT00010 (IL 0x050...0x051) | |
N002 ( 4, 3) [000071] ------------ * RETURN ref $208 | |
N001 ( 3, 2) [000070] ------------ \--* LCL_VAR ref V07 tmp2 u:1 (last use) <l:$340, c:$204> | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
***** BB06 | |
STMT00013 (IL 0x016...0x017) | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack $VN.Void | |
N002 ( 1, 1) [000082] ------------ this in ecx \--* LCL_VAR ref V00 this u:1 (last use) $80 | |
------------------------------------------------------------------------------------------------------------------- | |
*************** In optOptimizeValnumCSEs() | |
CSE candidate #01, vn=$241 in BB02, [cost= 3, size= 3]: | |
N003 ( 3, 3) CSE #01 (use)[000111] ---X-------- * ARR_LENGTH int <l:$149, c:$148> | |
N002 ( 1, 1) [000112] ------------ \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
CSE candidate #02, vn=$340 in BB05, [cost= 5, size= 5]: | |
N012 ( 5, 5) CSE #02 (use)[000149] a---G------- * IND struct <l:$340, c:$381> | |
N011 ( 4, 4) [000150] -------N---- \--* ADD byref $300 | |
N005 ( 1, 1) [000151] ------------ +--* LCL_VAR ref V02 loc1 u:1 (last use) <l:$1c2, c:$200> | |
N010 ( 3, 3) [000152] -------N---- \--* ADD int <l:$159, c:$158> | |
N008 ( 2, 2) [000153] -------N---- +--* LSH int <l:$157, c:$156> | |
N006 ( 1, 1) [000154] i----------- | +--* LCL_VAR int V01 loc0 u:1 (last use) <l:$145, c:$144> | |
N007 ( 1, 1) [000155] -------N---- | \--* CNS_INT int 2 $46 | |
N009 ( 1, 1) [000156] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
CSE candidate #03, vn=$c6 in BB05, [cost=17, size=20]: | |
N014 ( 17, 20) CSE #03 (use)[000143] ---XG------- * COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N004 ( 8, 11) [000147] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
N001 ( 1, 1) [000146] ------------ | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 3, 3) CSE #01 (use)[000144] ---X-------- | \--* ARR_LENGTH int <l:$149, c:$148> | |
N002 ( 1, 1) [000145] ------------ | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N013 ( 9, 9) [000148] ----G------- \--* ADDR byref $300 | |
N012 ( 5, 5) CSE #02 (use)[000149] a---G------- \--* IND struct <l:$340, c:$381> | |
N011 ( 4, 4) [000150] -------N---- \--* ADD byref $300 | |
N005 ( 1, 1) [000151] ------------ +--* LCL_VAR ref V02 loc1 u:1 (last use) <l:$1c2, c:$200> | |
N010 ( 3, 3) [000152] -------N---- \--* ADD int <l:$159, c:$158> | |
N008 ( 2, 2) [000153] -------N---- +--* LSH int <l:$157, c:$156> | |
N006 ( 1, 1) [000154] i----------- | +--* LCL_VAR int V01 loc0 u:1 (last use) <l:$145, c:$144> | |
N007 ( 1, 1) [000155] -------N---- | \--* CNS_INT int 2 $46 | |
N009 ( 1, 1) [000156] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
Blocks that generate CSE def/uses | |
BB01 cseGen = 00000003 | |
BB02 cseGen = 0000003F | |
BB05 cseGen = 0000003F | |
Performing DataFlow for ValnumCSE's | |
StartMerge BB01 | |
:: cseOut = 0000007F | |
EndMerge BB01 | |
:: cseIn = 00000000 | |
:: cseGen = 00000003 | |
=> cseOut = 00000003 | |
!= preMerge = 0000007F, => true | |
StartMerge BB02 | |
:: cseOut = 0000007F | |
Merge BB02 and BB01 | |
:: cseIn = 0000007F | |
:: cseOut = 0000007F | |
=> cseIn = 00000003 | |
EndMerge BB02 | |
:: cseIn = 00000003 | |
-- cseKill = 00000015 | |
:: cseGen = 0000003F | |
=> cseOut = 0000003F | |
!= preMerge = 0000007F, => true | |
StartMerge BB06 | |
:: cseOut = 0000007F | |
Merge BB06 and BB01 | |
:: cseIn = 0000007F | |
:: cseOut = 0000007F | |
=> cseIn = 00000003 | |
EndMerge BB06 | |
:: cseIn = 00000003 | |
-- cseKill = 00000015 | |
:: cseGen = 00000000 | |
=> cseOut = 00000001 | |
!= preMerge = 0000007F, => true | |
StartMerge BB03 | |
:: cseOut = 0000007F | |
Merge BB03 and BB02 | |
:: cseIn = 0000007F | |
:: cseOut = 0000007F | |
=> cseIn = 0000003F | |
EndMerge BB03 | |
:: cseIn = 0000003F | |
:: cseGen = 00000000 | |
=> cseOut = 0000003F | |
!= preMerge = 0000007F, => true | |
StartMerge BB04 | |
:: cseOut = 0000007F | |
Merge BB04 and BB02 | |
:: cseIn = 0000007F | |
:: cseOut = 0000007F | |
=> cseIn = 0000003F | |
EndMerge BB04 | |
:: cseIn = 0000003F | |
:: cseGen = 00000000 | |
=> cseOut = 0000003F | |
!= preMerge = 0000007F, => true | |
StartMerge BB05 | |
:: cseOut = 0000007F | |
Merge BB05 and BB04 | |
:: cseIn = 0000007F | |
:: cseOut = 0000007F | |
=> cseIn = 0000003F | |
Merge BB05 and BB03 | |
:: cseIn = 0000003F | |
:: cseOut = 0000007F | |
=> cseIn = 0000003F | |
EndMerge BB05 | |
:: cseIn = 0000003F | |
:: cseGen = 0000003F | |
=> cseOut = 0000003F | |
!= preMerge = 0000007F, => true | |
StartMerge BB05 | |
:: cseOut = 0000003F | |
Merge BB05 and BB04 | |
:: cseIn = 0000003F | |
:: cseOut = 0000003F | |
=> cseIn = 0000003F | |
Merge BB05 and BB03 | |
:: cseIn = 0000003F | |
:: cseOut = 0000003F | |
=> cseIn = 0000003F | |
EndMerge BB05 | |
:: cseIn = 0000003F | |
:: cseGen = 0000003F | |
=> cseOut = 0000003F | |
!= preMerge = 0000003F, => false | |
After performing DataFlow for ValnumCSE's | |
BB01 cseIn = 00000000, cseGen = 00000003, cseOut = 00000003 | |
BB02 cseIn = 00000003, cseGen = 0000003F, cseOut = 0000003F | |
BB03 cseIn = 0000003F, cseGen = 00000000, cseOut = 0000003F | |
BB04 cseIn = 0000003F, cseGen = 00000000, cseOut = 0000003F | |
BB05 cseIn = 0000003F, cseGen = 0000003F, cseOut = 0000003F | |
BB06 cseIn = 00000003, cseGen = 00000000, cseOut = 00000001 | |
Labeling the CSEs with Use/Def information | |
BB01 [000012] Def of CSE #01 [weight=1 ] | |
BB02 [000111] Use of CSE #01 [weight=1 ] | |
BB02 [000110] Def of CSE #03 [weight=1 ] | |
BB02 [000124] Def of CSE #02 [weight=1 ] | |
BB05 [000144] Use of CSE #01 [weight=1 ] | |
BB05 [000149] Use of CSE #02 [weight=1 ] | |
BB05 [000143] Use of CSE #03 [weight=1 ] | |
************ Trees at start of optValnumCSE_Heuristic() | |
------------ BB01 [000..016) -> BB06 (cond), preds={} succs={BB02,BB06} | |
***** BB01 | |
STMT00000 (IL 0x000...0x008) | |
N008 ( 6, 6) [000005] -A-XG---R--- * ASG int <l:$147, c:$146> | |
N007 ( 1, 1) [000004] D------N---- +--* LCL_VAR int V01 loc0 d:1 <l:$145, c:$144> | |
N006 ( 6, 6) [000003] ---XG------- \--* ADD int <l:$147, c:$146> | |
N004 ( 4, 4) [000001] ---XG------- +--* IND int <l:$143, c:$142> | |
N003 ( 2, 2) [000088] -------N---- | \--* ADD byref $c0 | |
N001 ( 1, 1) [000000] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000087] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] $42 | |
N005 ( 1, 1) [000002] ------------ \--* CNS_INT int -1 $41 | |
***** BB01 | |
STMT00001 (IL 0x009...0x00F) | |
N006 ( 4, 4) [000009] -A-XG---R--- * ASG ref <l:$1c4, c:$1c3> | |
N005 ( 1, 1) [000008] D------N---- +--* LCL_VAR ref V02 loc1 d:1 <l:$1c2, c:$200> | |
N004 ( 4, 4) [000007] ---XG------- \--* IND ref <l:$1c4, c:$1c3> | |
N003 ( 2, 2) [000090] -------N---- \--* ADD byref $c1 | |
N001 ( 1, 1) [000006] ------------ +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000089] ------------ \--* CNS_INT int 4 field offset Fseq[_array] $43 | |
***** BB01 | |
STMT00002 (IL 0x010...0x014) | |
N005 ( 7, 7) [000014] ---X-------- * JTRUE void | |
N004 ( 5, 5) [000013] N--X---N-U-- \--* LE int <l:$14d, c:$14c> | |
N002 ( 3, 3) CSE #01 (def)[000012] ---X-------- +--* ARR_LENGTH int <l:$149, c:$148> | |
N001 ( 1, 1) [000011] ------------ | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N003 ( 1, 1) [000010] ------------ \--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
------------ BB02 [01C..040) -> BB04 (cond), preds={BB01} succs={BB03,BB04} | |
***** BB02 | |
STMT00003 (IL 0x01C...0x025) | |
N011 ( 11, 11) [000021] -A-XG---R--- * ASG int $VN.Void | |
N010 ( 4, 4) [000020] D--XG--N---- +--* IND int $153 | |
N009 ( 2, 2) [000093] -------N---- | \--* ADD byref $c2 | |
N007 ( 1, 1) [000015] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N008 ( 1, 1) [000092] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N006 ( 6, 6) [000019] ---XG------- \--* ADD int <l:$155, c:$154> | |
N004 ( 4, 4) [000017] ---XG------- +--* IND int <l:$151, c:$150> | |
N003 ( 2, 2) [000095] -------N---- | \--* ADD byref $c2 | |
N001 ( 1, 1) [000016] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000094] ------------ | \--* CNS_INT int 12 field offset Fseq[_version] $44 | |
N005 ( 1, 1) [000018] ------------ \--* CNS_INT int 1 $45 | |
***** BB02 | |
STMT00004 (IL 0x02A...0x02C) | |
N006 ( 6, 6) [000025] -A-XG------- * ASG int $VN.Void | |
N004 ( 4, 4) [000024] D--XG--N---- +--* IND int $145 | |
N003 ( 2, 2) [000097] -------N---- | \--* ADD byref $c0 | |
N001 ( 1, 1) [000022] ------------ | +--* LCL_VAR ref V00 this u:1 $80 | |
N002 ( 1, 1) [000096] ------------ | \--* CNS_INT int 8 field offset Fseq[_size] $42 | |
N005 ( 1, 1) [000023] ------------ \--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
***** BB02 | |
STMT00005 (IL 0x031...0x038) | |
N017 ( 24, 25) [000125] -A-XG---R--- * ASG ref <l:$341, c:$204> | |
N016 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 <l:$340, c:$204> | |
N015 ( 20, 22) CSE #02 (def)[000124] ---XG------- \--* IND ref <l:$341, c:$204> | |
N014 ( 17, 20) CSE #03 (def)[000110] ---XG------- \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N004 ( 8, 11) [000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
N001 ( 1, 1) [000113] ------------ | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 3, 3) CSE #01 (use)[000111] ---X-------- | \--* ARR_LENGTH int <l:$149, c:$148> | |
N002 ( 1, 1) [000112] ------------ | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N013 ( 9, 9) [000115] ----G------- \--* ADDR byref $300 | |
N012 ( 5, 5) [000116] a---G--N---- \--* IND struct <l:$340, c:$380> | |
N011 ( 4, 4) [000117] -------N---- \--* ADD byref $300 | |
N005 ( 1, 1) [000118] ------------ +--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N010 ( 3, 3) [000119] -------N---- \--* ADD int <l:$159, c:$158> | |
N008 ( 2, 2) [000120] -------N---- +--* LSH int <l:$157, c:$156> | |
N006 ( 1, 1) [000121] i----------- | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N007 ( 1, 1) [000122] -------N---- | \--* CNS_INT int 2 $46 | |
N009 ( 1, 1) [000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
***** BB02 | |
STMT00006 (IL 0x039...0x03E) | |
N004 ( 3, 3) [000038] -A---O--R--- * ASG int $1d3 | |
N003 ( 1, 1) [000037] D------N---- +--* LCL_VAR int V05 tmp0 d:1 $1d3 | |
N002 ( 3, 2) [000036] #----O------ \--* IND int $1d3 | |
N001 ( 1, 1) [000035] ------------ \--* LCL_VAR ref V00 this u:1 (last use) $80 | |
***** BB02 | |
STMT00014 (IL ???... ???) | |
N011 ( 14, 13) [000160] ------------ * JTRUE void | |
N010 ( 12, 11) [000051] J------N---- \--* EQ int <l:$15e, c:$15d> | |
N008 ( 10, 9) [000047] n----------- +--* IND int <l:$284, c:$184> | |
N007 ( 8, 7) [000046] -------N---- | \--* ADD int $15c | |
N005 ( 7, 6) [000044] #----------- | +--* IND int $1d5 | |
N004 ( 4, 4) [000043] #----------- | | \--* IND int $1d4 | |
N003 ( 2, 2) [000042] -------N---- | | \--* ADD int $15b | |
N001 ( 1, 1) [000040] ------------ | | +--* LCL_VAR int V05 tmp0 u:1 (last use) $1d3 | |
N002 ( 1, 1) [000041] ------------ | | \--* CNS_INT int 32 $47 | |
N006 ( 1, 1) [000045] ------------ | \--* CNS_INT int 12 $44 | |
N009 ( 1, 1) [000050] ------------ \--* CNS_INT int 0 $40 | |
------------ BB03 [???..???) -> BB05 (always), preds={BB02} succs={BB05} | |
------------ BB04 [???..???), preds={BB02} succs={BB05} | |
------------ BB05 [040..052) (return), preds={BB04,BB03} succs={} | |
***** BB05 | |
STMT00011 (IL 0x040...0x045) | |
N003 ( 5, 4) [000130] -A------R--- * ASG ref $VN.Null | |
N002 ( 3, 2) [000128] D------N---- +--* LCL_VAR ref V08 tmp3 d:1 $VN.Null | |
N001 ( 1, 1) [000129] ------------ \--* CNS_INT ref null $VN.Null | |
***** BB05 | |
STMT00012 (IL ???...0x04B) | |
N017 ( 24, 25) [000159] -A-XG------- * ASG ref $VN.Void | |
N015 ( 20, 22) [000157] *--XG--N---- +--* IND ref $VN.Null | |
N014 ( 17, 20) CSE #03 (use)[000143] ---XG------- | \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N004 ( 8, 11) [000147] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
N001 ( 1, 1) [000146] ------------ | | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 3, 3) CSE #01 (use)[000144] ---X-------- | | \--* ARR_LENGTH int <l:$149, c:$148> | |
N002 ( 1, 1) [000145] ------------ | | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N013 ( 9, 9) [000148] ----G------- | \--* ADDR byref $300 | |
N012 ( 5, 5) CSE #02 (use)[000149] a---G------- | \--* IND struct <l:$340, c:$381> | |
N011 ( 4, 4) [000150] -------N---- | \--* ADD byref $300 | |
N005 ( 1, 1) [000151] ------------ | +--* LCL_VAR ref V02 loc1 u:1 (last use) <l:$1c2, c:$200> | |
N010 ( 3, 3) [000152] -------N---- | \--* ADD int <l:$159, c:$158> | |
N008 ( 2, 2) [000153] -------N---- | +--* LSH int <l:$157, c:$156> | |
N006 ( 1, 1) [000154] i----------- | | +--* LCL_VAR int V01 loc0 u:1 (last use) <l:$145, c:$144> | |
N007 ( 1, 1) [000155] -------N---- | | \--* CNS_INT int 2 $46 | |
N009 ( 1, 1) [000156] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
N016 ( 3, 2) [000158] ------------ \--* LCL_VAR ref V08 tmp3 u:1 (last use) $VN.Null | |
***** BB05 | |
STMT00010 (IL 0x050...0x051) | |
N002 ( 4, 3) [000071] ------------ * RETURN ref $208 | |
N001 ( 3, 2) [000070] ------------ \--* LCL_VAR ref V07 tmp2 u:1 (last use) <l:$340, c:$204> | |
------------ BB06 [016..01C) (throw), preds={BB01} succs={} | |
***** BB06 | |
STMT00013 (IL 0x016...0x017) | |
N003 ( 15, 8) [000083] --CXG------- * CALL void Stack`1.ThrowForEmptyStack $VN.Void | |
N002 ( 1, 1) [000082] ------------ this in ecx \--* LCL_VAR ref V00 this u:1 (last use) $80 | |
------------------------------------------------------------------------------------------------------------------- | |
Aggressive CSE Promotion cutoff is 300 | |
Moderate CSE Promotion cutoff is 100 | |
enregCount is 7 | |
Framesize estimate is 0x0000 | |
We have a small frame | |
Sorted CSE candidates: | |
CSE #02, {$340, $4 } useCnt=1: [def=100, use=100, cost= 20 ] | |
:: N015 ( 20, 22) CSE #02 (def)[000124] ---XG------- * IND ref <l:$341, c:$204> | |
CSE #03, {$c6 , $1ce} useCnt=1: [def=100, use=100, cost= 17 ] | |
:: N014 ( 17, 20) CSE #03 (def)[000110] ---XG------- * COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
CSE #01, {$241, $1c6} useCnt=2: [def=100, use=200, cost= 3 ] | |
:: N002 ( 3, 3) CSE #01 (def)[000012] ---X-------- * ARR_LENGTH int <l:$149, c:$148> | |
Considering CSE #02 {$340, $4 } [def=100, use=100, cost= 20 ] | |
CSE Expression : | |
N015 ( 20, 22) CSE #02 (def)[000124] ---XG------- * IND ref <l:$341, c:$204> | |
N014 ( 17, 20) CSE #03 (def)[000110] ---XG------- \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N004 ( 8, 11) [000114] ---X-------- +--* ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
N001 ( 1, 1) [000113] ------------ | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 3, 3) CSE #01 (use)[000111] ---X-------- | \--* ARR_LENGTH int <l:$149, c:$148> | |
N002 ( 1, 1) [000112] ------------ | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N013 ( 9, 9) [000115] ----G------- \--* ADDR byref $300 | |
N012 ( 5, 5) [000116] a---G--N---- \--* IND struct <l:$340, c:$380> | |
N011 ( 4, 4) [000117] -------N---- \--* ADD byref $300 | |
N005 ( 1, 1) [000118] ------------ +--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N010 ( 3, 3) [000119] -------N---- \--* ADD int <l:$159, c:$158> | |
N008 ( 2, 2) [000120] -------N---- +--* LSH int <l:$157, c:$156> | |
N006 ( 1, 1) [000121] i----------- | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N007 ( 1, 1) [000122] -------N---- | \--* CNS_INT int 2 $46 | |
N009 ( 1, 1) [000123] ------------ \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
Aggressive CSE Promotion (300 >= 300) | |
cseRefCnt=300, aggressiveRefCnt=300, moderateRefCnt=100 | |
defCnt=100, useCnt=100, cost=20, size=22 | |
def_cost=1, use_cost=1, extra_no_cost=42, extra_yes_cost=0 | |
CSE cost savings check (2042 >= 200) passes | |
Promoting CSE: | |
lvaGrabTemp returning 9 (V09 rat0) (a long lifetime temp) called for CSE - aggressive. | |
CSE #02 is single-def, so associated CSE temp V09 will be in SSA | |
CSE #02 def at [000124] replaced in BB02 with def of V09 | |
optValnumCSE morphed tree: | |
N021 ( 31, 30) [000125] -A-XG---R--- * ASG ref <l:$341, c:$204> | |
N020 ( 3, 2) [000109] D------N---- +--* LCL_VAR ref V07 tmp2 d:1 <l:$340, c:$204> | |
N019 ( 27, 27) [000168] -A-XG------- \--* COMMA ref <l:$341, c:$204> | |
N017 ( 24, 25) [000166] -A-XG---R--- +--* ASG ref $VN.Void | |
N016 ( 3, 2) [000165] D------N---- | +--* LCL_VAR ref V09 cse0 d:1 <l:$341, c:$204> | |
N015 ( 20, 22) [000124] ---XG------- | \--* IND ref <l:$341, c:$204> | |
N014 ( 17, 20) CSE #03 (def)[000110] ---XG------- | \--* COMMA byref Zero Fseq[Value] <l:$c6, c:$c5> | |
N004 ( 8, 11) [000114] ---X-------- | +--* ARR_BOUNDS_CHECK_Rng void <l:$1d0, c:$1cf> | |
N001 ( 1, 1) [000113] ------------ | | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N003 ( 3, 3) CSE #01 (use)[000111] ---X-------- | | \--* ARR_LENGTH int <l:$149, c:$148> | |
N002 ( 1, 1) [000112] ------------ | | \--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N013 ( 9, 9) [000115] ----G------- | \--* ADDR byref $300 | |
N012 ( 5, 5) [000116] a---G--N---- | \--* IND struct <l:$340, c:$380> | |
N011 ( 4, 4) [000117] -------N---- | \--* ADD byref $300 | |
N005 ( 1, 1) [000118] ------------ | +--* LCL_VAR ref V02 loc1 u:1 <l:$1c2, c:$200> | |
N010 ( 3, 3) [000119] -------N---- | \--* ADD int <l:$159, c:$158> | |
N008 ( 2, 2) [000120] -------N---- | +--* LSH int <l:$157, c:$156> | |
N006 ( 1, 1) [000121] i----------- | | +--* LCL_VAR int V01 loc0 u:1 <l:$145, c:$144> | |
N007 ( 1, 1) [000122] -------N---- | | \--* CNS_INT int 2 $46 | |
N009 ( 1, 1) [000123] ------------ | \--* CNS_INT int 8 Fseq[#FirstElem] $42 | |
N018 ( 3, 2) [000167] ------------ \--* LCL_VAR ref V09 cse0 u:1 <l:$341, c:$204> | |
ERRORLEVEL=1073741855 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment