Created
January 12, 2017 16:14
-
-
Save mskvortsov/e4e922e8ff160bec5ae6194dd22badcc to your computer and use it in GitHub Desktop.
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
****** START compiling Test:LongId(long):long (MethodHash=0f9627fe) | |
Generating code for Unix arm | |
OPTIONS: compCodeOpt = BLENDED_CODE | |
OPTIONS: compDbgCode = false | |
OPTIONS: compDbgInfo = true | |
OPTIONS: compDbgEnC = false | |
OPTIONS: compProcedureSplitting = false | |
OPTIONS: compProcedureSplittingEH = false | |
OPTIONS: Stack probing is DISABLED | |
IL to import: | |
IL_0000 02 ldarg.0 | |
IL_0001 2a ret | |
Set preferred register for V00 to [r0] | |
Additional preferred register for V00 from [r0] to [r0-r1] | |
Arg #0 passed in register(s) r0,r1 | |
; Initial local variable assignments | |
; | |
; V00 arg0 long | |
*************** In compInitDebuggingInfo() for Test:LongId(long):long | |
getVars() returned cVars = 0, extendOthers = true | |
info.compVarScopesCount = 1 | |
VarNum LVNum Name Beg End | |
0: 00h 00h V00 arg0 000h 002h | |
info.compStmtOffsetsCount = 0 | |
info.compStmtOffsetsImplicit = 0005h ( STACK_EMPTY CALL_SITE ) | |
*************** In fgFindBasicBlocks() for Test:LongId(long):long | |
Jump targets: | |
none | |
New Basic Block BB01 [000951B4] created. | |
BB01 [000..002) | |
IL Code Size,Instr 2, 2, Basic Block count 1, Local Variable Num,Ref count 1, 1 for method Test:LongId(long):long | |
OPTIONS: opts.MinOpts() == false | |
Basic block list for 'Test:LongId(long):long' | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) | |
------------------------------------------------------------------------------------------------------------------------------------- | |
*************** In impImport() for Test:LongId(long):long | |
impImportBlockPending for BB01 | |
Importing BB01 (PC=000) of 'Test:LongId(long):long' | |
[ 0] 0 (0x000) ldarg.0 | |
[ 1] 1 (0x001) ret | |
[000003] ------------- ▌ stmtExpr void (IL 0x000... ???) | |
[000002] ------------- └──▌ return long | |
[000001] ------------- └──▌ lclVar long V00 arg0 | |
New BlockSet epoch 1, # of blocks (including unused BB00): 2, bitset array size: 1 (short) | |
*************** In fgMorph() | |
*************** In fgDebugCheckBBlist | |
*************** In fgInline() | |
*************** After fgInline() | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i | |
------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..002) (return), preds={} succs={} | |
***** BB01, stmt 1 | |
[000003] ------------- ▌ stmtExpr void (IL 0x000...0x001) | |
[000002] ------------- └──▌ return long | |
[000001] ------------- └──▌ lclVar long V00 arg0 | |
------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
**************** Inline Tree | |
Inlines into 06000001 Test:LongId(long):long | |
Budget: initialTime=66, finalTime=66, initialBudget=660, currentBudget=660 | |
Budget: initialSize=176, finalSize=176 | |
*************** After fgAddInternal() | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i | |
------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
*************** In fgDebugCheckBBlist | |
*************** In fgPromoteStructs() | |
*************** In fgMarkAddressExposedLocals() | |
*************** In fgMorphBlocks() | |
Morphing BB01 of 'Test:LongId(long):long' | |
fgMorphTree BB01, stmt 1 (before) | |
[000002] ------------- ▌ return long | |
[000001] ------------- └──▌ lclVar long V00 arg0 | |
Renumbering the basic blocks for fgComputePred | |
*************** Before renumbering the basic blocks | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i | |
------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
*************** After renumbering the basic blocks | |
=============== No blocks renumbered! | |
*************** In fgComputePreds() | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i | |
------------------------------------------------------------------------------------------------------------------------------------- | |
*************** After fgComputePreds() | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target | |
------------------------------------------------------------------------------------------------------------------------------------- | |
*************** In fgComputeEdgeWeights() | |
fgComputeEdgeWeights() we do not have any profile data so we are not using the edge weights | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target | |
------------------------------------------------------------------------------------------------------------------------------------- | |
fgComputeEdgeWeights() was able to compute exact edge weights for all of the 0 edges, using 1 passes. | |
*************** In fgCreateFunclets() | |
After fgCreateFunclets() | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target | |
------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
*************** In fgDebugCheckBBlist | |
*************** In optOptimizeLayout() | |
*************** Exception Handling table is empty | |
*************** In fgDebugCheckBBlist | |
*************** In fgUpdateFlowGraph() | |
Before updating the flow graph: | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target | |
------------------------------------------------------------------------------------------------------------------------------------- | |
*************** In fgDebugCheckBBlist | |
*************** In fgUpdateFlowGraph() | |
Before updating the flow graph: | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target | |
------------------------------------------------------------------------------------------------------------------------------------- | |
*************** In fgDebugCheckBBlist | |
*************** In fgComputeReachability | |
*************** In fgDebugCheckBBlist | |
Renumbering the basic blocks for fgComputeReachability pass #1 | |
*************** Before renumbering the basic blocks | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target | |
------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
*************** After renumbering the basic blocks | |
=============== No blocks renumbered! | |
Enter blocks: BB01 | |
After computing reachability sets: | |
------------------------------------------------ | |
BBnum Reachable by | |
------------------------------------------------ | |
BB01 : BB01 | |
After computing reachability: | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target | |
------------------------------------------------------------------------------------------------------------------------------------- | |
*************** In fgDebugCheckBBlist | |
*************** In fgComputeDoms | |
*************** In fgDebugCheckBBlist | |
Dominator computation start blocks (those blocks with no incoming edges): | |
BB01 | |
------------------------------------------------ | |
BBnum Dominated by | |
------------------------------------------------ | |
BB01: BB01 | |
Inside fgBuildDomTree | |
After computing the Dominance Tree: | |
*************** In Allocate Objects | |
Trees before Allocate Objects | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target | |
------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..002) (return), preds={} succs={} | |
***** BB01, stmt 1 | |
[000003] ------------- ▌ stmtExpr void (IL 0x000...0x001) | |
[000002] -----+------- └──▌ return long | |
[000001] -----+------- └──▌ lclVar long V00 arg0 | |
------------------------------------------------------------------------------------------------------------------- | |
*************** Exiting Allocate Objects | |
Trees after Allocate Objects | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target | |
------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..002) (return), preds={} succs={} | |
***** BB01, stmt 1 | |
[000003] ------------- ▌ stmtExpr void (IL 0x000...0x001) | |
[000002] -----+------- └──▌ return long | |
[000001] -----+------- └──▌ lclVar long V00 arg0 | |
------------------------------------------------------------------------------------------------------------------- | |
*************** In fgDebugCheckBBlist | |
*************** In optOptimizeLoops() | |
*************** In fgDebugCheckBBlist | |
*************** In optCloneLoops() | |
*************** In lvaMarkLocalVars() | |
lvaGrabTemp returning 1 (V01 tmp0) (a long lifetime temp) called for OutgoingArgSpace. | |
*** marking local variables in block BB01 (weight= 1 ) | |
[000003] ------------- ▌ stmtExpr void (IL 0x000...0x001) | |
[000002] -----+------- └──▌ return long | |
[000001] -----+------- └──▌ lclVar long V00 arg0 | |
New refCnts for V00: refCnt = 1, refCntWtd = 1 | |
New refCnts for V00: refCnt = 2, refCntWtd = 2 | |
New refCnts for V00: refCnt = 3, refCntWtd = 3 | |
*************** In optAddCopies() | |
refCnt table for 'LongId': | |
V00 arg0 [ long]: refCnt = 3, refCntWtd = 3 pref [r0-r1] | |
V01 OutArgs [lclBlk]: refCnt = 1, refCntWtd = 1 | |
*************** In optOptimizeBools() | |
*************** In fgDebugCheckBBlist | |
*************** In fgFindOperOrder() | |
*************** In fgSetBlockOrder() | |
The biggest BB has 2 tree nodes | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target | |
------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..002) (return), preds={} succs={} | |
***** BB01, stmt 1 | |
( 4, 3) [000003] ------------- ▌ stmtExpr void (IL 0x000...0x001) | |
N002 ( 4, 3) [000002] ------------- └──▌ return long | |
N001 ( 3, 2) [000001] ------------- └──▌ lclVar long V00 arg0 | |
------------------------------------------------------------------------------------------------------------------- | |
*************** In SsaBuilder::Build() | |
[SsaBuilder] Max block count is 2. | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target | |
------------------------------------------------------------------------------------------------------------------------------------- | |
*************** Exception Handling table is empty | |
[SsaBuilder] Topologically sorted the graph. | |
[SsaBuilder::ComputeImmediateDom] | |
*************** In SsaBuilder::ComputeDominators(BasicBlock** postOrder, int count, ...) | |
*************** In SsaBuilder::InsertPhiFunctions() | |
*************** In fgLocalVarLiveness() | |
*************** In fgPerBlockLocalVarLiveness() | |
BB01 USE(1)={V00} | |
DEF(0)={ } | |
*************** In fgInterBlockLocalVarLiveness() | |
BB liveness after fgLiveVarAnalysis(): | |
BB01 IN (1)={V00} | |
OUT(0)={ } | |
Inserting phi functions: | |
*************** In SsaBuilder::RenameVariables() | |
After fgSsaBuild: | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target | |
------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..002) (return), preds={} succs={} | |
***** BB01, stmt 1 | |
( 4, 3) [000003] ------------- ▌ stmtExpr void (IL 0x000...0x001) | |
N002 ( 4, 3) [000002] ------------- └──▌ return long | |
N001 ( 3, 2) [000001] ------------- └──▌ lclVar long V00 arg0 u:2 (last use) | |
------------------------------------------------------------------------------------------------------------------- | |
*************** In optEarlyProp() | |
*************** In fgValueNumber() | |
Heap Initial Value in BB01 is: $c0 | |
The SSA definition for heap (#2) at start of BB01 is $c0 {InitVal($41)} | |
***** BB01, stmt 1 (before) | |
N002 ( 4, 3) [000002] ------------- ▌ return long | |
N001 ( 3, 2) [000001] ------------- └──▌ lclVar long V00 arg0 u:2 (last use) | |
N001 [000001] lclVar V00 arg0 u:2 (last use) => $80 {InitVal($40)} | |
N002 [000002] return => $100 {100} | |
***** BB01, stmt 1 (after) | |
N002 ( 4, 3) [000002] ------------- ▌ return long $100 | |
N001 ( 3, 2) [000001] ------------- └──▌ lclVar long V00 arg0 u:2 (last use) $80 | |
finish(BB01). | |
*************** In optVnCopyProp() | |
*************** In SsaBuilder::ComputeDominators(Compiler*, ...) | |
Copy Assertion for BB01 | |
Live vars: {V00} => {} | |
*************** In optOptimizeCSEs() | |
Blocks/Trees at start of optOptimizeCSE phase | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target | |
------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..002) (return), preds={} succs={} | |
***** BB01, stmt 1 | |
( 4, 3) [000003] ------------- ▌ stmtExpr void (IL 0x000...0x001) | |
N002 ( 4, 3) [000002] ------------- └──▌ return long $100 | |
N001 ( 3, 2) [000001] ------------- └──▌ lclVar long V00 arg0 u:2 (last use) $80 | |
------------------------------------------------------------------------------------------------------------------- | |
*************** In optOptimizeValnumCSEs() | |
*************** In optAssertionPropMain() | |
Blocks/Trees at start of phase | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target | |
------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..002) (return), preds={} succs={} | |
***** BB01, stmt 1 | |
( 4, 3) [000003] ------------- ▌ stmtExpr void (IL 0x000...0x001) | |
N002 ( 4, 3) [000002] ------------- └──▌ return long $100 | |
N001 ( 3, 2) [000001] ------------- └──▌ lclVar long V00 arg0 u:2 (last use) $80 | |
------------------------------------------------------------------------------------------------------------------- | |
*************** In OptimizeRangeChecks() | |
Blocks/trees before phase | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target | |
------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..002) (return), preds={} succs={} | |
***** BB01, stmt 1 | |
( 4, 3) [000003] ------------- ▌ stmtExpr void (IL 0x000...0x001) | |
N002 ( 4, 3) [000002] ------------- └──▌ return long $100 | |
N001 ( 3, 2) [000001] ------------- └──▌ lclVar long V00 arg0 u:2 (last use) $80 | |
------------------------------------------------------------------------------------------------------------------- | |
*************** In fgDetermineFirstColdBlock() | |
No procedure splitting will be done for this method | |
*************** In IR Rationalize | |
Trees before IR Rationalize | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target | |
------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..002) (return), preds={} succs={} | |
***** BB01, stmt 1 | |
( 4, 3) [000003] ------------- ▌ stmtExpr void (IL 0x000...0x001) | |
N002 ( 4, 3) [000002] ------------- └──▌ return long $100 | |
N001 ( 3, 2) [000001] ------------- └──▌ lclVar long V00 arg0 u:2 (last use) $80 | |
------------------------------------------------------------------------------------------------------------------- | |
*************** Exiting IR Rationalize | |
Trees after IR Rationalize | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target LIR | |
------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..002) (return), preds={} succs={} | |
( 4, 3) [000003] ------------- il_offset void IL offset: 0 | |
N001 ( 3, 2) [000001] ------------- t1 = lclVar long V00 arg0 u:2 (last use) $80 | |
┌──▌ t1 long | |
N002 ( 4, 3) [000002] ------------- ▌ return long $100 | |
------------------------------------------------------------------------------------------------------------------- | |
*************** In fgDebugCheckBBlist | |
*************** In fgDebugCheckBBlist | |
*************** In lvaAssignFrameOffsets(PRE_REGALLOC_FRAME_LAYOUT) | |
Assign V00 arg0, size=8, stkOffs=-0x50 | |
; Pre-RegAlloc local variable assignments | |
; | |
; V00 arg0 [V00,T00] ( 3, 3 ) long -> [sp+0x08] | |
;# V01 OutArgs [V01 ] ( 1, 1 ) lclBlk ( 0) [sp+0x00] | |
*************** In Lowering | |
Trees before Lowering | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target LIR | |
------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..002) (return), preds={} succs={} | |
( 4, 3) [000003] ------------- il_offset void IL offset: 0 | |
N001 ( 3, 2) [000001] ------------- t1 = lclVar long V00 arg0 u:2 (last use) $80 | |
┌──▌ t1 long | |
N002 ( 4, 3) [000002] ------------- ▌ return long $100 | |
------------------------------------------------------------------------------------------------------------------- | |
Promoting long local V00: | |
lvaGrabTemp returning 2 (V02 rat0) (a long lifetime temp) called for field V00.lo (fldOffset=0x0). | |
lvaGrabTemp returning 3 (V03 rat1) (a long lifetime temp) called for field V00.hi (fldOffset=0x4). | |
lvaTable after lvaPromoteLongVars | |
; Pre-RegAlloc local variable assignments | |
; | |
; V00 arg0 [V00,T00] ( 3, 3 ) long -> [sp+0x08] | |
;# V01 OutArgs [V01 ] ( 1, 1 ) lclBlk ( 0) [sp+0x00] | |
;* V02 rat0 [V02 ] ( 0, 0 ) int -> zero-ref V00.lo(offs=0x00) | |
;* V03 rat1 [V03 ] ( 0, 0 ) int -> zero-ref V00.hi(offs=0x04) | |
Decomposing TYP_LONG tree. BEFORE: | |
N001 ( 3, 2) [000001] ------------- t1 = lclVar long (P) V00 arg0 u:2 | |
▌ int V00.hi (offs=0x00) -> V02 rat0 | |
▌ int V00.hi (offs=0x04) -> V03 rat1 $80 | |
New refCnts for V00: refCnt = 2, refCntWtd = 2 | |
New refCnts for V00: refCnt = 3, refCntWtd = 3 | |
New refCnts for V02: refCnt = 1, refCntWtd = 1 | |
New refCnts for V00: refCnt = 4, refCntWtd = 4 | |
New refCnts for V03: refCnt = 1, refCntWtd = 1 | |
Decomposing TYP_LONG tree. AFTER: | |
N001 ( 3, 2) [000001] ------------- t1 = lclVar int V02 rat0 $80 | |
[000006] ------------- t6 = lclVar int V03 rat1 | |
┌──▌ t1 int | |
├──▌ t6 int | |
[000007] ------------- t7 = ▌ gt_long long | |
Decomposing TYP_LONG tree. BEFORE: | |
N001 ( 3, 2) [000001] ------------- t1 = lclVar int V02 rat0 $80 | |
[000006] ------------- t6 = lclVar int V03 rat1 | |
┌──▌ t1 int | |
├──▌ t6 int | |
[000007] ------------- t7 = ▌ gt_long long | |
┌──▌ t7 long | |
N002 ( 4, 3) [000002] ------------- ▌ return long $100 | |
Decomposing TYP_LONG tree. AFTER: | |
N001 ( 3, 2) [000001] ------------- t1 = lclVar int V02 rat0 $80 | |
[000006] ------------- t6 = lclVar int V03 rat1 | |
┌──▌ t1 int | |
├──▌ t6 int | |
[000007] ------------- t7 = ▌ gt_long long | |
┌──▌ t7 long | |
N002 ( 4, 3) [000002] ------------- ▌ return long $100 | |
lowering GT_RETURN | |
N002 ( 4, 3) [000002] ------------- ▌ return long $100 | |
============Lower has completed modifying nodes, proceeding to initialize LSRA TreeNodeInfo structs... | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target LIR | |
------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..002) (return), preds={} succs={} | |
( 4, 3) [000003] ------------- il_offset void IL offset: 0 | |
N001 ( 3, 2) [000001] ------------- t1 = lclVar int V02 rat0 $80 | |
[000006] ------------- t6 = lclVar int V03 rat1 | |
┌──▌ t1 int | |
├──▌ t6 int | |
[000007] ------------- t7 = ▌ gt_long long | |
┌──▌ t7 long | |
N002 ( 4, 3) [000002] ------------- ▌ return long $100 | |
------------------------------------------------------------------------------------------------------------------- | |
*************** In fgLocalVarLiveness() | |
; Pre-RegAlloc local variable assignments | |
; | |
; V00 arg0 [V00,T00] ( 4, 4 ) long -> [sp+0x08] | |
;# V01 OutArgs [V01 ] ( 1, 1 ) lclBlk ( 0) [sp+0x00] | |
; V02 rat0 [V02 ] ( 1, 1 ) int -> [sp+0x00] V00.lo(offs=0x00) | |
; V03 rat1 [V03 ] ( 1, 1 ) int -> [sp+0x00] V00.hi(offs=0x04) | |
In fgLocalVarLivenessInit, sorting locals | |
refCnt table for 'LongId': | |
V00 arg0 [ long]: refCnt = 4, refCntWtd = 4 pref [r0-r1] | |
V01 OutArgs [lclBlk]: refCnt = 1, refCntWtd = 1 | |
V02 rat0 [ int]: refCnt = 1, refCntWtd = 1 | |
V03 rat1 [ int]: refCnt = 1, refCntWtd = 1 | |
*************** In fgPerBlockLocalVarLiveness() | |
BB01 USE(0)={} | |
DEF(0)={} | |
*************** In fgInterBlockLocalVarLiveness() | |
BB liveness after fgLiveVarAnalysis(): | |
BB01 IN (0)={} | |
OUT(0)={} | |
*************** In fgUpdateFlowGraph() | |
Before updating the flow graph: | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target LIR | |
------------------------------------------------------------------------------------------------------------------------------------- | |
*************** In fgDebugCheckBBlist | |
Liveness pass finished after lowering, IR: | |
lvasortagain = 0 | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target LIR | |
------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..002) (return), preds={} succs={} | |
( 4, 3) [000003] ------------- il_offset void IL offset: 0 | |
N001 ( 3, 2) [000001] ------------- t1 = lclVar int V02 rat0 $80 | |
[000006] ------------- t6 = lclVar int V03 rat1 | |
┌──▌ t1 int | |
├──▌ t6 int | |
[000007] ------------- t7 = ▌ gt_long long | |
┌──▌ t7 long | |
N002 ( 4, 3) [000002] ------------- ▌ return long $100 | |
------------------------------------------------------------------------------------------------------------------- | |
LSRA Block Sequence: BB01( 1 ) | |
TreeNodeInfoInit for: N003 ( 4, 3) [000003] ------------- ▌ il_offset void IL offset: 0 REG NA | |
TreeNodeInfoInit for: N005 ( 3, 2) [000001] ------------- ▌ lclVar int V02 rat0 REG NA $80 | |
TreeNodeInfoInit for: N007 (???,???) [000006] ------------- ▌ lclVar int V03 rat1 REG NA | |
TreeNodeInfoInit for: N009 (???,???) [000007] ------------- ▌ gt_long long REG NA | |
TreeNodeInfoInit for: N011 ( 4, 3) [000002] ------------- ▌ return long REG NA $100 | |
----------------------------- | |
TREE NODE INFO DUMP | |
----------------------------- | |
N003 ( 4, 3) [000003] ------------- ▌ il_offset void IL offset: 0 REG NA | |
+<TreeNodeInfo @ 3 0=0 0i 0f src=[allInt] int=[allInt] dst=[allInt] I> | |
N005 ( 3, 2) [000001] ------------- ▌ lclVar int V02 rat0 REG NA $80 | |
+<TreeNodeInfo @ 5 1=0 0i 0f src=[r0] int=[allInt] dst=[allInt] I> | |
N007 (???,???) [000006] ------------- ▌ lclVar int V03 rat1 REG NA | |
+<TreeNodeInfo @ 7 1=0 0i 0f src=[r1] int=[allInt] dst=[allInt] I> | |
N009 (???,???) [000007] ------------- ▌ gt_long long REG NA | |
+<TreeNodeInfo @ 9 0=0 0i 0f src=[allInt] int=[allInt] dst=[allInt] I> | |
N011 ( 4, 3) [000002] ------------- ▌ return long REG NA $100 | |
+<TreeNodeInfo @ 11 0=2 0i 0f src=[allInt] int=[allInt] dst=[allInt] I> | |
*************** Exiting Lowering | |
Trees after Lowering | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target LIR | |
------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..002) (return), preds={} succs={} | |
N003 ( 4, 3) [000003] ------------- il_offset void IL offset: 0 REG NA | |
N005 ( 3, 2) [000001] ------------- t1 = lclVar int V02 rat0 REG NA $80 | |
N007 (???,???) [000006] ------------- t6 = lclVar int V03 rat1 REG NA | |
┌──▌ t1 int | |
├──▌ t6 int | |
N009 (???,???) [000007] ------------- t7 = ▌ gt_long long REG NA | |
┌──▌ t7 long | |
N011 ( 4, 3) [000002] ------------- ▌ return long REG NA $100 | |
------------------------------------------------------------------------------------------------------------------- | |
*************** In fgDebugCheckBBlist | |
*************** In doLinearScan | |
Trees before linear scan register allocator (LSRA) | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target LIR | |
------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..002) (return), preds={} succs={} | |
N003 ( 4, 3) [000003] ------------- il_offset void IL offset: 0 REG NA | |
N005 ( 3, 2) [000001] ------------- t1 = lclVar int V02 rat0 REG NA $80 | |
N007 (???,???) [000006] ------------- t6 = lclVar int V03 rat1 REG NA | |
┌──▌ t1 int | |
├──▌ t6 int | |
N009 (???,???) [000007] ------------- t7 = ▌ gt_long long REG NA | |
┌──▌ t7 long | |
N011 ( 4, 3) [000002] ------------- ▌ return long REG NA $100 | |
------------------------------------------------------------------------------------------------------------------- | |
Clearing modified regs. | |
buildIntervals ======== | |
----------------- | |
LIVENESS: | |
----------------- | |
BB01 use def in out | |
{} | |
{} | |
{} | |
{} | |
Interval 0: RefPositions {} physReg:NA Preferences=[allInt] | |
Interval 1: RefPositions {} physReg:NA Preferences=[allInt] | |
Interval 2: RefPositions {} physReg:NA Preferences=[allInt] | |
Interval 3: RefPositions {} physReg:NA Preferences=[allInt] | |
FP callee save candidate vars: None | |
floatVarCount = 0; hasLoops = 0, singleExit = 1 | |
lvaTable after IdentifyCandidates | |
; Pre-RegAlloc local variable assignments | |
; | |
; V00 arg0 [V00 ] ( 4, 4 ) long -> [sp+0x08] | |
;# V01 OutArgs [V01 ] ( 1, 1 ) lclBlk ( 0) [sp+0x00] | |
; V02 rat0 [V02 ] ( 1, 1 ) int -> [sp+0x00] V00.lo(offs=0x00) | |
; V03 rat1 [V03 ] ( 1, 1 ) int -> [sp+0x00] V00.hi(offs=0x04) | |
TUPLE STYLE DUMP BEFORE LSRA | |
BB01 [000..002) (return), preds={} succs={} | |
===== | |
N003. il_offset IL offset: 0 REG NA | |
N005. t5* = V02 MEM | |
N007. t7 = V03 MEM | |
N009. gt_long | |
N011. return ; t5*,t7 | |
buildIntervals second part ======== | |
Int arg V00 in reg r0 | |
NEW BLOCK BB01 | |
<RefPosition #0 @0 RefTypeBB BB01 regmask=[]> | |
at start of tree, map contains: { } | |
N003. il_offset IL offset: 0 REG NA | |
consume=0 produce=0 | |
op | |
Def candidates [allInt], Use candidates [allInt] | |
at start of tree, map contains: { } | |
N005. t5* = V02 MEM | |
consume=0 produce=1 | |
t5 = op | |
Def candidates [allInt], Use candidates [r0] | |
Interval 4: RefPositions {} physReg:NA Preferences=[allInt] | |
<RefPosition #1 @6 RefTypeDef <Ivl:4> LCL_VAR BB01 regmask=[allInt]> | |
<RefPosition #1 @6 RefTypeDef <Ivl:4> LCL_VAR BB01 regmask=[allInt]> | |
at start of tree, map contains: { N005. lclVar -> (6.N005) } | |
N007. t7 = V03 MEM | |
consume=0 produce=1 | |
t7 = op | |
Def candidates [allInt], Use candidates [r1] | |
Interval 5: RefPositions {} physReg:NA Preferences=[allInt] | |
<RefPosition #2 @8 RefTypeDef <Ivl:5> LCL_VAR BB01 regmask=[allInt]> | |
<RefPosition #2 @8 RefTypeDef <Ivl:5> LCL_VAR BB01 regmask=[allInt]> | |
at start of tree, map contains: { N007. lclVar -> (8.N007); N005. lclVar -> (6.N005) } | |
N009. gt_long | |
consume=0 produce=0 | |
op | |
Def candidates [allInt], Use candidates [allInt] | |
at start of tree, map contains: { N009. gt_long -> (6.N005, 8.N007) } | |
N011. return | |
consume=2 produce=0 | |
op | |
t6 <RefPosition #3 @11 RefTypeFixedReg <Reg:r0 > BB01 regmask=[r0]> | |
<RefPosition #4 @11 RefTypeUse <Ivl:4> BB01 regmask=[r0] fixed> | |
t8 <RefPosition #5 @11 RefTypeFixedReg <Reg:r1 > BB01 regmask=[r1]> | |
<RefPosition #6 @11 RefTypeUse <Ivl:5> BB01 regmask=[r1] fixed> | |
Def candidates [allInt], Use candidates [allInt] | |
CALCULATING LAST USES for block 1, liveout={} | |
============================== | |
use: {} | |
def: {} | |
Linear scan intervals BEFORE VALIDATING INTERVALS: | |
Interval 0: (V00) RefPositions {} physReg:NA Preferences=[allInt] | |
Interval 1: (V01) RefPositions {} physReg:NA Preferences=[allInt] | |
Interval 2: (V02) (struct) RefPositions {} physReg:NA Preferences=[allInt] | |
Interval 3: (V03) (struct) RefPositions {} physReg:NA Preferences=[allInt] | |
Interval 4: RefPositions {#1@6 #4@11} physReg:NA Preferences=[r0] | |
Interval 5: RefPositions {#2@8 #6@11} physReg:NA Preferences=[r1] | |
------------ | |
REFPOSITIONS BEFORE VALIDATING INTERVALS: | |
------------ | |
<RefPosition #0 @0 RefTypeBB BB01 regmask=[]> | |
<RefPosition #1 @6 ->#4 RefTypeDef <Ivl:4> LCL_VAR BB01 regmask=[r0]> | |
<RefPosition #2 @8 ->#6 RefTypeDef <Ivl:5> LCL_VAR BB01 regmask=[r1]> | |
<RefPosition #3 @11 RefTypeFixedReg <Reg:r0 > BB01 regmask=[r0]> | |
<RefPosition #4 @11 RefTypeUse <Ivl:4> BB01 regmask=[r0] last fixed> | |
<RefPosition #5 @11 RefTypeFixedReg <Reg:r1 > BB01 regmask=[r1]> | |
<RefPosition #6 @11 RefTypeUse <Ivl:5> BB01 regmask=[r1] last fixed> | |
----------------- | |
----------------- | |
----------------- | |
----------------- | |
TUPLE STYLE DUMP WITH REF POSITIONS | |
Incoming Parameters: | |
BB01 [000..002) (return), preds={} succs={} | |
===== | |
N003. il_offset IL offset: 0 REG NA | |
N005. V02 MEM | |
Def:<I4>(#1) | |
N007. V03 MEM | |
Def:<I5>(#2) | |
N009. gt_long | |
N011. return | |
Use:<I4>(#4) Fixed:r0(#3) * | |
Use:<I5>(#6) Fixed:r1(#5) * | |
Linear scan intervals after buildIntervals: | |
Interval 0: (V00) RefPositions {} physReg:NA Preferences=[allInt] | |
Interval 1: (V01) RefPositions {} physReg:NA Preferences=[allInt] | |
Interval 2: (V02) (struct) RefPositions {} physReg:NA Preferences=[allInt] | |
Interval 3: (V03) (struct) RefPositions {} physReg:NA Preferences=[allInt] | |
Interval 4: RefPositions {#1@6 #4@11} physReg:NA Preferences=[r0] | |
Interval 5: RefPositions {#2@8 #6@11} physReg:NA Preferences=[r1] | |
*************** In LinearScan::allocateRegisters() | |
Linear scan intervals before allocateRegisters: | |
Interval 0: (V00) RefPositions {} physReg:NA Preferences=[allInt] | |
Interval 1: (V01) RefPositions {} physReg:NA Preferences=[allInt] | |
Interval 2: (V02) (struct) RefPositions {} physReg:NA Preferences=[allInt] | |
Interval 3: (V03) (struct) RefPositions {} physReg:NA Preferences=[allInt] | |
Interval 4: RefPositions {#1@6 #4@11} physReg:NA Preferences=[r0] | |
Interval 5: RefPositions {#2@8 #6@11} physReg:NA Preferences=[r1] | |
------------ | |
REFPOSITIONS BEFORE ALLOCATION: | |
------------ | |
<RefPosition #0 @0 RefTypeBB BB01 regmask=[]> | |
<RefPosition #1 @6 ->#4 RefTypeDef <Ivl:4> LCL_VAR BB01 regmask=[r0]> | |
<RefPosition #2 @8 ->#6 RefTypeDef <Ivl:5> LCL_VAR BB01 regmask=[r1]> | |
<RefPosition #3 @11 RefTypeFixedReg <Reg:r0 > BB01 regmask=[r0]> | |
<RefPosition #4 @11 RefTypeUse <Ivl:4> BB01 regmask=[r0] last fixed> | |
<RefPosition #5 @11 RefTypeFixedReg <Reg:r1 > BB01 regmask=[r1]> | |
<RefPosition #6 @11 RefTypeUse <Ivl:5> BB01 regmask=[r1] last fixed> | |
VAR REFPOSITIONS BEFORE ALLOCATION | |
--- V00 | |
--- V01 | |
--- V02 | |
--- V03 | |
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, 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. | |
─────────────────────────────┼────┤ | |
LocRP#Name Type Action Reg │r0 │ | |
─────────────────────────────┼────┤ | |
│----│ | |
0.#0 BB1 PredBB0 │----│ | |
6.#1 I4 Def Alloc r0 │I4 a│ | |
8.#2 I5 Def Alloc r1 │I4 a│I5 a│ | |
11.#3 r0 Fixd Keep r0 │I4 a│I5 a│ | |
11.#4 I4 Use * Keep r0 │I4 a│I5 a│ | |
11.#5 r1 Fixd Keep r1 │I4 a│I5 a│ | |
11.#6 I5 Use * Keep r1 │ │ │ | |
------------ | |
REFPOSITIONS AFTER ALLOCATION: | |
------------ | |
<RefPosition #0 @0 RefTypeBB BB01 regmask=[]> | |
<RefPosition #1 @6 ->#4 RefTypeDef <Ivl:4> LCL_VAR BB01 regmask=[r0]> | |
<RefPosition #2 @8 ->#6 RefTypeDef <Ivl:5> LCL_VAR BB01 regmask=[r1]> | |
<RefPosition #3 @11 RefTypeFixedReg <Reg:r0 > BB01 regmask=[r0]> | |
<RefPosition #4 @11 RefTypeUse <Ivl:4> BB01 regmask=[r0] last fixed> | |
<RefPosition #5 @11 RefTypeFixedReg <Reg:r1 > BB01 regmask=[r1]> | |
<RefPosition #6 @11 RefTypeUse <Ivl:5> BB01 regmask=[r1] last fixed> | |
VAR REFPOSITIONS AFTER ALLOCATION | |
--- V00 | |
--- V01 | |
--- V02 | |
--- V03 | |
Active intervals at end of allocation: | |
------------------------ | |
WRITING BACK ASSIGNMENTS | |
------------------------ | |
BB01 [000..002) (return), preds={} succs={} | |
<RefPosition #0 @0 RefTypeBB BB01 regmask=[]> | |
current : <RefPosition #1 @6 ->#4 RefTypeDef <Ivl:4> LCL_VAR BB01 regmask=[r0]> | |
N005. t5* = V02 MEM | |
curr = 6 mapped = 5 | |
current : <RefPosition #2 @8 ->#6 RefTypeDef <Ivl:5> LCL_VAR BB01 regmask=[r1]> | |
N007. t7 = V03 MEM | |
curr = 8 mapped = 7 | |
current : <RefPosition #3 @11 RefTypeFixedReg <Reg:r0 > BB01 regmask=[r0]> | |
current : <RefPosition #4 @11 RefTypeUse <Ivl:4> BB01 regmask=[r0] last fixed> | |
No tree node to write back to | |
current : <RefPosition #5 @11 RefTypeFixedReg <Reg:r1 > BB01 regmask=[r1]> | |
current : <RefPosition #6 @11 RefTypeUse <Ivl:5> BB01 regmask=[r1] last fixed> | |
No tree node to write back to | |
----------------------- | |
RESOLVING BB BOUNDARIES | |
----------------------- | |
Resolution Candidates: {} | |
Has NoCritical Edges | |
Prior to Resolution | |
BB01 use def in out | |
{} | |
{} | |
{} | |
{} | |
Var=Reg beg of BB01: none | |
Var=Reg end of BB01: none | |
RESOLVING EDGES | |
Trees after linear scan register allocator (LSRA) | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target LIR | |
------------------------------------------------------------------------------------------------------------------------------------- | |
------------ BB01 [000..002) (return), preds={} succs={} | |
N003 ( 4, 3) [000003] ------------- il_offset void IL offset: 0 REG NA | |
N005 ( 3, 2) [000001] ------------- t1 = lclVar int V02 rat0 REG r0 $80 | |
N007 (???,???) [000006] ------------- t6 = lclVar int V03 rat1 REG r1 | |
┌──▌ t1 int | |
├──▌ t6 int | |
N009 (???,???) [000007] ------------- t7 = ▌ gt_long long REG NA | |
┌──▌ t7 long | |
N011 ( 4, 3) [000002] ------------- ▌ return long REG NA $100 | |
------------------------------------------------------------------------------------------------------------------- | |
Final allocation | |
─────────────────────────────┼────┼────┤ | |
LocRP#Name Type Action Reg │r0 │r1 │ | |
─────────────────────────────┼────┼────┤ | |
0.#0 BB1 PredBB0 │ │ │ | |
6.#1 I4 Def Alloc r0 │I4 a│ │ | |
8.#2 I5 Def Alloc r1 │I4 a│I5 a│ | |
11.#3 r0 Fixd Keep r0 │I4 a│I5 a│ | |
11.#4 I4 Use * Keep r0 │I4 i│I5 a│ | |
11.#5 r1 Fixd Keep r1 │ │I5 a│ | |
11.#6 I5 Use * Keep r1 │ │I5 i│ | |
Recording the maximum number of concurrent spills: | |
<UNDEF>: 0 | |
void: 0 | |
bool: 0 | |
byte: 0 | |
ubyte: 0 | |
char: 0 | |
short: 0 | |
ushort: 0 | |
int: 0 | |
uint: 0 | |
long: 0 | |
ulong: 0 | |
float: 0 | |
double: 0 | |
ref: 0 | |
byref: 0 | |
array: 0 | |
struct: 0 | |
blk: 0 | |
lclBlk: 0 | |
pointer: 0 | |
function: 0 | |
unknown: 0 | |
---------- | |
LSRA Stats | |
---------- | |
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: | |
BB01 [000..002) (return), preds={} succs={} | |
===== | |
N003. il_offset IL offset: 0 REG NA | |
N005. r0* = V02 MEM | |
N007. r1 = V03 MEM | |
N009. gt_long | |
N011. return ; r0*,r1 | |
Var=Reg end of BB01: none | |
*************** In genGenerateCode() | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BBnum descAddr ref try hnd preds weight [IL range] [jump] [EH region] [flags] | |
------------------------------------------------------------------------------------------------------------------------------------- | |
BB01 [000951B4] 1 1 [000..002) (return) i label target LIR | |
------------------------------------------------------------------------------------------------------------------------------------- | |
*************** In fgDebugCheckBBlist | |
Finalizing stack frame | |
Recording Var Locations at start of BB01 | |
<none> | |
Modified regs: [r0-r1] | |
Callee-saved registers pushed: 2 [r11 lr] | |
*************** In lvaAssignFrameOffsets(FINAL_FRAME_LAYOUT) | |
Assign V00 arg0, size=8, stkOffs=-0x10 | |
; Final local variable assignments | |
; | |
; V00 arg0 [V00 ] ( 4, 4 ) long -> [sp+0x00] | |
;# V01 OutArgs [V01 ] ( 1, 1 ) lclBlk ( 0) [sp+0x00] | |
; V02 rat0 [V02 ] ( 1, 1 ) int -> [sp+0x18] V00.lo(offs=0x00) | |
; V03 rat1 [V03 ] ( 1, 1 ) int -> [sp+0x1C] V00.hi(offs=0x04) | |
; | |
; Lcl frame size = 8 | |
=============== Generating BB01 [000..002) (return), preds={} succs={} flags=0x00000000.40030020: i label target LIR | |
BB01 IN (0)={} | |
OUT(0)={} | |
Recording Var Locations at start of BB01 | |
<none> | |
Liveness not changing: 00000000 {} | |
Live regs: (unchanged) 0000 {} | |
GC regs: (unchanged) 0000 {} | |
Byref regs: (unchanged) 0000 {} | |
L_M55297_BB01: | |
Label: IG02, GCvars=00000000 {}, gcrefRegs=0000 {}, byrefRegs=0000 {} | |
Scope info: begin block BB01, IL range [000..002) | |
Scope info: open scopes = | |
<none> | |
Added IP mapping: 0x0000 STACK_EMPTY (G_M55297_IG02,ins#0,ofs#0) label | |
Generating: N003 ( 4, 3) [000003] ------------- ▌ il_offset void IL offset: 0 REG NA | |
Generating: N005 ( 3, 2) [000001] ------------- ▌ lclVar int V02 rat0 REG r0 $80 | |
IN0001: ldr r0, [sp+0x18] | |
Generating: N007 (???,???) [000006] ------------- ▌ lclVar int V03 rat1 REG r1 | |
IN0002: ldr r1, [sp+0x1c] | |
Generating: N009 (???,???) [000007] ------------- ▌ gt_long long REG NA | |
Generating: N011 ( 4, 3) [000002] ------------- ▌ return long REG NA $100 | |
Scope info: end block BB01, IL range [000..002) | |
Scope info: ending scope, LVnum=0 [000..002) | |
Scope info: open scopes = | |
<none> | |
Added IP mapping: EPILOG STACK_EMPTY (G_M55297_IG02,ins#2,ofs#4) label | |
Reserving epilog IG for block BB01 | |
G_M55297_IG02: ; offs=000000H, funclet=00 | |
*************** After placeholder IG creation | |
G_M55297_IG01: ; func=00, offs=000000H, size=0000H, gcrefRegs=0000 {} <-- Prolog IG | |
G_M55297_IG02: ; offs=000000H, size=0004H, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref | |
G_M55297_IG03: ; epilog placeholder, next placeholder=<END>, BB=000951B4H (BB01), epilog, emitadd <-- First placeholder <-- Last placeholder | |
; PrevGCVars=00000000 {}, PrevGCrefRegs=0000 {}, PrevByrefRegs=0000 {} | |
; InitGCVars=00000000 {}, InitGCrefRegs=0000 {}, InitByrefRegs=0000 {} | |
Liveness not changing: 00000000 {} | |
# compCycleEstimate = 4, compSizeEstimate = 3 Test:LongId(long):long | |
; Final local variable assignments | |
; | |
; V00 arg0 [V00 ] ( 4, 4 ) long -> [sp+0x00] | |
;# V01 OutArgs [V01 ] ( 1, 1 ) lclBlk ( 0) [sp+0x00] | |
; V02 rat0 [V02 ] ( 1, 1 ) int -> [sp+0x18] V00.lo(offs=0x00) | |
; V03 rat1 [V03 ] ( 1, 1 ) int -> [sp+0x1C] V00.hi(offs=0x04) | |
; | |
; Lcl frame size = 8 | |
*************** Before prolog / epilog generation | |
G_M55297_IG01: ; func=00, offs=000000H, size=0000H, gcrefRegs=0000 {} <-- Prolog IG | |
G_M55297_IG02: ; offs=000000H, size=0004H, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref | |
G_M55297_IG03: ; epilog placeholder, next placeholder=<END>, BB=000951B4H (BB01), epilog, emitadd <-- First placeholder <-- Last placeholder | |
; PrevGCVars=00000000 {}, PrevGCrefRegs=0000 {}, PrevByrefRegs=0000 {} | |
; InitGCVars=00000000 {}, InitGCrefRegs=0000 {}, InitByrefRegs=0000 {} | |
Recording Var Locations at start of BB01 | |
<none> | |
*************** In genFnProlog() | |
Added IP mapping to front: PROLOG STACK_EMPTY (G_M55297_IG01,ins#0,ofs#0) label | |
__prolog: | |
IN0003: push {r2,r3,r11,lr} | |
IN0004: add r11, sp, 8 | |
*************** In genFnPrologCalleeRegArgs() for int regs | |
IN0005: str r0, [sp] | |
IN0006: str r1, [sp+0x04] | |
*************** In genEnregisterIncomingStackArgs() | |
G_M55297_IG01: ; offs=000000H, funclet=00 | |
*************** In genFnEpilog() | |
__epilog: | |
gcVarPtrSetCur=00000000 {}, gcRegGCrefSetCur=0000 {}, gcRegByrefSetCur=0000 {} | |
IN0007: pop {r2,r3,r11,pc} | |
G_M55297_IG03: ; offs=000004H, funclet=00 | |
0 prologs, 1 epilogs, 0 funclet prologs, 0 funclet epilogs | |
*************** After prolog / epilog generation | |
G_M55297_IG01: ; func=00, offs=000000H, size=000CH, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG | |
G_M55297_IG02: ; offs=00000CH, size=0004H, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref | |
G_M55297_IG03: ; offs=000010H, size=0004H, epilog, nogc, emitadd | |
*************** In emitJumpDistBind() | |
Hot code size = 0x14 bytes | |
Cold code size = 0x0 bytes | |
reserveUnwindInfo(isFunclet=FALSE, isColdCode=FALSE, unwindSize=0x8) | |
*************** In emitEndCodeGen() | |
*************************************************************************** | |
Instructions as they come out of the scheduler | |
G_M55297_IG01: ; func=00, offs=000000H, size=000CH, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG | |
IN0003: 000000 E92D 480C push {r2,r3,r11,lr} | |
IN0004: 000004 F10D 0B08 add r11, sp, 8 | |
IN0005: 000008 9000 str r0, [sp] | |
IN0006: 00000A 9101 str r1, [sp+0x04] | |
G_M55297_IG02: ; func=00, offs=00000CH, size=0004H, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref | |
IN0001: 00000C 9806 ldr r0, [sp+0x18] | |
IN0002: 00000E 9907 ldr r1, [sp+0x1c] | |
G_M55297_IG03: ; func=00, offs=000010H, size=0004H, epilog, nogc, emitadd | |
IN0007: 000010 E8BD 880C pop {r2,r3,r11,pc} | |
Allocated method code size = 20 , actual size = 20 | |
*************** After end code gen, before unwindEmit() | |
G_M55297_IG01: ; func=00, offs=000000H, size=000CH, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref, nogc <-- Prolog IG | |
IN0003: 000000 push {r2,r3,r11,lr} | |
IN0004: 000004 add r11, sp, 8 | |
IN0005: 000008 str r0, [sp] | |
IN0006: 00000A str r1, [sp+0x04] | |
G_M55297_IG02: ; offs=00000CH, size=0004H, gcrefRegs=0000 {}, byrefRegs=0000 {}, byref | |
IN0001: 00000C ldr r0, [sp+0x18] | |
IN0002: 00000E ldr r1, [sp+0x1c] | |
G_M55297_IG03: ; offs=000010H, size=0004H, epilog, nogc, emitadd | |
IN0007: 000010 pop {r2,r3,r11,pc} | |
Unwind Info: | |
>> Start offset : 0x000000 (not in unwind data) | |
>> End offset : 0x000014 (not in unwind data) | |
Code Words : 1 | |
Epilog Count : 0 | |
F bit : 0 | |
E bit : 1 | |
X bit : 0 | |
Vers : 0 | |
Function Length : 10 (0x0000a) Actual length = 20 (0x000014) | |
--- One epilog, unwind codes at 0 | |
---- Unwind codes ---- | |
---- Epilog start at index 0 ---- | |
A8 0C pop {r2,r3,r11,lr} ; opsize 32 | |
FF end | |
FF end | |
allocUnwindInfo(pHotCode=0xB510F460, pColdCode=0x00000000, startOffset=0x0, endOffset=0x14, unwindSize=0x8, pUnwindBlock=0x0009608A, funKind=0 (main function)) | |
*************** In genIPmappingGen() | |
IP mapping count : 3 | |
IL offs PROLOG : 0x00000000 ( STACK_EMPTY ) | |
IL offs 0x0000 : 0x0000000C ( STACK_EMPTY ) | |
IL offs EPILOG : 0x00000010 ( STACK_EMPTY ) | |
*************** In genSetScopeInfo() | |
VarLocInfo count is 1 | |
*************** Variable debug info | |
1 vars | |
0( UNKNOWN) : From 00000000h to 0000000Ch, in r0 | |
*************** In gcInfoBlockHdrSave() | |
Set code length to 20. | |
Set ReturnKind to Scalar. | |
Set stack base register to r11. | |
Set Outgoing stack arg area size to 0. | |
Defining 0 call sites: | |
Allocations for Test:LongId(long):long (MethodHash=0f9627fe) | |
count: 183, size: 22428, max = 2560 | |
allocateMemory: 65536, nraUsed: 34056 | |
Alloc'd bytes by kind: | |
kind | size | pct | |
---------------------+------------+-------- | |
AssertionProp | 0 | 0.00% | |
ASTNode | 816 | 3.64% | |
InstDesc | 2280 | 10.17% | |
ImpStack | 0 | 0.00% | |
BasicBlock | 388 | 1.73% | |
fgArgInfo | 0 | 0.00% | |
fgArgInfoPtrArr | 0 | 0.00% | |
FlowList | 0 | 0.00% | |
TreeStatementList | 0 | 0.00% | |
SiScope | 44 | 0.20% | |
FlatFPStateX87 | 0 | 0.00% | |
DominatorMemory | 32 | 0.14% | |
LSRA | 2716 | 12.11% | |
LSRA_Interval | 336 | 1.50% | |
LSRA_RefPosition | 392 | 1.75% | |
Reachability | 8 | 0.04% | |
SSA | 180 | 0.80% | |
ValueNumber | 4140 | 18.46% | |
LvaTable | 1560 | 6.96% | |
UnwindInfo | 16 | 0.07% | |
hashBv | 20 | 0.09% | |
bitset | 64 | 0.29% | |
FixedBitVect | 0 | 0.00% | |
AsIAllocator | 5916 | 26.38% | |
IndirAssignMap | 0 | 0.00% | |
FieldSeqStore | 0 | 0.00% | |
ZeroOffsetFieldMap | 0 | 0.00% | |
ArrayInfoMap | 0 | 0.00% | |
HeapPhiArg | 0 | 0.00% | |
CSE | 512 | 2.28% | |
GC | 912 | 4.07% | |
CorSig | 0 | 0.00% | |
Inlining | 56 | 0.25% | |
ArrayStack | 0 | 0.00% | |
DebugInfo | 88 | 0.39% | |
DebugOnly | 1764 | 7.87% | |
Codegen | 0 | 0.00% | |
LoopOpt | 0 | 0.00% | |
LoopHoist | 0 | 0.00% | |
Unknown | 188 | 0.84% | |
****** DONE compiling Test:LongId(long):long |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment