Untitled diff
325 lines
*************** Starting PHASE Optimize index checks
*************** Starting PHASE Optimize index checks
Looking for array size assertions for: $300
Looking for array size assertions for: $300
ArrSize for lengthVN:300 = 0
ArrSize for lengthVN:300 = 0
[RangeCheck::GetRangeWorker] BB02 N006 ( 4, 4) [000643] -A--------- * COMMA int $369
[RangeCheck::GetRangeWorker] BB02 N006 ( 4, 4) [000643] -A--------- * COMMA int $369
N004 ( 3, 3) [000641] DA--------- +--* STORE_LCL_VAR int V20 cse2 d:1 $VN.Void
N004 ( 3, 3) [000641] DA--------- +--* STORE_LCL_VAR int V20 cse2 d:1 $VN.Void
N003 ( 3, 3) [000013] -----+----- | \--* ADD int $369
N003 ( 3, 3) [000013] -----+----- | \--* ADD int $369
N001 ( 1, 1) [000011] -----+----- | +--* LCL_VAR int V02 loc0 u:2 $444
N001 ( 1, 1) [000011] -----+----- | +--* LCL_VAR int V02 loc0 u:2 $444
N002 ( 1, 1) [000012] -----+----- | \--* CNS_INT int 1 $c1
N002 ( 1, 1) [000012] -----+----- | \--* CNS_INT int 1 $c1
N005 ( 1, 1) [000642] ----------- \--* LCL_VAR int V20 cse2 u:1 $369
N005 ( 1, 1) [000642] ----------- \--* LCL_VAR int V20 cse2 u:1 $369
{
{
[RangeCheck::GetRangeWorker] BB02 N005 ( 1, 1) [000642] ----------- * LCL_VAR int V20 cse2 u:1 $369
[RangeCheck::GetRangeWorker] BB02 N005 ( 1, 1) [000642] ----------- * LCL_VAR int V20 cse2 u:1 $369
{
{
----------------------------------------------------
----------------------------------------------------
N004 ( 3, 3) [000641] DA--------- * STORE_LCL_VAR int V20 cse2 d:1 $VN.Void
N004 ( 3, 3) [000641] DA--------- * STORE_LCL_VAR int V20 cse2 d:1 $VN.Void
N003 ( 3, 3) [000013] -----+----- \--* ADD int $369
N003 ( 3, 3) [000013] -----+----- \--* ADD int $369
N001 ( 1, 1) [000011] -----+----- +--* LCL_VAR int V02 loc0 u:2 $444
N001 ( 1, 1) [000011] -----+----- +--* LCL_VAR int V02 loc0 u:2 $444
N002 ( 1, 1) [000012] -----+----- \--* CNS_INT int 1 $c1
N002 ( 1, 1) [000012] -----+----- \--* CNS_INT int 1 $c1
----------------------------------------------------
----------------------------------------------------
[RangeCheck::GetRangeWorker] BB02 N003 ( 3, 3) [000013] -----+----- * ADD int $369
[RangeCheck::GetRangeWorker] BB02 N003 ( 3, 3) [000013] -----+----- * ADD int $369
N001 ( 1, 1) [000011] -----+----- +--* LCL_VAR int V02 loc0 u:2 $444
N001 ( 1, 1) [000011] -----+----- +--* LCL_VAR int V02 loc0 u:2 $444
N002 ( 1, 1) [000012] -----+----- \--* CNS_INT int 1 $c1
N002 ( 1, 1) [000012] -----+----- \--* CNS_INT int 1 $c1
{
{
[RangeCheck::GetRangeWorker] BB02 N001 ( 1, 1) [000011] -----+----- * LCL_VAR int V02 loc0 u:2 $444
[RangeCheck::GetRangeWorker] BB02 N001 ( 1, 1) [000011] -----+----- * LCL_VAR int V02 loc0 u:2 $444
{
{
----------------------------------------------------
----------------------------------------------------
N004 ( 0, 0) [000580] DA--------- * STORE_LCL_VAR int V02 loc0 d:2 $VN.Void
N004 ( 0, 0) [000580] DA--------- * STORE_LCL_VAR int V02 loc0 d:2 $VN.Void
N003 ( 0, 0) [000579] ----------- \--* PHI int $444
N003 ( 0, 0) [000579] ----------- \--* PHI int $444
N001 ( 0, 0) [000622] ----------- pred BB06 +--* PHI_ARG int V02 loc0 u:3
N001 ( 0, 0) [000622] ----------- pred BB06 +--* PHI_ARG int V02 loc0 u:3
N002 ( 0, 0) [000603] ----------- pred BB26 \--* PHI_ARG int V02 loc0 u:1 $c0
N002 ( 0, 0) [000603] ----------- pred BB26 \--* PHI_ARG int V02 loc0 u:1 $c0
----------------------------------------------------
----------------------------------------------------
[RangeCheck::GetRangeWorker] BB07 N003 ( 0, 0) [000579] ----------- * PHI int $444
[RangeCheck::GetRangeWorker] BB07 N003 ( 0, 0) [000579] ----------- * PHI int $444
N001 ( 0, 0) [000622] ----------- pred BB06 +--* PHI_ARG int V02 loc0 u:3
N001 ( 0, 0) [000622] ----------- pred BB06 +--* PHI_ARG int V02 loc0 u:3
N002 ( 0, 0) [000603] ----------- pred BB26 \--* PHI_ARG int V02 loc0 u:1 $c0
N002 ( 0, 0) [000603] ----------- pred BB26 \--* PHI_ARG int V02 loc0 u:1 $c0
{
{
[RangeCheck::GetRangeWorker] BB07 N001 ( 0, 0) [000622] ----------- * PHI_ARG int V02 loc0 u:3
[RangeCheck::GetRangeWorker] BB07 N001 ( 0, 0) [000622] ----------- * PHI_ARG int V02 loc0 u:3
{
{
----------------------------------------------------
----------------------------------------------------
N002 ( 1, 3) [000059] DA---+----- * STORE_LCL_VAR int V02 loc0 d:3 $VN.Void
N002 ( 1, 3) [000059] DA---+----- * STORE_LCL_VAR int V02 loc0 d:3 $VN.Void
N001 ( 1, 1) [000645] ----------- \--* LCL_VAR int V20 cse2 u:1 $369
N001 ( 1, 1) [000645] ----------- \--* LCL_VAR int V20 cse2 u:1 $369
----------------------------------------------------
----------------------------------------------------
[RangeCheck::GetRangeWorker] BB06 N001 ( 1, 1) [000645] ----------- * LCL_VAR int V20 cse2 u:1 $369
[RangeCheck::GetRangeWorker] BB06 N001 ( 1, 1) [000645] ----------- * LCL_VAR int V20 cse2 u:1 $369
{
{
----------------------------------------------------
----------------------------------------------------
N004 ( 3, 3) [000641] DA--------- * STORE_LCL_VAR int V20 cse2 d:1 $VN.Void
N004 ( 3, 3) [000641] DA--------- * STORE_LCL_VAR int V20 cse2 d:1 $VN.Void
N003 ( 3, 3) [000013] -----+----- \--* ADD int $369
N003 ( 3, 3) [000013] -----+----- \--* ADD int $369
N001 ( 1, 1) [000011] -----+----- +--* LCL_VAR int V02 loc0 u:2 $444
N001 ( 1, 1) [000011] -----+----- +--* LCL_VAR int V02 loc0 u:2 $444
N002 ( 1, 1) [000012] -----+----- \--* CNS_INT int 1 $c1
N002 ( 1, 1) [000012] -----+----- \--* CNS_INT int 1 $c1
----------------------------------------------------
----------------------------------------------------
[RangeCheck::GetRangeWorker] BB02 N003 ( 3, 3) [000013] -----+----- * ADD int $369
[RangeCheck::GetRangeWorker] BB02 N003 ( 3, 3) [000013] -----+----- * ADD int $369
N001 ( 1, 1) [000011] -----+----- +--* LCL_VAR int V02 loc0 u:2 $444
N001 ( 1, 1) [000011] -----+----- +--* LCL_VAR int V02 loc0 u:2 $444
N002 ( 1, 1) [000012] -----+----- \--* CNS_INT int 1 $c1
N002 ( 1, 1) [000012] -----+----- \--* CNS_INT int 1 $c1
{
{
Merging assertions from pred edges of BB02 for op [000011] $444
Merging assertions from pred edges of BB02 for op [000011] $444
Constant Assertion: ($368,$c0) Oper_Bnd { {PhiDef(V02 d:2, u:3, u:1)} LT {MemOpaque:NotInLoop}ADD {IntCns -1}} is not {IntCns 0}, index = #27
Constant Assertion: ($368,$c0) Oper_Bnd { {PhiDef(V02 d:2, u:3, u:1)} LT {MemOpaque:NotInLoop}ADD {IntCns -1}} is not {IntCns 0}, index = #27
Tightening pRange: [<Dependent, Dependent>] with assertedRange: [<Unknown, $300 + -2>] into [<Dependent, $300 + -2>]
Tightening pRange: [<Dependent, Dependent>] with assertedRange: [<Unknown, $300 + -2>] into [<Dependent, $300 + -2>]
[RangeCheck::GetRangeWorker] BB02 N002 ( 1, 1) [000012] -----+----- * CNS_INT int 1 $c1
[RangeCheck::GetRangeWorker] BB02 N002 ( 1, 1) [000012] -----+----- * CNS_INT int 1 $c1
{
{
Computed Range [000012] => <1, 1>
Computed Range [000012] => <1, 1>
}
}
Merging assertions from pred edges of BB02 for op [000012] $c1
Merging assertions from pred edges of BB02 for op [000012] $c1
BinOp add ranges <Dependent, $300 + -2> <1, 1> = <Dependent, $300 + -1>
BinOp add ranges <Dependent, $300 + -2> <1, 1> = <Dependent, $300 + -1>
Computed Range [000013] => <Dependent, $300 + -1>
Computed Range [000013] => <Dependent, $300 + -1>
}
}
Merge assertions from BB06: #02 #03 #27 for definition [000641]
Merge assertions from BB06: #02 #03 #27 for definition [000641]
ArrBnds Assertion: ($0,$0) [idx: $369 {ADD($444, $c1)}; len: $300 {MemOpaque:NotInLoop}] in range , index = #03
ArrBnds Assertion: ($0,$0) [idx: $369 {ADD($444, $c1)}; len: $300 {MemOpaque:NotInLoop}] in range , index = #03
Tightening pRange: [<Dependent, $300 + -1>] with assertedRange: [<0, $300 + -1>] into [<0, $300 + -1>]
Tightening pRange: [<Dependent, $300 + -1>] with assertedRange: [<0, $300 + -1>] into [<0, $300 + -1>]
done merging
done merging
Merging assertions from pred edges of BB06 for op [000645] $369
Merging assertions from pred edges of BB06 for op [000645] $369
ArrBnds Assertion: ($0,$0) [idx: $369 {ADD($444, $c1)}; len: $300 {MemOpaque:NotInLoop}] in range , index = #03
ArrBnds Assertion: ($0,$0) [idx: $369 {ADD($444, $c1)}; len: $300 {MemOpaque:NotInLoop}] in range , index = #03
Tightening pRange: [<0, $300 + -1>] with assertedRange: [<0, $300 + -1>] into [<0, $300 + -1>]
Tightening pRange: [<0, $300 + -1>] with assertedRange: [<0, $300 + -1>] into [<0, $300 + -1>]
Computed Range [000645] => <0, $300 + -1>
Computed Range [000645] => <0, $300 + -1>
}
}
Merge assertions from BB07: #02 for definition [000059]
Merge assertions from BB07: #02 for definition [000059]
done merging
done merging
Merging assertions from pred edges of BB07 for op [000622] $ffffffff
Merging assertions from pred edges of BB07 for op [000622] $ffffffff
Merge assertions created by BB06 for BB07
Merge assertions created by BB06 for BB07
#02 #03 #26 #27
#02 #03 #26 #27
ArrBnds Assertion: ($0,$0) [idx: $369 {ADD($444, $c1)}; len: $300 {MemOpaque:NotInLoop}] in range , index = #03
ArrBnds Assertion: ($0,$0) [idx: $369 {ADD($444, $c1)}; len: $300 {MemOpaque:NotInLoop}] in range , index = #03
Tightening pRange: [<0, $300 + -1>] with assertedRange: [<0, $300 + -1>] into [<0, $300 + -1>]
Tightening pRange: [<0, $300 + -1>] with assertedRange: [<0, $300 + -1>] into [<0, $300 + -1>]
Computed Range [000622] => <0, $300 + -1>
Computed Range [000622] => <0, $300 + -1>
}
}
Merging assertions from pred edges of BB07 for op [000622] $ffffffff
Merging assertions from pred edges of BB07 for op [000622] $ffffffff
Merge assertions created by BB06 for BB07
Merge assertions created by BB06 for BB07
#02 #03 #26 #27
#02 #03 #26 #27
ArrBnds Assertion: ($0,$0) [idx: $369 {ADD($444, $c1)}; len: $300 {MemOpaque:NotInLoop}] in range , index = #03
ArrBnds Assertion: ($0,$0) [idx: $369 {ADD($444, $c1)}; len: $300 {MemOpaque:NotInLoop}] in range , index = #03
Tightening pRange: [<0, $300 + -1>] with assertedRange: [<0, $300 + -1>] into [<0, $300 + -1>]
Tightening pRange: [<0, $300 + -1>] with assertedRange: [<0, $300 + -1>] into [<0, $300 + -1>]
Merging ranges <Undef, Undef> <0, $300 + -1>:<0, $300 + -1>
Merging ranges <Undef, Undef> <0, $300 + -1>:<0, $300 + -1>
[RangeCheck::GetRangeWorker] BB07 N002 ( 0, 0) [000603] ----------- * PHI_ARG int V02 loc0 u:1 $c0
[RangeCheck::GetRangeWorker] BB07 N002 ( 0, 0) [000603] ----------- * PHI_ARG int V02 loc0 u:1 $c0
{
{
Computed Range [000603] => <0, 0>
Computed Range [000603] => <0, 0>
}
}
Merging assertions from pred edges of BB07 for op [000603] $c0
Merging assertions from pred edges of BB07 for op [000603] $c0
Merge assertions created by BB26 for BB07
Merge assertions created by BB26 for BB07
#02
#02
Merging ranges <0, $300 + -1> <0, 0>:<0, Unknown>
Merging ranges <0, $300 + -1> <0, 0>:<0, Unknown>
Computed Range [000579] => <0, Unknown>
Computed Range [000579] => <0, Unknown>
}
}
Merge assertions from BB02: #02 #27 for definition [000580]
Merge assertions from BB02: #02 #27 for definition [000580]
Constant Assertion: ($368,$c0) Oper_Bnd { {PhiDef(V02 d:2, u:3, u:1)} LT {MemOpaque:NotInLoop}ADD {IntCns -1}} is not {IntCns 0}, index = #27
Constant Assertion: ($368,$c0) Oper_Bnd { {PhiDef(V02 d:2, u:3, u:1)} LT {MemOpaque:NotInLoop}ADD {IntCns -1}} is not {IntCns 0}, index = #27
Tightening pRange: [<0, Unknown>] with assertedRange: [<Unknown, $300 + -2>] into [<0, $300 + -2>]
Tightening pRange: [<0, Unknown>] with assertedRange: [<Unknown, $300 + -2>] into [<0, $300 + -2>]
done merging
done merging
Merging assertions from pred edges of BB02 for op [000011] $444
Merging assertions from pred edges of BB02 for op [000011] $444
Constant Assertion: ($368,$c0) Oper_Bnd { {PhiDef(V02 d:2, u:3, u:1)} LT {MemOpaque:NotInLoop}ADD {IntCns -1}} is not {IntCns 0}, index = #27
Constant Assertion: ($368,$c0) Oper_Bnd { {PhiDef(V02 d:2, u:3, u:1)} LT {MemOpaque:NotInLoop}ADD {IntCns -1}} is not {IntCns 0}, index = #27
Tightening pRange: [<0, $300 + -2>] with assertedRange: [<Unknown, $300 + -2>] into [<0, $300 + -2>]
Tightening pRange: [<0, $300 + -2>] with assertedRange: [<Unknown, $300 + -2>] into [<0, $300 + -2>]
Computed Range [000011] => <0, $300 + -2>
Computed Range [000011] => <0, $300 + -2>
}
}
Merging assertions from pred edges of BB02 for op [000011] $444
Merging assertions from pred edges of BB02 for op [000011] $444
Constant Assertion: ($368,$c0) Oper_Bnd { {PhiDef(V02 d:2, u:3, u:1)} LT {MemOpaque:NotInLoop}ADD {IntCns -1}} is not {IntCns 0}, index = #27
Constant Assertion: ($368,$c0) Oper_Bnd { {PhiDef(V02 d:2, u:3, u:1)} LT {MemOpaque:NotInLoop}ADD {IntCns -1}} is not {IntCns 0}, index = #27
Tightening pRange: [<0, $300 + -2>] with assertedRange: [<Unknown, $300 + -2>] into [<0, $300 + -2>]
Tightening pRange: [<0, $300 + -2>] with assertedRange: [<Unknown, $300 + -2>] into [<0, $300 + -2>]
BinOp add ranges <0, $300 + -2> <1, 1> = <1, $300 + -1>
BinOp add ranges <0, $300 + -2> <1, 1> = <1, $300 + -1>
Computed Range [000013] => <1, $300 + -1>
Computed Range [000013] => <1, $300 + -1>
}
}
Merge assertions from BB02: #02 #27 for definition [000641]
Merge assertions from BB02: #02 #27 for definition [000641]
done merging
done merging
Merging assertions from pred edges of BB02 for op [000642] $369
Merging assertions from pred edges of BB02 for op [000642] $369
Computed Range [000642] => <1, $300 + -1>
Computed Range [000642] => <1, $300 + -1>
}
}
Computed Range [000643] => <1, $300 + -1>
Computed Range [000643] => <1, $300 + -1>
}
}
Does overflow [000643]?
Does overflow [000643]?
Does overflow [000642]?
Does overflow [000642]?
Merging assertions from pred edges of BB02 for op [000642] $369
Merging assertions from pred edges of BB02 for op [000642] $369
Does overflow [000013]?
Does overflow [000013]?
Does overflow [000011]?
Does overflow [000011]?
Merging assertions from pred edges of BB02 for op [000011] $444
Merging assertions from pred edges of BB02 for op [000011] $444
Constant Assertion: ($368,$c0) Oper_Bnd { {PhiDef(V02 d:2, u:3, u:1)} LT {MemOpaque:NotInLoop}ADD {IntCns -1}} is not {IntCns 0}, index = #27
Constant Assertion: ($368,$c0) Oper_Bnd { {PhiDef(V02 d:2, u:3, u:1)} LT {MemOpaque:NotInLoop}ADD {IntCns -1}} is not {IntCns 0}, index = #27
Tightening pRange: [<Unknown, Unknown>] with assertedRange: [<Unknown, $300 + -2>] into [<Unknown, $300 + -2>]
Tightening pRange: [<Unknown, Unknown>] with assertedRange: [<Unknown, $300 + -2>] into [<Unknown, $300 + -2>]
Does overflow [000579]?
Does overflow [000579]?
Does overflow [000622]?
Does overflow [000622]?
Merging assertions from pred edges of BB07 for op [000622] $ffffffff
Merging assertions from pred edges of BB07 for op [000622] $ffffffff
Merge assertions created by BB06 for BB07
Merge assertions created by BB06 for BB07
#02 #03 #26 #27
#02 #03 #26 #27
ArrBnds Assertion: ($0,$0) [idx: $369 {ADD($444, $c1)}; len: $300 {MemOpaque:NotInLoop}] in range , index = #03
ArrBnds Assertion: ($0,$0) [idx: $369 {ADD($444, $c1)}; len: $300 {MemOpaque:NotInLoop}] in range , index = #03
Tightening pRange: [<Unknown, Unknown>] with assertedRange: [<0, $300 + -1>] into [<0, $300 + -1>]
Tightening pRange: [<Unknown, Unknown>] with assertedRange: [<0, $300 + -1>] into [<0, $300 + -1>]
Does overflow [000645]?
Does overflow [000645]?
Merging assertions from pred edges of BB06 for op [000645] $369
Merging assertions from pred edges of BB06 for op [000645] $369
ArrBnds Assertion: ($0,$0) [idx: $369 {ADD($444, $c1)}; len: $300 {MemOpaque:NotInLoop}] in range , index = #03
ArrBnds Assertion: ($0,$0) [idx: $369 {ADD($444, $c1)}; len: $300 {MemOpaque:NotInLoop}] in range , index = #03
Tightening pRange: [<Unknown, Unknown>] with assertedRange: [<0, $300 + -1>] into [<0, $300 + -1>]
Tightening pRange: [<Unknown, Unknown>] with assertedRange: [<0, $300 + -1>] into [<0, $300 + -1>]
Does overflow [000013]?
Does overflow [000013]?
Does overflow [000012]?
Does overflow [000012]?
[000012] does not overflow
[000012] does not overflow
Checking bin op overflow ADD <0, $300 + -2> <1, 1>
Checking bin op overflow ADD <0, $300 + -2> <1, 1>
[000013] does not overflow
[000013] does not overflow
[000645] does not overflow
[000645] does not overflow
[000622] does not overflow
[000622] does not overflow
Does overflow [000603]?
Does overflow [000603]?
[000603] does not overflow
[000603] does not overflow
[000579] does not overflow
[000579] does not overflow
[000011] does not overflow
[000011] does not overflow
Checking bin op overflow ADD <0, $300 + -2> <1, 1>
Checking bin op overflow ADD <0, $300 + -2> <1, 1>
[000013] does not overflow
[000013] does not overflow
[000642] does not overflow
[000642] does not overflow
[000643] does not overflow
[000643] does not overflow
Range value <1, $300 + -1>
Range value <1, $300 + -1>
[RangeCheck::Widen] BB02,
[RangeCheck::Widen] BB02,
[000643]
[000643]
<1, $300 + -1> BetweenBounds <0, [000019]>
<1, $300 + -1> BetweenBounds <0, [000019]>
$300 upper bound is: {MemOpaque:NotInLoop}
$300 upper bound is: {MemOpaque:NotInLoop}
Array size is: 0
Array size is: 0
[RangeCheck::OptimizeRangeCheck] Between bounds
[RangeCheck::OptimizeRangeCheck] Between bounds
Before optRemoveRangeCheck:
Before optRemoveRangeCheck:
N016 ( 15, 18) [000027] -A-XG+----- * COMMA int <l:$36d, c:$36c>
N016 ( 15, 18) [000027] -A-XG+----- * COMMA int <l:$36d, c:$36c>
N008 ( 9, 12) [000020] -A-XG+----- +--* BOUNDS_CHECK_Rng void <l:$552, c:$551>
N008 ( 9, 12) [000020] -A-XG+----- +--* BOUNDS_CHECK_Rng void <l:$552, c:$551>
N006 ( 4, 4) [000643] -A--------- | +--* COMMA int $369
N006 ( 4, 4) [000643] -A--------- | +--* COMMA int $369
N004 ( 3, 3) [000641] DA--------- | | +--* STORE_LCL_VAR int V20 cse2 d:1 $VN.Void
N004 ( 3, 3) [000641] DA--------- | | +--* STORE_LCL_VAR int V20 cse2 d:1 $VN.Void
N003 ( 3, 3) [000013] -----+----- | | | \--* ADD int $369
N003 ( 3, 3) [000013] -----+----- | | | \--* ADD int $369
N001 ( 1, 1) [000011] -----+----- | | | +--* LCL_VAR int V02 loc0 u:2 $444
N001 ( 1, 1) [000011] -----+----- | | | +--* LCL_VAR int V02 loc0 u:2 $444
N002 ( 1, 1) [000012] -----+----- | | | \--* CNS_INT int 1 $c1
N002 ( 1, 1) [000012] -----+----- | | | \--* CNS_INT int 1 $c1
N005 ( 1, 1) [000642] ----------- | | \--* LCL_VAR int V20 cse2 u:1 $369
N005 ( 1, 1) [000642] ----------- | | \--* LCL_VAR int V20 cse2 u:1 $369
N007 ( 1, 1) [000019] -----+----- | \--* LCL_VAR int V16 tmp11 u:1 <l:$2c0, c:$300>
N007 ( 1, 1) [000019] -----+----- | \--* LCL_VAR int V16 tmp11 u:1 <l:$2c0, c:$300>
N015 ( 6, 6) [000226] ---XG+----- \--* IND int <l:$36b, c:$36a>
N015 ( 6, 6) [000226] ---XG+----- \--* IND int <l:$36b, c:$36a>
N014 ( 4, 5) [000026] ----G+-N--- \--* ADD byref <l:$291, c:$292>
N014 ( 4, 5) [000026] ----G+-N--- \--* ADD byref <l:$291, c:$292>
N009 ( 1, 1) [000025] -----+----- +--* LCL_VAR byref V15 tmp10 u:2 <l:$200, c:$101>
N009 ( 1, 1) [000025] -----+----- +--* LCL_VAR byref V15 tmp10 u:2 <l:$200, c:$101>
N013 ( 3, 4) [000023] -----+-N--- \--* LSH long $416
N013 ( 3, 4) [000023] -----+-N--- \--* LSH long $416
N011 ( 2, 3) [000021] -----+---U- +--* CAST long <- uint $415
N011 ( 2, 3) [000021] -----+---U- +--* CAST long <- uint $415
N010 ( 1, 1) [000644] ----------- | \--* LCL_VAR int V20 cse2 u:1 $369
N010 ( 1, 1) [000644] ----------- | \--* LCL_VAR int V20 cse2 u:1 $369
N012 ( 1, 1) [000022] -----+----- \--* CNS_INT long 2 $242
N012 ( 1, 1) [000022] -----+----- \--* CNS_INT long 2 $242
After optRemoveRangeCheck for [000027]:
After optRemoveRangeCheck for [000027]:
N017 ( 15, 18) [000029] DA-XG+----- * STORE_LCL_VAR int V03 loc1 d:1 <l:$558, c:$557>
N017 ( 15, 18) [000029] DA-XG+----- * STORE_LCL_VAR int V03 loc1 d:1 <l:$558, c:$557>
N016 ( 15, 18) [000027] -A-XG+-N--- \--* COMMA int <l:$36d, c:$36c>
N016 ( 15, 18) [000027] -A-XG+-N--- \--* COMMA int <l:$36d, c:$36c>
N004 ( 3, 3) [000641] DA--------- +--* STORE_LCL_VAR int V20 cse2 d:1 $VN.Void
N004 ( 3, 3) [000641] DA--------- +--* STORE_LCL_VAR int V20 cse2 d:1 $VN.Void
N003 ( 3, 3) [000013] -----+----- | \--* ADD int $369
N003 ( 3, 3) [000013] -----+----- | \--* ADD int $369
N001 ( 1, 1) [000011] -----+----- | +--* LCL_VAR int V02 loc0 u:2 $444
N001 ( 1, 1) [000011] -----+----- | +--* LCL_VAR int V02 loc0 u:2 $444
N002 ( 1, 1) [000012] -----+----- | \--* CNS_INT int 1 $c1
N002 ( 1, 1) [000012] -----+----- | \--* CNS_INT int 1 $c1
N015 ( 6, 6) [000226] ---XG+----- \--* IND int <l:$36b, c:$36a>
N015 ( 6, 6) [000226] ---XG+----- \--* IND int <l:$36b, c:$36a>
N014 ( 4, 5) [000026] ----G+-N--- \--* ADD byref <l:$291, c:$292>
N014 ( 4, 5) [000026] ----G+-N--- \--* ADD byref <l:$291, c:$292>
N009 ( 1, 1) [000025] -----+----- +--* LCL_VAR byref V15 tmp10 u:2 <l:$200, c:$101>
N009 ( 1, 1) [000025] -----+----- +--* LCL_VAR byref V15 tmp10 u:2 <l:$200, c:$101>
N013 ( 3, 4) [000023] -----+-N--- \--* LSH long $416
N013 ( 3, 4) [000023] -----+-N--- \--* LSH long $416
N011 ( 2, 3) [000021] -----+---U- +--* CAST long <- uint $415
N011 ( 2, 3) [000021] -----+---U- +--* CAST long <- uint $415
N010 ( 1, 1) [000644] ----------- | \--* LCL_VAR int V20 cse2 u:1 $369
N010 ( 1, 1) [000644] ----------- | \--* LCL_VAR int V20 cse2 u:1 $369
N012 ( 1, 1) [000022] -----+----- \--* CNS_INT long 2 $242
N012 ( 1, 1) [000022] -----+----- \--* CNS_INT long 2 $242
Looking for array size assertions for: $300
Looking for array size assertions for: $300
ArrSize for lengthVN:300 = 0
ArrSize for lengthVN:300 = 0
[RangeCheck::GetRangeWorker] BB03 N006 ( 4, 4) [000639] -A--------- * COMMA int $59e
[RangeCheck::GetRangeWorker] BB03 N006 ( 4, 4) [000639] -A--------- * COMMA int $59e
N004 ( 3, 3) [000637] DA--------- +--* STORE_LCL_VAR int V19 cse1 d:1 $VN.Void
N004 ( 3, 3) [000637] DA--------- +--* STORE_LCL_VAR int V19 cse1 d:1 $VN.Void
N003 ( 3, 3) [000085] ----------- | \--* ADD int $59e
N003 ( 3, 3) [000085] ----------- | \--* ADD int $59e
N001 ( 1, 1) [000083] ----------- | +--* LCL_VAR int V04 loc2 u:2 $448
N001 ( 1, 1) [000083] ----------- | +--* LCL_VAR int V04 loc2 u:2 $448
N002 ( 1, 1) [000084] ----------- | \--* CNS_INT int 1 $c1
N002 ( 1, 1) [000084] ----------- | \--* CNS_INT int 1 $c1
N005 ( 1, 1) [000638] ----------- \--* LCL_VAR int V19 cse1 u:1 $59e
N005 ( 1, 1) [000638] ----------- \--* LCL_VAR int V19 cse1 u:1 $59e
{
{
[RangeCheck::GetRangeWorker] BB03 N005 ( 1, 1) [000638] ----------- * LCL_VAR int V19 cse1 u:1 $59e
[RangeCheck::GetRangeWorker] BB03 N005 ( 1, 1) [000638] ----------- * LCL_VAR int V19 cse1 u:1 $59e
{
{
----------------------------------------------------
----------------------------------------------------
N004 ( 3, 3) [000637] DA--------- * STORE_LCL_VAR int V19 cse1 d:1 $VN.Void
N004 ( 3, 3) [000637] DA--------- * STORE_LCL_VAR int V19 cse1 d:1 $VN.Void
N003 ( 3, 3) [000085] ----------- \--* ADD int $59e
N003 ( 3, 3) [000085] ----------- \--* ADD int $59e
N001 ( 1, 1) [000083] ----------- +--* LCL_VAR int V04 loc2 u:2 $448
N001 ( 1, 1) [000083] ----------- +--* LCL_VAR int V04 loc2 u:2 $448
N002 ( 1, 1) [000084] ----------- \--* CNS_INT int 1 $c1
N002 ( 1, 1) [000084] ----------- \--* CNS_INT int 1 $c1
----------------------------------------------------
----------------------------------------------------
[RangeCheck::GetRangeWorker] BB03 N003 ( 3, 3) [000085] ----------- * ADD int $59e
[RangeCheck::GetRangeWorker] BB03 N003 ( 3, 3) [000085] ----------- * ADD int $59e
N001 ( 1, 1) [000083] ----------- +--* LCL_VAR int V04 loc2 u:2 $448
N001 ( 1, 1) [000083] ----------- +--* LCL_VAR int V04 loc2 u:2 $448
N002 ( 1, 1) [000084] ----------- \--* CNS_INT int 1 $c1
N002 ( 1, 1) [000084] ----------- \--* CNS_INT int 1 $c1
{
{
[RangeCheck::GetRangeWorker] BB03 N001 ( 1, 1) [000083] ----------- * LCL_VAR int V04 loc2 u:2 $448
[RangeCheck::GetRangeWorker] BB03 N001 ( 1, 1) [000083] ----------- * LCL_VAR int V04 loc2 u:2 $448
{
{
----------------------------------------------------
----------------------------------------------------
N004 ( 0, 0) [000582] DA--------- * STORE_LCL_VAR int V04 loc2 d:2 $VN.Void
N004 ( 0, 0) [000582] DA--------- * STORE_LCL_VAR int V04 loc2 d:2 $VN.Void
N003 ( 0, 0) [000581] ----------- \--* PHI int $448
N003 ( 0, 0) [000581] ----------- \--* PHI int $448
N001 ( 0, 0) [000611] ----------- pred BB03 +--* PHI_ARG int V04 loc2 u:3
N001 ( 0, 0) [000611] ----------- pred BB03 +--* PHI_ARG int V04 loc2 u:3
N002 ( 0, 0) [000604] ----------- pred BB46 \--* PHI_ARG int V04 loc2 u:1 $444
N002 ( 0, 0) [000604] ----------- pred BB46 \--* PHI_ARG int V04 loc2 u:1 $444
----------------------------------------------------
----------------------------------------------------
[RangeCheck::GetRangeWorker] BB04 N003 ( 0, 0) [000581] ----------- * PHI int $448
[RangeCheck::GetRangeWorker] BB04 N003 ( 0, 0) [000581] ----------- * PHI int $448
N001 ( 0, 0) [000611] ----------- pred BB03 +--* PHI_ARG int V04 loc2 u:3
N001 ( 0, 0) [000611] ----------- pred BB03 +--* PHI_ARG int V04 loc2 u:3
N002 ( 0, 0) [000604] ----------- pred BB46 \--* PHI_ARG int V04 loc2 u:1 $444
N002 ( 0, 0) [000604] ----------- pred BB46 \--* PHI_ARG int V04 loc2 u:1 $444
{
{
[RangeCheck::GetRangeWorker] BB04 N001 ( 0, 0) [000611] ----------- * PHI_ARG int V04 loc2 u:3
[RangeCheck::GetRangeWorker] BB04 N001 ( 0, 0) [000611] ----------- * PHI_ARG int V04 loc2 u:3
{
{
----------------------------------------------------
----------------------------------------------------
N004 ( 3, 3) [000119] DA---+----- * STORE_LCL_VAR int V04 loc2 d:3 $VN.Void
N004 ( 3, 3) [000119] DA---+----- * STORE_LCL_VAR int V04 loc2 d:3 $VN.Void
N003 ( 3, 3) [000118] -----+----- \--* ADD int $5a3
N003 ( 3, 3) [000118] -----+----- \--* ADD int $5a3
N001 ( 1, 1) [000116] -----+----- +--* LCL_VAR int V04 loc2 u:2 (last use) $448
N001 ( 1, 1) [000116] -----+----- +--* LCL_VAR int V04 loc2 u:2 (last use) $448
N002 ( 1, 1) [000117] -----+----- \--* CNS_INT int -1 $c2
N002 ( 1, 1) [000117] -----+----- \--* CNS_INT int -1 $c2
----------------------------------------------------
----------------------------------------------------
[RangeCheck::GetRangeWorker] BB03 N003 ( 3, 3) [000118] -----+----- * ADD int $5a3
[RangeCheck::GetRangeWorker] BB03 N003 ( 3, 3) [000118] -----+----- * ADD int $5a3
N001 ( 1, 1) [000116] -----+----- +--* LCL_VAR int V04 loc2 u:2 (last use) $448
N001 ( 1, 1) [000116] -----+----- +--* LCL_VAR int V04 loc2 u:2 (last use) $448
N002 ( 1, 1) [000117] -----+----- \--* CNS_INT int -1 $c2
N002 ( 1, 1) [000117] -----+----- \--* CNS_INT int -1 $c2
{
{
[RangeCheck::GetRangeWorker] BB03 N001 ( 1, 1) [000116] -----+----- * LCL_VAR int V04 loc2 u:2 (last use) $448
[RangeCheck::GetRangeWorker] BB03 N001 ( 1, 1) [000116] -----+----- * LCL_VAR int V04 loc2 u:2 (last use) $448
{
{
----------------------------------------------------
----------------------------------------------------
N004 ( 0, 0) [000582] DA--------- * STORE_LCL_VAR int V04 loc2 d:2 $VN.Void
N004 ( 0, 0) [000582] DA--------- * STORE_LCL_VAR int V04 loc2 d:2 $VN.Void
N003 ( 0, 0) [000581] ----------- \--* PHI int $448
N003 ( 0, 0) [000581] ----------- \--* PHI int $448
N001 ( 0, 0) [000611] ----------- pred BB03 +--* PHI_ARG int V04 loc2 u:3
N001 ( 0, 0) [000611] ----------- pred BB03 +--* PHI_ARG int V04 loc2 u:3
N002 ( 0, 0) [000604] ----------- pred BB46 \--* PHI_ARG int V04 loc2 u:1 $444
N002 ( 0, 0) [000604] ----------- pred BB46 \--* PHI_ARG int V04 loc2 u:1 $444
----------------------------------------------------
----------------------------------------------------
[RangeCheck::GetRangeWorker] BB04 N003 ( 0, 0) [000581] ----------- * PHI int $448
[RangeCheck::GetRangeWorker] BB04 N003 ( 0, 0) [000581] ----------- * PHI int $448
N001 ( 0, 0) [000611] ----------- pred BB03 +--* PHI_ARG int V04 loc2 u:3
N001 ( 0, 0) [000611] ----------- pred BB03 +--* PHI_ARG int V04 loc2 u:3
N002 ( 0, 0) [000604] ----------- pred BB46 \--* PHI_ARG int V04 loc2 u:1 $444
N002 ( 0, 0) [000604] ----------- pred BB46 \--* PHI_ARG int V04 loc2 u:1 $444
{
{
PhiArg [000611] is already being computed
PhiArg [000611] is already being computed
Merging assertions from pred edges of BB04 for op [000611] $ffffffff
Merging assertions from pred edges of BB04 for op [000611] $ffffffff
Merge assertions created by BB03 for BB04
Merge assertions created by BB03 for BB04
#02 #03 #04 #05 #07 #08 #09 #10 #13 #27
#02 #03 #04 #05 #07 #08 #09 #10 #13 #27
Merging ranges <Undef, Undef> <Dependent, Dependent>:<Dependent, Dependent>
Merging ranges <Undef, Undef> <Dependent, Dependent>:<Dependent, Dependent>
[RangeCheck::GetRangeWorker] BB04 N002 ( 0, 0) [000604] ----------- * PHI_ARG int V04 loc2 u:1 $444
[RangeCheck::GetRangeWorker] BB04 N002 ( 0, 0) [000604] ----------- * PHI_ARG int V04 loc2 u:1 $444
{
{
----------------------------------------------------
----------------------------------------------------
N002 ( 1, 3) [000031] DA---+----- * STORE_LCL_VAR int V04 loc2 d:1 $VN.Void
N002 ( 1, 3) [000031] DA---+----- * STORE_LCL_VAR int V04 loc2 d:1 $VN.Void
N001 ( 1, 1) [000030] -----+----- \--* LCL_VAR int V02 loc0 u:2 $444
N001 ( 1, 1) [000030] -----+----- \--* LCL_VAR int V02 loc0 u:2 $444
----------------------------------------------------
----------------------------------------------------
[RangeCheck::GetRangeWorker] BB02 N001 ( 1, 1) [000030] -----+----- * LCL_VAR int V02 loc0 u:2 $444
[RangeCheck::GetRangeWorker] BB02 N001 ( 1, 1) [000030] -----+----- * LCL_VAR int V02 loc0 u:2 $444
{
{
----------------------------------------------------
----------------------------------------------------
N004 ( 0, 0) [000580] DA--------- * STORE_LCL_VAR int V02 loc0 d:2 $VN.Void
N004 ( 0, 0) [000580] DA--------- * STORE_LCL_VAR int V02 loc0 d:2 $VN.Void
N003 ( 0, 0) [000579] ----------- \--* PHI int $444
N003 ( 0, 0) [000579] ----------- \--* PHI int $444
N001 ( 0, 0) [000622] ----------- pred BB06 +--* PHI_ARG int V02 loc0 u:3
N001 ( 0, 0) [000622] ----------- pred BB06 +--* PHI_ARG int V02 loc0 u:3
N002 ( 0, 0) [000603] ----------- pred BB26 \--* PHI_ARG int V02 loc0 u:1 $c0
N002 ( 0, 0) [000603] ----------- pred BB26 \--* PHI_ARG int V02 loc0 u:1 $c0
----------------------------------------------------
----------------------------------------------------
[RangeCheck::GetRangeWorker] BB07 N003 ( 0, 0) [000579] ----------- * PHI int $444
[RangeCheck::GetRangeWorker] BB07 N003 ( 0, 0) [000579] ----------- * PHI int $444
N001 ( 0, 0) [000622] ----------- pred BB06 +--* PHI_ARG int V02 loc0 u:3
N001 ( 0, 0) [000622] ----------- pred BB06 +--* PHI_ARG int V02 loc0 u:3
N002 ( 0, 0) [000603] ----------- pred BB26 \--* PHI_ARG int V02 loc0 u:1 $c0
N002 ( 0, 0) [000603] ----------- pred BB26 \--* PHI_ARG int V02 loc0 u:1 $c0
{
{
[RangeCheck::GetRangeWorker] BB07 N001 ( 0, 0) [000622] ----------- * PHI_ARG int V02 loc0 u:3
[RangeCheck::GetRangeWorker] BB07 N001 ( 0, 0) [000622] ----------- * PHI_ARG int V02 loc0 u:3
{
{
----------------------------------------------------
----------------------------------------------------
N002 ( 1, 3) [000059] DA---+----- * STORE_LCL_VAR int V02 loc0 d:3 $VN.Void
N002 ( 1, 3) [000059] DA---+----- * STORE_LCL_VAR int V02 loc0 d:3 $VN.Void
N001 ( 1, 1) [000645] ----------- \--* LCL_VAR int V20 cse2 u:1 $369
N001 ( 1, 1) [000645] ----------- \--* LCL_VAR int V20 cse2 u:1 $369
----------------------------------------------------
----------------------------------------------------
[RangeCheck::GetRangeWorker] BB06 N001 ( 1, 1) [000645] ----------- * LCL_VAR int V20 cse2 u:1 $369
[RangeCheck::GetRangeWorker] BB06 N001 ( 1, 1) [000645] ----------- * LCL_VAR int V20 cse2 u:1 $369
{
{
----------------------------------------------------
----------------------------------------------------
N004 ( 3, 3) [000641] DA--------- * STORE_LCL_VAR int V20 cse2 d:1 $VN.Void
N004 ( 3, 3) [000641] DA--------- * STORE_LCL_VAR int V20 cse2 d:1 $VN.Void
N003 ( 3, 3) [000013] -----+----- \--* ADD int $369
N003 ( 3, 3) [000013] -----+----- \--* ADD int $369
N001 ( 1, 1) [000011] -----+----- +--* LCL_VAR int V02 loc0 u:2 $444
N001 ( 1, 1) [000011] -----+----- +--* LCL_VAR int V02 loc0 u:2 $444
N002 ( 1, 1) [000012] -----+----- \--* CNS_INT int 1 $c1
N002 ( 1, 1) [000012] -----+----- \--* CNS_INT int 1 $c1
----------------------------------------------------
----------------------------------------------------
[RangeCheck::GetRangeWorker] BB02 N003 ( 3, 3) [000013] -----+----- * ADD int $369
[RangeCheck::GetRangeWorker] BB02 N003 ( 3, 3) [000013] -----+----- * ADD int $369
N001 ( 1, 1) [000011] -----+----- +--* LCL_VAR int V02 loc0 u:2 $444
N001 ( 1, 1) [000011] -----+----- +--* LCL_VAR int V02 loc0 u:2 $444
N002 ( 1, 1) [000012] -----+----- \--* CNS_INT int 1 $c1
N002 ( 1, 1) [000012] -----+----- \--* CNS_INT int 1 $c1
{
{
[RangeCheck::GetRangeWorker] BB02 N001 ( 1, 1) [000011] -----+----- * LCL_VAR int V02 loc0 u:2 $444
[RangeCheck::GetRangeWorker] BB02 N001 ( 1, 1) [000011] -----+----- * LCL_VAR int V02 loc0 u:2 $444
{
{
----------------------------------------------------
----------------------------------------------------
N004 ( 0, 0) [000580] DA--------- * STORE_LCL_VAR int V02 loc0 d:2 $VN.Void
N004 ( 0, 0) [000580] DA--------- * STORE_LCL_VAR int V02 loc0 d:2 $VN.Void
N003 ( 0, 0) [000579] ----------- \--* PHI int $444
N003 ( 0, 0) [000579] ----------- \--* PHI int $444
N001 ( 0, 0) [000622] ----------- pred BB06 +--* PHI_ARG int V02 loc0 u:3
N001 ( 0, 0) [000622] ----------- pred BB06 +--* PHI_ARG int V02 loc0 u:3
N002 ( 0, 0) [000603] ----------- pred BB26 \--* PHI_ARG int V02 loc0 u:1 $c0
N002 ( 0, 0) [000603] ----------- pred BB26 \--* PHI_ARG int V02 loc0 u:1 $c0
----------------------------------------------------
----------------------------------------------------
[RangeCheck::GetRangeWorker] BB07 N003 ( 0, 0) [000579] ----------- * PHI int $444
[RangeCheck::GetRangeWorker] BB07 N003 ( 0, 0) [000579] ----------- * PHI int $444
N001 ( 0, 0) [000622] ----------- pred BB06 +--* PHI_ARG int V02 loc0 u:3
N001 ( 0, 0) [000622] ----------- pred BB06 +--* PHI_ARG int V02 loc0 u:3
N002 ( 0, 0) [000603] ----------- pred BB26 \--* PHI_ARG int V02 loc0 u:1 $c0
N002 ( 0, 0) [000603] ----------- pred BB26 \--* PHI_ARG int V02 loc0 u:1 $c0
{
{
PhiArg [000622] is already being computed
PhiArg [000622] is already being computed
Merging assertions from pred edges of BB07 for op [000622] $ffffffff
Merging assertions from pred edges of BB07 for op [000622] $ffffffff
Merge assertions created by BB06 for BB07
Merge assertions created by BB06 for BB07
#02 #03 #26 #27
#02 #03 #26 #27
ArrBnds Assertion: ($0,$0) [idx: $369 {ADD($444, $c1)}; len: $300 {MemOpaque:NotInLoop}] in range , index = #03
ArrBnds Assertion: ($0,$0) [idx: $369 {ADD($444, $c1)}; len: $300 {MemOpaque:NotInLoop}] in range , index = #03
Tightening pRange: [<Dependent, Dependent>] with assertedRange: [<0, $300 + -1>] into [<0, $300 + -1>]
Tightening pRange: [<Dependent, Dependent>] with assertedRange: [<0, $300 + -1>] into [<0, $300 + -1>]
Merging ranges <Undef, Undef> <0, $300 + -1>:<0, $300 + -1>
Merging ranges <Undef, Undef> <0, $300 + -1>:<0, $300 + -1>
[RangeCheck::GetRangeWorker] BB07 N002 ( 0, 0) [000603] ----------- * PHI_ARG int V02 loc0 u:1 $c0
[RangeCheck::GetRangeWorker] BB07 N002 ( 0, 0) [000603] ----------- * PHI_ARG int V02 loc0 u:1 $c0
{
{
Computed Range [000603] => <0, 0>
Computed Range [000603] => <0, 0>
}
}
Merging assertions from pred edges of BB07 for op [000603] $c0
Merging assertions from pred edges of BB07 for op [000603] $c0
Merge assertions created by BB26 for BB07
Merge assertions created by BB26 for BB07
#02
#02
Merging ranges <0, $300 + -1> <0, 0>:<0, Unknown>
Merging ranges <0, $300 + -1> <0, 0>:<0, Unknown>
Computed Range [000579] => <0, Unknown>
Computed Range [000579] => <0, Unknown>
}
}
Merge assertions from BB02: #02 #27 for definition [000580]
Merge assertions from BB02: #02 #27 for definition [000580]
Constant Assertion: ($368,$c0) Oper_Bnd { {PhiDef(V02 d:2, u:3, u:1)} LT {MemOpaque:NotInLoop}ADD {IntCns -1}} is not {IntCns 0}, index = #27
Constant Assertion: ($368,$c0) Oper_Bnd { {PhiDef(V02 d:2, u:3, u:1)} LT {MemOpaque:NotInLoop}ADD {IntCns -1}} is not {IntCns 0}, index = #27
Tightening pRange: [<0, Unknown>] with assertedRange: [<Unknown, $300 + -2>] into [<0, $300 + -2>]
Tightening pRange: [<0, Unknown>] with assertedRange: [<Unknown, $300 + -2>] into [<0, $300 + -2>]
done merging
done merging
Merging assertions from pred edges of BB02 for op [000011] $444
Merging assertions from pred edges of BB02 for op [000011] $444
Constant Assertion: ($368,$c0) Oper_Bnd { {PhiDef(V02 d:2, u:3, u:1)} LT {MemOpaque:NotInLoop}ADD {IntCns -1}} is not {IntCns 0}, index = #27
Constant Assertion: ($368,$c0) Oper_Bnd { {PhiDef(V02 d:2, u:3, u:1)} LT {MemOpaque:NotInLoop}ADD {IntCns -1}} is not {IntCns 0}, index = #27
Tightening pRange: [<0, $300 + -2>] with assertedRange: [<Unknown, $300 + -2>] into [<0, $300 + -2>
Tightening pRange: [<0, $300 + -2>] with assertedRange: [<Unknown, $300 + -2>] into [<0, $300 + -2>