Skip to content

Instantly share code, notes, and snippets.

@trylek
Created April 19, 2021 17:59
Show Gist options
  • Save trylek/a3a106a5f1010949660bb791067e11af to your computer and use it in GitHub Desktop.
Save trylek/a3a106a5f1010949660bb791067e11af to your computer and use it in GitHub Desktop.
NgenDump of the offending method Vector2_3_4TestNative::CreateVector2FromFloats
D:\git\runtime2\.dotnet
****** START compiling Vector2_3_4TestNative:CreateVector2FromFloats(float,float):System.Numerics.Vector2 (MethodHash=24bf0f7f)
Generating code for Windows x86
OPTIONS: compCodeOpt = BLENDED_CODE
OPTIONS: compDbgCode = false
OPTIONS: compDbgInfo = true
OPTIONS: compDbgEnC = false
OPTIONS: compProcedureSplitting = false
OPTIONS: compProcedureSplittingEH = false
OPTIONS: No PGO data
OPTIONS: Jit invoked for ngen
IL to import:
IL_0000 02 ldarg.0
IL_0001 03 ldarg.1
IL_0002 28 01 00 00 0a call 0xA000001
IL_0007 0b stloc.1
IL_0008 07 ldloc.1
IL_0009 0a stloc.0
IL_000a dd 01 00 00 00 leave 1 (IL_0010)
IL_000f dc endfinally
IL_0010 06 ldloc.0
IL_0011 2a ret
SIMD Candidate Type System.Numerics.Vector2
Found Vector2
Known type Vector2
'__retBuf' passed in register ecx
Known type Vector2
Known type Vector2
; Initial local variable assignments
;
; V00 RetBuf byref
; V01 arg0 float
; V02 arg1 float
; V03 loc0 simd8
; V04 loc1 simd8
*************** In compInitDebuggingInfo() for Vector2_3_4TestNative:CreateVector2FromFloats(float,float):System.Numerics.Vector2
getVars() returned cVars = 0, extendOthers = true
info.compVarScopesCount = 5
VarNum LVNum Name Beg End
0: 00h 00h V00 RetBuf 000h 012h
1: 01h 01h V01 arg0 000h 012h
2: 02h 02h V02 arg1 000h 012h
3: 03h 03h V03 loc0 000h 012h
4: 04h 04h V04 loc1 000h 012h
info.compStmtOffsetsCount = 0
info.compStmtOffsetsImplicit = 0007h ( STACK_EMPTY NOP CALL_SITE )
*************** In fgFindBasicBlocks() for Vector2_3_4TestNative:CreateVector2FromFloats(float,float):System.Numerics.Vector2
Marked V03 as a single def local
Marked V04 as a single def local
Jump targets:
IL_0000
IL_000f
IL_0010
New Basic Block BB01 [0000] created.
BB01 [000..00F)
New Basic Block BB02 [0001] created.
BB02 [00F..010)
New Basic Block BB03 [0002] created.
BB03 [010..012)
EH clause #0:
Flags: 0x2 (finally)
TryOffset: 0x0
TryLength: 0xf
HandlerOffset: 0xf
HandlerLength: 0x1
ClassToken: 0x0
*************** After fgFindBasicBlocks() has created the EH table
*************** Exception Handling table
index nest, eTry, eHnd
0 :: 0 - Try at BB01..BB01 [000..00F), Finally at BB02..BB02 [00F..010)
*************** In fgNormalizeEH()
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0000] 1 0 1 [000..00F)-> BB03 (leave ) T0 try { } keep try
BB02 [0001] 1 0 1 [00F..010) (finret) H0 finally { } keep
BB03 [0002] 1 1 [010..012) (return)
-----------------------------------------------------------------------------------------------------------------------------------------
*************** Exception Handling table
index nest, eTry, eHnd
0 :: 0 - Try at BB01..BB01 [000..00F), Finally at BB02..BB02 [00F..010)
No EH normalization performed.
INLINER: during 'prejit' result 'failed this callee' reason 'has exception handling' for 'n/a' calling 'Vector2_3_4TestNative:CreateVector2FromFloats(float,float):System.Numerics.Vector2'
INLINER: Marking Vector2_3_4TestNative:CreateVector2FromFloats(float,float):System.Numerics.Vector2 as NOINLINE because of has exception handling
INLINER: during 'prejit' result 'failed this callee' reason 'has exception handling'
IL Code Size,Instr 18, 10, Basic Block count 3, Local Variable Num,Ref count 5, 6 for method Vector2_3_4TestNative:CreateVector2FromFloats(float,float):System.Numerics.Vector2
OPTIONS: opts.MinOpts() == false
Basic block list for 'Vector2_3_4TestNative:CreateVector2FromFloats(float,float):System.Numerics.Vector2'
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0000] 1 0 1 [000..00F)-> BB03 (leave ) T0 try { } keep try
BB02 [0001] 1 0 1 [00F..010) (finret) H0 finally { } keep
BB03 [0002] 1 1 [010..012) (return)
-----------------------------------------------------------------------------------------------------------------------------------------
*************** Starting PHASE Pre-import
*************** Finishing PHASE Pre-import
*************** Starting PHASE Profile incorporation
BBOPT set, but no profile data available (hr=80004001)
*************** Finishing PHASE Profile incorporation [no changes]
*************** Starting PHASE Importation
*************** In impImport() for Vector2_3_4TestNative:CreateVector2FromFloats(float,float):System.Numerics.Vector2
impImportBlockPending for BB01
impImportBlockPending for BB02
Importing BB01 (PC=000) of 'Vector2_3_4TestNative:CreateVector2FromFloats(float,float):System.Numerics.Vector2'
[ 0] 0 (0x000) ldarg.0
[ 1] 1 (0x001) ldarg.1
[ 2] 2 (0x002) call 0A000001
In Compiler::impImportCall: opcode is call, kind=0, callRetType is struct, structSize is 8
Inline a CALLI PINVOKE call from method Vector2_3_4TestNative:CreateVector2FromFloats(float,float):System.Numerics.Vector2INLINER: during 'impMarkInlineCandidate' result 'failed this callee' reason 'noinline per IL/cached result' for 'Vector2_3_4TestNative:CreateVector2FromFloats(float,float):System.Numerics.Vector2' calling 'Vector2_3_4TestNative:CreateVector2FromFloats(float,float):System.Numerics.Vector2'
INLINER: during 'impMarkInlineCandidate' result 'failed this callee' reason 'noinline per IL/cached result'
lvaGrabTemp returning 5 (V05 loc2) called for Return value temp for multireg return.
Known type Vector2
STMT00000 (IL 0x000... ???)
[000005] -AC-G------- * ASG simd8 (copy)
[000003] M------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
[000002] --C-G------- \--* CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats
[000001] ------------ arg0 +--* LCL_VAR float V02 arg1
[000000] ------------ arg1 \--* LCL_VAR float V01 arg0
[ 1] 7 (0x007) stloc.1
STMT00001 (IL ???... ???)
[000009] -A---------- * ASG simd8 (copy)
[000007] D------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V04 loc1
[000006] -------N---- \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
[ 0] 8 (0x008) ldloc.1
[ 1] 9 (0x009) stloc.0
STMT00002 (IL 0x008... ???)
[000013] -A---------- * ASG simd8 (copy)
[000011] D------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
[000010] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V04 loc1
[ 0] 10 (0x00a) leave 0010
Before import CEE_LEAVE:
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0000] 1 0 1 [000..00F)-> BB03 (leave ) T0 try { } keep try
BB02 [0001] 1 0 1 [00F..010) (finret) H0 finally { } keep
BB03 [0002] 1 1 [010..012) (return)
-----------------------------------------------------------------------------------------------------------------------------------------
*************** Exception Handling table
index nest, eTry, eHnd
0 :: 0 - Try at BB01..BB01 [000..00F), Finally at BB02..BB02 [00F..010)
impImportLeave - jumping out of a finally-protected try, convert block to BBJ_CALLFINALLY block BB01 [0000]
New Basic Block BB04 [0003] created.
EH#0: New last block of try: BB04
impImportLeave - jumping out of a finally-protected try, created step (BBJ_ALWAYS) block BB04 [0003]
fgFindInsertPoint(regionIndex=0, putInTryRegion=true, startBlk=BB01, endBlk=BB00, nearBlk=BB04, jumpBlk=BB00, runRarely=false)
fgNewBBinRegion(jumpKind=6, tryIndex=0, hndIndex=0, putInFilter=false, runRarely=false, insertAtEnd=false): inserting after BB04
New Basic Block BB05 [0004] created.
impImportLeave - finalStep block required (encFinallies(1) > 0), new block BB05 [0004]
impImportBlockPending for BB03
After import CEE_LEAVE:
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0000] 1 0 1 [000..00F)-> BB02 (callf ) T0 try { keep try
BB04 [0003] 0 0 1 [???..???)-> BB05 (ALWAYS) T0 } i internal KEEP
BB05 [0004] 0 1 [???..???)-> BB03 (ALWAYS) i internal KEEP
BB02 [0001] 1 0 1 [00F..010) (finret) H0 finally { } keep
BB03 [0002] 1 1 [010..012) (return)
-----------------------------------------------------------------------------------------------------------------------------------------
*************** Exception Handling table
index nest, eTry, eHnd
0 :: 0 - Try at BB01..BB04 [000..00F), Finally at BB02..BB02 [00F..010)
impImportBlockPending for BB02
Importing BB03 (PC=016) of 'Vector2_3_4TestNative:CreateVector2FromFloats(float,float):System.Numerics.Vector2'
[ 0] 16 (0x010) ldloc.0
[ 1] 17 (0x011) ret
STMT00004 (IL 0x010... ???)
[000018] -A---------- * ASG simd8 (copy)
[000017] ------------ +--* IND simd8
[000016] ------------ | \--* LCL_VAR byref V00 RetBuf
[000015] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
STMT00005 (IL ???... ???)
[000019] ------------ * RETURN void
Importing BB02 (PC=015) of 'Vector2_3_4TestNative:CreateVector2FromFloats(float,float):System.Numerics.Vector2'
[ 0] 15 (0x00f) endfinally
STMT00006 (IL 0x00F... ???)
[000020] ------------ * RETFILT void
After impImport() added block for try,catch,finally
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0000] 1 0 1 [000..00F)-> BB02 (callf ) T0 try { keep i try
BB04 [0003] 0 0 1 [???..???)-> BB05 (ALWAYS) T0 } i internal KEEP
BB05 [0004] 0 1 [???..???)-> BB03 (ALWAYS) i internal KEEP
BB02 [0001] 1 0 1 [00F..010) (finret) H0 finally { } keep i
BB03 [0002] 1 1 [010..012) (return) i
-----------------------------------------------------------------------------------------------------------------------------------------
*************** Finishing PHASE Importation
Trees after Importation
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0000] 1 0 1 [000..00F)-> BB02 (callf ) T0 try { keep i try
BB04 [0003] 0 0 1 [???..???)-> BB05 (ALWAYS) T0 } i internal KEEP
BB05 [0004] 0 1 [???..???)-> BB03 (ALWAYS) i internal KEEP
BB02 [0001] 1 0 1 [00F..010) (finret) H0 finally { } keep i
BB03 [0002] 1 1 [010..012) (return) i
-----------------------------------------------------------------------------------------------------------------------------------------
------------ BB01 [000..00F) -> BB02 (callf), preds={} succs={BB02}
***** BB01
STMT00000 (IL 0x000...0x007)
[000005] -AC-G------- * ASG simd8 (copy)
[000003] M------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
[000002] --C-G------- \--* CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats
[000001] ------------ arg0 +--* LCL_VAR float V02 arg1
[000000] ------------ arg1 \--* LCL_VAR float V01 arg0
***** BB01
STMT00001 (IL ???... ???)
[000009] -A---------- * ASG simd8 (copy)
[000007] D------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V04 loc1
[000006] -------N---- \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
***** BB01
STMT00002 (IL 0x008...0x009)
[000013] -A---------- * ASG simd8 (copy)
[000011] D------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
[000010] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V04 loc1
------------ BB04 [???..???) -> BB05 (ALWAYS), preds={} succs={BB05}
------------ BB05 [???..???) -> BB03 (ALWAYS), preds={} succs={BB03}
***** BB05
STMT00003 (IL ???... ???)
[000014] ------------ * END_LFIN void endNstLvl=0
------------ BB02 [00F..010) (finret), preds={} succs={BB04}
***** BB02
STMT00006 (IL 0x00F...0x00F)
[000020] ------------ * RETFILT void
------------ BB03 [010..012) (return), preds={} succs={}
***** BB03
STMT00004 (IL 0x010...0x011)
[000018] -A---------- * ASG simd8 (copy)
[000017] ------------ +--* IND simd8
[000016] ------------ | \--* LCL_VAR byref V00 RetBuf
[000015] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
***** BB03
STMT00005 (IL ???... ???)
[000019] ------------ * RETURN void
-------------------------------------------------------------------------------------------------------------------
*************** Starting PHASE Indirect call transform
-- no candidates to transform
*************** Finishing PHASE Indirect call transform [no changes]
*************** Starting PHASE Expand patchpoints
-- no patchpoints to transform
*************** Finishing PHASE Expand patchpoints [no changes]
*************** Starting PHASE Post-import
*************** Finishing PHASE Post-import
*************** Starting PHASE Morph - Init
New BlockSet epoch 1, # of blocks (including unused BB00): 6, bitset array size: 1 (short)
*************** In fgRemoveEmptyBlocks
*************** Finishing PHASE Morph - Init
*************** In fgDebugCheckBBlist
*************** Starting PHASE Morph - Inlining
**************** Inline Tree
Inlines into 06000006 [via DefaultPolicy] Vector2_3_4TestNative:CreateVector2FromFloats(float,float):System.Numerics.Vector2
[0 IL=0002 TR=000002 00000000] [FAILED: noinline per IL/cached result] Vector2_3_4TestNative:CreateVector2FromFloats(float,float):System.Numerics.Vector2
Budget: initialTime=114, finalTime=114, initialBudget=1140, currentBudget=1140
Budget: initialSize=541, finalSize=541
*************** Finishing PHASE Morph - Inlining [no changes]
*************** Starting PHASE Allocate Objects
no newobjs in this method; punting
*************** Finishing PHASE Allocate Objects [no changes]
*************** Starting PHASE Morph - Add internal blocks
New Basic Block BB06 [0005] created.
New scratch BB06
fgNewBBinRegion(jumpKind=4, tryIndex=0, hndIndex=0, putInFilter=false, runRarely=false, insertAtEnd=true): inserting after BB03
New Basic Block BB07 [0006] created.
newReturnBB [BB07] created
mergeReturns statement tree [000021] added to genReturnBB BB07 [0006]
[000021] ------------ * RETURN void
lvaGrabTemp returning 6 (V06 tmp1) (a long lifetime temp) called for Pinvoke FrameVar.
Local V06 should not be enregistered because: it is address exposed
*************** After fgAddInternal()
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB06 [0005] 1 1 [???..???) keep i internal
BB01 [0000] 1 0 1 [000..00F)-> BB02 (callf ) T0 try { keep i try
BB04 [0003] 0 0 1 [???..???)-> BB05 (ALWAYS) T0 } i internal KEEP
BB05 [0004] 0 1 [???..???)-> BB03 (ALWAYS) i internal KEEP
BB02 [0001] 1 0 1 [00F..010) (finret) H0 finally { } keep i
BB03 [0002] 1 1 [010..012) (return) i
BB07 [0006] 1 1 [???..???) (return) keep internal
-----------------------------------------------------------------------------------------------------------------------------------------
*************** Exception Handling table
index nest, eTry, eHnd
0 :: 0 - Try at BB01..BB04 [000..00F), Finally at BB02..BB02 [00F..010)
*************** Finishing PHASE Morph - Add internal blocks
*************** Starting PHASE Remove empty try
*************** In fgRemoveEmptyTry()
*************** Before fgRemoveEmptyTry()
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB06 [0005] 1 1 [???..???) keep i internal
BB01 [0000] 1 0 1 [000..00F)-> BB02 (callf ) T0 try { keep i try
BB04 [0003] 0 0 1 [???..???)-> BB05 (ALWAYS) T0 } i internal KEEP
BB05 [0004] 0 1 [???..???)-> BB03 (ALWAYS) i internal KEEP
BB02 [0001] 1 0 1 [00F..010) (finret) H0 finally { } keep i
BB03 [0002] 1 1 [010..012) (return) i
BB07 [0006] 1 1 [???..???) (return) keep internal
-----------------------------------------------------------------------------------------------------------------------------------------
*************** Exception Handling table
index nest, eTry, eHnd
0 :: 0 - Try at BB01..BB04 [000..00F), Finally at BB02..BB02 [00F..010)
EH#0 first try block BB01 not empty; skipping.
*************** Finishing PHASE Remove empty try [no changes]
*************** Starting PHASE Remove empty finally
*************** Before fgRemoveEmptyFinally()
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB06 [0005] 1 1 [???..???) keep i internal
BB01 [0000] 1 0 1 [000..00F)-> BB02 (callf ) T0 try { keep i try
BB04 [0003] 0 0 1 [???..???)-> BB05 (ALWAYS) T0 } i internal KEEP
BB05 [0004] 0 1 [???..???)-> BB03 (ALWAYS) i internal KEEP
BB02 [0001] 1 0 1 [00F..010) (finret) H0 finally { } keep i
BB03 [0002] 1 1 [010..012) (return) i
BB07 [0006] 1 1 [???..???) (return) keep internal
-----------------------------------------------------------------------------------------------------------------------------------------
*************** Exception Handling table
index nest, eTry, eHnd
0 :: 0 - Try at BB01..BB04 [000..00F), Finally at BB02..BB02 [00F..010)
EH#0 has empty finally, removing the region.
Modifying callfinally BB01 leave BB04 finally BB02 continuation BB05
so that BB01 jumps to BB05; then remove BB04
fgRemoveBlock BB04
Removing unreachable BB04
EH#0: New last block of try: BB01
Removing statement STMT00003 (IL ???... ???)
[000014] ------------ * END_LFIN void endNstLvl=0
in BB05 as useless:
BB05 becomes empty
Remove now-unreachable handler BB02
fgRemoveBlock BB02
Removing unreachable BB02
Removing statement STMT00006 (IL 0x00F...0x00F)
[000020] ------------ * RETFILT void
in BB02 as useless:
BB02 becomes empty
EH#0: New last block of handler: BB05
fgRemoveEmptyFinally() removed 1 try-finally clauses from 1 finallys
*************** After fgRemoveEmptyFinally()
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB06 [0005] 1 1 [???..???) keep i internal
BB01 [0000] 1 1 [000..00F) keep i
BB05 [0004] 0 1 [???..???) i internal
BB03 [0002] 1 1 [010..012) (return) i
BB07 [0006] 1 1 [???..???) (return) keep internal
-----------------------------------------------------------------------------------------------------------------------------------------
*************** Exception Handling table is empty
*************** Finishing PHASE Remove empty finally
Trees after Remove empty finally
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB06 [0005] 1 1 [???..???) keep i internal
BB01 [0000] 1 1 [000..00F) keep i
BB05 [0004] 0 1 [???..???) i internal
BB03 [0002] 1 1 [010..012) (return) i
BB07 [0006] 1 1 [???..???) (return) keep internal
-----------------------------------------------------------------------------------------------------------------------------------------
------------ BB06 [???..???), preds={} succs={BB01}
------------ BB01 [000..00F), preds={} succs={BB05}
***** BB01
STMT00000 (IL 0x000...0x007)
[000005] -AC-G------- * ASG simd8 (copy)
[000003] M------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
[000002] --C-G------- \--* CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats
[000001] ------------ arg0 +--* LCL_VAR float V02 arg1
[000000] ------------ arg1 \--* LCL_VAR float V01 arg0
***** BB01
STMT00001 (IL ???... ???)
[000009] -A---------- * ASG simd8 (copy)
[000007] D------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V04 loc1
[000006] -------N---- \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
***** BB01
STMT00002 (IL 0x008...0x009)
[000013] -A---------- * ASG simd8 (copy)
[000011] D------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
[000010] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V04 loc1
------------ BB05 [???..???), preds={} succs={BB03}
------------ BB03 [010..012) (return), preds={} succs={}
***** BB03
STMT00004 (IL 0x010...0x011)
[000018] -A---------- * ASG simd8 (copy)
[000017] ------------ +--* IND simd8
[000016] ------------ | \--* LCL_VAR byref V00 RetBuf
[000015] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
***** BB03
STMT00005 (IL ???... ???)
[000019] ------------ * RETURN void
------------ BB07 [???..???) (return), preds={} succs={}
***** BB07
STMT00007 (IL ???... ???)
[000021] ------------ * RETURN void
-------------------------------------------------------------------------------------------------------------------
*************** Starting PHASE Merge callfinally chains
No EH in this method, nothing to merge.
*************** Finishing PHASE Merge callfinally chains [no changes]
*************** Starting PHASE Clone finally
No EH in this method, no cloning.
*************** Finishing PHASE Clone finally [no changes]
*************** Starting PHASE Compute preds
Renumbering the basic blocks for fgComputePred
*************** Before renumbering the basic blocks
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB06 [0005] 1 1 [???..???) keep i internal
BB01 [0000] 1 1 [000..00F) keep i
BB05 [0004] 0 1 [???..???) i internal
BB03 [0002] 1 1 [010..012) (return) i
BB07 [0006] 1 1 [???..???) (return) keep internal
-----------------------------------------------------------------------------------------------------------------------------------------
*************** Exception Handling table is empty
Renumber BB06 to BB01
Renumber BB01 to BB02
Renumber BB05 to BB03
Renumber BB03 to BB04
Renumber BB07 to BB05
*************** After renumbering the basic blocks
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 1 [000..00F) keep i
BB03 [0004] 0 1 [???..???) i internal
BB04 [0002] 1 1 [010..012) (return) i
BB05 [0006] 1 1 [???..???) (return) keep internal
-----------------------------------------------------------------------------------------------------------------------------------------
*************** Exception Handling table is empty
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 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 1 [000..00F) keep i
BB03 [0004] 0 1 [???..???) i internal
BB04 [0002] 1 1 [010..012) (return) i
BB05 [0006] 1 1 [???..???) (return) keep internal
-----------------------------------------------------------------------------------------------------------------------------------------
Setting edge weights for BB01 -> BB02 to [0 .. 3.402823e+38]
Setting edge weights for BB02 -> BB03 to [0 .. 3.402823e+38]
Setting edge weights for BB03 -> BB04 to [0 .. 3.402823e+38]
*************** After fgComputePreds()
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..00F) keep i
BB03 [0004] 1 BB02 1 [???..???) i internal
BB04 [0002] 1 BB03 1 [010..012) (return) i
BB05 [0006] 0 1 [???..???) (return) keep internal
-----------------------------------------------------------------------------------------------------------------------------------------
*************** Finishing PHASE Compute preds
*************** Starting PHASE Merge throw blocks
*************** In fgTailMergeThrows
Method does not have multiple noreturn calls.
*************** Finishing PHASE Merge throw blocks [no changes]
*************** Starting PHASE Update flow graph early pass
*************** In fgUpdateFlowGraph()
Before updating the flow graph:
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..00F) keep i
BB03 [0004] 1 BB02 1 [???..???) i internal
BB04 [0002] 1 BB03 1 [010..012) (return) i
BB05 [0006] 0 1 [???..???) (return) keep internal
-----------------------------------------------------------------------------------------------------------------------------------------
Compacting blocks BB02 and BB03:
*************** In fgDebugCheckBBlist
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 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012) (return) keep i
BB05 [0006] 0 1 [???..???) (return) keep internal
-----------------------------------------------------------------------------------------------------------------------------------------
*************** 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 RetBuf byref
; V01 arg0 float
; V02 arg1 float
; V03 loc0 simd8
; V04 loc1 simd8
; V05 loc2 simd8 multireg-ret "Return value temp for multireg return"
; V06 PInvokeFrame blk do-not-enreg[X] addr-exposed "Pinvoke FrameVar"
lvaTable after fgPromoteStructs
; Initial local variable assignments
;
; V00 RetBuf byref
; V01 arg0 float
; V02 arg1 float
; V03 loc0 simd8
; V04 loc1 simd8
; V05 loc2 simd8 multireg-ret "Return value temp for multireg return"
; V06 PInvokeFrame blk do-not-enreg[X] addr-exposed "Pinvoke FrameVar"
*************** Finishing PHASE Morph - Promote Structs
*************** Starting PHASE Morph - Structs/AddrExp
*************** In fgMarkAddressExposedLocals()
LocalAddressVisitor visiting statement:
STMT00000 (IL 0x000...0x007)
[000005] -AC-G------- * ASG simd8 (copy)
[000003] M------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
[000002] --C-G------- \--* CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats
[000001] ------------ arg0 +--* LCL_VAR float V02 arg1
[000000] ------------ arg1 \--* LCL_VAR float V01 arg0
LocalAddressVisitor visiting statement:
STMT00001 (IL ???... ???)
[000009] -A---------- * ASG simd8 (copy)
[000007] D------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V04 loc1
[000006] -------N---- \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
LocalAddressVisitor visiting statement:
STMT00002 (IL 0x008...0x009)
[000013] -A---------- * ASG simd8 (copy)
[000011] D------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
[000010] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V04 loc1
LocalAddressVisitor visiting statement:
STMT00004 (IL 0x010...0x011)
[000018] -A---------- * ASG simd8 (copy)
[000017] ------------ +--* IND simd8
[000016] ------------ | \--* LCL_VAR byref V00 RetBuf
[000015] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
LocalAddressVisitor visiting statement:
STMT00005 (IL ???... ???)
[000019] ------------ * RETURN void
LocalAddressVisitor visiting statement:
STMT00007 (IL ???... ???)
[000021] ------------ * RETURN void
*************** Finishing PHASE Morph - Structs/AddrExp
*************** Starting PHASE Morph - ByRefs
*************** Finishing PHASE Morph - ByRefs
*************** Starting PHASE Morph - Global
*************** In fgMorphBlocks()
Morphing BB01 of 'Vector2_3_4TestNative:CreateVector2FromFloats(float,float):System.Numerics.Vector2'
Morphing BB02 of 'Vector2_3_4TestNative:CreateVector2FromFloats(float,float):System.Numerics.Vector2'
fgMorphTree BB02, STMT00000 (before)
[000005] -AC-G------- * ASG simd8 (copy)
[000003] M------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
[000002] --C-G------- \--* CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats
[000001] ------------ arg0 +--* LCL_VAR float V02 arg1
[000000] ------------ arg1 \--* LCL_VAR float V01 arg0
Initializing arg info for 2.CALL:
ArgTable for 2.CALL after fgInitArgInfo:
fgArgTabEntry[arg 0 1.LCL_VAR float (By ref), numSlots=1, slotNum=0, byteSize=4, byteOffset=0, byteAlignment=4]
fgArgTabEntry[arg 1 0.LCL_VAR float (By ref), numSlots=1, slotNum=1, byteSize=4, byteOffset=4, byteAlignment=4]
Morphing args for 2.CALL:
ArgTable for 2.CALL after fgMorphArgs:
fgArgTabEntry[arg 0 1.LCL_VAR float (By ref), numSlots=1, slotNum=0, byteSize=4, byteOffset=0, byteAlignment=4]
fgArgTabEntry[arg 1 0.LCL_VAR float (By ref), numSlots=1, slotNum=1, byteSize=4, byteOffset=4, byteAlignment=4]
fgMorphCopyBlock:
not morphing a multireg call return
fgMorphTree BB02, STMT00001 (before)
[000009] -A---------- * ASG simd8 (copy)
[000007] D------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V04 loc1
[000006] -------N---- \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
fgMorphCopyBlock:
fgMorphBlkNode for dst tree, before:
[000007] D----+-N---- * LCL_VAR simd8 <System.Numerics.Vector2> V04 loc1
fgMorphBlkNode after:
[000007] D----+-N---- * LCL_VAR simd8 <System.Numerics.Vector2> V04 loc1
fgMorphBlkNode for src tree, before:
[000006] -----+-N---- * LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
fgMorphBlkNode after:
[000006] -----+-N---- * LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
fgMorphOneAsgBlock (after):
[000009] -A---------- * ASG simd8 (copy)
[000007] D----+-N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V04 loc1
[000006] -----+-N---- \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
using oneAsgTree.
fgMorphCopyBlock (after):
[000009] -A---------- * ASG simd8 (copy)
[000007] D----+-N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V04 loc1
[000006] -----+-N---- \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
GenTreeNode creates assertion:
[000009] -A---------- * ASG simd8 (copy)
In BB02 New Local Copy Assertion: V04 == V05 index=#01, mask=0000000000000001
fgMorphTree BB02, STMT00002 (before)
[000013] -A---------- * ASG simd8 (copy)
[000011] D------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
[000010] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V04 loc1
Assertion prop in BB02:
Copy Assertion: V04 == V05 index=#01, mask=0000000000000001
[000010] ------------ * LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
fgMorphCopyBlock:
fgMorphBlkNode for dst tree, before:
[000011] D----+-N---- * LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
fgMorphBlkNode after:
[000011] D----+-N---- * LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
fgMorphBlkNode for src tree, before:
[000010] -----+------ * LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
fgMorphBlkNode after:
[000010] -----+------ * LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
fgMorphOneAsgBlock (after):
[000013] -A---------- * ASG simd8 (copy)
[000011] D----+-N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
[000010] -----+------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
using oneAsgTree.
fgMorphCopyBlock (after):
[000013] -A---------- * ASG simd8 (copy)
[000011] D----+-N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
[000010] -----+------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
GenTreeNode creates assertion:
[000013] -A---------- * ASG simd8 (copy)
In BB02 New Local Copy Assertion: V03 == V05 index=#02, mask=0000000000000002
fgMorphTree BB02, STMT00002 (after)
[000013] -A---+------ * ASG simd8 (copy)
[000011] D----+-N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
[000010] -----+------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
fgMorphTree BB02, STMT00004 (before)
[000018] -A---------- * ASG simd8 (copy)
[000017] ------------ +--* IND simd8
[000016] ------------ | \--* LCL_VAR byref V00 RetBuf
[000015] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
Assertion prop in BB02:
Copy Assertion: V03 == V05 index=#02, mask=0000000000000002
[000015] ------------ * LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
fgMorphCopyBlock:
fgMorphBlkNode for dst tree, before:
[000017] ---X-+-N---- * IND simd8
[000016] -----+------ \--* LCL_VAR byref V00 RetBuf
fgMorphBlkNode after:
[000017] ---X-+-N---- * IND simd8
[000016] -----+------ \--* LCL_VAR byref V00 RetBuf
fgMorphBlkNode for src tree, before:
[000015] -----+------ * LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
fgMorphBlkNode after:
[000015] -----+------ * LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
fgMorphOneAsgBlock (after):
[000018] -A-XG------- * ASG simd8 (copy)
[000017] *--XG+-N---- +--* IND simd8
[000016] -----+------ | \--* LCL_VAR byref V00 RetBuf
[000015] -----+------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
using oneAsgTree.
fgMorphCopyBlock (after):
[000018] -A-XG------- * ASG simd8 (copy)
[000017] *--XG+-N---- +--* IND simd8
[000016] -----+------ | \--* LCL_VAR byref V00 RetBuf
[000015] -----+------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
fgMorphTree BB02, STMT00004 (after)
[000018] -A-XG+------ * ASG simd8 (copy)
[000017] *--XG+-N---- +--* IND simd8
[000016] -----+------ | \--* LCL_VAR byref V00 RetBuf
[000015] -----+------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
fgMorphTree BB02, STMT00005 (before)
[000019] ------------ * RETURN void
Setting edge weights for BB02 -> BB05 to [0 .. 3.402823e+38]
Removing statement STMT00005 (IL ???... ???)
[000019] -----+------ * RETURN void
in BB02 as useless:
Update BB02 to jump to common return block.
BB02 [0000] 1 BB01 1 [000..012)-> BB05 (always) keep i hascall gcsafe
Morphing BB05 of 'Vector2_3_4TestNative:CreateVector2FromFloats(float,float):System.Numerics.Vector2'
fgMorphTree BB05, STMT00007 (before)
[000021] ------------ * RETURN void
*************** Finishing PHASE Morph - Global
Trees after Morph - Global
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012)-> BB05 (always) keep i hascall gcsafe
BB05 [0006] 1 BB02 1 [???..???) (return) keep internal
-----------------------------------------------------------------------------------------------------------------------------------------
------------ BB01 [???..???), preds={} succs={BB02}
------------ BB02 [000..012) -> BB05 (always), preds={BB01} succs={BB05}
***** BB02
STMT00000 (IL 0x000...0x007)
[000005] -ACXG+------ * ASG simd8 (copy)
[000003] M----+-N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
[000002] --CXG+------ \--* CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats
[000001] -----+------ arg0 +--* LCL_VAR float V02 arg1
[000000] -----+------ arg1 \--* LCL_VAR float V01 arg0
***** BB02
STMT00001 (IL ???... ???)
[000009] -A---+------ * ASG simd8 (copy)
[000007] D----+-N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V04 loc1
[000006] -----+-N---- \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
***** BB02
STMT00002 (IL 0x008...0x009)
[000013] -A---+------ * ASG simd8 (copy)
[000011] D----+-N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
[000010] -----+------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
***** BB02
STMT00004 (IL 0x010...0x011)
[000018] -A-XG+------ * ASG simd8 (copy)
[000017] *--XG+-N---- +--* IND simd8
[000016] -----+------ | \--* LCL_VAR byref V00 RetBuf
[000015] -----+------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
------------ BB05 [???..???) (return), preds={BB02} succs={}
***** BB05
STMT00007 (IL ???... ???)
[000021] -----+------ * RETURN void
-------------------------------------------------------------------------------------------------------------------
*************** In fgDebugCheckBBlist
*************** Starting PHASE GS Cookie
No GS security needed
*************** Finishing PHASE GS Cookie
*************** Starting PHASE Compute edge weights (1, false)
*************** In fgComputeBlockAndEdgeWeights()
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012)-> BB05 (always) keep i hascall gcsafe
BB05 [0006] 1 BB02 1 [???..???) (return) keep internal
-----------------------------------------------------------------------------------------------------------------------------------------
-- no profile data, so using default called count
-- not optimizing or no profile data, so not computing edge weights
*************** Finishing PHASE Compute edge weights (1, false)
*************** Starting PHASE Invert loops
*************** Finishing PHASE Invert loops
Trees after Invert loops
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012)-> BB05 (always) keep i hascall gcsafe
BB05 [0006] 1 BB02 1 [???..???) (return) keep internal
-----------------------------------------------------------------------------------------------------------------------------------------
------------ BB01 [???..???), preds={} succs={BB02}
------------ BB02 [000..012) -> BB05 (always), preds={BB01} succs={BB05}
***** BB02
STMT00000 (IL 0x000...0x007)
[000005] -ACXG+------ * ASG simd8 (copy)
[000003] M----+-N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
[000002] --CXG+------ \--* CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats
[000001] -----+------ arg0 +--* LCL_VAR float V02 arg1
[000000] -----+------ arg1 \--* LCL_VAR float V01 arg0
***** BB02
STMT00001 (IL ???... ???)
[000009] -A---+------ * ASG simd8 (copy)
[000007] D----+-N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V04 loc1
[000006] -----+-N---- \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
***** BB02
STMT00002 (IL 0x008...0x009)
[000013] -A---+------ * ASG simd8 (copy)
[000011] D----+-N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
[000010] -----+------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
***** BB02
STMT00004 (IL 0x010...0x011)
[000018] -A-XG+------ * ASG simd8 (copy)
[000017] *--XG+-N---- +--* IND simd8
[000016] -----+------ | \--* LCL_VAR byref V00 RetBuf
[000015] -----+------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
------------ BB05 [???..???) (return), preds={BB02} succs={}
***** BB05
STMT00007 (IL ???... ???)
[000021] -----+------ * RETURN void
-------------------------------------------------------------------------------------------------------------------
*************** In fgDebugCheckBBlist
*************** Starting PHASE Optimize layout
*************** In fgUpdateFlowGraph()
Before updating the flow graph:
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012)-> BB05 (always) keep i hascall gcsafe
BB05 [0006] 1 BB02 1 [???..???) (return) keep internal
-----------------------------------------------------------------------------------------------------------------------------------------
Removing unconditional jump to next block (BB02 -> BB05) (converted BB02 to fall-through)
After updating the flow graph:
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe
BB05 [0006] 1 BB02 1 [???..???) (return) keep internal
-----------------------------------------------------------------------------------------------------------------------------------------
*************** 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 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe
BB05 [0006] 1 BB02 1 [???..???) (return) keep internal
-----------------------------------------------------------------------------------------------------------------------------------------
*************** In fgUpdateFlowGraph()
Before updating the flow graph:
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe
BB05 [0006] 1 BB02 1 [???..???) (return) keep internal
-----------------------------------------------------------------------------------------------------------------------------------------
*************** In fgDebugCheckBBlist
*************** Finishing PHASE Optimize layout
Trees after Optimize layout
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe
BB05 [0006] 1 BB02 1 [???..???) (return) keep internal
-----------------------------------------------------------------------------------------------------------------------------------------
------------ BB01 [???..???), preds={} succs={BB02}
------------ BB02 [000..012), preds={BB01} succs={BB05}
***** BB02
STMT00000 (IL 0x000...0x007)
[000005] -ACXG+------ * ASG simd8 (copy)
[000003] M----+-N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
[000002] --CXG+------ \--* CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats
[000001] -----+------ arg0 +--* LCL_VAR float V02 arg1
[000000] -----+------ arg1 \--* LCL_VAR float V01 arg0
***** BB02
STMT00001 (IL ???... ???)
[000009] -A---+------ * ASG simd8 (copy)
[000007] D----+-N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V04 loc1
[000006] -----+-N---- \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
***** BB02
STMT00002 (IL 0x008...0x009)
[000013] -A---+------ * ASG simd8 (copy)
[000011] D----+-N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
[000010] -----+------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
***** BB02
STMT00004 (IL 0x010...0x011)
[000018] -A-XG+------ * ASG simd8 (copy)
[000017] *--XG+-N---- +--* IND simd8
[000016] -----+------ | \--* LCL_VAR byref V00 RetBuf
[000015] -----+------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
------------ BB05 [???..???) (return), preds={BB02} succs={}
***** BB05
STMT00007 (IL ???... ???)
[000021] -----+------ * RETURN void
-------------------------------------------------------------------------------------------------------------------
*************** In fgDebugCheckBBlist
*************** Starting PHASE Compute blocks reachability
*************** In fgComputeReachability
*************** In fgDebugCheckBBlist
Renumbering the basic blocks for fgComputeReachability pass #1
*************** Before renumbering the basic blocks
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe
BB05 [0006] 1 BB02 1 [???..???) (return) keep internal
-----------------------------------------------------------------------------------------------------------------------------------------
*************** Exception Handling table is empty
Renumber BB05 to BB03
*************** After renumbering the basic blocks
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal
-----------------------------------------------------------------------------------------------------------------------------------------
*************** Exception Handling table is empty
New BlockSet epoch 3, # of blocks (including unused BB00): 4, bitset array size: 1 (short)
Enter blocks: BB01
After computing reachability sets:
------------------------------------------------
BBnum Reachable by
------------------------------------------------
BB01 : BB01
BB02 : BB01 BB02
BB03 : BB01 BB02 BB03
After computing reachability:
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal 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
Inside fgBuildDomTree
After computing the Dominance Tree:
BB01 : BB02
BB02 : BB03
After numbering the dominator tree:
BB01: pre=01, post=03
BB02: pre=02, post=02
BB03: pre=03, post=01
*************** Finishing PHASE Compute blocks reachability
*************** Starting PHASE Find loops
*************** In optFindLoops()
*************** In fgDebugCheckBBlist
*************** Finishing PHASE Find loops
Trees after Find loops
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal gcsafe
-----------------------------------------------------------------------------------------------------------------------------------------
------------ BB01 [???..???), preds={} succs={BB02}
------------ BB02 [000..012), preds={BB01} succs={BB03}
***** BB02
STMT00000 (IL 0x000...0x007)
[000005] -ACXG+------ * ASG simd8 (copy)
[000003] M----+-N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
[000002] --CXG+------ \--* CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats
[000001] -----+------ arg0 +--* LCL_VAR float V02 arg1
[000000] -----+------ arg1 \--* LCL_VAR float V01 arg0
***** BB02
STMT00001 (IL ???... ???)
[000009] -A---+------ * ASG simd8 (copy)
[000007] D----+-N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V04 loc1
[000006] -----+-N---- \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
***** BB02
STMT00002 (IL 0x008...0x009)
[000013] -A---+------ * ASG simd8 (copy)
[000011] D----+-N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
[000010] -----+------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
***** BB02
STMT00004 (IL 0x010...0x011)
[000018] -A-XG+------ * ASG simd8 (copy)
[000017] *--XG+-N---- +--* IND simd8
[000016] -----+------ | \--* LCL_VAR byref V00 RetBuf
[000015] -----+------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
------------ BB03 [???..???) (return), preds={BB02} succs={}
***** BB03
STMT00007 (IL ???... ???)
[000021] -----+------ * RETURN void
-------------------------------------------------------------------------------------------------------------------
*************** In fgDebugCheckBBlist
*************** Starting PHASE Clone loops
*************** In optCloneLoops()
No loops to clone
*************** Finishing PHASE Clone loops
*************** Starting PHASE Unroll loops
*************** Finishing PHASE Unroll loops
*************** Starting PHASE Mark local vars
*************** In lvaMarkLocalVars()
lvaGrabTemp returning 7 (V07 tmp2) (a long lifetime temp) called for lvaShadowSPslotsVar.
Local V07 should not be enregistered because: it is address exposed
*** lvaComputeRefCounts ***
*** lvaComputeRefCounts -- explicit counts ***
*** marking local variables in block BB01 (weight=1 )
*** marking local variables in block BB02 (weight=1 )
STMT00000 (IL 0x000...0x007)
[000005] -ACXG+------ * ASG simd8 (copy)
[000003] M----+-N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
[000002] --CXG+------ \--* CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats
[000001] -----+------ arg0 +--* LCL_VAR float V02 arg1
[000000] -----+------ arg1 \--* LCL_VAR float V01 arg0
New refCnts for V05: refCnt = 1, refCntWtd = 2
EH Var V05 needs explicit zero init. Disqualified as a register candidate.
New refCnts for V02: refCnt = 1, refCntWtd = 1
New refCnts for V01: refCnt = 1, refCntWtd = 1
STMT00001 (IL ???... ???)
[000009] -A---+------ * ASG simd8 (copy)
[000007] D----+-N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V04 loc1
[000006] -----+-N---- \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
New refCnts for V04: refCnt = 1, refCntWtd = 1
Marking EH Var V04 as a register candidate.
New refCnts for V05: refCnt = 2, refCntWtd = 4
STMT00002 (IL 0x008...0x009)
[000013] -A---+------ * ASG simd8 (copy)
[000011] D----+-N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
[000010] -----+------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
New refCnts for V03: refCnt = 1, refCntWtd = 1
Marking EH Var V03 as a register candidate.
New refCnts for V05: refCnt = 3, refCntWtd = 6
STMT00004 (IL 0x010...0x011)
[000018] -A-XG+------ * ASG simd8 (copy)
[000017] *--XG+-N---- +--* IND simd8
[000016] -----+------ | \--* LCL_VAR byref V00 RetBuf
[000015] -----+------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
New refCnts for V00: refCnt = 1, refCntWtd = 1
New refCnts for V05: refCnt = 4, refCntWtd = 8
*** marking local variables in block BB03 (weight=1 )
STMT00007 (IL ???... ???)
[000021] -----+------ * RETURN void
*** lvaComputeRefCounts -- implicit counts ***
New refCnts for V00: refCnt = 2, refCntWtd = 2
New refCnts for V00: refCnt = 3, refCntWtd = 3
*************** 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 5 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 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal gcsafe
-----------------------------------------------------------------------------------------------------------------------------------------
------------ BB01 [???..???), preds={} succs={BB02}
------------ BB02 [000..012), preds={BB01} succs={BB03}
***** BB02
STMT00000 (IL 0x000...0x007)
N005 ( 30, 12) [000005] -ACXG---R--- * ASG simd8 (copy)
N004 ( 3, 2) [000003] M------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
N003 ( 26, 9) [000002] --CXG------- \--* CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats
N001 ( 3, 2) [000001] ------------ arg0 +--* LCL_VAR float V02 arg1
N002 ( 3, 2) [000000] ------------ arg1 \--* LCL_VAR float V01 arg0
***** BB02
STMT00001 (IL ???... ???)
N003 ( 7, 5) [000009] -A------R--- * ASG simd8 (copy)
N002 ( 3, 2) [000007] D------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V04 loc1
N001 ( 3, 2) [000006] -------N---- \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
***** BB02
STMT00002 (IL 0x008...0x009)
N003 ( 7, 5) [000013] -A------R--- * ASG simd8 (copy)
N002 ( 3, 2) [000011] D------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
N001 ( 3, 2) [000010] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
***** BB02
STMT00004 (IL 0x010...0x011)
N004 ( 7, 5) [000018] -A-XG------- * ASG simd8 (copy)
N002 ( 3, 2) [000017] *--XG--N---- +--* IND simd8
N001 ( 1, 1) [000016] ------------ | \--* LCL_VAR byref V00 RetBuf
N003 ( 3, 2) [000015] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
------------ BB03 [???..???) (return), preds={BB02} succs={}
***** BB03
STMT00007 (IL ???... ???)
N001 ( 0, 0) [000021] ------------ * RETURN void
-------------------------------------------------------------------------------------------------------------------
*************** Starting PHASE Build SSA representation
*************** In SsaBuilder::Build()
[SsaBuilder] Max block count is 4.
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal gcsafe
-----------------------------------------------------------------------------------------------------------------------------------------
*************** Exception Handling table is empty
[SsaBuilder] Topologically sorted the graph.
[SsaBuilder::ComputeImmediateDom]
Inside fgBuildDomTree
After computing the Dominance Tree:
BB01 : BB02
BB02 : BB03
*************** In fgLocalVarLiveness()
In fgLocalVarLivenessInit
Tracked variable (6 out of 8) table:
V00 RetBuf [ byref]: refCnt = 3, refCntWtd = 3
V05 loc2 [ simd8]: refCnt = 4, refCntWtd = 8
V01 arg0 [ float]: refCnt = 1, refCntWtd = 1
V02 arg1 [ float]: refCnt = 1, refCntWtd = 1
V03 loc0 [ simd8]: refCnt = 1, refCntWtd = 1
V04 loc1 [ simd8]: refCnt = 1, refCntWtd = 1
*************** In fgPerBlockLocalVarLiveness()
BB01 USE(0)={}
DEF(0)={}
BB02 USE(3)={V00 V01 V02 } + ByrefExposed + GcHeap
DEF(3)={ V05 V03 V04} + ByrefExposed* + GcHeap*
BB03 USE(0)={}
DEF(0)={}
** Memory liveness computed, GcHeap states and ByrefExposed states match
*************** In fgInterBlockLocalVarLiveness()
BB liveness after fgLiveVarAnalysis():
BB01 IN (3)={V00 V01 V02} + ByrefExposed + GcHeap
OUT(3)={V00 V01 V02} + ByrefExposed + GcHeap
BB02 IN (3)={V00 V01 V02} + ByrefExposed + GcHeap
OUT(0)={ }
BB03 IN (0)={}
OUT(0)={}
top level assign
removing stmt with no side effects
Removing statement STMT00002 (IL 0x008...0x009)
N003 ( 7, 5) [000013] -A------R--- * ASG simd8 (copy)
N002 ( 3, 2) [000011] D------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V03 loc0
N001 ( 3, 2) [000010] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
in BB02 as useless:
top level assign
removing stmt with no side effects
Removing statement STMT00001 (IL ???... ???)
N003 ( 7, 5) [000009] -A------R--- * ASG simd8 (copy)
N002 ( 3, 2) [000007] D------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V04 loc1
N001 ( 3, 2) [000006] -------N---- \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2
in BB02 as useless:
*************** In optRemoveRedundantZeroInits()
Marking L05 as having an explicit init
*************** 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 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal gcsafe
-----------------------------------------------------------------------------------------------------------------------------------------
------------ BB01 [???..???), preds={} succs={BB02}
------------ BB02 [000..012), preds={BB01} succs={BB03}
***** BB02
STMT00000 (IL 0x000...0x007)
N005 ( 30, 12) [000005] -ACXG---R--- * ASG simd8 (copy)
N004 ( 3, 2) [000003] M------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 d:2
N003 ( 26, 9) [000002] --CXG------- \--* CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats
N001 ( 3, 2) [000001] ------------ arg0 +--* LCL_VAR float V02 arg1 u:1 (last use)
N002 ( 3, 2) [000000] ------------ arg1 \--* LCL_VAR float V01 arg0 u:1 (last use)
***** BB02
STMT00004 (IL 0x010...0x011)
N004 ( 7, 5) [000018] -A-XG------- * ASG simd8 (copy)
N002 ( 3, 2) [000017] *--XG--N---- +--* IND simd8
N001 ( 1, 1) [000016] ------------ | \--* LCL_VAR byref V00 RetBuf u:1 (last use)
N003 ( 3, 2) [000015] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 u:2 (last use)
------------ BB03 [???..???) (return), preds={BB02} succs={}
***** BB03
STMT00007 (IL ???... ???)
N001 ( 0, 0) [000021] ------------ * RETURN void
-------------------------------------------------------------------------------------------------------------------
*************** 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 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal gcsafe
-----------------------------------------------------------------------------------------------------------------------------------------
------------ BB01 [???..???), preds={} succs={BB02}
------------ BB02 [000..012), preds={BB01} succs={BB03}
***** BB02
STMT00000 (IL 0x000...0x007)
N005 ( 30, 12) [000005] -ACXG---R--- * ASG simd8 (copy)
N004 ( 3, 2) [000003] M------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 d:2
N003 ( 26, 9) [000002] --CXG------- \--* CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats
N001 ( 3, 2) [000001] ------------ arg0 +--* LCL_VAR float V02 arg1 u:1 (last use)
N002 ( 3, 2) [000000] ------------ arg1 \--* LCL_VAR float V01 arg0 u:1 (last use)
***** BB02
STMT00004 (IL 0x010...0x011)
N004 ( 7, 5) [000018] -A-XG------- * ASG simd8 (copy)
N002 ( 3, 2) [000017] *--XG--N---- +--* IND simd8
N001 ( 1, 1) [000016] ------------ | \--* LCL_VAR byref V00 RetBuf u:1 (last use)
N003 ( 3, 2) [000015] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 u:2 (last use)
------------ BB03 [???..???) (return), preds={BB02} succs={}
***** BB03
STMT00007 (IL ???... ???)
N001 ( 0, 0) [000021] ------------ * RETURN void
-------------------------------------------------------------------------------------------------------------------
*************** 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 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal gcsafe
-----------------------------------------------------------------------------------------------------------------------------------------
------------ BB01 [???..???), preds={} succs={BB02}
------------ BB02 [000..012), preds={BB01} succs={BB03}
***** BB02
STMT00000 (IL 0x000...0x007)
N005 ( 30, 12) [000005] -ACXG---R--- * ASG simd8 (copy)
N004 ( 3, 2) [000003] M------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 d:2
N003 ( 26, 9) [000002] --CXG------- \--* CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats
N001 ( 3, 2) [000001] ------------ arg0 +--* LCL_VAR float V02 arg1 u:1 (last use)
N002 ( 3, 2) [000000] ------------ arg1 \--* LCL_VAR float V01 arg0 u:1 (last use)
***** BB02
STMT00004 (IL 0x010...0x011)
N004 ( 7, 5) [000018] -A-XG------- * ASG simd8 (copy)
N002 ( 3, 2) [000017] *--XG--N---- +--* IND simd8
N001 ( 1, 1) [000016] ------------ | \--* LCL_VAR byref V00 RetBuf u:1 (last use)
N003 ( 3, 2) [000015] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 u:2 (last use)
------------ BB03 [???..???) (return), preds={BB02} succs={}
***** BB03
STMT00007 (IL ???... ???)
N001 ( 0, 0) [000021] ------------ * RETURN void
-------------------------------------------------------------------------------------------------------------------
*************** Finishing PHASE Early Value Propagation
*************** Starting PHASE Do value numbering
*************** In fgValueNumber()
Memory Initial Value in BB01 is: $140
The SSA definition for ByrefExposed (#1) at start of BB01 is $140 {InitVal($43)}
The SSA definition for GcHeap (#1) at start of BB01 is $140 {InitVal($43)}
finish(BB01).
Succ(BB02).
Not yet completed.
All preds complete, adding to allDone.
The SSA definition for ByrefExposed (#1) at start of BB02 is $140 {InitVal($43)}
The SSA definition for GcHeap (#1) at start of BB02 is $140 {InitVal($43)}
***** BB02, STMT00000(before)
N005 ( 30, 12) [000005] -ACXG---R--- * ASG simd8 (copy)
N004 ( 3, 2) [000003] M------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 d:2
N003 ( 26, 9) [000002] --CXG------- \--* CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats
N001 ( 3, 2) [000001] ------------ arg0 +--* LCL_VAR float V02 arg1 u:1 (last use)
N002 ( 3, 2) [000000] ------------ arg1 \--* LCL_VAR float V01 arg0 u:1 (last use)
N001 [000001] LCL_VAR V02 arg1 u:1 (last use) => $c1 {InitVal($42)}
N002 [000000] LCL_VAR V01 arg0 u:1 (last use) => $c0 {InitVal($41)}
fgCurMemoryVN[GcHeap] assigned for CALL at [000002] to VN: $1c0.
N003 [000002] CALL r2r_ind => $180 {180}
VNForCastOper(simd8) is $44
N004 [000003] LCL_VAR V05 loc2 d:2 => $240 {Cast($180, $44)}
N005 [000005] ASG => $240 {Cast($180, $44)}
***** BB02, STMT00000(after)
N005 ( 30, 12) [000005] -ACXG---R--- * ASG simd8 (copy) $240
N004 ( 3, 2) [000003] M------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 d:2 $240
N003 ( 26, 9) [000002] --CXG------- \--* CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats $180
N001 ( 3, 2) [000001] ------------ arg0 +--* LCL_VAR float V02 arg1 u:1 (last use) $c1
N002 ( 3, 2) [000000] ------------ arg1 \--* LCL_VAR float V01 arg0 u:1 (last use) $c0
---------
***** BB02, STMT00004(before)
N004 ( 7, 5) [000018] -A-XG------- * ASG simd8 (copy)
N002 ( 3, 2) [000017] *--XG--N---- +--* IND simd8
N001 ( 1, 1) [000016] ------------ | \--* LCL_VAR byref V00 RetBuf u:1 (last use)
N003 ( 3, 2) [000015] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 u:2 (last use)
N001 [000016] LCL_VAR V00 RetBuf u:1 (last use) => $80 {InitVal($40)}
N003 [000015] LCL_VAR V05 loc2 u:2 (last use) => $240 {Cast($180, $44)}
fgCurMemoryVN[GcHeap] assigned for assign-of-IND at [000018] to VN: $1c1.
N004 [000018] ASG => $VN.Void
***** BB02, STMT00004(after)
N004 ( 7, 5) [000018] -A-XG------- * ASG simd8 (copy) $VN.Void
N002 ( 3, 2) [000017] *--XG--N---- +--* IND simd8 $240
N001 ( 1, 1) [000016] ------------ | \--* LCL_VAR byref V00 RetBuf u:1 (last use) $80
N003 ( 3, 2) [000015] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 u:2 (last use) $240
finish(BB02).
Succ(BB03).
Not yet completed.
All preds complete, adding to allDone.
The SSA definition for ByrefExposed (#2) at start of BB03 is $1c1 {1c1}
The SSA definition for GcHeap (#2) at start of BB03 is $1c1 {1c1}
***** BB03, STMT00007(before)
N001 ( 0, 0) [000021] ------------ * RETURN void
N001 [000021] RETURN => $280 {280}
***** BB03, STMT00007(after)
N001 ( 0, 0) [000021] ------------ * RETURN void $280
finish(BB03).
*************** 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: { }
Copy Assertion for BB02
curSsaName stack: { }
Live vars: {V00 V01 V02} => {V00 V01}
Live vars: {V00 V01} => {V00}
Live vars: {V00} => {V00 V05}
Live vars: {V00 V05} => {V05}
Live vars: {V05} => {}
Copy Assertion for BB03
curSsaName stack: { 0-[000016]:V00 1-[000000]:V01 2-[000001]:V02 5-[000003]:V05 }
*************** Finishing PHASE VN based copy prop
*************** Starting PHASE Redundant branch opts
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal gcsafe
-----------------------------------------------------------------------------------------------------------------------------------------
*************** Finishing PHASE Redundant branch opts [no changes]
*************** 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 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal gcsafe
-----------------------------------------------------------------------------------------------------------------------------------------
------------ BB01 [???..???), preds={} succs={BB02}
------------ BB02 [000..012), preds={BB01} succs={BB03}
***** BB02
STMT00000 (IL 0x000...0x007)
N005 ( 30, 12) [000005] -ACXG---R--- * ASG simd8 (copy) $240
N004 ( 3, 2) [000003] M------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 d:2 $240
N003 ( 26, 9) [000002] --CXG------- \--* CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats $180
N001 ( 3, 2) [000001] ------------ arg0 +--* LCL_VAR float V02 arg1 u:1 (last use) $c1
N002 ( 3, 2) [000000] ------------ arg1 \--* LCL_VAR float V01 arg0 u:1 (last use) $c0
***** BB02
STMT00004 (IL 0x010...0x011)
N004 ( 7, 5) [000018] -A-XG------- * ASG simd8 (copy) $VN.Void
N002 ( 3, 2) [000017] *--XG--N---- +--* IND simd8 $240
N001 ( 1, 1) [000016] ------------ | \--* LCL_VAR byref V00 RetBuf u:1 (last use) $80
N003 ( 3, 2) [000015] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 u:2 (last use) $240
------------ BB03 [???..???) (return), preds={BB02} succs={}
***** BB03
STMT00007 (IL ???... ???)
N001 ( 0, 0) [000021] ------------ * RETURN void $280
-------------------------------------------------------------------------------------------------------------------
*************** In optOptimizeValnumCSEs()
*************** 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 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal gcsafe
-----------------------------------------------------------------------------------------------------------------------------------------
------------ BB01 [???..???), preds={} succs={BB02}
------------ BB02 [000..012), preds={BB01} succs={BB03}
***** BB02
STMT00000 (IL 0x000...0x007)
N005 ( 30, 12) [000005] -ACXG---R--- * ASG simd8 (copy) $240
N004 ( 3, 2) [000003] M------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 d:2 $240
N003 ( 26, 9) [000002] --CXG------- \--* CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats $180
N001 ( 3, 2) [000001] ------------ arg0 +--* LCL_VAR float V02 arg1 u:1 (last use) $c1
N002 ( 3, 2) [000000] ------------ arg1 \--* LCL_VAR float V01 arg0 u:1 (last use) $c0
***** BB02
STMT00004 (IL 0x010...0x011)
N004 ( 7, 5) [000018] -A-XG------- * ASG simd8 (copy) $VN.Void
N002 ( 3, 2) [000017] *--XG--N---- +--* IND simd8 $240
N001 ( 1, 1) [000016] ------------ | \--* LCL_VAR byref V00 RetBuf u:1 (last use) $80
N003 ( 3, 2) [000015] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 u:2 (last use) $240
------------ BB03 [???..???) (return), preds={BB02} succs={}
***** BB03
STMT00007 (IL ???... ???)
N001 ( 0, 0) [000021] ------------ * RETURN void $280
-------------------------------------------------------------------------------------------------------------------
GenTreeNode creates assertion:
N002 ( 3, 2) [000017] *--XG--N---- * IND simd8 $240
In BB02 New Global Constant Assertion: (128, 0) ($80,$0) Value_Number {InitVal($40)} is not 0 index=#01, mask=0000000000000001
BB01 valueGen = 0000000000000000
BB02 valueGen = 0000000000000001
BB03 valueGen = 0000000000000000
AssertionPropCallback::StartMerge: BB01 in -> 0000000000000000
AssertionPropCallback::EndMerge : BB01 in -> 0000000000000000
AssertionPropCallback::Changed : BB01 before out -> 0000000000000001; after out -> 0000000000000000;
jumpDest before out -> 0000000000000001; jumpDest after out -> 0000000000000000;
AssertionPropCallback::StartMerge: BB02 in -> 0000000000000001
AssertionPropCallback::Merge : BB02 in -> 0000000000000001, predBlock BB01 out -> 0000000000000000
AssertionPropCallback::EndMerge : BB02 in -> 0000000000000000
AssertionPropCallback::Changed : BB02 before out -> 0000000000000001; after out -> 0000000000000001;
jumpDest before out -> 0000000000000001; jumpDest after out -> 0000000000000000;
AssertionPropCallback::StartMerge: BB03 in -> 0000000000000001
AssertionPropCallback::Merge : BB03 in -> 0000000000000001, predBlock BB02 out -> 0000000000000001
AssertionPropCallback::EndMerge : BB03 in -> 0000000000000001
AssertionPropCallback::Unchanged : BB03 out -> 0000000000000001; jumpDest out -> 0000000000000001
BB01 valueIn = 0000000000000000 valueOut = 0000000000000000
BB02 valueIn = 0000000000000000 valueOut = 0000000000000001
BB03 valueIn = 0000000000000001 valueOut = 0000000000000001
Propagating 0000000000000000 assertions for BB02, stmt STMT00000, tree [000001], tree -> 0
Propagating 0000000000000000 assertions for BB02, stmt STMT00000, tree [000000], tree -> 0
Propagating 0000000000000000 assertions for BB02, stmt STMT00000, tree [000002], tree -> 0
Propagating 0000000000000000 assertions for BB02, stmt STMT00000, tree [000003], tree -> 0
Propagating 0000000000000000 assertions for BB02, stmt STMT00000, tree [000005], tree -> 0
Propagating 0000000000000000 assertions for BB02, stmt STMT00004, tree [000016], tree -> 0
Propagating 0000000000000000 assertions for BB02, stmt STMT00004, tree [000017], tree -> 1
Propagating 0000000000000001 assertions for BB02, stmt STMT00004, tree [000015], tree -> 0
Propagating 0000000000000001 assertions for BB02, stmt STMT00004, tree [000018], tree -> 0
Propagating 0000000000000001 assertions for BB03, stmt STMT00007, tree [000021], 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 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal gcsafe
-----------------------------------------------------------------------------------------------------------------------------------------
------------ BB01 [???..???), preds={} succs={BB02}
------------ BB02 [000..012), preds={BB01} succs={BB03}
***** BB02
STMT00000 (IL 0x000...0x007)
N005 ( 30, 12) [000005] -ACXG---R--- * ASG simd8 (copy) $240
N004 ( 3, 2) [000003] M------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 d:2 $240
N003 ( 26, 9) [000002] --CXG------- \--* CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats $180
N001 ( 3, 2) [000001] ------------ arg0 +--* LCL_VAR float V02 arg1 u:1 (last use) $c1
N002 ( 3, 2) [000000] ------------ arg1 \--* LCL_VAR float V01 arg0 u:1 (last use) $c0
***** BB02
STMT00004 (IL 0x010...0x011)
N004 ( 7, 5) [000018] -A-XG------- * ASG simd8 (copy) $VN.Void
N002 ( 3, 2) [000017] *--XG--N---- +--* IND simd8 $240
N001 ( 1, 1) [000016] ------------ | \--* LCL_VAR byref V00 RetBuf u:1 (last use) $80
N003 ( 3, 2) [000015] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 u:2 (last use) $240
------------ BB03 [???..???) (return), preds={BB02} succs={}
***** BB03
STMT00007 (IL ???... ???)
N001 ( 0, 0) [000021] ------------ * RETURN void $280
-------------------------------------------------------------------------------------------------------------------
*************** Finishing PHASE Optimize index checks
*************** Starting PHASE Insert GC Polls
*************** Finishing PHASE Insert GC Polls [no changes]
*************** Starting PHASE Determine first cold block
*************** In fgDetermineFirstColdBlock()
No procedure splitting will be done for this method
*************** Finishing PHASE Determine first cold block
Trees before Rationalize IR
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal gcsafe
-----------------------------------------------------------------------------------------------------------------------------------------
------------ BB01 [???..???), preds={} succs={BB02}
------------ BB02 [000..012), preds={BB01} succs={BB03}
***** BB02
STMT00000 (IL 0x000...0x007)
N005 ( 30, 12) [000005] -ACXG---R--- * ASG simd8 (copy) $240
N004 ( 3, 2) [000003] M------N---- +--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 d:2 $240
N003 ( 26, 9) [000002] --CXG------- \--* CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats $180
N001 ( 3, 2) [000001] ------------ arg0 +--* LCL_VAR float V02 arg1 u:1 (last use) $c1
N002 ( 3, 2) [000000] ------------ arg1 \--* LCL_VAR float V01 arg0 u:1 (last use) $c0
***** BB02
STMT00004 (IL 0x010...0x011)
N004 ( 7, 5) [000018] -A-XG------- * ASG simd8 (copy) $VN.Void
N002 ( 3, 2) [000017] *--XG--N---- +--* IND simd8 $240
N001 ( 1, 1) [000016] ------------ | \--* LCL_VAR byref V00 RetBuf u:1 (last use) $80
N003 ( 3, 2) [000015] ------------ \--* LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 u:2 (last use) $240
------------ BB03 [???..???) (return), preds={BB02} succs={}
***** BB03
STMT00007 (IL ???... ???)
N001 ( 0, 0) [000021] ------------ * RETURN void $280
-------------------------------------------------------------------------------------------------------------------
*************** Starting PHASE Rationalize IR
rewriting asg(LCL_VAR, X) to STORE_LCL_VAR(X)
N005 ( 30, 12) [000005] MACXG------- * STORE_LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 d:2
*************** Finishing PHASE Rationalize IR
Trees after Rationalize IR
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal LIR
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe LIR
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal gcsafe LIR
-----------------------------------------------------------------------------------------------------------------------------------------
------------ BB01 [???..???), preds={} succs={BB02}
------------ BB02 [000..012), preds={BB01} succs={BB03}
[000022] ------------ IL_OFFSET void IL offset: 0x0
N001 ( 3, 2) [000001] ------------ t1 = LCL_VAR float V02 arg1 u:1 (last use) $c1
N002 ( 3, 2) [000000] ------------ t0 = LCL_VAR float V01 arg0 u:1 (last use) $c0
/--* t1 float arg0
+--* t0 float arg1
N003 ( 26, 9) [000002] --CXG------- t2 = * CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats $180
/--* t2 struct
N005 ( 30, 12) [000005] MA-XG------- * STORE_LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 d:2
[000023] ------------ IL_OFFSET void IL offset: 0x10
N001 ( 1, 1) [000016] ------------ t16 = LCL_VAR byref V00 RetBuf u:1 (last use) $80
N003 ( 3, 2) [000015] ------------ t15 = LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 u:2 (last use) $240
/--* t16 byref
+--* t15 simd8
[000024] -A-XG------- * STOREIND simd8
------------ BB03 [???..???) (return), preds={BB02} succs={}
N001 ( 0, 0) [000021] ------------ RETURN void $280
-------------------------------------------------------------------------------------------------------------------
*************** 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 [0005] 1 1 [???..???) keep i internal LIR
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe LIR
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal gcsafe LIR
-----------------------------------------------------------------------------------------------------------------------------------------
------------ BB01 [???..???), preds={} succs={BB02}
------------ BB02 [000..012), preds={BB01} succs={BB03}
[000022] ------------ IL_OFFSET void IL offset: 0x0
N001 ( 3, 2) [000001] ------------ t1 = LCL_VAR float V02 arg1 u:1 (last use) $c1
N002 ( 3, 2) [000000] ------------ t0 = LCL_VAR float V01 arg0 u:1 (last use) $c0
/--* t1 float arg0
+--* t0 float arg1
N003 ( 26, 9) [000002] --CXG------- t2 = * CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats $180
/--* t2 struct
N005 ( 30, 12) [000005] MA-XG------- * STORE_LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 d:2
[000023] ------------ IL_OFFSET void IL offset: 0x10
N001 ( 1, 1) [000016] ------------ t16 = LCL_VAR byref V00 RetBuf u:1 (last use) $80
N003 ( 3, 2) [000015] ------------ t15 = LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 u:2 (last use) $240
/--* t16 byref
+--* t15 simd8
[000024] -A-XG------- * STOREIND simd8
------------ BB03 [???..???) (return), preds={BB02} succs={}
N001 ( 0, 0) [000021] ------------ RETURN void $280
-------------------------------------------------------------------------------------------------------------------
*************** Starting PHASE Lowering nodeinfo
lowering call (before):
N001 ( 3, 2) [000001] ------------ t1 = LCL_VAR float V02 arg1 u:1 (last use) $c1
N002 ( 3, 2) [000000] ------------ t0 = LCL_VAR float V01 arg0 u:1 (last use) $c0
/--* t1 float arg0
+--* t0 float arg1
N003 ( 26, 9) [000002] --CXG------- t2 = * CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats $180
objp:
======
args:
======
lowering arg : N001 ( 3, 2) [000001] ------------ * LCL_VAR float V02 arg1 u:1 (last use) $c1
new node is : [000025] ------------ * PUTARG_STK [+0x00] void (1 slots), (4 stackByteSize), (0 slot), (0 byteOffset)
lowering arg : N002 ( 3, 2) [000000] ------------ * LCL_VAR float V01 arg0 u:1 (last use) $c0
new node is : [000026] ------------ * PUTARG_STK [+0x04] void (1 slots), (4 stackByteSize), (1 slot), (4 byteOffset)
late:
======
======= Inserting PInvoke call prolog
Initializing arg info for 30.CALL:
ArgTable for 30.CALL after fgInitArgInfo:
fgArgTabEntry[arg 0 28.LCL_VAR_ADDR int (By ref), 1 reg: ecx, byteAlignment=4]
fgArgTabEntry[arg 1 29.CNS_INT int (By ref), 1 reg: edx, byteAlignment=4]
Morphing args for 30.CALL:
Sorting the arguments:
Deferred argument ('ecx'):
[000028] ------------ * LCL_VAR_ADDR int V06 PInvokeFrame
Replaced with placeholder node:
[000031] ----------L- * ARGPLACE int
Deferred argument ('edx'):
[000029] ------------ * CNS_INT int 8
Replaced with placeholder node:
[000032] ----------L- * ARGPLACE int
Shuffled argument table: ecx edx
ArgTable for 30.CALL after fgMorphArgs:
fgArgTabEntry[arg 0 28.LCL_VAR_ADDR int (By ref), 1 reg: ecx, byteAlignment=4, lateArgInx=0, processed]
fgArgTabEntry[arg 1 29.CNS_INT int (By ref), 1 reg: edx, byteAlignment=4, lateArgInx=1, processed]
lowering call (before):
N001 ( 3, 3) [000028] ------------ t28 = LCL_VAR_ADDR int V06 PInvokeFrame
N002 ( 1, 1) [000029] ------------ t29 = CNS_INT int 8
/--* t28 int arg0 in ecx
+--* t29 int arg1 in edx
N003 ( 18, 11) [000030] --C-G------- * CALL help void HELPER.CORINFO_HELP_JIT_PINVOKE_BEGIN
objp:
======
args:
======
lowering arg : ( 0, 0) [000031] ----------L- * ARGPLACE int
lowering arg : ( 0, 0) [000032] ----------L- * ARGPLACE int
late:
======
lowering arg : N001 ( 3, 3) [000028] ------------ * LCL_VAR_ADDR int V06 PInvokeFrame
new node is : [000033] ------------ * PUTARG_REG int REG ecx
lowering arg : N002 ( 1, 1) [000029] ------------ * CNS_INT int 8
new node is : [000034] ------------ * PUTARG_REG int REG edx
results of lowering call:
N001 ( 1, 4) [000035] H----------- t35 = CNS_INT(h) int 0x420220 ftn
/--* t35 int
N002 ( 3, 6) [000036] ------------ t36 = * IND int
lowering call (after):
N001 ( 3, 3) [000028] ------------ t28 = LCL_VAR_ADDR int V06 PInvokeFrame
/--* t28 int
[000033] ------------ t33 = * PUTARG_REG int REG ecx
N002 ( 1, 1) [000029] ------------ t29 = CNS_INT int 8
/--* t29 int
[000034] ------------ t34 = * PUTARG_REG int REG edx
N001 ( 1, 4) [000035] Hc---------- t35 = CNS_INT(h) int 0x420220 ftn
/--* t35 int
N002 ( 3, 6) [000036] -c---------- t36 = * IND int REG NA
/--* t33 int arg0 in ecx
+--* t34 int arg1 in edx
+--* t36 int control expr
N003 ( 18, 11) [000030] --C-G------- * CALL help void HELPER.CORINFO_HELP_JIT_PINVOKE_BEGIN
======= Inserting PInvoke call epilog
Initializing arg info for 41.CALL:
ArgTable for 41.CALL after fgInitArgInfo:
fgArgTabEntry[arg 0 40.LCL_VAR_ADDR int (By ref), 1 reg: ecx, byteAlignment=4]
Morphing args for 41.CALL:
Sorting the arguments:
Deferred argument ('ecx'):
[000040] ------------ * LCL_VAR_ADDR int V06 PInvokeFrame
Replaced with placeholder node:
[000042] ----------L- * ARGPLACE int
Shuffled argument table: ecx
ArgTable for 41.CALL after fgMorphArgs:
fgArgTabEntry[arg 0 40.LCL_VAR_ADDR int (By ref), 1 reg: ecx, byteAlignment=4, lateArgInx=0, processed]
results of lowering call:
N001 ( 1, 4) [000037] H----------- t37 = CNS_INT(h) int 0x420368 ftn
/--* t37 int
N002 ( 3, 6) [000038] ------------ t38 = * IND int
/--* t38 int
N003 ( 6, 8) [000039] ------------ t39 = * IND int
lowering call (after):
N001 ( 3, 2) [000001] ------------ t1 = LCL_VAR float V02 arg1 u:1 (last use) $c1
/--* t1 float
[000025] ------------ * PUTARG_STK [+0x00] void (1 slots), (4 stackByteSize), (0 slot), (0 byteOffset)
N002 ( 3, 2) [000000] ------------ t0 = LCL_VAR float V01 arg0 u:1 (last use) $c0
/--* t0 float
[000026] ------------ * PUTARG_STK [+0x04] void (1 slots), (4 stackByteSize), (1 slot), (4 byteOffset)
[000027] ------------ PINVOKE_PROLOG void
N001 ( 3, 3) [000028] ------------ t28 = LCL_VAR_ADDR int V06 PInvokeFrame
/--* t28 int
[000033] ------------ t33 = * PUTARG_REG int REG ecx
N002 ( 1, 1) [000029] ------------ t29 = CNS_INT int 8
/--* t29 int
[000034] ------------ t34 = * PUTARG_REG int REG edx
N001 ( 1, 4) [000035] Hc---------- t35 = CNS_INT(h) int 0x420220 ftn
/--* t35 int
N002 ( 3, 6) [000036] -c---------- t36 = * IND int REG NA
/--* t33 int arg0 in ecx
+--* t34 int arg1 in edx
+--* t36 int control expr
N003 ( 18, 11) [000030] --C-G------- * CALL help void HELPER.CORINFO_HELP_JIT_PINVOKE_BEGIN
N001 ( 1, 4) [000037] Hc---------- t37 = CNS_INT(h) int 0x420368 ftn
/--* t37 int
N002 ( 3, 6) [000038] ------------ t38 = * IND int
/--* t38 int
N003 ( 6, 8) [000039] -c---------- t39 = * IND int REG NA
/--* t39 int control expr
N003 ( 26, 9) [000002] --CXG------- t2 = * CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats $180
lowering call (before):
N001 ( 3, 3) [000040] ------------ t40 = LCL_VAR_ADDR int V06 PInvokeFrame
/--* t40 int arg0 in ecx
N002 ( 17, 9) [000041] --C-G------- * CALL help void HELPER.CORINFO_HELP_JIT_PINVOKE_END
objp:
======
args:
======
lowering arg : ( 0, 0) [000042] ----------L- * ARGPLACE int
late:
======
lowering arg : N001 ( 3, 3) [000040] ------------ * LCL_VAR_ADDR int V06 PInvokeFrame
new node is : [000043] ------------ * PUTARG_REG int REG ecx
results of lowering call:
N001 ( 1, 4) [000044] H----------- t44 = CNS_INT(h) int 0x420230 ftn
/--* t44 int
N002 ( 3, 6) [000045] ------------ t45 = * IND int
lowering call (after):
N001 ( 3, 3) [000040] ------------ t40 = LCL_VAR_ADDR int V06 PInvokeFrame
/--* t40 int
[000043] ------------ t43 = * PUTARG_REG int REG ecx
N001 ( 1, 4) [000044] Hc---------- t44 = CNS_INT(h) int 0x420230 ftn
/--* t44 int
N002 ( 3, 6) [000045] -c---------- t45 = * IND int REG NA
/--* t43 int arg0 in ecx
+--* t45 int control expr
N002 ( 17, 9) [000041] --C-G------- * CALL help void HELPER.CORINFO_HELP_JIT_PINVOKE_END
lowering store lcl var/field (before):
N001 ( 3, 2) [000001] ------------ t1 = LCL_VAR float V02 arg1 u:1 (last use) $c1
/--* t1 float
[000025] ------------ * PUTARG_STK [+0x00] void (1 slots), (4 stackByteSize), (0 slot), (0 byteOffset)
N002 ( 3, 2) [000000] ------------ t0 = LCL_VAR float V01 arg0 u:1 (last use) $c0
/--* t0 float
[000026] ------------ * PUTARG_STK [+0x04] void (1 slots), (4 stackByteSize), (1 slot), (4 byteOffset)
[000027] ------------ PINVOKE_PROLOG void
N001 ( 3, 3) [000028] ------------ t28 = LCL_VAR_ADDR int V06 PInvokeFrame
/--* t28 int
[000033] ------------ t33 = * PUTARG_REG int REG ecx
N002 ( 1, 1) [000029] ------------ t29 = CNS_INT int 8
/--* t29 int
[000034] ------------ t34 = * PUTARG_REG int REG edx
N001 ( 1, 4) [000035] Hc---------- t35 = CNS_INT(h) int 0x420220 ftn
/--* t35 int
N002 ( 3, 6) [000036] -c---------- t36 = * IND int REG NA
/--* t33 int arg0 in ecx
+--* t34 int arg1 in edx
+--* t36 int control expr
N003 ( 18, 11) [000030] --C-G------- * CALL help void HELPER.CORINFO_HELP_JIT_PINVOKE_BEGIN
N001 ( 1, 4) [000037] Hc---------- t37 = CNS_INT(h) int 0x420368 ftn
/--* t37 int
N002 ( 3, 6) [000038] ------------ t38 = * IND int
/--* t38 int
N003 ( 6, 8) [000039] -c---------- t39 = * IND int REG NA
/--* t39 int control expr
N003 ( 26, 9) [000002] --CXG------- t2 = * CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats $180
N001 ( 3, 3) [000040] ------------ t40 = LCL_VAR_ADDR int V06 PInvokeFrame
/--* t40 int
[000043] ------------ t43 = * PUTARG_REG int REG ecx
N001 ( 1, 4) [000044] Hc---------- t44 = CNS_INT(h) int 0x420230 ftn
/--* t44 int
N002 ( 3, 6) [000045] -c---------- t45 = * IND int REG NA
/--* t43 int arg0 in ecx
+--* t45 int control expr
N002 ( 17, 9) [000041] --C-G------- * CALL help void HELPER.CORINFO_HELP_JIT_PINVOKE_END
/--* t2 struct
N005 ( 30, 12) [000005] MA-XG------- * STORE_LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 d:2
lowering store lcl var/field (after):
N001 ( 3, 2) [000001] ------------ t1 = LCL_VAR float V02 arg1 u:1 (last use) $c1
/--* t1 float
[000025] ------------ * PUTARG_STK [+0x00] void (1 slots), (4 stackByteSize), (0 slot), (0 byteOffset)
N002 ( 3, 2) [000000] ------------ t0 = LCL_VAR float V01 arg0 u:1 (last use) $c0
/--* t0 float
[000026] ------------ * PUTARG_STK [+0x04] void (1 slots), (4 stackByteSize), (1 slot), (4 byteOffset)
[000027] ------------ PINVOKE_PROLOG void
N001 ( 3, 3) [000028] ------------ t28 = LCL_VAR_ADDR int V06 PInvokeFrame
/--* t28 int
[000033] ------------ t33 = * PUTARG_REG int REG ecx
N002 ( 1, 1) [000029] ------------ t29 = CNS_INT int 8
/--* t29 int
[000034] ------------ t34 = * PUTARG_REG int REG edx
N001 ( 1, 4) [000035] Hc---------- t35 = CNS_INT(h) int 0x420220 ftn
/--* t35 int
N002 ( 3, 6) [000036] -c---------- t36 = * IND int REG NA
/--* t33 int arg0 in ecx
+--* t34 int arg1 in edx
+--* t36 int control expr
N003 ( 18, 11) [000030] --C-G------- * CALL help void HELPER.CORINFO_HELP_JIT_PINVOKE_BEGIN
N001 ( 1, 4) [000037] Hc---------- t37 = CNS_INT(h) int 0x420368 ftn
/--* t37 int
N002 ( 3, 6) [000038] ------------ t38 = * IND int
/--* t38 int
N003 ( 6, 8) [000039] -c---------- t39 = * IND int REG NA
/--* t39 int control expr
N003 ( 26, 9) [000002] --CXG------- t2 = * CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats $180
N001 ( 3, 3) [000040] ------------ t40 = LCL_VAR_ADDR int V06 PInvokeFrame
/--* t40 int
[000043] ------------ t43 = * PUTARG_REG int REG ecx
N001 ( 1, 4) [000044] Hc---------- t44 = CNS_INT(h) int 0x420230 ftn
/--* t44 int
N002 ( 3, 6) [000045] -c---------- t45 = * IND int REG NA
/--* t43 int arg0 in ecx
+--* t45 int control expr
N002 ( 17, 9) [000041] --C-G------- * CALL help void HELPER.CORINFO_HELP_JIT_PINVOKE_END
/--* t2 struct
N005 ( 30, 12) [000005] DA-XG------- * STORE_LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 d:2
Lower of StoreInd didn't mark the node as self contained for reason: 4
N001 ( 1, 1) [000016] ------------ t16 = LCL_VAR byref V00 RetBuf u:1 (last use) $80
N003 ( 3, 2) [000015] ------------ t15 = LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 u:2 (last use) $240
/--* t16 byref
+--* t15 simd8
[000024] -A-XG------- * STOREIND simd8
lowering GT_RETURN
N001 ( 0, 0) [000021] ------------ * RETURN void $280
============Lower has completed modifying nodes.
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal LIR
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe LIR
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal gcsafe LIR
-----------------------------------------------------------------------------------------------------------------------------------------
------------ BB01 [???..???), preds={} succs={BB02}
------------ BB02 [000..012), preds={BB01} succs={BB03}
[000022] ------------ IL_OFFSET void IL offset: 0x0
N001 ( 3, 2) [000001] ------------ t1 = LCL_VAR float V02 arg1 u:1 (last use) $c1
/--* t1 float
[000025] ------------ * PUTARG_STK [+0x00] void (1 slots), (4 stackByteSize), (0 slot), (0 byteOffset)
N002 ( 3, 2) [000000] ------------ t0 = LCL_VAR float V01 arg0 u:1 (last use) $c0
/--* t0 float
[000026] ------------ * PUTARG_STK [+0x04] void (1 slots), (4 stackByteSize), (1 slot), (4 byteOffset)
[000027] ------------ PINVOKE_PROLOG void
N001 ( 3, 3) [000028] ------------ t28 = LCL_VAR_ADDR int V06 PInvokeFrame
/--* t28 int
[000033] ------------ t33 = * PUTARG_REG int REG ecx
N002 ( 1, 1) [000029] ------------ t29 = CNS_INT int 8
/--* t29 int
[000034] ------------ t34 = * PUTARG_REG int REG edx
N001 ( 1, 4) [000035] Hc---------- t35 = CNS_INT(h) int 0x420220 ftn
/--* t35 int
N002 ( 3, 6) [000036] -c---------- t36 = * IND int REG NA
/--* t33 int arg0 in ecx
+--* t34 int arg1 in edx
+--* t36 int control expr
N003 ( 18, 11) [000030] --C-G------- * CALL help void HELPER.CORINFO_HELP_JIT_PINVOKE_BEGIN
N001 ( 1, 4) [000037] Hc---------- t37 = CNS_INT(h) int 0x420368 ftn
/--* t37 int
N002 ( 3, 6) [000038] ------------ t38 = * IND int
/--* t38 int
N003 ( 6, 8) [000039] -c---------- t39 = * IND int REG NA
/--* t39 int control expr
N003 ( 26, 9) [000002] --CXG------- t2 = * CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats $180
N001 ( 3, 3) [000040] ------------ t40 = LCL_VAR_ADDR int V06 PInvokeFrame
/--* t40 int
[000043] ------------ t43 = * PUTARG_REG int REG ecx
N001 ( 1, 4) [000044] Hc---------- t44 = CNS_INT(h) int 0x420230 ftn
/--* t44 int
N002 ( 3, 6) [000045] -c---------- t45 = * IND int REG NA
/--* t43 int arg0 in ecx
+--* t45 int control expr
N002 ( 17, 9) [000041] --C-G------- * CALL help void HELPER.CORINFO_HELP_JIT_PINVOKE_END
/--* t2 struct
N005 ( 30, 12) [000005] DA-XG------- * STORE_LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 d:2
[000023] ------------ IL_OFFSET void IL offset: 0x10
N001 ( 1, 1) [000016] ------------ t16 = LCL_VAR byref V00 RetBuf u:1 (last use) $80
N003 ( 3, 2) [000015] ------------ t15 = LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 u:2 (last use) $240
/--* t16 byref
+--* t15 simd8
[000024] -A-XG------- * STOREIND simd8
------------ BB03 [???..???) (return), preds={BB02} succs={}
N001 ( 0, 0) [000021] ------------ RETURN void $280
-------------------------------------------------------------------------------------------------------------------
*** lvaComputeRefCounts ***
*** lvaComputeRefCounts -- explicit counts ***
New refCnts for V02: refCnt = 1, refCntWtd = 1
New refCnts for V01: refCnt = 1, refCntWtd = 1
New refCnts for V06: refCnt = 2, refCntWtd = 2
New refCnts for V06: refCnt = 3, refCntWtd = 3
New refCnts for V05: refCnt = 1, refCntWtd = 2
New refCnts for V00: refCnt = 1, refCntWtd = 1
New refCnts for V05: refCnt = 2, refCntWtd = 4
*** lvaComputeRefCounts -- implicit counts ***
New refCnts for V00: refCnt = 2, refCntWtd = 2
New refCnts for V00: refCnt = 3, refCntWtd = 3
*************** In fgLocalVarLiveness()
; Initial local variable assignments
;
; V00 RetBuf byref
; V01 arg0 float
; V02 arg1 float
; V03 loc0 simd8
; V04 loc1 simd8
; V05 loc2 simd8 multireg-ret "Return value temp for multireg return"
; V06 PInvokeFrame blk do-not-enreg[X] addr-exposed "Pinvoke FrameVar"
; V07 EHSlots blk do-not-enreg[X] addr-exposed "lvaShadowSPslotsVar"
In fgLocalVarLivenessInit
Tracked variable (4 out of 8) table:
V00 RetBuf [ byref]: refCnt = 3, refCntWtd = 3
V05 loc2 [ simd8]: refCnt = 2, refCntWtd = 4
V01 arg0 [ float]: refCnt = 1, refCntWtd = 1
V02 arg1 [ float]: refCnt = 1, refCntWtd = 1
*************** In fgPerBlockLocalVarLiveness()
BB01 USE(0)={}
DEF(0)={}
BB02 USE(3)={V00 V01 V02} + ByrefExposed + GcHeap
DEF(1)={ V05 } + ByrefExposed* + GcHeap*
BB03 USE(0)={}
DEF(0)={}
** Memory liveness computed, GcHeap states and ByrefExposed states match
*************** In fgInterBlockLocalVarLiveness()
BB liveness after fgLiveVarAnalysis():
BB01 IN (3)={V00 V01 V02} + ByrefExposed + GcHeap
OUT(3)={V00 V01 V02} + ByrefExposed + GcHeap
BB02 IN (3)={V00 V01 V02} + ByrefExposed + GcHeap
OUT(0)={ }
BB03 IN (0)={}
OUT(0)={}
*************** In fgUpdateFlowGraph()
Before updating the flow graph:
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal LIR
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe LIR
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal gcsafe LIR
-----------------------------------------------------------------------------------------------------------------------------------------
*************** In fgDebugCheckBBlist
*** lvaComputeRefCounts ***
*** lvaComputeRefCounts -- explicit counts ***
New refCnts for V02: refCnt = 1, refCntWtd = 1
New refCnts for V01: refCnt = 1, refCntWtd = 1
New refCnts for V06: refCnt = 2, refCntWtd = 2
New refCnts for V06: refCnt = 3, refCntWtd = 3
New refCnts for V05: refCnt = 1, refCntWtd = 2
New refCnts for V00: refCnt = 1, refCntWtd = 1
New refCnts for V05: refCnt = 2, refCntWtd = 4
*** lvaComputeRefCounts -- implicit counts ***
New refCnts for V00: refCnt = 2, refCntWtd = 2
New refCnts for V00: refCnt = 3, refCntWtd = 3
*************** Finishing PHASE Lowering nodeinfo
Trees after Lowering nodeinfo
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal LIR
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe LIR
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal gcsafe LIR
-----------------------------------------------------------------------------------------------------------------------------------------
------------ BB01 [???..???), preds={} succs={BB02}
------------ BB02 [000..012), preds={BB01} succs={BB03}
[000022] ------------ IL_OFFSET void IL offset: 0x0
N001 ( 3, 2) [000001] ------------ t1 = LCL_VAR float V02 arg1 u:1 (last use) $c1
/--* t1 float
[000025] ------------ * PUTARG_STK [+0x00] void (1 slots), (4 stackByteSize), (0 slot), (0 byteOffset)
N002 ( 3, 2) [000000] ------------ t0 = LCL_VAR float V01 arg0 u:1 (last use) $c0
/--* t0 float
[000026] ------------ * PUTARG_STK [+0x04] void (1 slots), (4 stackByteSize), (1 slot), (4 byteOffset)
[000027] ------------ PINVOKE_PROLOG void
N001 ( 3, 3) [000028] ------------ t28 = LCL_VAR_ADDR int V06 PInvokeFrame
/--* t28 int
[000033] ------------ t33 = * PUTARG_REG int REG ecx
N002 ( 1, 1) [000029] ------------ t29 = CNS_INT int 8
/--* t29 int
[000034] ------------ t34 = * PUTARG_REG int REG edx
N001 ( 1, 4) [000035] Hc---------- t35 = CNS_INT(h) int 0x420220 ftn
/--* t35 int
N002 ( 3, 6) [000036] -c---------- t36 = * IND int REG NA
/--* t33 int arg0 in ecx
+--* t34 int arg1 in edx
+--* t36 int control expr
N003 ( 18, 11) [000030] --C-G------- * CALL help void HELPER.CORINFO_HELP_JIT_PINVOKE_BEGIN
N001 ( 1, 4) [000037] Hc---------- t37 = CNS_INT(h) int 0x420368 ftn
/--* t37 int
N002 ( 3, 6) [000038] ------------ t38 = * IND int
/--* t38 int
N003 ( 6, 8) [000039] -c---------- t39 = * IND int REG NA
/--* t39 int control expr
N003 ( 26, 9) [000002] --CXG------- t2 = * CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats $180
N001 ( 3, 3) [000040] ------------ t40 = LCL_VAR_ADDR int V06 PInvokeFrame
/--* t40 int
[000043] ------------ t43 = * PUTARG_REG int REG ecx
N001 ( 1, 4) [000044] Hc---------- t44 = CNS_INT(h) int 0x420230 ftn
/--* t44 int
N002 ( 3, 6) [000045] -c---------- t45 = * IND int REG NA
/--* t43 int arg0 in ecx
+--* t45 int control expr
N002 ( 17, 9) [000041] --C-G------- * CALL help void HELPER.CORINFO_HELP_JIT_PINVOKE_END
/--* t2 struct
N005 ( 30, 12) [000005] DA-XG------- * STORE_LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 d:2
[000023] ------------ IL_OFFSET void IL offset: 0x10
N001 ( 1, 1) [000016] ------------ t16 = LCL_VAR byref V00 RetBuf u:1 (last use) $80
N003 ( 3, 2) [000015] ------------ t15 = LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 u:2 (last use) $240
/--* t16 byref
+--* t15 simd8
[000024] -A-XG------- * STOREIND simd8
------------ BB03 [???..???) (return), preds={BB02} succs={}
N001 ( 0, 0) [000021] ------------ RETURN void $280
-------------------------------------------------------------------------------------------------------------------
*************** In fgDebugCheckBBlist
Trees before Calculate stack level slots
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal LIR
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe LIR
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal gcsafe LIR
-----------------------------------------------------------------------------------------------------------------------------------------
------------ BB01 [???..???), preds={} succs={BB02}
------------ BB02 [000..012), preds={BB01} succs={BB03}
[000022] ------------ IL_OFFSET void IL offset: 0x0
N001 ( 3, 2) [000001] ------------ t1 = LCL_VAR float V02 arg1 u:1 (last use) $c1
/--* t1 float
[000025] ------------ * PUTARG_STK [+0x00] void (1 slots), (4 stackByteSize), (0 slot), (0 byteOffset)
N002 ( 3, 2) [000000] ------------ t0 = LCL_VAR float V01 arg0 u:1 (last use) $c0
/--* t0 float
[000026] ------------ * PUTARG_STK [+0x04] void (1 slots), (4 stackByteSize), (1 slot), (4 byteOffset)
[000027] ------------ PINVOKE_PROLOG void
N001 ( 3, 3) [000028] ------------ t28 = LCL_VAR_ADDR int V06 PInvokeFrame
/--* t28 int
[000033] ------------ t33 = * PUTARG_REG int REG ecx
N002 ( 1, 1) [000029] ------------ t29 = CNS_INT int 8
/--* t29 int
[000034] ------------ t34 = * PUTARG_REG int REG edx
N001 ( 1, 4) [000035] Hc---------- t35 = CNS_INT(h) int 0x420220 ftn
/--* t35 int
N002 ( 3, 6) [000036] -c---------- t36 = * IND int REG NA
/--* t33 int arg0 in ecx
+--* t34 int arg1 in edx
+--* t36 int control expr
N003 ( 18, 11) [000030] --C-G------- * CALL help void HELPER.CORINFO_HELP_JIT_PINVOKE_BEGIN
N001 ( 1, 4) [000037] Hc---------- t37 = CNS_INT(h) int 0x420368 ftn
/--* t37 int
N002 ( 3, 6) [000038] ------------ t38 = * IND int
/--* t38 int
N003 ( 6, 8) [000039] -c---------- t39 = * IND int REG NA
/--* t39 int control expr
N003 ( 26, 9) [000002] --CXG------- t2 = * CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats $180
N001 ( 3, 3) [000040] ------------ t40 = LCL_VAR_ADDR int V06 PInvokeFrame
/--* t40 int
[000043] ------------ t43 = * PUTARG_REG int REG ecx
N001 ( 1, 4) [000044] Hc---------- t44 = CNS_INT(h) int 0x420230 ftn
/--* t44 int
N002 ( 3, 6) [000045] -c---------- t45 = * IND int REG NA
/--* t43 int arg0 in ecx
+--* t45 int control expr
N002 ( 17, 9) [000041] --C-G------- * CALL help void HELPER.CORINFO_HELP_JIT_PINVOKE_END
/--* t2 struct
N005 ( 30, 12) [000005] DA-XG------- * STORE_LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 d:2
[000023] ------------ IL_OFFSET void IL offset: 0x10
N001 ( 1, 1) [000016] ------------ t16 = LCL_VAR byref V00 RetBuf u:1 (last use) $80
N003 ( 3, 2) [000015] ------------ t15 = LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 u:2 (last use) $240
/--* t16 byref
+--* t15 simd8
[000024] -A-XG------- * STOREIND simd8
------------ BB03 [???..???) (return), preds={BB02} succs={}
N001 ( 0, 0) [000021] ------------ RETURN void $280
-------------------------------------------------------------------------------------------------------------------
*************** Starting PHASE Calculate stack level slots
*************** Finishing PHASE Calculate stack level slots [no changes]
*************** Starting PHASE Linear scan register alloc
Clearing modified regs.
buildIntervals ========
-----------------
LIVENESS:
-----------------
BB01 use def in out
{}
{}
{V00 V01 V02}
{V00 V01 V02}
BB02 use def in out
{V00 V01 V02}
{V05}
{V00 V01 V02}
{}
BB03 use def in out
{}
{}
{}
{}
Interval 0: byref RefPositions {} physReg:NA Preferences=[allInt]
Interval 0: (V00) byref RefPositions {} physReg:NA Preferences=[allInt]
Interval 1: float RefPositions {} physReg:NA Preferences=[allFloat]
Interval 1: (V01) float RefPositions {} physReg:NA Preferences=[allFloat]
Interval 2: float RefPositions {} physReg:NA Preferences=[allFloat]
Interval 2: (V02) float RefPositions {} physReg:NA Preferences=[allFloat]
Interval 3: simd8 RefPositions {} physReg:NA Preferences=[allFloat]
Interval 3: (V05) simd8 RefPositions {} physReg:NA Preferences=[allFloat]
FP callee save candidate vars: {V05}
floatVarCount = 3; hasLoops = 0, singleExit = 1
TUPLE STYLE DUMP BEFORE LSRA
LSRA Block Sequence: BB01( 1 )
BB02( 1 )
BB03( 1 )
BB01 [???..???), preds={} succs={BB02}
=====
BB02 [000..012), preds={BB01} succs={BB03}
=====
N000. IL_OFFSET IL offset: 0x0
N001. V02(t1*)
N000. PUTARG_STK [+0x00]; t1*
N002. V01(t0*)
N000. PUTARG_STK [+0x04]; t0*
N000. PINVOKE_PROLOG
N001. t28 = LCL_VAR_ADDR V06 PInvokeFrame
N000. t33 = PUTARG_REG; t28
N002. t29 = CNS_INT 8
N000. t34 = PUTARG_REG; t29
N001. CNS_INT(h) 0x420220 ftn
N002. IND
N003. CALL help; t33,t34
N001. CNS_INT(h) 0x420368 ftn
N002. t38 = IND
N003. t39 = IND ; t38
N003. t2 = CALL r2r_ind; t39
N001. t40 = LCL_VAR_ADDR V06 PInvokeFrame
N000. t43 = PUTARG_REG; t40
N001. CNS_INT(h) 0x420230 ftn
N002. IND
N002. CALL help; t43
N005. V05(t5); t2
N000. IL_OFFSET IL offset: 0x10
N001. V00(t16*)
N003. V05(t15*)
N000. STOREIND ; t16*,t15*
BB03 [???..???) (return), preds={BB02} succs={}
=====
N001. RETURN
buildIntervals second part ========
Int arg V00 in reg ecx
<RefPosition #0 @0 RefTypeParamDef <Ivl:0 V00> BB00 regmask=[ecx] minReg=1 fixed>
<RefPosition #1 @0 RefTypeParamDef <Ivl:1 V01> BB00 regmask=[allFloat] minReg=1>
<RefPosition #2 @0 RefTypeParamDef <Ivl:2 V02> BB00 regmask=[allFloat] minReg=1>
NEW BLOCK BB01
<RefPosition #3 @1 RefTypeBB BB01 regmask=[] minReg=1>
CHECKING LAST USES for BB01, liveout={V00 V01 V02}
==============================
use: {}
def: {}
NEW BLOCK BB02
Setting BB01 as the predecessor for determining incoming variable registers of BB02
<RefPosition #4 @3 RefTypeBB BB02 regmask=[] minReg=1>
DefList: { }
N005 (???,???) [000022] ------------ * IL_OFFSET void IL offset: 0x0 REG NA
DefList: { }
N007 ( 3, 2) [000001] ------------ * LCL_VAR float V02 arg1 u:1 NA (last use) REG NA $c1
DefList: { }
N009 (???,???) [000025] ------------ * PUTARG_STK [+0x00] void (1 slots), (4 stackByteSize), (0 slot), (0 byteOffset) REG NA
<RefPosition #5 @9 RefTypeUse <Ivl:2 V02> LCL_VAR BB02 regmask=[allFloat] minReg=1 last>
DefList: { }
N011 ( 3, 2) [000000] ------------ * LCL_VAR float V01 arg0 u:1 NA (last use) REG NA $c0
DefList: { }
N013 (???,???) [000026] ------------ * PUTARG_STK [+0x04] void (1 slots), (4 stackByteSize), (1 slot), (4 byteOffset) REG NA
<RefPosition #6 @13 RefTypeUse <Ivl:1 V01> LCL_VAR BB02 regmask=[allFloat] minReg=1 last>
DefList: { }
N015 (???,???) [000027] ------------ * PINVOKE_PROLOG void REG NA
DefList: { }
N017 ( 3, 3) [000028] ------------ * LCL_VAR_ADDR int V06 PInvokeFrame NA REG NA
Interval 4: int RefPositions {} physReg:NA Preferences=[allInt]
<RefPosition #7 @18 RefTypeDef <Ivl:4> LCL_VAR_ADDR BB02 regmask=[allInt] minReg=1>
DefList: { N017.t28. LCL_VAR_ADDR }
N019 (???,???) [000033] ------------ * PUTARG_REG int REG ecx
<RefPosition #8 @19 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #9 @19 RefTypeUse <Ivl:4> BB02 regmask=[ecx] minReg=1 last fixed>
Interval 5: int RefPositions {} physReg:NA Preferences=[allInt]
<RefPosition #10 @20 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #11 @20 RefTypeDef <Ivl:5> PUTARG_REG BB02 regmask=[ecx] minReg=1 fixed>
DefList: { N019.t33. PUTARG_REG }
N021 ( 1, 1) [000029] ------------ * CNS_INT int 8 REG NA
Interval 6: int RefPositions {} physReg:NA Preferences=[allInt]
<RefPosition #12 @22 RefTypeDef <Ivl:6> CNS_INT BB02 regmask=[allInt] minReg=1>
DefList: { N019.t33. PUTARG_REG; N021.t29. CNS_INT }
N023 (???,???) [000034] ------------ * PUTARG_REG int REG edx
<RefPosition #13 @23 RefTypeFixedReg <Reg:edx> BB02 regmask=[edx] minReg=1>
<RefPosition #14 @23 RefTypeUse <Ivl:6> BB02 regmask=[edx] minReg=1 last fixed>
Interval 7: int RefPositions {} physReg:NA Preferences=[allInt]
<RefPosition #15 @24 RefTypeFixedReg <Reg:edx> BB02 regmask=[edx] minReg=1>
<RefPosition #16 @24 RefTypeDef <Ivl:7> PUTARG_REG BB02 regmask=[edx] minReg=1 fixed>
DefList: { N019.t33. PUTARG_REG; N023.t34. PUTARG_REG }
N025 ( 1, 4) [000035] Hc---------- * CNS_INT(h) int 0x420220 ftn REG NA
Contained
DefList: { N019.t33. PUTARG_REG; N023.t34. PUTARG_REG }
N027 ( 3, 6) [000036] -c---------- * IND int REG NA
Contained
DefList: { N019.t33. PUTARG_REG; N023.t34. PUTARG_REG }
N029 ( 18, 11) [000030] --C-G------- * CALL help void HELPER.CORINFO_HELP_JIT_PINVOKE_BEGIN REG NA
<RefPosition #17 @29 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #18 @29 RefTypeUse <Ivl:5> BB02 regmask=[ecx] minReg=1 last fixed>
<RefPosition #19 @29 RefTypeFixedReg <Reg:edx> BB02 regmask=[edx] minReg=1>
<RefPosition #20 @29 RefTypeUse <Ivl:7> BB02 regmask=[edx] minReg=1 last fixed>
<RefPosition #21 @30 RefTypeKill <Reg:eax> BB02 regmask=[eax] minReg=1>
<RefPosition #22 @30 RefTypeKill <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #23 @30 RefTypeKill <Reg:edx> BB02 regmask=[edx] minReg=1>
<RefPosition #24 @30 RefTypeKill <Reg:mm0> BB02 regmask=[mm0] minReg=1>
<RefPosition #25 @30 RefTypeKill <Reg:mm1> BB02 regmask=[mm1] minReg=1>
<RefPosition #26 @30 RefTypeKill <Reg:mm2> BB02 regmask=[mm2] minReg=1>
<RefPosition #27 @30 RefTypeKill <Reg:mm3> BB02 regmask=[mm3] minReg=1>
<RefPosition #28 @30 RefTypeKill <Reg:mm4> BB02 regmask=[mm4] minReg=1>
<RefPosition #29 @30 RefTypeKill <Reg:mm5> BB02 regmask=[mm5] minReg=1>
<RefPosition #30 @30 RefTypeKill <Reg:mm6> BB02 regmask=[mm6] minReg=1>
<RefPosition #31 @30 RefTypeKill <Reg:mm7> BB02 regmask=[mm7] minReg=1>
<RefPosition #32 @30 RefTypeKillGCRefs CALL BB02 regmask=[eax ebx esi edi] minReg=1>
DefList: { }
N031 ( 1, 4) [000037] Hc---------- * CNS_INT(h) int 0x420368 ftn REG NA
Contained
DefList: { }
N033 ( 3, 6) [000038] ------------ * IND int REG NA
Interval 8: int RefPositions {} physReg:NA Preferences=[allInt]
<RefPosition #33 @34 RefTypeDef <Ivl:8> IND BB02 regmask=[allInt] minReg=1>
DefList: { N033.t38. IND }
N035 ( 6, 8) [000039] -c---------- * IND int REG NA
Contained
DefList: { N033.t38. IND }
N037 ( 26, 9) [000002] --CXG------- * CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats REG NA,NA $180
<RefPosition #34 @37 RefTypeUse <Ivl:8> BB02 regmask=[allInt] minReg=1 last>
<RefPosition #35 @38 RefTypeKill <Reg:eax> BB02 regmask=[eax] minReg=1>
<RefPosition #36 @38 RefTypeKill <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #37 @38 RefTypeKill <Reg:edx> BB02 regmask=[edx] minReg=1>
<RefPosition #38 @38 RefTypeKill <Reg:mm0> BB02 regmask=[mm0] minReg=1>
<RefPosition #39 @38 RefTypeKill <Reg:mm1> BB02 regmask=[mm1] minReg=1>
<RefPosition #40 @38 RefTypeKill <Reg:mm2> BB02 regmask=[mm2] minReg=1>
<RefPosition #41 @38 RefTypeKill <Reg:mm3> BB02 regmask=[mm3] minReg=1>
<RefPosition #42 @38 RefTypeKill <Reg:mm4> BB02 regmask=[mm4] minReg=1>
<RefPosition #43 @38 RefTypeKill <Reg:mm5> BB02 regmask=[mm5] minReg=1>
<RefPosition #44 @38 RefTypeKill <Reg:mm6> BB02 regmask=[mm6] minReg=1>
<RefPosition #45 @38 RefTypeKill <Reg:mm7> BB02 regmask=[mm7] minReg=1>
<RefPosition #46 @38 RefTypeKillGCRefs CALL[0] BB02 regmask=[eax ebx esi edi] minReg=1>
Interval 9: int RefPositions {} physReg:NA Preferences=[allInt]
<RefPosition #47 @38 RefTypeFixedReg <Reg:eax> BB02 regmask=[eax] minReg=1>
<RefPosition #48 @38 RefTypeDef <Ivl:9> CALL[0] BB02 regmask=[eax] minReg=1 fixed>
Interval 10: int RefPositions {} physReg:NA Preferences=[allInt]
<RefPosition #49 @38 RefTypeFixedReg <Reg:edx> BB02 regmask=[edx] minReg=1>
<RefPosition #50 @38 RefTypeDef <Ivl:10> CALL[1] BB02 regmask=[edx] minReg=1 fixed>
DefList: { N037.t2. CALL; N037.t2. CALL }
N039 ( 3, 3) [000040] ------------ * LCL_VAR_ADDR int V06 PInvokeFrame NA REG NA
Interval 11: int RefPositions {} physReg:NA Preferences=[allInt]
<RefPosition #51 @40 RefTypeDef <Ivl:11> LCL_VAR_ADDR BB02 regmask=[allInt] minReg=1>
DefList: { N037.t2. CALL; N037.t2. CALL; N039.t40. LCL_VAR_ADDR }
N041 (???,???) [000043] ------------ * PUTARG_REG int REG ecx
<RefPosition #52 @41 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #53 @41 RefTypeUse <Ivl:11> BB02 regmask=[ecx] minReg=1 last fixed>
Interval 12: int RefPositions {} physReg:NA Preferences=[allInt]
<RefPosition #54 @42 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #55 @42 RefTypeDef <Ivl:12> PUTARG_REG BB02 regmask=[ecx] minReg=1 fixed>
DefList: { N037.t2. CALL; N037.t2. CALL; N041.t43. PUTARG_REG }
N043 ( 1, 4) [000044] Hc---------- * CNS_INT(h) int 0x420230 ftn REG NA
Contained
DefList: { N037.t2. CALL; N037.t2. CALL; N041.t43. PUTARG_REG }
N045 ( 3, 6) [000045] -c---------- * IND int REG NA
Contained
DefList: { N037.t2. CALL; N037.t2. CALL; N041.t43. PUTARG_REG }
N047 ( 17, 9) [000041] --C-G------- * CALL help void HELPER.CORINFO_HELP_JIT_PINVOKE_END REG NA
<RefPosition #56 @47 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #57 @47 RefTypeUse <Ivl:12> BB02 regmask=[ecx] minReg=1 last fixed>
<RefPosition #58 @48 RefTypeKill <Reg:eax> BB02 regmask=[eax] minReg=1>
<RefPosition #59 @48 RefTypeKill <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #60 @48 RefTypeKill <Reg:edx> BB02 regmask=[edx] minReg=1>
<RefPosition #61 @48 RefTypeKill <Reg:mm0> BB02 regmask=[mm0] minReg=1>
<RefPosition #62 @48 RefTypeKill <Reg:mm1> BB02 regmask=[mm1] minReg=1>
<RefPosition #63 @48 RefTypeKill <Reg:mm2> BB02 regmask=[mm2] minReg=1>
<RefPosition #64 @48 RefTypeKill <Reg:mm3> BB02 regmask=[mm3] minReg=1>
<RefPosition #65 @48 RefTypeKill <Reg:mm4> BB02 regmask=[mm4] minReg=1>
<RefPosition #66 @48 RefTypeKill <Reg:mm5> BB02 regmask=[mm5] minReg=1>
<RefPosition #67 @48 RefTypeKill <Reg:mm6> BB02 regmask=[mm6] minReg=1>
<RefPosition #68 @48 RefTypeKill <Reg:mm7> BB02 regmask=[mm7] minReg=1>
DefList: { N037.t2. CALL; N037.t2. CALL }
N049 ( 30, 12) [000005] DA-XG------- * STORE_LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 d:2 NA REG NA
<RefPosition #69 @49 RefTypeUse <Ivl:9> BB02 regmask=[allInt] minReg=1 last>
<RefPosition #70 @49 RefTypeUse <Ivl:10> BB02 regmask=[allInt] minReg=1 last>
<RefPosition #71 @50 RefTypeDef <Ivl:3 V05> STORE_LCL_VAR BB02 regmask=[allFloat] minReg=1 last>
DefList: { }
N051 (???,???) [000023] ------------ * IL_OFFSET void IL offset: 0x10 REG NA
DefList: { }
N053 ( 1, 1) [000016] ------------ * LCL_VAR byref V00 RetBuf u:1 NA (last use) REG NA $80
DefList: { }
N055 ( 3, 2) [000015] ------------ * LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 u:2 NA (last use) REG NA $240
DefList: { }
N057 (???,???) [000024] -A-XG------- * STOREIND simd8 REG NA
<RefPosition #72 @57 RefTypeUse <Ivl:0 V00> LCL_VAR BB02 regmask=[allInt] minReg=1 last>
<RefPosition #73 @57 RefTypeUse <Ivl:3 V05> LCL_VAR BB02 regmask=[allFloat] minReg=1 last>
CHECKING LAST USES for BB02, liveout={}
==============================
use: {V00 V01 V02}
def: {V05}
NEW BLOCK BB03
Setting BB02 as the predecessor for determining incoming variable registers of BB03
<RefPosition #74 @59 RefTypeBB BB03 regmask=[] minReg=1>
DefList: { }
N061 ( 0, 0) [000021] ------------ * RETURN void REG NA $280
CHECKING LAST USES for BB03, liveout={}
==============================
use: {}
def: {}
Linear scan intervals BEFORE VALIDATING INTERVALS:
Interval 0: (V00) byref RefPositions {#0@0 #72@57} physReg:ecx Preferences=[ebx esi edi]
Interval 1: (V01) float RefPositions {#1@0 #6@13} physReg:NA Preferences=[allFloat]
Interval 2: (V02) float RefPositions {#2@0 #5@9} physReg:NA Preferences=[allFloat]
Interval 3: (V05) simd8 RefPositions {#71@50 #73@57} physReg:NA Preferences=[allFloat]
Interval 4: int RefPositions {#7@18 #9@19} physReg:NA Preferences=[ecx]
Interval 5: int RefPositions {#11@20 #18@29} physReg:NA Preferences=[ecx]
Interval 6: int (constant) RefPositions {#12@22 #14@23} physReg:NA Preferences=[edx]
Interval 7: int RefPositions {#16@24 #20@29} physReg:NA Preferences=[edx]
Interval 8: int RefPositions {#33@34 #34@37} physReg:NA Preferences=[allInt]
Interval 9: int RefPositions {#48@38 #69@49} physReg:NA Preferences=[eax]
Interval 10: int RefPositions {#50@38 #70@49} physReg:NA Preferences=[edx]
Interval 11: int RefPositions {#51@40 #53@41} physReg:NA Preferences=[ecx]
Interval 12: int RefPositions {#55@42 #57@47} physReg:NA Preferences=[ecx]
------------
REFPOSITIONS BEFORE VALIDATING INTERVALS:
------------
<RefPosition #0 @0 RefTypeParamDef <Ivl:0 V00> BB00 regmask=[ecx] minReg=1 fixed regOptional>
<RefPosition #1 @0 RefTypeParamDef <Ivl:1 V01> BB00 regmask=[allFloat] minReg=1 regOptional>
<RefPosition #2 @0 RefTypeParamDef <Ivl:2 V02> BB00 regmask=[allFloat] minReg=1 regOptional>
<RefPosition #3 @1 RefTypeBB BB01 regmask=[] minReg=1>
<RefPosition #4 @3 RefTypeBB BB02 regmask=[] minReg=1>
<RefPosition #5 @9 RefTypeUse <Ivl:2 V02> LCL_VAR BB02 regmask=[allFloat] minReg=1 last>
<RefPosition #6 @13 RefTypeUse <Ivl:1 V01> LCL_VAR BB02 regmask=[allFloat] minReg=1 last>
<RefPosition #7 @18 RefTypeDef <Ivl:4> LCL_VAR_ADDR BB02 regmask=[ecx] minReg=1>
<RefPosition #8 @19 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #9 @19 RefTypeUse <Ivl:4> BB02 regmask=[ecx] minReg=1 last fixed>
<RefPosition #10 @20 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #11 @20 RefTypeDef <Ivl:5> PUTARG_REG BB02 regmask=[ecx] minReg=1 fixed>
<RefPosition #12 @22 RefTypeDef <Ivl:6> CNS_INT BB02 regmask=[edx] minReg=1>
<RefPosition #13 @23 RefTypeFixedReg <Reg:edx> BB02 regmask=[edx] minReg=1>
<RefPosition #14 @23 RefTypeUse <Ivl:6> BB02 regmask=[edx] minReg=1 last fixed>
<RefPosition #15 @24 RefTypeFixedReg <Reg:edx> BB02 regmask=[edx] minReg=1>
<RefPosition #16 @24 RefTypeDef <Ivl:7> PUTARG_REG BB02 regmask=[edx] minReg=1 fixed>
<RefPosition #17 @29 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #18 @29 RefTypeUse <Ivl:5> BB02 regmask=[ecx] minReg=1 last fixed>
<RefPosition #19 @29 RefTypeFixedReg <Reg:edx> BB02 regmask=[edx] minReg=1>
<RefPosition #20 @29 RefTypeUse <Ivl:7> BB02 regmask=[edx] minReg=1 last fixed>
<RefPosition #21 @30 RefTypeKill <Reg:eax> BB02 regmask=[eax] minReg=1 last>
<RefPosition #22 @30 RefTypeKill <Reg:ecx> BB02 regmask=[ecx] minReg=1 last>
<RefPosition #23 @30 RefTypeKill <Reg:edx> BB02 regmask=[edx] minReg=1 last>
<RefPosition #24 @30 RefTypeKill <Reg:mm0> BB02 regmask=[mm0] minReg=1 last>
<RefPosition #25 @30 RefTypeKill <Reg:mm1> BB02 regmask=[mm1] minReg=1 last>
<RefPosition #26 @30 RefTypeKill <Reg:mm2> BB02 regmask=[mm2] minReg=1 last>
<RefPosition #27 @30 RefTypeKill <Reg:mm3> BB02 regmask=[mm3] minReg=1 last>
<RefPosition #28 @30 RefTypeKill <Reg:mm4> BB02 regmask=[mm4] minReg=1 last>
<RefPosition #29 @30 RefTypeKill <Reg:mm5> BB02 regmask=[mm5] minReg=1 last>
<RefPosition #30 @30 RefTypeKill <Reg:mm6> BB02 regmask=[mm6] minReg=1 last>
<RefPosition #31 @30 RefTypeKill <Reg:mm7> BB02 regmask=[mm7] minReg=1 last>
<RefPosition #32 @30 RefTypeKillGCRefs CALL BB02 regmask=[eax ebx esi edi] minReg=1>
<RefPosition #33 @34 RefTypeDef <Ivl:8> IND BB02 regmask=[allInt] minReg=1>
<RefPosition #34 @37 RefTypeUse <Ivl:8> BB02 regmask=[allInt] minReg=1 last>
<RefPosition #35 @38 RefTypeKill <Reg:eax> BB02 regmask=[eax] minReg=1 last>
<RefPosition #36 @38 RefTypeKill <Reg:ecx> BB02 regmask=[ecx] minReg=1 last>
<RefPosition #37 @38 RefTypeKill <Reg:edx> BB02 regmask=[edx] minReg=1 last>
<RefPosition #38 @38 RefTypeKill <Reg:mm0> BB02 regmask=[mm0] minReg=1 last>
<RefPosition #39 @38 RefTypeKill <Reg:mm1> BB02 regmask=[mm1] minReg=1 last>
<RefPosition #40 @38 RefTypeKill <Reg:mm2> BB02 regmask=[mm2] minReg=1 last>
<RefPosition #41 @38 RefTypeKill <Reg:mm3> BB02 regmask=[mm3] minReg=1 last>
<RefPosition #42 @38 RefTypeKill <Reg:mm4> BB02 regmask=[mm4] minReg=1 last>
<RefPosition #43 @38 RefTypeKill <Reg:mm5> BB02 regmask=[mm5] minReg=1 last>
<RefPosition #44 @38 RefTypeKill <Reg:mm6> BB02 regmask=[mm6] minReg=1 last>
<RefPosition #45 @38 RefTypeKill <Reg:mm7> BB02 regmask=[mm7] minReg=1 last>
<RefPosition #46 @38 RefTypeKillGCRefs CALL[0] BB02 regmask=[eax ebx esi edi] minReg=1>
<RefPosition #47 @38 RefTypeFixedReg <Reg:eax> BB02 regmask=[eax] minReg=1>
<RefPosition #48 @38 RefTypeDef <Ivl:9> CALL[0] BB02 regmask=[eax] minReg=1 fixed>
<RefPosition #49 @38 RefTypeFixedReg <Reg:edx> BB02 regmask=[edx] minReg=1>
<RefPosition #50 @38 RefTypeDef <Ivl:10> CALL[1] BB02 regmask=[edx] minReg=1 fixed>
<RefPosition #51 @40 RefTypeDef <Ivl:11> LCL_VAR_ADDR BB02 regmask=[ecx] minReg=1>
<RefPosition #52 @41 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #53 @41 RefTypeUse <Ivl:11> BB02 regmask=[ecx] minReg=1 last fixed>
<RefPosition #54 @42 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #55 @42 RefTypeDef <Ivl:12> PUTARG_REG BB02 regmask=[ecx] minReg=1 fixed>
<RefPosition #56 @47 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #57 @47 RefTypeUse <Ivl:12> BB02 regmask=[ecx] minReg=1 last fixed>
<RefPosition #58 @48 RefTypeKill <Reg:eax> BB02 regmask=[eax] minReg=1 last>
<RefPosition #59 @48 RefTypeKill <Reg:ecx> BB02 regmask=[ecx] minReg=1 last>
<RefPosition #60 @48 RefTypeKill <Reg:edx> BB02 regmask=[edx] minReg=1 last>
<RefPosition #61 @48 RefTypeKill <Reg:mm0> BB02 regmask=[mm0] minReg=1 last>
<RefPosition #62 @48 RefTypeKill <Reg:mm1> BB02 regmask=[mm1] minReg=1 last>
<RefPosition #63 @48 RefTypeKill <Reg:mm2> BB02 regmask=[mm2] minReg=1 last>
<RefPosition #64 @48 RefTypeKill <Reg:mm3> BB02 regmask=[mm3] minReg=1 last>
<RefPosition #65 @48 RefTypeKill <Reg:mm4> BB02 regmask=[mm4] minReg=1 last>
<RefPosition #66 @48 RefTypeKill <Reg:mm5> BB02 regmask=[mm5] minReg=1 last>
<RefPosition #67 @48 RefTypeKill <Reg:mm6> BB02 regmask=[mm6] minReg=1 last>
<RefPosition #68 @48 RefTypeKill <Reg:mm7> BB02 regmask=[mm7] minReg=1 last>
<RefPosition #69 @49 RefTypeUse <Ivl:9> BB02 regmask=[allInt] minReg=1 last>
<RefPosition #70 @49 RefTypeUse <Ivl:10> BB02 regmask=[allInt] minReg=1 last>
<RefPosition #71 @50 RefTypeDef <Ivl:3 V05> STORE_LCL_VAR BB02 regmask=[allFloat] minReg=1>
<RefPosition #72 @57 RefTypeUse <Ivl:0 V00> LCL_VAR BB02 regmask=[allInt] minReg=1 last>
<RefPosition #73 @57 RefTypeUse <Ivl:3 V05> LCL_VAR BB02 regmask=[allFloat] minReg=1 last>
<RefPosition #74 @59 RefTypeBB BB03 regmask=[] minReg=1>
-----------------
<RefPosition #0 @0 RefTypeParamDef <Ivl:0 V00> BB00 regmask=[ecx] minReg=1 fixed regOptional>
<RefPosition #72 @57 RefTypeUse <Ivl:0 V00> LCL_VAR BB02 regmask=[allInt] minReg=1 last>
-----------------
<RefPosition #71 @50 RefTypeDef <Ivl:3 V05> STORE_LCL_VAR BB02 regmask=[allFloat] minReg=1>
<RefPosition #73 @57 RefTypeUse <Ivl:3 V05> LCL_VAR BB02 regmask=[allFloat] minReg=1 last>
-----------------
<RefPosition #1 @0 RefTypeParamDef <Ivl:1 V01> BB00 regmask=[allFloat] minReg=1 regOptional>
<RefPosition #6 @13 RefTypeUse <Ivl:1 V01> LCL_VAR BB02 regmask=[allFloat] minReg=1 last>
-----------------
<RefPosition #2 @0 RefTypeParamDef <Ivl:2 V02> BB00 regmask=[allFloat] minReg=1 regOptional>
<RefPosition #5 @9 RefTypeUse <Ivl:2 V02> LCL_VAR BB02 regmask=[allFloat] minReg=1 last>
TUPLE STYLE DUMP WITH REF POSITIONS
Incoming Parameters: V00 V01 V02
BB01 [???..???), preds={} succs={BB02}
=====
BB02 [000..012), preds={BB01} succs={BB03}
=====
N005. IL_OFFSET IL offset: 0x0
N007. V02(L2)
N009. PUTARG_STK [+0x00]
Use:<V02/L2>(#5) *
N011. V01(L1)
N013. PUTARG_STK [+0x04]
Use:<V01/L1>(#6) *
N015. PINVOKE_PROLOG
N017. LCL_VAR_ADDR V06 PInvokeFrame NA
Def:<I4>(#7)
N019. PUTARG_REG
Use:<I4>(#9) Fixed:ecx(#8) *
Def:<I5>(#11) ecx
N021. CNS_INT 8
Def:<I6>(#12)
N023. PUTARG_REG
Use:<I6>(#14) Fixed:edx(#13) *
Def:<I7>(#16) edx
N025. CNS_INT(h) 0x420220 ftn
N027. IND
N029. CALL help
Use:<I5>(#18) Fixed:ecx(#17) *
Use:<I7>(#20) Fixed:edx(#19) *
Kill: eax ecx edx mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7
N031. CNS_INT(h) 0x420368 ftn
N033. IND
N035. IND
N037. CALL r2r_ind
N039. LCL_VAR_ADDR V06 PInvokeFrame NA
N041. PUTARG_REG
N043. CNS_INT(h) 0x420230 ftn
N045. IND
N047. CALL help
N049. V05(L3)
N051. IL_OFFSET IL offset: 0x10
N053. V00(L0)
N055. V05(L3)
N057. STOREIND
N061. RETURN
Linear scan intervals after buildIntervals:
Interval 0: (V00) byref RefPositions {#0@0 #72@57} physReg:ecx Preferences=[ebx esi edi]
Interval 1: (V01) float RefPositions {#1@0 #6@13} physReg:NA Preferences=[allFloat]
Interval 2: (V02) float RefPositions {#2@0 #5@9} physReg:NA Preferences=[allFloat]
Interval 3: (V05) simd8 RefPositions {#71@50 #73@57} physReg:NA Preferences=[allFloat]
Interval 4: int RefPositions {#7@18 #9@19} physReg:NA Preferences=[ecx]
Interval 5: int RefPositions {#11@20 #18@29} physReg:NA Preferences=[ecx]
Interval 6: int (constant) RefPositions {#12@22 #14@23} physReg:NA Preferences=[edx]
Interval 7: int RefPositions {#16@24 #20@29} physReg:NA Preferences=[edx]
Interval 8: int RefPositions {#33@34 #34@37} physReg:NA Preferences=[allInt]
Interval 9: int RefPositions {#48@38 #69@49} physReg:NA Preferences=[eax]
Interval 10: int RefPositions {#50@38 #70@49} physReg:NA Preferences=[edx]
Interval 11: int RefPositions {#51@40 #53@41} physReg:NA Preferences=[ecx]
Interval 12: int RefPositions {#55@42 #57@47} physReg:NA Preferences=[ecx]
*************** In LinearScan::allocateRegisters()
Linear scan intervals before allocateRegisters:
Interval 0: (V00) byref RefPositions {#0@0 #72@57} physReg:ecx Preferences=[ebx esi edi]
Interval 1: (V01) float RefPositions {#1@0 #6@13} physReg:NA Preferences=[allFloat]
Interval 2: (V02) float RefPositions {#2@0 #5@9} physReg:NA Preferences=[allFloat]
Interval 3: (V05) simd8 RefPositions {#71@50 #73@57} physReg:NA Preferences=[allFloat]
Interval 4: int RefPositions {#7@18 #9@19} physReg:NA Preferences=[ecx]
Interval 5: int RefPositions {#11@20 #18@29} physReg:NA Preferences=[ecx]
Interval 6: int (constant) RefPositions {#12@22 #14@23} physReg:NA Preferences=[edx]
Interval 7: int RefPositions {#16@24 #20@29} physReg:NA Preferences=[edx]
Interval 8: int RefPositions {#33@34 #34@37} physReg:NA Preferences=[allInt]
Interval 9: int RefPositions {#48@38 #69@49} physReg:NA Preferences=[eax]
Interval 10: int RefPositions {#50@38 #70@49} physReg:NA Preferences=[edx]
Interval 11: int RefPositions {#51@40 #53@41} physReg:NA Preferences=[ecx]
Interval 12: int RefPositions {#55@42 #57@47} physReg:NA Preferences=[ecx]
------------
REFPOSITIONS BEFORE ALLOCATION:
------------
<RefPosition #0 @0 RefTypeParamDef <Ivl:0 V00> BB00 regmask=[ecx] minReg=1 fixed regOptional>
<RefPosition #1 @0 RefTypeParamDef <Ivl:1 V01> BB00 regmask=[allFloat] minReg=1 regOptional>
<RefPosition #2 @0 RefTypeParamDef <Ivl:2 V02> BB00 regmask=[allFloat] minReg=1 regOptional>
<RefPosition #3 @1 RefTypeBB BB01 regmask=[] minReg=1>
<RefPosition #4 @3 RefTypeBB BB02 regmask=[] minReg=1>
<RefPosition #5 @9 RefTypeUse <Ivl:2 V02> LCL_VAR BB02 regmask=[allFloat] minReg=1 last>
<RefPosition #6 @13 RefTypeUse <Ivl:1 V01> LCL_VAR BB02 regmask=[allFloat] minReg=1 last>
<RefPosition #7 @18 RefTypeDef <Ivl:4> LCL_VAR_ADDR BB02 regmask=[ecx] minReg=1>
<RefPosition #8 @19 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #9 @19 RefTypeUse <Ivl:4> BB02 regmask=[ecx] minReg=1 last fixed>
<RefPosition #10 @20 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #11 @20 RefTypeDef <Ivl:5> PUTARG_REG BB02 regmask=[ecx] minReg=1 fixed>
<RefPosition #12 @22 RefTypeDef <Ivl:6> CNS_INT BB02 regmask=[edx] minReg=1>
<RefPosition #13 @23 RefTypeFixedReg <Reg:edx> BB02 regmask=[edx] minReg=1>
<RefPosition #14 @23 RefTypeUse <Ivl:6> BB02 regmask=[edx] minReg=1 last fixed>
<RefPosition #15 @24 RefTypeFixedReg <Reg:edx> BB02 regmask=[edx] minReg=1>
<RefPosition #16 @24 RefTypeDef <Ivl:7> PUTARG_REG BB02 regmask=[edx] minReg=1 fixed>
<RefPosition #17 @29 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #18 @29 RefTypeUse <Ivl:5> BB02 regmask=[ecx] minReg=1 last fixed>
<RefPosition #19 @29 RefTypeFixedReg <Reg:edx> BB02 regmask=[edx] minReg=1>
<RefPosition #20 @29 RefTypeUse <Ivl:7> BB02 regmask=[edx] minReg=1 last fixed>
<RefPosition #21 @30 RefTypeKill <Reg:eax> BB02 regmask=[eax] minReg=1 last>
<RefPosition #22 @30 RefTypeKill <Reg:ecx> BB02 regmask=[ecx] minReg=1 last>
<RefPosition #23 @30 RefTypeKill <Reg:edx> BB02 regmask=[edx] minReg=1 last>
<RefPosition #24 @30 RefTypeKill <Reg:mm0> BB02 regmask=[mm0] minReg=1 last>
<RefPosition #25 @30 RefTypeKill <Reg:mm1> BB02 regmask=[mm1] minReg=1 last>
<RefPosition #26 @30 RefTypeKill <Reg:mm2> BB02 regmask=[mm2] minReg=1 last>
<RefPosition #27 @30 RefTypeKill <Reg:mm3> BB02 regmask=[mm3] minReg=1 last>
<RefPosition #28 @30 RefTypeKill <Reg:mm4> BB02 regmask=[mm4] minReg=1 last>
<RefPosition #29 @30 RefTypeKill <Reg:mm5> BB02 regmask=[mm5] minReg=1 last>
<RefPosition #30 @30 RefTypeKill <Reg:mm6> BB02 regmask=[mm6] minReg=1 last>
<RefPosition #31 @30 RefTypeKill <Reg:mm7> BB02 regmask=[mm7] minReg=1 last>
<RefPosition #32 @30 RefTypeKillGCRefs CALL BB02 regmask=[eax ebx esi edi] minReg=1>
<RefPosition #33 @34 RefTypeDef <Ivl:8> IND BB02 regmask=[allInt] minReg=1>
<RefPosition #34 @37 RefTypeUse <Ivl:8> BB02 regmask=[allInt] minReg=1 last>
<RefPosition #35 @38 RefTypeKill <Reg:eax> BB02 regmask=[eax] minReg=1 last>
<RefPosition #36 @38 RefTypeKill <Reg:ecx> BB02 regmask=[ecx] minReg=1 last>
<RefPosition #37 @38 RefTypeKill <Reg:edx> BB02 regmask=[edx] minReg=1 last>
<RefPosition #38 @38 RefTypeKill <Reg:mm0> BB02 regmask=[mm0] minReg=1 last>
<RefPosition #39 @38 RefTypeKill <Reg:mm1> BB02 regmask=[mm1] minReg=1 last>
<RefPosition #40 @38 RefTypeKill <Reg:mm2> BB02 regmask=[mm2] minReg=1 last>
<RefPosition #41 @38 RefTypeKill <Reg:mm3> BB02 regmask=[mm3] minReg=1 last>
<RefPosition #42 @38 RefTypeKill <Reg:mm4> BB02 regmask=[mm4] minReg=1 last>
<RefPosition #43 @38 RefTypeKill <Reg:mm5> BB02 regmask=[mm5] minReg=1 last>
<RefPosition #44 @38 RefTypeKill <Reg:mm6> BB02 regmask=[mm6] minReg=1 last>
<RefPosition #45 @38 RefTypeKill <Reg:mm7> BB02 regmask=[mm7] minReg=1 last>
<RefPosition #46 @38 RefTypeKillGCRefs CALL[0] BB02 regmask=[eax ebx esi edi] minReg=1>
<RefPosition #47 @38 RefTypeFixedReg <Reg:eax> BB02 regmask=[eax] minReg=1>
<RefPosition #48 @38 RefTypeDef <Ivl:9> CALL[0] BB02 regmask=[eax] minReg=1 fixed>
<RefPosition #49 @38 RefTypeFixedReg <Reg:edx> BB02 regmask=[edx] minReg=1>
<RefPosition #50 @38 RefTypeDef <Ivl:10> CALL[1] BB02 regmask=[edx] minReg=1 fixed>
<RefPosition #51 @40 RefTypeDef <Ivl:11> LCL_VAR_ADDR BB02 regmask=[ecx] minReg=1>
<RefPosition #52 @41 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #53 @41 RefTypeUse <Ivl:11> BB02 regmask=[ecx] minReg=1 last fixed>
<RefPosition #54 @42 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #55 @42 RefTypeDef <Ivl:12> PUTARG_REG BB02 regmask=[ecx] minReg=1 fixed>
<RefPosition #56 @47 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #57 @47 RefTypeUse <Ivl:12> BB02 regmask=[ecx] minReg=1 last fixed>
<RefPosition #58 @48 RefTypeKill <Reg:eax> BB02 regmask=[eax] minReg=1 last>
<RefPosition #59 @48 RefTypeKill <Reg:ecx> BB02 regmask=[ecx] minReg=1 last>
<RefPosition #60 @48 RefTypeKill <Reg:edx> BB02 regmask=[edx] minReg=1 last>
<RefPosition #61 @48 RefTypeKill <Reg:mm0> BB02 regmask=[mm0] minReg=1 last>
<RefPosition #62 @48 RefTypeKill <Reg:mm1> BB02 regmask=[mm1] minReg=1 last>
<RefPosition #63 @48 RefTypeKill <Reg:mm2> BB02 regmask=[mm2] minReg=1 last>
<RefPosition #64 @48 RefTypeKill <Reg:mm3> BB02 regmask=[mm3] minReg=1 last>
<RefPosition #65 @48 RefTypeKill <Reg:mm4> BB02 regmask=[mm4] minReg=1 last>
<RefPosition #66 @48 RefTypeKill <Reg:mm5> BB02 regmask=[mm5] minReg=1 last>
<RefPosition #67 @48 RefTypeKill <Reg:mm6> BB02 regmask=[mm6] minReg=1 last>
<RefPosition #68 @48 RefTypeKill <Reg:mm7> BB02 regmask=[mm7] minReg=1 last>
<RefPosition #69 @49 RefTypeUse <Ivl:9> BB02 regmask=[allInt] minReg=1 last>
<RefPosition #70 @49 RefTypeUse <Ivl:10> BB02 regmask=[allInt] minReg=1 last>
<RefPosition #71 @50 RefTypeDef <Ivl:3 V05> STORE_LCL_VAR BB02 regmask=[allFloat] minReg=1>
<RefPosition #72 @57 RefTypeUse <Ivl:0 V00> LCL_VAR BB02 regmask=[allInt] minReg=1 last>
<RefPosition #73 @57 RefTypeUse <Ivl:3 V05> LCL_VAR BB02 regmask=[allFloat] minReg=1 last>
<RefPosition #74 @59 RefTypeBB BB03 regmask=[] minReg=1>
VAR REFPOSITIONS BEFORE ALLOCATION
--- V00 (Interval 0)
<RefPosition #0 @0 RefTypeParamDef <Ivl:0 V00> BB00 regmask=[ecx] minReg=1 fixed regOptional>
<RefPosition #72 @57 RefTypeUse <Ivl:0 V00> LCL_VAR BB02 regmask=[allInt] minReg=1 last>
--- V01 (Interval 1)
<RefPosition #1 @0 RefTypeParamDef <Ivl:1 V01> BB00 regmask=[allFloat] minReg=1 regOptional>
<RefPosition #6 @13 RefTypeUse <Ivl:1 V01> LCL_VAR BB02 regmask=[allFloat] minReg=1 last>
--- V02 (Interval 2)
<RefPosition #2 @0 RefTypeParamDef <Ivl:2 V02> BB00 regmask=[allFloat] minReg=1 regOptional>
<RefPosition #5 @9 RefTypeUse <Ivl:2 V02> LCL_VAR BB02 regmask=[allFloat] minReg=1 last>
--- V03
--- V04
--- V05 (Interval 3)
<RefPosition #71 @50 RefTypeDef <Ivl:3 V05> STORE_LCL_VAR BB02 regmask=[allFloat] minReg=1>
<RefPosition #73 @57 RefTypeUse <Ivl:3 V05> LCL_VAR BB02 regmask=[allFloat] minReg=1 last>
--- V06
--- V07
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.
------------------------------+----+----+----+----+----+----+----+----+----+
LocRP# Name Type Action Reg |eax |ecx |edx |edi |mm0 |mm1 |mm2 |mm6 |mm7 |
------------------------------+----+----+----+----+----+----+----+----+----+
| |V0 a| | | | | | | |
------------------------------+----+----+----+----+----+----+----+----+----+----+
LocRP# Name Type Action Reg |eax |ecx |edx |esi |edi |mm0 |mm1 |mm2 |mm6 |mm7 |
------------------------------+----+----+----+----+----+----+----+----+----+----+
0.#0 V0 Parm Alloc esi | | | |V0 a| | | | | | |
0.#1 V1 Parm LoRef | | | |V0 a| | | | | | |
0.#2 V2 Parm LoRef | | | |V0 a| | | | | | |
1.#3 BB1 PredBB0 | | | |V0 a| | | | | | |
------------------------------+----+----+----+----+----+----+----+----+----+----+
LocRP# Name Type Action Reg |eax |ecx |edx |esi |edi |mm0 |mm1 |mm2 |mm6 |mm7 |
------------------------------+----+----+----+----+----+----+----+----+----+----+
3.#4 BB2 PredBB1 | | | |V0 a| | | | | | |
9.#5 V2 Use * ReLod NA | | | |V0 a| | | | | | |
Alloc mm0 | | | |V0 a| |V2 a| | | | |
13.#6 V1 Use * ReLod NA | | | |V0 a| | | | | | |
Alloc mm0 | | | |V0 a| |V1 a| | | | |
18.#7 I4 Def Alloc ecx | |I4 a| |V0 a| | | | | | |
19.#8 ecx Fixd Keep ecx | |I4 a| |V0 a| | | | | | |
19.#9 I4 Use * Keep ecx | |I4 a| |V0 a| | | | | | |
20.#10 ecx Fixd Keep ecx | | | |V0 a| | | | | | |
20.#11 I5 Def Alloc ecx | |I5 a| |V0 a| | | | | | |
22.#12 C6 Def Alloc edx | |I5 a|C6 a|V0 a| | | | | | |
23.#13 edx Fixd Keep edx | |I5 a|C6 a|V0 a| | | | | | |
23.#14 C6 Use * Keep edx | |I5 a|C6 a|V0 a| | | | | | |
24.#15 edx Fixd Keep edx | |I5 a| |V0 a| | | | | | |
24.#16 I7 Def Alloc edx | |I5 a|I7 a|V0 a| | | | | | |
29.#17 ecx Fixd Keep ecx | |I5 a|I7 a|V0 a| | | | | | |
29.#18 I5 Use * Keep ecx | |I5 a|I7 a|V0 a| | | | | | |
29.#19 edx Fixd Keep edx | |I5 a|I7 a|V0 a| | | | | | |
29.#20 I7 Use * Keep edx | |I5 a|I7 a|V0 a| | | | | | |
30.#21 eax Kill Keep eax | | | |V0 a| | | | | | |
30.#22 ecx Kill Keep ecx | | | |V0 a| | | | | | |
30.#23 edx Kill Keep edx | | | |V0 a| | | | | | |
30.#24 mm0 Kill Keep mm0 | | | |V0 a| | | | | | |
30.#25 mm1 Kill Keep mm1 | | | |V0 a| | | | | | |
30.#26 mm2 Kill Keep mm2 | | | |V0 a| | | | | | |
30.#27 mm3 Kill Keep mm3 | | | |V0 a| | | | | | |
30.#28 mm4 Kill Keep mm4 | | | |V0 a| | | | | | |
30.#29 mm5 Kill Keep mm5 | | | |V0 a| | | | | | |
30.#30 mm6 Kill Keep mm6 | | | |V0 a| | | | | | |
30.#31 mm7 Kill Keep mm7 | | | |V0 a| | | | | | |
30.#32 KlGC Spill esi | | | | | | | | | | |
Done | | | | | | | | | | |
34.#33 I8 Def Alloc eax |I8 a| | | | | | | | | |
37.#34 I8 Use * Keep eax |I8 a| | | | | | | | | |
38.#35 eax Kill Keep eax | | | | | | | | | | |
38.#36 ecx Kill Keep ecx | | | | | | | | | | |
38.#37 edx Kill Keep edx | | | | | | | | | | |
38.#38 mm0 Kill Keep mm0 | | | | | | | | | | |
38.#39 mm1 Kill Keep mm1 | | | | | | | | | | |
38.#40 mm2 Kill Keep mm2 | | | | | | | | | | |
38.#41 mm3 Kill Keep mm3 | | | | | | | | | | |
38.#42 mm4 Kill Keep mm4 | | | | | | | | | | |
38.#43 mm5 Kill Keep mm5 | | | | | | | | | | |
38.#44 mm6 Kill Keep mm6 | | | | | | | | | | |
38.#45 mm7 Kill Keep mm7 | | | | | | | | | | |
38.#46 KlGC None | | | | | | | | | | |
38.#47 eax Fixd Keep eax | | | | | | | | | | |
38.#48 I9 Def Alloc esi | | | |I9 a| | | | | | |
38.#49 edx Fixd Keep edx | | | |I9 a| | | | | | |
38.#50 I10 Def Alloc edi | | | |I9 a|I10a| | | | | |
40.#51 I11 Def Alloc ecx | |I11a| |I9 a|I10a| | | | | |
41.#52 ecx Fixd Keep ecx | |I11a| |I9 a|I10a| | | | | |
------------------------------+----+----+----+----+----+----+----+----+----+----+
LocRP# Name Type Action Reg |eax |ecx |edx |esi |edi |mm0 |mm1 |mm2 |mm6 |mm7 |
------------------------------+----+----+----+----+----+----+----+----+----+----+
41.#53 I11 Use * Keep ecx | |I11a| |I9 a|I10a| | | | | |
42.#54 ecx Fixd Keep ecx | | | |I9 a|I10a| | | | | |
42.#55 I12 Def Alloc ecx | |I12a| |I9 a|I10a| | | | | |
47.#56 ecx Fixd Keep ecx | |I12a| |I9 a|I10a| | | | | |
47.#57 I12 Use * Keep ecx | |I12a| |I9 a|I10a| | | | | |
48.#58 eax Kill Keep eax | | | |I9 a|I10a| | | | | |
48.#59 ecx Kill Keep ecx | | | |I9 a|I10a| | | | | |
48.#60 edx Kill Keep edx | | | |I9 a|I10a| | | | | |
48.#61 mm0 Kill Keep mm0 | | | |I9 a|I10a| | | | | |
48.#62 mm1 Kill Keep mm1 | | | |I9 a|I10a| | | | | |
48.#63 mm2 Kill Keep mm2 | | | |I9 a|I10a| | | | | |
48.#64 mm3 Kill Keep mm3 | | | |I9 a|I10a| | | | | |
48.#65 mm4 Kill Keep mm4 | | | |I9 a|I10a| | | | | |
48.#66 mm5 Kill Keep mm5 | | | |I9 a|I10a| | | | | |
48.#67 mm6 Kill Keep mm6 | | | |I9 a|I10a| | | | | |
48.#68 mm7 Kill Keep mm7 | | | |I9 a|I10a| | | | | |
49.#69 I9 Use * Keep esi | | | |I9 a|I10a| | | | | |
49.#70 I10 Use * Keep edi | | | |I9 a|I10a| | | | | |
50.#71 V5 Def Alloc mm0 | | | | | |V5 a| | | | |
57.#72 V0 Use * ReLod NA | | | | | |V5 a| | | | |
Alloc esi | | | |V0 a| |V5 a| | | | |
57.#73 V5 Use * Keep mm0 | | | |V0 a| |V5 a| | | | |
------------------------------+----+----+----+----+----+----+----+----+----+----+
LocRP# Name Type Action Reg |eax |ecx |edx |esi |edi |mm0 |mm1 |mm2 |mm6 |mm7 |
------------------------------+----+----+----+----+----+----+----+----+----+----+
59.#74 BB3 PredBB2 | | | | | | | | | | |
------------
REFPOSITIONS AFTER ALLOCATION:
------------
<RefPosition #0 @0 RefTypeParamDef <Ivl:0 V00> BB00 regmask=[] minReg=1 regOptional>
<RefPosition #1 @0 RefTypeParamDef <Ivl:1 V01> BB00 regmask=[] minReg=1 regOptional>
<RefPosition #2 @0 RefTypeParamDef <Ivl:2 V02> BB00 regmask=[] minReg=1 regOptional>
<RefPosition #3 @1 RefTypeBB BB01 regmask=[] minReg=1>
<RefPosition #4 @3 RefTypeBB BB02 regmask=[] minReg=1>
<RefPosition #5 @9 RefTypeUse <Ivl:2 V02> LCL_VAR BB02 regmask=[mm0] minReg=1 last reload>
<RefPosition #6 @13 RefTypeUse <Ivl:1 V01> LCL_VAR BB02 regmask=[mm0] minReg=1 last reload>
<RefPosition #7 @18 RefTypeDef <Ivl:4> LCL_VAR_ADDR BB02 regmask=[ecx] minReg=1>
<RefPosition #8 @19 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #9 @19 RefTypeUse <Ivl:4> BB02 regmask=[ecx] minReg=1 last fixed>
<RefPosition #10 @20 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #11 @20 RefTypeDef <Ivl:5> PUTARG_REG BB02 regmask=[ecx] minReg=1 fixed>
<RefPosition #12 @22 RefTypeDef <Ivl:6> CNS_INT BB02 regmask=[edx] minReg=1>
<RefPosition #13 @23 RefTypeFixedReg <Reg:edx> BB02 regmask=[edx] minReg=1>
<RefPosition #14 @23 RefTypeUse <Ivl:6> BB02 regmask=[edx] minReg=1 last fixed>
<RefPosition #15 @24 RefTypeFixedReg <Reg:edx> BB02 regmask=[edx] minReg=1>
<RefPosition #16 @24 RefTypeDef <Ivl:7> PUTARG_REG BB02 regmask=[edx] minReg=1 fixed>
<RefPosition #17 @29 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #18 @29 RefTypeUse <Ivl:5> BB02 regmask=[ecx] minReg=1 last fixed>
<RefPosition #19 @29 RefTypeFixedReg <Reg:edx> BB02 regmask=[edx] minReg=1>
<RefPosition #20 @29 RefTypeUse <Ivl:7> BB02 regmask=[edx] minReg=1 last fixed>
<RefPosition #21 @30 RefTypeKill <Reg:eax> BB02 regmask=[eax] minReg=1 last>
<RefPosition #22 @30 RefTypeKill <Reg:ecx> BB02 regmask=[ecx] minReg=1 last>
<RefPosition #23 @30 RefTypeKill <Reg:edx> BB02 regmask=[edx] minReg=1 last>
<RefPosition #24 @30 RefTypeKill <Reg:mm0> BB02 regmask=[mm0] minReg=1 last>
<RefPosition #25 @30 RefTypeKill <Reg:mm1> BB02 regmask=[mm1] minReg=1 last>
<RefPosition #26 @30 RefTypeKill <Reg:mm2> BB02 regmask=[mm2] minReg=1 last>
<RefPosition #27 @30 RefTypeKill <Reg:mm3> BB02 regmask=[mm3] minReg=1 last>
<RefPosition #28 @30 RefTypeKill <Reg:mm4> BB02 regmask=[mm4] minReg=1 last>
<RefPosition #29 @30 RefTypeKill <Reg:mm5> BB02 regmask=[mm5] minReg=1 last>
<RefPosition #30 @30 RefTypeKill <Reg:mm6> BB02 regmask=[mm6] minReg=1 last>
<RefPosition #31 @30 RefTypeKill <Reg:mm7> BB02 regmask=[mm7] minReg=1 last>
<RefPosition #32 @30 RefTypeKillGCRefs CALL BB02 regmask=[eax ebx esi edi] minReg=1>
<RefPosition #33 @34 RefTypeDef <Ivl:8> IND BB02 regmask=[eax] minReg=1>
<RefPosition #34 @37 RefTypeUse <Ivl:8> BB02 regmask=[eax] minReg=1 last>
<RefPosition #35 @38 RefTypeKill <Reg:eax> BB02 regmask=[eax] minReg=1 last>
<RefPosition #36 @38 RefTypeKill <Reg:ecx> BB02 regmask=[ecx] minReg=1 last>
<RefPosition #37 @38 RefTypeKill <Reg:edx> BB02 regmask=[edx] minReg=1 last>
<RefPosition #38 @38 RefTypeKill <Reg:mm0> BB02 regmask=[mm0] minReg=1 last>
<RefPosition #39 @38 RefTypeKill <Reg:mm1> BB02 regmask=[mm1] minReg=1 last>
<RefPosition #40 @38 RefTypeKill <Reg:mm2> BB02 regmask=[mm2] minReg=1 last>
<RefPosition #41 @38 RefTypeKill <Reg:mm3> BB02 regmask=[mm3] minReg=1 last>
<RefPosition #42 @38 RefTypeKill <Reg:mm4> BB02 regmask=[mm4] minReg=1 last>
<RefPosition #43 @38 RefTypeKill <Reg:mm5> BB02 regmask=[mm5] minReg=1 last>
<RefPosition #44 @38 RefTypeKill <Reg:mm6> BB02 regmask=[mm6] minReg=1 last>
<RefPosition #45 @38 RefTypeKill <Reg:mm7> BB02 regmask=[mm7] minReg=1 last>
<RefPosition #46 @38 RefTypeKillGCRefs CALL[0] BB02 regmask=[eax ebx esi edi] minReg=1>
<RefPosition #47 @38 RefTypeFixedReg <Reg:eax> BB02 regmask=[eax] minReg=1>
<RefPosition #48 @38 RefTypeDef <Ivl:9> CALL[0] BB02 regmask=[esi] minReg=1 fixed>
<RefPosition #49 @38 RefTypeFixedReg <Reg:edx> BB02 regmask=[edx] minReg=1>
<RefPosition #50 @38 RefTypeDef <Ivl:10> CALL[1] BB02 regmask=[edi] minReg=1 fixed>
<RefPosition #51 @40 RefTypeDef <Ivl:11> LCL_VAR_ADDR BB02 regmask=[ecx] minReg=1>
<RefPosition #52 @41 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #53 @41 RefTypeUse <Ivl:11> BB02 regmask=[ecx] minReg=1 last fixed>
<RefPosition #54 @42 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #55 @42 RefTypeDef <Ivl:12> PUTARG_REG BB02 regmask=[ecx] minReg=1 fixed>
<RefPosition #56 @47 RefTypeFixedReg <Reg:ecx> BB02 regmask=[ecx] minReg=1>
<RefPosition #57 @47 RefTypeUse <Ivl:12> BB02 regmask=[ecx] minReg=1 last fixed>
<RefPosition #58 @48 RefTypeKill <Reg:eax> BB02 regmask=[eax] minReg=1 last>
<RefPosition #59 @48 RefTypeKill <Reg:ecx> BB02 regmask=[ecx] minReg=1 last>
<RefPosition #60 @48 RefTypeKill <Reg:edx> BB02 regmask=[edx] minReg=1 last>
<RefPosition #61 @48 RefTypeKill <Reg:mm0> BB02 regmask=[mm0] minReg=1 last>
<RefPosition #62 @48 RefTypeKill <Reg:mm1> BB02 regmask=[mm1] minReg=1 last>
<RefPosition #63 @48 RefTypeKill <Reg:mm2> BB02 regmask=[mm2] minReg=1 last>
<RefPosition #64 @48 RefTypeKill <Reg:mm3> BB02 regmask=[mm3] minReg=1 last>
<RefPosition #65 @48 RefTypeKill <Reg:mm4> BB02 regmask=[mm4] minReg=1 last>
<RefPosition #66 @48 RefTypeKill <Reg:mm5> BB02 regmask=[mm5] minReg=1 last>
<RefPosition #67 @48 RefTypeKill <Reg:mm6> BB02 regmask=[mm6] minReg=1 last>
<RefPosition #68 @48 RefTypeKill <Reg:mm7> BB02 regmask=[mm7] minReg=1 last>
<RefPosition #69 @49 RefTypeUse <Ivl:9> BB02 regmask=[esi] minReg=1 last>
<RefPosition #70 @49 RefTypeUse <Ivl:10> BB02 regmask=[edi] minReg=1 last>
<RefPosition #71 @50 RefTypeDef <Ivl:3 V05> STORE_LCL_VAR BB02 regmask=[mm0] minReg=1>
<RefPosition #72 @57 RefTypeUse <Ivl:0 V00> LCL_VAR BB02 regmask=[esi] minReg=1 last reload>
<RefPosition #73 @57 RefTypeUse <Ivl:3 V05> LCL_VAR BB02 regmask=[mm0] minReg=1 last>
<RefPosition #74 @59 RefTypeBB BB03 regmask=[] minReg=1>
VAR REFPOSITIONS AFTER ALLOCATION
--- V00 (Interval 0)
<RefPosition #0 @0 RefTypeParamDef <Ivl:0 V00> BB00 regmask=[] minReg=1 regOptional>
<RefPosition #72 @57 RefTypeUse <Ivl:0 V00> LCL_VAR BB02 regmask=[esi] minReg=1 last reload>
--- V01 (Interval 1)
<RefPosition #1 @0 RefTypeParamDef <Ivl:1 V01> BB00 regmask=[] minReg=1 regOptional>
<RefPosition #6 @13 RefTypeUse <Ivl:1 V01> LCL_VAR BB02 regmask=[mm0] minReg=1 last reload>
--- V02 (Interval 2)
<RefPosition #2 @0 RefTypeParamDef <Ivl:2 V02> BB00 regmask=[] minReg=1 regOptional>
<RefPosition #5 @9 RefTypeUse <Ivl:2 V02> LCL_VAR BB02 regmask=[mm0] minReg=1 last reload>
--- V03
--- V04
--- V05 (Interval 3)
<RefPosition #71 @50 RefTypeDef <Ivl:3 V05> STORE_LCL_VAR BB02 regmask=[mm0] minReg=1>
<RefPosition #73 @57 RefTypeUse <Ivl:3 V05> LCL_VAR BB02 regmask=[mm0] minReg=1 last>
--- V06
--- V07
Active intervals at end of allocation:
-----------------------
RESOLVING BB BOUNDARIES
-----------------------
Resolution Candidates: {V00 V01 V02}
Has No Critical Edges
Prior to Resolution
BB01
use def in out
{}
{}
{V00 V01 V02}
{V00 V01 V02}
Var=Reg beg of BB01: none
Var=Reg end of BB01: none
BB02
use def in out
{V00 V01 V02}
{V05}
{V00 V01 V02}
{}
Var=Reg beg of BB02: none
Var=Reg end of BB02: none
BB03
use def in out
{}
{}
{}
{}
Var=Reg beg of BB03: none
Var=Reg end of BB03: none
RESOLVING EDGES
Set V00 argument initial register to STK
Set V01 argument initial register to STK
Set V02 argument initial register to STK
Trees after linear scan register allocator (LSRA)
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal LIR
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe LIR
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal gcsafe LIR
-----------------------------------------------------------------------------------------------------------------------------------------
------------ BB01 [???..???), preds={} succs={BB02}
------------ BB02 [000..012), preds={BB01} succs={BB03}
N005 (???,???) [000022] ------------ IL_OFFSET void IL offset: 0x0 REG NA
N007 ( 3, 2) [000001] -----------z t1 = LCL_VAR float V02 arg1 u:1 mm0 (last use) REG mm0 $c1
/--* t1 float
N009 (???,???) [000025] ------------ * PUTARG_STK [+0x00] void (1 slots), (4 stackByteSize), (0 slot), (0 byteOffset) REG NA
N011 ( 3, 2) [000000] -----------z t0 = LCL_VAR float V01 arg0 u:1 mm0 (last use) REG mm0 $c0
/--* t0 float
N013 (???,???) [000026] ------------ * PUTARG_STK [+0x04] void (1 slots), (4 stackByteSize), (1 slot), (4 byteOffset) REG NA
N015 (???,???) [000027] ------------ PINVOKE_PROLOG void REG NA
N017 ( 3, 3) [000028] ------------ t28 = LCL_VAR_ADDR int V06 PInvokeFrame ecx REG ecx
/--* t28 int
N019 (???,???) [000033] ------------ t33 = * PUTARG_REG int REG ecx
N021 ( 1, 1) [000029] ------------ t29 = CNS_INT int 8 REG edx
/--* t29 int
N023 (???,???) [000034] ------------ t34 = * PUTARG_REG int REG edx
N025 ( 1, 4) [000035] Hc---------- t35 = CNS_INT(h) int 0x420220 ftn REG NA
/--* t35 int
N027 ( 3, 6) [000036] -c---------- t36 = * IND int REG NA
/--* t33 int arg0 in ecx
+--* t34 int arg1 in edx
+--* t36 int control expr
N029 ( 18, 11) [000030] --C-G------- * CALL help void HELPER.CORINFO_HELP_JIT_PINVOKE_BEGIN REG NA
N031 ( 1, 4) [000037] Hc---------- t37 = CNS_INT(h) int 0x420368 ftn REG NA
/--* t37 int
N033 ( 3, 6) [000038] ------------ t38 = * IND int REG eax
/--* t38 int
N035 ( 6, 8) [000039] -c---------- t39 = * IND int REG NA
/--* t39 int control expr
N037 ( 26, 9) [000002] --CXG------- t2 = * CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats REG esi,edi $180
N039 ( 3, 3) [000040] ------------ t40 = LCL_VAR_ADDR int V06 PInvokeFrame ecx REG ecx
/--* t40 int
N041 (???,???) [000043] ------------ t43 = * PUTARG_REG int REG ecx
N043 ( 1, 4) [000044] Hc---------- t44 = CNS_INT(h) int 0x420230 ftn REG NA
/--* t44 int
N045 ( 3, 6) [000045] -c---------- t45 = * IND int REG NA
/--* t43 int arg0 in ecx
+--* t45 int control expr
N047 ( 17, 9) [000041] --C-G------- * CALL help void HELPER.CORINFO_HELP_JIT_PINVOKE_END REG NA
/--* t2 struct
N049 ( 30, 12) [000005] DA-XG------- * STORE_LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 d:2 mm0 REG mm0
N051 (???,???) [000023] ------------ IL_OFFSET void IL offset: 0x10 REG NA
N053 ( 1, 1) [000016] -----------z t16 = LCL_VAR byref V00 RetBuf u:1 esi (last use) REG esi $80
N055 ( 3, 2) [000015] ------------ t15 = LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 u:2 mm0 (last use) REG mm0 $240
/--* t16 byref
+--* t15 simd8
N057 (???,???) [000024] -A-XG------- * STOREIND simd8 REG NA
------------ BB03 [???..???) (return), preds={BB02} succs={}
N061 ( 0, 0) [000021] ------------ RETURN void REG NA $280
-------------------------------------------------------------------------------------------------------------------
Final allocation
------------------------------+----+----+----+----+----+----+----+----+----+----+
LocRP# Name Type Action Reg |eax |ecx |edx |esi |edi |mm0 |mm1 |mm2 |mm6 |mm7 |
------------------------------+----+----+----+----+----+----+----+----+----+----+
0.#0 V0 Parm NoReg | | | | | | | | | | |
0.#1 V1 Parm NoReg | | | | | | | | | | |
0.#2 V2 Parm NoReg | | | | | | | | | | |
1.#3 BB1 PredBB0 | | | | | | | | | | |
------------------------------+----+----+----+----+----+----+----+----+----+----+
LocRP# Name Type Action Reg |eax |ecx |edx |esi |edi |mm0 |mm1 |mm2 |mm6 |mm7 |
------------------------------+----+----+----+----+----+----+----+----+----+----+
3.#4 BB2 PredBB1 | | | | | | | | | | |
9.#5 V2 Use * ReLod mm0 | | | | | |V2 a| | | | |
Keep mm0 | | | | | |V2 i| | | | |
13.#6 V1 Use * ReLod mm0 | | | | | |V1 a| | | | |
Keep mm0 | | | | | |V1 i| | | | |
18.#7 I4 Def Alloc ecx | |I4 a| | | | | | | | |
19.#8 ecx Fixd Keep ecx | |I4 a| | | | | | | | |
19.#9 I4 Use * Keep ecx | |I4 i| | | | | | | | |
20.#10 ecx Fixd Keep ecx | | | | | | | | | | |
20.#11 I5 Def Alloc ecx | |I5 a| | | | | | | | |
22.#12 C6 Def Alloc edx | |I5 a|C6 a| | | | | | | |
23.#13 edx Fixd Keep edx | |I5 a|C6 a| | | | | | | |
23.#14 C6 Use * Keep edx | |I5 a|C6 i| | | | | | | |
24.#15 edx Fixd Keep edx | |I5 a| | | | | | | | |
24.#16 I7 Def Alloc edx | |I5 a|I7 a| | | | | | | |
29.#17 ecx Fixd Keep ecx | |I5 a|I7 a| | | | | | | |
29.#18 I5 Use * Keep ecx | |I5 i|I7 a| | | | | | | |
29.#19 edx Fixd Keep edx | | |I7 a| | | | | | | |
29.#20 I7 Use * Keep edx | | |I7 i| | | | | | | |
30.#21 eax Kill Keep eax | | | | | | | | | | |
30.#22 ecx Kill Keep ecx | | | | | | | | | | |
30.#23 edx Kill Keep edx | | | | | | | | | | |
30.#24 mm0 Kill Keep mm0 | | | | | | | | | | |
30.#25 mm1 Kill Keep mm1 | | | | | | | | | | |
30.#26 mm2 Kill Keep mm2 | | | | | | | | | | |
30.#27 mm3 Kill Keep mm3 | | | | | | | | | | |
30.#28 mm4 Kill Keep mm4 | | | | | | | | | | |
30.#29 mm5 Kill Keep mm5 | | | | | | | | | | |
30.#30 mm6 Kill Keep mm6 | | | | | | | | | | |
30.#31 mm7 Kill Keep mm7 | | | | | | | | | | |
| | | | | | | | | | |
34.#33 I8 Def Alloc eax |I8 a| | | | | | | | | |
37.#34 I8 Use * Keep eax |I8 i| | | | | | | | | |
38.#35 eax Kill Keep eax | | | | | | | | | | |
38.#36 ecx Kill Keep ecx | | | | | | | | | | |
38.#37 edx Kill Keep edx | | | | | | | | | | |
38.#38 mm0 Kill Keep mm0 | | | | | | | | | | |
38.#39 mm1 Kill Keep mm1 | | | | | | | | | | |
38.#40 mm2 Kill Keep mm2 | | | | | | | | | | |
38.#41 mm3 Kill Keep mm3 | | | | | | | | | | |
38.#42 mm4 Kill Keep mm4 | | | | | | | | | | |
38.#43 mm5 Kill Keep mm5 | | | | | | | | | | |
38.#44 mm6 Kill Keep mm6 | | | | | | | | | | |
38.#45 mm7 Kill Keep mm7 | | | | | | | | | | |
| | | | | | | | | | |
38.#47 eax Fixd Keep eax | | | | | | | | | | |
38.#48 I9 Def Alloc esi | | | |I9 a| | | | | | |
38.#49 edx Fixd Keep edx | | | |I9 a| | | | | | |
38.#50 I10 Def Alloc edi | | | |I9 a|I10a| | | | | |
40.#51 I11 Def Alloc ecx | |I11a| |I9 a|I10a| | | | | |
41.#52 ecx Fixd Keep ecx | |I11a| |I9 a|I10a| | | | | |
41.#53 I11 Use * Keep ecx | |I11i| |I9 a|I10a| | | | | |
42.#54 ecx Fixd Keep ecx | | | |I9 a|I10a| | | | | |
42.#55 I12 Def Alloc ecx | |I12a| |I9 a|I10a| | | | | |
47.#56 ecx Fixd Keep ecx | |I12a| |I9 a|I10a| | | | | |
47.#57 I12 Use * Keep ecx | |I12i| |I9 a|I10a| | | | | |
48.#58 eax Kill Keep eax | | | |I9 a|I10a| | | | | |
48.#59 ecx Kill Keep ecx | | | |I9 a|I10a| | | | | |
48.#60 edx Kill Keep edx | | | |I9 a|I10a| | | | | |
48.#61 mm0 Kill Keep mm0 | | | |I9 a|I10a| | | | | |
48.#62 mm1 Kill Keep mm1 | | | |I9 a|I10a| | | | | |
48.#63 mm2 Kill Keep mm2 | | | |I9 a|I10a| | | | | |
48.#64 mm3 Kill Keep mm3 | | | |I9 a|I10a| | | | | |
48.#65 mm4 Kill Keep mm4 | | | |I9 a|I10a| | | | | |
48.#66 mm5 Kill Keep mm5 | | | |I9 a|I10a| | | | | |
48.#67 mm6 Kill Keep mm6 | | | |I9 a|I10a| | | | | |
48.#68 mm7 Kill Keep mm7 | | | |I9 a|I10a| | | | | |
49.#69 I9 Use * Keep esi | | | |I9 i|I10a| | | | | |
49.#70 I10 Use * Keep edi | | | | |I10i| | | | | |
50.#71 V5 Def Alloc mm0 | | | | | |V5 a| | | | |
57.#72 V0 Use * ReLod esi | | | |V0 a| |V5 a| | | | |
Keep esi | | | |V0 i| |V5 a| | | | |
57.#73 V5 Use * Keep mm0 | | | | | |V5 i| | | | |
------------------------------+----+----+----+----+----+----+----+----+----+----+
LocRP# Name Type Action Reg |eax |ecx |edx |esi |edi |mm0 |mm1 |mm2 |mm6 |mm7 |
------------------------------+----+----+----+----+----+----+----+----+----+----+
59.#74 BB3 PredBB2 | | | | | | | | | | |
Recording the maximum number of concurrent spills:
----------
LSRA Stats
----------
Total Tracked Vars: 4
Total Reg Cand Vars: 4
Total number of Intervals: 12
Total number of RefPositions: 74
Total Number of spill temps created: 0
..........
BB00 [ 100.00]: SpillCount = 1, REG_ORDER = 1
BB02 [ 100.00]: THIS_ASSIGNED = 1, COVERS = 1, REG_ORDER = 6
..........
Total SpillCount : 1 Weighted: 100.000000
Total CopyReg : 0 Weighted: 0.000000
Total ResolutionMovs : 0 Weighted: 0.000000
Total SplitEdges : 0 Weighted: 0.000000
..........
Total THIS_ASSIGNED [# 3] : 1 Weighted: 100.000000
Total COVERS [# 4] : 1 Weighted: 100.000000
Total REG_ORDER [#13] : 7 Weighted: 700.000000
TUPLE STYLE DUMP WITH REGISTER ASSIGNMENTS
Incoming Parameters: V00(ecx=>STK) V01(STK) V02(STK)
BB01 [???..???), preds={} succs={BB02}
=====
Var=Reg end of BB01: none
BB02 [000..012), preds={BB01} succs={BB03}
=====
Predecessor for variable locations: BB01
Var=Reg beg of BB02: none
N005. IL_OFFSET IL offset: 0x0
N007. V02(mm0*)R
N009. PUTARG_STK [+0x00]; mm0*
N011. V01(mm0*)R
N013. PUTARG_STK [+0x04]; mm0*
N015. PINVOKE_PROLOG
N017. ecx = LCL_VAR_ADDR V06 PInvokeFrame ecx
N019. ecx = PUTARG_REG; ecx
N021. edx = CNS_INT 8
N023. edx = PUTARG_REG; edx
N025. CNS_INT(h) 0x420220 ftn
N027. IND
N029. CALL help; ecx,edx
N031. CNS_INT(h) 0x420368 ftn
N033. eax = IND
N035. STK = IND ; eax
N037. esi,edi = CALL r2r_ind; STK
N039. ecx = LCL_VAR_ADDR V06 PInvokeFrame ecx
N041. ecx = PUTARG_REG; ecx
N043. CNS_INT(h) 0x420230 ftn
N045. IND
N047. CALL help; ecx
* N049. V05(mm0); esi,edi
N051. IL_OFFSET IL offset: 0x10
N053. V00(esi*)R
N055. V05(mm0*)
N057. STOREIND ; esi*,mm0*
Var=Reg end of BB02: none
BB03 [???..???) (return), preds={BB02} succs={}
=====
Predecessor for variable locations: BB02
Var=Reg beg of BB03: none
N061. RETURN
Var=Reg end of BB03: none
*************** Finishing PHASE Linear scan register alloc
*************** In genGenerateCode()
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal LIR
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe LIR
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal gcsafe LIR
-----------------------------------------------------------------------------------------------------------------------------------------
*************** Starting PHASE Generate code
*************** In fgDebugCheckBBlist
Finalizing stack frame
Recording Var Locations at start of BB01
<none>
Modified regs: [eax ecx edx esi edi mm0-mm7]
Marking regs modified: [ebx esi edi] ([eax ecx edx esi edi mm0-mm7] => [eax ecx edx ebx esi edi mm0-mm7])
Callee-saved registers pushed: 3 [ebx esi edi]
*************** In lvaAssignFrameOffsets(FINAL_FRAME_LAYOUT)
Assign V07 EHSlots, size=16, stkOffs=-0x28
Assign V00 RetBuf, size=4, stkOffs=-0x2c
Assign V06 PInvokeFrame, size=44, stkOffs=-0x58
--- delta bump 4 for RA
--- delta bump 4 for FP
--- virtual stack offset to actual stack offset delta is 8
-- V00 was -44, now -36
-- V01 was 4, now 12
-- V02 was 0, now 8
-- V06 was -88, now -80
-- V07 was -40, now -32
; Final local variable assignments
;
; V00 RetBuf [V00,T00] ( 3, 3 ) byref -> [ebp-24H]
; V01 arg0 [V01,T02] ( 1, 1 ) float -> [ebp+0CH]
; V02 arg1 [V02,T03] ( 1, 1 ) float -> [ebp+08H]
;* V03 loc0 [V03 ] ( 0, 0 ) simd8 -> zero-ref
;* V04 loc1 [V04 ] ( 0, 0 ) simd8 -> zero-ref
; V05 loc2 [V05,T01] ( 2, 4 ) simd8 -> mm0 multireg-ret "Return value temp for multireg return"
; V06 PInvokeFrame [V06 ] ( 3, 3 ) blk (44) [ebp-50H] do-not-enreg[X] addr-exposed "Pinvoke FrameVar"
; V07 EHSlots [V07 ] ( 1, 1 ) blk (16) [ebp-20H] do-not-enreg[X] must-init addr-exposed "lvaShadowSPslotsVar"
;
; Lcl frame size = 68
Mark labels for codegen
BB01 : first block
*************** After genMarkLabelsForCodegen()
-----------------------------------------------------------------------------------------------------------------------------------------
BBnum BBid ref try hnd preds weight lp [IL range] [jump] [EH region] [flags]
-----------------------------------------------------------------------------------------------------------------------------------------
BB01 [0005] 1 1 [???..???) keep i internal label LIR
BB02 [0000] 1 BB01 1 [000..012) keep i hascall gcsafe LIR
BB03 [0006] 1 BB02 1 [???..???) (return) keep internal gcsafe LIR
-----------------------------------------------------------------------------------------------------------------------------------------
Setting stack level from -572662307 to 0
=============== Generating BB01 [???..???), preds={} succs={BB02} flags=0x00000000.20010070: keep i internal label LIR
BB01 IN (3)={V00 V01 V02} + ByrefExposed + GcHeap
OUT(3)={V00 V01 V02} + ByrefExposed + GcHeap
Recording Var Locations at start of BB01
<none>
Change life 0000000000000000 {} -> 000000000000000D {V00 V01 V02}
V00 becoming live
Live regs: (unchanged) 00000000 {}
GC regs: (unchanged) 00000000 {}
Byref regs: (unchanged) 00000000 {}
L_M61568_BB01:
Mapped BB01 to G_M61568_IG02
Label: IG02, GCvars=0000000000000001 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
Scope info: begin block BB01, IL range [???..???)
Scope info: ignoring block beginning
Scope info: end block BB01, IL range [???..???)
Scope info: ignoring block end
=============== Generating BB02 [000..012), preds={BB01} succs={BB03} flags=0x00000002.20080030: keep i hascall gcsafe LIR
BB02 IN (3)={V00 V01 V02} + ByrefExposed + GcHeap
OUT(0)={ }
Recording Var Locations at start of BB02
<none>
Liveness not changing: 000000000000000D {V00 V01 V02}
Live regs: (unchanged) 00000000 {}
GC regs: (unchanged) 00000000 {}
Byref regs: (unchanged) 00000000 {}
L_M61568_BB02:
Scope info: begin block BB02, IL range [000..012)
Scope info: open scopes =
0 (V00 RetBuf) [000..012)
1 (V01 arg0) [000..012)
2 (V02 arg1) [000..012)
Added IP mapping: 0x0000 STACK_EMPTY (G_M61568_IG02,ins#0,ofs#0) label
Generating: N005 (???,???) [000022] ------------ IL_OFFSET void IL offset: 0x0 REG NA
Generating: N007 ( 3, 2) [000001] -----------z t1 = LCL_VAR float V02 arg1 u:1 mm0 (last use) REG mm0 $c1
/--* t1 float
Generating: N009 (???,???) [000025] ------------ * PUTARG_STK [+0x00] void (1 slots), (4 stackByteSize), (0 slot), (0 byteOffset) REG NA
IN0001: movss xmm0, dword ptr [V02 ebp+08H]
V02 in reg mm0 is becoming live [000001]
Live regs: 00000000 {} => 00000000 {xmm0}
V02 in reg mm0 is becoming dead [000001]
Live regs: 00000000 {xmm0} => 00000000 {}
Live vars: {V00 V01 V02} => {V00 V01}
IN0002: sub esp, 4
Upping emitMaxStackDepth from 0 to 4
IN0003: movss dword ptr [esp], xmm0
Adjusting stack level from 0 to 4
Generating: N011 ( 3, 2) [000000] -----------z t0 = LCL_VAR float V01 arg0 u:1 mm0 (last use) REG mm0 $c0
/--* t0 float
Generating: N013 (???,???) [000026] ------------ * PUTARG_STK [+0x04] void (1 slots), (4 stackByteSize), (1 slot), (4 byteOffset) REG NA
IN0004: movss xmm0, dword ptr [V01 ebp+0CH]
V01 in reg mm0 is becoming live [000000]
Live regs: 00000000 {} => 00000000 {xmm0}
V01 in reg mm0 is becoming dead [000000]
Live regs: 00000000 {xmm0} => 00000000 {}
Live vars: {V00 V01} => {V00}
IN0005: sub esp, 4
Upping emitMaxStackDepth from 4 to 8
IN0006: movss dword ptr [esp], xmm0
Adjusting stack level from 4 to 8
Generating: N015 (???,???) [000027] ------------ PINVOKE_PROLOG void REG NA
Generating: N017 ( 3, 3) [000028] ------------ t28 = LCL_VAR_ADDR int V06 PInvokeFrame ecx REG ecx
IN0007: lea ecx, [V06 ebp-50H]
/--* t28 int
Generating: N019 (???,???) [000033] ------------ t33 = * PUTARG_REG int REG ecx
Generating: N021 ( 1, 1) [000029] ------------ t29 = CNS_INT int 8 REG edx
IN0008: mov edx, 8
/--* t29 int
Generating: N023 (???,???) [000034] ------------ t34 = * PUTARG_REG int REG edx
Generating: N025 ( 1, 4) [000035] Hc---------- t35 = CNS_INT(h) int 0x420220 ftn REG NA
/--* t35 int
Generating: N027 ( 3, 6) [000036] -c---------- t36 = * IND int REG NA
/--* t33 int arg0 in ecx
+--* t34 int arg1 in edx
+--* t36 int control expr
Generating: N029 ( 18, 11) [000030] --C-G------- * CALL help void HELPER.CORINFO_HELP_JIT_PINVOKE_BEGIN REG NA
New Basic Block BB04 [0007] created.
Mark BB04 as label: codegen temp block
L_M61568_BB04:
G_M61568_IG02: ; offs=000000H, funclet=00, bbWeight=1
Mapped BB04 to G_M61568_IG03
Label: IG03, GCvars=0000000000000001 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
Call: GCvars=0000000000000001 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
IN0009: call [CORINFO_HELP_JIT_PINVOKE_BEGIN]
Generating: N031 ( 1, 4) [000037] Hc---------- t37 = CNS_INT(h) int 0x420368 ftn REG NA
/--* t37 int
Generating: N033 ( 3, 6) [000038] ------------ t38 = * IND int REG eax
IN000a: mov eax, dword ptr [(reloc 0x4000000000420368)]
/--* t38 int
Generating: N035 ( 6, 8) [000039] -c---------- t39 = * IND int REG NA
/--* t39 int control expr
Generating: N037 ( 26, 9) [000002] --CXG------- t2 = * CALL r2r_ind struct Vector2_3_4TestNative.CreateVector2FromFloats REG esi,edi $180
New Basic Block BB05 [0008] created.
Mark BB05 as label: codegen temp block
L_M61568_BB05:
G_M61568_IG03: ; offs=000022H, funclet=00, bbWeight=1
Mapped BB05 to G_M61568_IG04
Label: IG04, GCvars=0000000000000001 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
Call: GCvars=0000000000000001 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
IN000b: call dword ptr [eax]Vector2_3_4TestNative:CreateVector2FromFloats(float,float):System.Numerics.Vector2
IN000c: mov esi, eax
IN000d: mov edi, edx
Adjusting stack level from 8 to 0
Generating: N039 ( 3, 3) [000040] ------------ t40 = LCL_VAR_ADDR int V06 PInvokeFrame ecx REG ecx
IN000e: lea ecx, [V06 ebp-50H]
/--* t40 int
Generating: N041 (???,???) [000043] ------------ t43 = * PUTARG_REG int REG ecx
Generating: N043 ( 1, 4) [000044] Hc---------- t44 = CNS_INT(h) int 0x420230 ftn REG NA
/--* t44 int
Generating: N045 ( 3, 6) [000045] -c---------- t45 = * IND int REG NA
/--* t43 int arg0 in ecx
+--* t45 int control expr
Generating: N047 ( 17, 9) [000041] --C-G------- * CALL help void HELPER.CORINFO_HELP_JIT_PINVOKE_END REG NA
Call: GCvars=0000000000000001 {V00}, gcrefRegs=00000000 {}, byrefRegs=00000000 {}
IN000f: call [CORINFO_HELP_JIT_PINVOKE_END]
/--* t2 struct
Generating: N049 ( 30, 12) [000005] DA-XG------- * STORE_LCL_VAR simd8 <System.Numerics.Vector2> V05 loc2 d:2 mm0 REG mm0
D:\git\runtime2\src\coreclr\jit\codegenxarch.cpp:1983
Assertion failed '!"Multireg store to SIMD reg not supported on X64 Windows"' in 'Vector2_3_4TestNative:CreateVector2FromFloats(float,float):System.Numerics.Vector2' during 'Generate code' (IL size 18)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment