Bug 119050

Summary: fourthTier: DFG IR dumps should be easier to read
Product: WebKit Reporter: Filip Pizlo <fpizlo>
Component: JavaScriptCoreAssignee: Filip Pizlo <fpizlo>
Status: RESOLVED FIXED    
Severity: Normal CC: barraclough, ggaren, mark.lam, mhahnenberg, msaboff, oliver, sam
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: All   
OS: All   
Attachments:
Description Flags
the patch mhahnenberg: review+

Description Filip Pizlo 2013-07-24 11:42:59 PDT
Patch forthcoming
Comment 1 Filip Pizlo 2013-07-24 11:50:00 PDT
DFG for DrawLine#DciOyf:[0x7fecbb847e00->0x10e9dfef0, DFGFunctionCall]:
  Fixpoint state: FixpointConverged; Form: ThreadedCPS; Unification state: GloballyUnified; Ref count state: ExactRefCount

Block #0 (bc#0):  (OSR target)
  Predecessors:
  Dominated by: #0
  Dominates: #0 #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13
  vars before: arg2:(Cell, TOP, TOP, TOP) arg1:(Cell, TOP, TOP, TOP) arg0:(Top, TOP, TOP, TOP)
  var links: arg2:@2 arg1:@1 arg0:@0
   0:  skipped  < 0:->	SetArgument(arg0(a), W:SideState, bc#0)
   1:           < 3:->	SetArgument(arg1(B<Final>), W:SideState, bc#0)  predicting Final
 348:           < 7:17>	GetLocal(@1, JS|PureInt, arg1(B<Final>), R:Variables(-8), bc#0)  predicting Final
 349:           <!0:->	CheckStructure(Cell:@348<Final>, MustGen|CanExit, [%DK:Object], R:JSCell_structure, bc#0)
   2:           < 3:->	SetArgument(arg2(C<Final>), W:SideState, bc#0)  predicting Final
 350:           < 7:18>	GetLocal(@2, JS|PureInt, arg2(C<Final>), R:Variables(-9), bc#0)  predicting Final
 351:           <!0:->	CheckStructure(Cell:@350<Final>, MustGen|CanExit, [%DK:Object], R:JSCell_structure, bc#0)
   3:           <!0:->	Phantom(MustGen|CanExit, bc#0)
   4:  skipped  < 0:->	ZombieHint(r0(D~<Other>), W:SideState, bc#0)
   5:  skipped  < 0:->	ZombieHint(r1(E~<Other>), W:SideState, bc#0)
   6:  skipped  < 0:->	ZombieHint(r2(F~<Other>), W:SideState, bc#0)
   7:  skipped  < 0:->	ZombieHint(r3(G~<Other>), W:SideState, bc#0)
   8:  skipped  < 0:->	ZombieHint(r4(H~<Other>), W:SideState, bc#0)
   9:  skipped  < 0:->	ZombieHint(r5(I~<Other>), W:SideState, bc#0)
  10:  skipped  < 0:->	ZombieHint(r6(J~<Other>), W:SideState, bc#0)
  11:  skipped  < 0:->	ZombieHint(r7(K~<Other>), W:SideState, bc#0)
  12:  skipped  < 0:->	ZombieHint(r8(L~<Other>), W:SideState, bc#0)
  13:  skipped  < 0:->	ZombieHint(r9(M~<Other>), W:SideState, bc#0)
  14:  skipped  < 0:->	ZombieHint(r10(N~<Other>), W:SideState, bc#0)
  15:  skipped  < 0:->	ZombieHint(r11(O~<Other>), W:SideState, bc#0)
  16:  skipped  < 0:->	ZombieHint(r12(P~<Other>), W:SideState, bc#0)
  17:  skipped  < 0:->	ZombieHint(r13(Q~<Other>), W:SideState, bc#0)
  18:  skipped  < 0:->	ZombieHint(r14(R~<Other>), W:SideState, bc#0)
  19:  skipped  < 0:->	ZombieHint(r15(S~<Other>), W:SideState, bc#0)
  20:  skipped  < 0:->	ZombieHint(r16(T~<Other>), W:SideState, bc#0)
  21:  skipped  < 0:->	GetLocal(@1, JS|UseAsOther, arg1(B<Final>), R:Variables(-8), bc#1)
  22:           <!0:->	Phantom(Cell:@348<Final>, MustGen, bc#1)
  23:           < 6:19>	GetByOffset(KnownCell:@348<Final>, KnownCell:@348<Final>, JS|UseAsOther, id0{V}, 0, R:NamedProperties(0), bc#1)  predicting Array
  24:  skipped  < 0:->	MovHint(@23<Array>, r17(U~<Array>), W:SideState, bc#1)
  25:           < 2:20>	JSConstant(JS|PureNum|UseAsOther|UseAsInt, $0 = Int32: 0, bc#10)
 333:           <!0:->	CheckStructure(Check:Cell:@23<Array>, MustGen|CanExit, [%AJ:Array], R:JSCell_structure, bc#10)
 334:           < 2:21>	GetButterfly(Cell:@23<Array>, Storage|PureInt, R:JSObject_butterfly, bc#10)
  26:           <!3:22>	GetByVal(KnownCell:@23<Array>, Int32:@25<Int32>, @334, JS|MustGen|MightClobber|UseAsOther|CanExit, DoubleOriginalArrayInBoundsAsIs, R:Butterfly_publicLength,Butterfly_vectorLength,IndexedDoubleProperties, bc#10)  predicting Doublereal
  27:  skipped  < 0:->	MovHint(@26<Double>, r0(V~<Double>), W:SideState, bc#10)
  28:  skipped  < 0:->	GetLocal(@2, JS|UseAsOther, arg2(C<Final>), R:Variables(-9), bc#16)
  29:           <!0:->	Phantom(Cell:@350<Final>, MustGen, bc#16)
  30:           < 6:23>	GetByOffset(KnownCell:@350<Final>, KnownCell:@350<Final>, JS|UseAsOther, id0{V}, 0, R:NamedProperties(0), bc#16)  predicting Array
  31:  skipped  < 0:->	MovHint(@30<Array>, r17(W~<Array>), W:SideState, bc#16)
 335:           <!0:->	CheckStructure(Check:Cell:@30<Array>, MustGen|CanExit, [%AJ:Array], R:JSCell_structure, bc#25)
 336:           < 2:24>	GetButterfly(Cell:@30<Array>, Storage|PureInt, R:JSObject_butterfly, bc#25)
  32:           <!2:20>	GetByVal(KnownCell:@30<Array>, Int32:@25<Int32>, @336, JS|MustGen|MightClobber|UseAsOther|CanExit, DoubleOriginalArrayInBoundsAsIs, R:Butterfly_publicLength,Butterfly_vectorLength,IndexedDoubleProperties, bc#25)  predicting Doublereal
  33:  skipped  < 0:->	MovHint(@32<Double>, r1(X~<Double>), W:SideState, bc#25)
  34:           <!0:->	Phantom(Cell:@348<Final>, MustGen, bc#31)
  35:           <!0:->	Phantom(KnownCell:@348<Final>, KnownCell:@348<Final>, MustGen, bc#31)
  36:  skipped  < 0:->	MovHint(@23<Array>, r17(Y~<Array>), W:SideState, bc#31)
  37:           < 2:17>	JSConstant(JS|PureNum|UseAsOther|UseAsInt, $1 = Int32: 1, bc#40)
 337:           <!0:->	Phantom(Cell:@23<Array>, MustGen, bc#40)
 338:           <!0:->	Phantom(Cell:@23<Array>, MustGen, bc#40)
  38:           <!3:21>	GetByVal(KnownCell:@23<Array>, Int32:@37<Int32>, @334, JS|MustGen|MightClobber|UseAsOther|CanExit, DoubleOriginalArrayInBoundsAsIs, R:Butterfly_publicLength,Butterfly_vectorLength,IndexedDoubleProperties, bc#40)  predicting Doublereal
  39:           < 2:->	SetLocal(Number:@38<Double>, NodeExitsForward, r2(Z<Double>), W:Variables(2), bc#40)  predicting Double, forcing double
  40:           <!0:->	Phantom(Cell:@350<Final>, MustGen, bc#46)
  41:           <!0:->	Phantom(KnownCell:@350<Final>, KnownCell:@350<Final>, MustGen, bc#46)
  42:  skipped  < 0:->	MovHint(@30<Array>, r17(AB~<Array>), W:SideState, bc#46)
 339:           <!0:->	Phantom(Cell:@30<Array>, MustGen, bc#55)
 340:           <!0:->	Phantom(Cell:@30<Array>, MustGen, bc#55)
  43:           <!2:24>	GetByVal(KnownCell:@30<Array>, Int32:@37<Int32>, @336, JS|MustGen|MightClobber|UseAsOther|CanExit, DoubleOriginalArrayInBoundsAsIs, R:Butterfly_publicLength,Butterfly_vectorLength,IndexedDoubleProperties, bc#55)  predicting Doublereal
  44:           < 2:->	SetLocal(Number:@43<Double>, NodeExitsForward, r3(BB<Double>), W:Variables(3), bc#55)  predicting Double, forcing double
  45:           < 6:17>	WeakJSConstant(JS|UseAsOther, 0x10e93f970 (%BC:global), bc#61)
  46:  skipped  < 0:->	MovHint(@45<Object>, r19(CB~<Object>), W:SideState, bc#61)
  47:           <!0:->	StructureTransitionWatchpoint(Cell:@45<Object>, MustGen|CanExit, %BC:global, R:JSCell_structure, bc#66)
  48:           < 1:23>	GetButterfly(Cell:@45<Object>, Storage|UseAsOther, R:JSObject_butterfly, bc#66)
  49:           < 8:23>	GetByOffset(@48<Other>, KnownCell:@45<Object>, JS|UseAsOther, id1{Math}, 117, R:NamedProperties(1), bc#66)  predicting Otherobj
  50:  skipped  < 0:->	MovHint(@49<Object>, r19(DB~<Object>), W:SideState, bc#66)
  51:           <!0:->	CheckStructure(Check:Cell:@49<Object>, MustGen|CanExit, [%BY:Math], R:JSCell_structure, bc#74)
  52:           <!0:->	Phantom(@49<Object>, MustGen, bc#74)
  53:           < 4:18>	WeakJSConstant(JS|UseAsOther, 0x10e98f2b0 (%D3:Function), bc#74)
  54:  skipped  < 0:->	MovHint(@53<Function>, r17(EB~<Function>), W:SideState, bc#74)
  55:           <!2:19>	ArithSub(Number:@32<Double>, Number:@26<Double>, Number|MustGen|UseAsOther, bc#83)
  56:  skipped  < 0:->	MovHint(@55<Double>, r18(FB~<Double>), W:SideState, bc#83)
  57:           <!0:->	Phantom(@53<Function>, @49<Object>, MustGen, bc#88)
  58:           <!1:25>	ArithAbs(Number:@55<Double>, Number|MustGen|UseAsOther, bc#88)
  59:           < 2:->	SetLocal(Number:@58<Double>, NodeExitsForward, r4(GB<Double>), W:Variables(4), bc#88)  predicting Double, forcing double
  60:           <!0:->	Phantom(@53<Function>, MustGen, bc#88)
  61:           <!0:->	Phantom(@49<Object>, MustGen, bc#88)
  62:           <!0:->	Phantom(@55<Double>, MustGen, bc#88)
  63:  skipped  < 0:->	MovHint(@45<Object>, r19(HB~<Object>), W:SideState, bc#96)
  64:           <!0:->	Phantom(Cell:@45<Object>, MustGen, bc#101)
  65:           <!0:->	Phantom(Cell:@45<Object>, MustGen, bc#101)
  66:           <!0:->	Phantom(KnownCell:@45<Object>, MustGen, bc#101)
  67:  skipped  < 0:->	MovHint(@49<Object>, r19(IB~<Object>), W:SideState, bc#101)
  68:           <!0:->	Phantom(Cell:@49<Object>, MustGen, bc#109)
  69:           <!0:->	Phantom(@49<Object>, MustGen, bc#109)
  70:  skipped  < 0:->	MovHint(@53<Function>, r17(JB~<Function>), W:SideState, bc#109)
  71:           <!2:24>	ArithSub(Number:@43<Double>, Number:@38<Double>, Number|MustGen|UseAsOther, bc#118)
  72:  skipped  < 0:->	MovHint(@71<Double>, r18(KB~<Double>), W:SideState, bc#118)
  73:           <!0:->	Phantom(@53<Function>, @49<Object>, MustGen, bc#123)
  74:           <!1:17>	ArithAbs(Number:@71<Double>, Number|MustGen|UseAsOther, bc#123)
  75:           < 2:->	SetLocal(Number:@74<Double>, NodeExitsForward, r5(LB<Double>), W:Variables(5), bc#123)  predicting Double, forcing double
  76:           <!0:->	Phantom(@53<Function>, MustGen, bc#123)
  77:           <!0:->	Phantom(@49<Object>, MustGen, bc#123)
  78:           <!0:->	Phantom(@71<Double>, MustGen, bc#123)
  79:           < 2:->	SetLocal(Number:@26<Double>, NodeExitsForward, r6(MB<Double>), W:Variables(6), bc#131)  predicting Double, forcing double
  80:           < 2:->	SetLocal(Number:@38<Double>, NodeExitsForward, r7(NB<Double>), W:Variables(7), bc#134)  predicting Double, forcing double
  81:           <!1:22>	CompareGreaterEq(Number:@32<Double>, Number:@26<Double>, Boolean|MustGen|MightClobber|UseAsOther|CanExit, bc#137)
  82:           <!0:->	Branch(Boolean:@81<Boolean>, MustGen|CanExit, T:#1, F:#2, W:SideState, bc#137)
  vars after: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) arg0:(Top, TOP, TOP, TOP) r0:(Doublereal) r1:(Doublereal) r2:(Double) r3:(Double) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Other, Undefined) r9:(Other, Undefined) r10:(Other, Undefined) r11:(Other, Undefined) r12:(Other, Undefined) r13:(Other, Undefined) r14:(Other, Undefined) r15:(Other, Undefined) r16:(Other, Undefined) r17:(Function, TOP, TOP, [%D3:Function], Cell: 0x10e98f2b0 (%D3:Function)) r18:(Double) r19:(Otherobj, NonArray, [%BY:Math], [%BY:Math])
  var links: arg2:@350<Final> arg1:@348<Final> arg0:@0 r0:@27 r1:@33 r2:@39 r3:@44 r4:@59 r5:@75 r6:@79 r7:@80 r8:@12 r9:@13 r10:@14 r11:@15 r12:@16 r13:@17 r14:@18 r15:@19 r16:@20 r17:@70 r18:@72 r19:@67

Block #1 (bc#141): 
  Predecessors: #0
  Dominated by: #0 #1
  Dominates: #1
  Phi Nodes: @239<1>->(@39), @241<1>->(@44), @246<1>->(@75), @251<1>->(@59), @273<1>->(@80), @291<1>->(@79), @318<1>->(@1), @330<1>->(@2)
  vars before: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r2:(Double) r3:(Double) r4:(Double) r5:(Double) r6:(Double) r7:(Double)
  var links: arg2:@330 arg1:@318 r2:@239 r3:@241 r4:@251 r5:@246 r6:@291 r7:@273
  83:           < 2:22>	JSConstant(JS|UseAsOther, $1 = Int32: 1, bc#141)
  84:           < 1:->	SetLocal(@83<Int32>, NodeExitsForward, r8(OB~<Int32>), W:Variables(8), bc#141)  predicting Int
  85:           < 1:->	SetLocal(@83<Int32>, NodeExitsForward, r10(PB~<Int32>), W:Variables(10), bc#144)  predicting Int
  86:           <!0:->	Jump(MustGen, T:#3, W:SideState, bc#147)
  vars after: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r2:(Double) r3:(Double) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int, Int32: 1) r10:(Int, Int32: 1)
  var links: arg2:@330 arg1:@318 r2:@239 r3:@241 r4:@251 r5:@246 r6:@291 r7:@273 r8:@84 r10:@85

Block #2 (bc#149): 
  Predecessors: #0
  Dominated by: #0 #2
  Dominates: #2
  Phi Nodes: @238<1>->(@39), @240<1>->(@44), @245<1>->(@75), @250<1>->(@59), @272<1>->(@80), @290<1>->(@79), @317<1>->(@1), @329<1>->(@2)
  vars before: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r2:(Double) r3:(Double) r4:(Double) r5:(Double) r6:(Double) r7:(Double)
  var links: arg2:@329 arg1:@317 r2:@238 r3:@240 r4:@250 r5:@245 r6:@290 r7:@272
  87:           < 2:22>	JSConstant(JS|UseAsOther, $2 = Int32: -1, bc#149)
  88:           < 1:->	SetLocal(@87<Int32>, NodeExitsForward, r8(OB~<Int32>), W:Variables(8), bc#149)  predicting Int
  89:           < 1:->	SetLocal(@87<Int32>, NodeExitsForward, r10(PB~<Int32>), W:Variables(10), bc#152)  predicting Int
  90:           <!0:->	Jump(MustGen, T:#3, W:SideState, bc#155)
  vars after: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r2:(Double) r3:(Double) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int, Int32: -1) r10:(Int, Int32: -1)
  var links: arg2:@329 arg1:@317 r2:@238 r3:@240 r4:@250 r5:@245 r6:@290 r7:@272 r8:@88 r10:@89

Block #3 (bc#155): 
  Predecessors: #1 #2
  Dominated by: #0 #3
  Dominates: #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13
  Phi Nodes: @236<1>->(@240, @241), @237<1>->(@238, @239), @244<2>->(@245, @246), @249<2>->(@250, @251), @271<2>->(@272, @273), @281<2>->(@88, @84), @289<2>->(@290, @291), @308<2>->(@89, @85), @316<2>->(@317, @318), @328<2>->(@329, @330)
  vars before: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r2:(Double) r3:(Double) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int) r10:(Int)
  var links: arg2:@328 arg1:@316 r2:@237 r3:@236 r4:@249 r5:@244 r6:@289 r7:@271 r8:@281 r10:@308
  91:           < 1:22>	GetLocal(@236, JS|UseAsOther, r3(BB<Double>), R:Variables(3), bc#155)  predicting Double, forcing double
  92:           < 1:20>	GetLocal(@237, JS|UseAsOther, r2(Z<Double>), R:Variables(2), bc#155)  predicting Double, forcing double
  93:           <!1:20>	CompareGreaterEq(Number:@91<Double>, Number:@92<Double>, Boolean|MustGen|MightClobber|UseAsOther|CanExit, bc#155)
  94:           <!0:->	Branch(Boolean:@93<Boolean>, MustGen|CanExit, T:#4, F:#5, W:SideState, bc#155)
  vars after: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r2:(Double) r3:(Double) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int) r10:(Int)
  var links: arg2:@328 arg1:@316 r2:@92<Double> r3:@91<Double> r4:@249 r5:@244 r6:@289 r7:@271 r8:@281 r10:@308

Block #4 (bc#159): 
  Predecessors: #3
  Dominated by: #0 #3 #4
  Dominates: #4
  Phi Nodes: @243<1>->(@244), @248<1>->(@249), @270<1>->(@271), @280<1>->(@281), @288<1>->(@289), @307<1>->(@308), @315<1>->(@316), @327<1>->(@328)
  vars before: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int) r10:(Int)
  var links: arg2:@327 arg1:@315 r4:@248 r5:@243 r6:@288 r7:@270 r8:@280 r10:@307
  95:           < 2:20>	JSConstant(JS|UseAsOther, $1 = Int32: 1, bc#159)
  96:           < 1:->	SetLocal(@95<Int32>, NodeExitsForward, r9(UB~<Int32>), W:Variables(9), bc#159)  predicting Int
  97:           < 1:->	SetLocal(@95<Int32>, NodeExitsForward, r11(VB~<Int32>), W:Variables(11), bc#162)  predicting Int
  98:           <!0:->	Jump(MustGen, T:#6, W:SideState, bc#165)
  vars after: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int) r9:(Int, Int32: 1) r10:(Int) r11:(Int, Int32: 1)
  var links: arg2:@327 arg1:@315 r4:@248 r5:@243 r6:@288 r7:@270 r8:@280 r9:@96 r10:@307 r11:@97

Block #5 (bc#167): 
  Predecessors: #3
  Dominated by: #0 #3 #5
  Dominates: #5
  Phi Nodes: @242<1>->(@244), @247<1>->(@249), @269<1>->(@271), @279<1>->(@281), @287<1>->(@289), @306<1>->(@308), @314<1>->(@316), @326<1>->(@328)
  vars before: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int) r10:(Int)
  var links: arg2:@326 arg1:@314 r4:@247 r5:@242 r6:@287 r7:@269 r8:@279 r10:@306
  99:           < 2:20>	JSConstant(JS|UseAsOther, $2 = Int32: -1, bc#167)
 100:           < 1:->	SetLocal(@99<Int32>, NodeExitsForward, r9(UB~<Int32>), W:Variables(9), bc#167)  predicting Int
 101:           < 1:->	SetLocal(@99<Int32>, NodeExitsForward, r11(VB~<Int32>), W:Variables(11), bc#170)  predicting Int
 102:           <!0:->	Jump(MustGen, T:#6, W:SideState, bc#173)
  vars after: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int) r9:(Int, Int32: -1) r10:(Int) r11:(Int, Int32: -1)
  var links: arg2:@326 arg1:@314 r4:@247 r5:@242 r6:@287 r7:@269 r8:@279 r9:@100 r10:@306 r11:@101

Block #6 (bc#173): 
  Predecessors: #4 #5
  Dominated by: #0 #3 #6
  Dominates: #6 #7 #8 #9 #10 #11 #12 #13
  Phi Nodes: @234<3>->(@247, @248), @235<3>->(@242, @243), @263<1>->(@100, @96), @268<2>->(@269, @270), @278<1>->(@279, @280), @286<2>->(@287, @288), @300<1>->(@101, @97), @305<1>->(@306, @307), @313<2>->(@314, @315), @325<2>->(@326, @327)
  vars before: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int) r9:(Int) r10:(Int) r11:(Int)
  var links: arg2:@325 arg1:@313 r4:@234 r5:@235 r6:@286 r7:@268 r8:@278 r9:@263 r10:@305 r11:@300
 103:           < 1:20>	GetLocal(@234, JS|UseAsOther, r4(GB<Double>), R:Variables(4), bc#173)  predicting Double, forcing double
 104:           < 1:22>	GetLocal(@235, JS|UseAsOther, r5(LB<Double>), R:Variables(5), bc#173)  predicting Double, forcing double
 105:           <!1:22>	CompareGreaterEq(Number:@103<Double>, Number:@104<Double>, Boolean|MustGen|MightClobber|UseAsOther|CanExit, bc#173)
 106:           <!0:->	Branch(Boolean:@105<Boolean>, MustGen|CanExit, T:#7, F:#8, W:SideState, bc#173)
  vars after: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int) r9:(Int) r10:(Int) r11:(Int)
  var links: arg2:@325 arg1:@313 r4:@103<Double> r5:@104<Double> r6:@286 r7:@268 r8:@278 r9:@263 r10:@305 r11:@300

Block #7 (bc#177): 
  Predecessors: #6
  Dominated by: #0 #3 #6 #7
  Dominates: #7
  Phi Nodes: @232<1>->(@234), @233<1>->(@235), @262<1>->(@263), @267<1>->(@268), @285<1>->(@286), @304<1>->(@305), @312<1>->(@313), @324<1>->(@325)
  vars before: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r9:(Int) r10:(Int)
  var links: arg2:@324 arg1:@312 r4:@232 r5:@233 r6:@285 r7:@267 r9:@262 r10:@304
 107:           < 2:22>	JSConstant(JS|UseAsOther, $0 = Int32: 0, bc#177)
 108:           < 1:->	SetLocal(@107<Int32>, NodeExitsForward, r8(OB~<Int32>), W:Variables(8), bc#177)  predicting Int
 109:           < 1:->	SetLocal(@107<Int32>, NodeExitsForward, r11(VB~<Int32>), W:Variables(11), bc#180)  predicting Int
 110:           < 3:22>	GetLocal(@232, JS|UseAsOther, r4(GB<Double>), R:Variables(4), bc#183)  predicting Double, forcing double
 111:           < 1:->	SetLocal(Number:@110<Double>, NodeExitsForward, r12(DC<Double>), W:Variables(12), bc#183)  predicting Double, forcing double
 112:           < 1:20>	JSConstant(JS, $3 = Int32: 2, bc#186)
 352:           <!0:->	Phantom(Number:@112<Int32>, MustGen, bc#186)
 341:           < 1:20>	JSConstant(Number|PureInt, $5 = Double: 4611686018427387904, 2.000000, bc#186)
 113:           <!1:20>	ArithDiv(Number:@110<Double>, Number:@341<Double>, Number|MustGen|UseAsOther|MayOverflow|MayNegZero, bc#186)
 114:           < 1:->	SetLocal(Number:@113<Double>, NodeExitsForward, r13(EC<Double>), W:Variables(13), bc#186)  predicting Double, forcing double
 115:           < 1:20>	GetLocal(@233, JS|UseAsOther, r5(LB<Double>), R:Variables(5), bc#191)  predicting Double, forcing double
 116:           < 1:->	SetLocal(Number:@115<Double>, NodeExitsForward, r14(GC<Double>), W:Variables(14), bc#191)  predicting Double, forcing double
 117:           < 1:->	SetLocal(Number:@110<Double>, NodeExitsForward, r15(HC<Double>), W:Variables(15), bc#194)  predicting Double, forcing double
 118:           <!0:->	Jump(MustGen, T:#9, W:SideState, bc#197)
  vars after: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int, Int32: 0) r9:(Int) r10:(Int) r11:(Int, Int32: 0) r12:(Double) r13:(Double) r14:(Double) r15:(Double)
  var links: arg2:@324 arg1:@312 r4:@110<Double> r5:@115<Double> r6:@285 r7:@267 r8:@108 r9:@262 r10:@304 r11:@109 r12:@111 r13:@114 r14:@116 r15:@117

Block #8 (bc#199): 
  Predecessors: #6
  Dominated by: #0 #3 #6 #8
  Dominates: #8
  Phi Nodes: @230<1>->(@235), @231<1>->(@234), @266<1>->(@268), @277<1>->(@278), @284<1>->(@286), @299<1>->(@300), @311<1>->(@313), @323<1>->(@325)
  vars before: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int) r11:(Int)
  var links: arg2:@323 arg1:@311 r4:@231 r5:@230 r6:@284 r7:@266 r8:@277 r11:@299
 119:           < 2:22>	JSConstant(JS|UseAsOther, $0 = Int32: 0, bc#199)
 120:           < 1:->	SetLocal(@119<Int32>, NodeExitsForward, r10(PB~<Int32>), W:Variables(10), bc#199)  predicting Int
 121:           < 1:->	SetLocal(@119<Int32>, NodeExitsForward, r9(UB~<Int32>), W:Variables(9), bc#202)  predicting Int
 122:           < 3:22>	GetLocal(@230, JS|UseAsOther, r5(LB<Double>), R:Variables(5), bc#205)  predicting Double, forcing double
 123:           < 1:->	SetLocal(Number:@122<Double>, NodeExitsForward, r12(DC<Double>), W:Variables(12), bc#205)  predicting Double, forcing double
 124:           < 1:20>	JSConstant(JS, $3 = Int32: 2, bc#208)
 353:           <!0:->	Phantom(Number:@124<Int32>, MustGen, bc#208)
 342:           < 1:20>	JSConstant(Number|PureInt, $5 = Double: 4611686018427387904, 2.000000, bc#208)
 125:           <!1:20>	ArithDiv(Number:@122<Double>, Number:@342<Double>, Number|MustGen|UseAsOther|MayOverflow|MayNegZero, bc#208)
 126:           < 1:->	SetLocal(Number:@125<Double>, NodeExitsForward, r13(EC<Double>), W:Variables(13), bc#208)  predicting Double, forcing double
 127:           < 1:20>	GetLocal(@231, JS|UseAsOther, r4(GB<Double>), R:Variables(4), bc#213)  predicting Double, forcing double
 128:           < 1:->	SetLocal(Number:@127<Double>, NodeExitsForward, r14(GC<Double>), W:Variables(14), bc#213)  predicting Double, forcing double
 129:           < 1:->	SetLocal(Number:@122<Double>, NodeExitsForward, r15(HC<Double>), W:Variables(15), bc#216)  predicting Double, forcing double
 130:           <!0:->	Jump(MustGen, T:#9, W:SideState, bc#219)
  vars after: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r4:(Double) r5:(Double) r6:(Double) r7:(Double) r8:(Int) r9:(Int, Int32: 0) r10:(Int, Int32: 0) r11:(Int) r12:(Double) r13:(Double) r14:(Double) r15:(Double)
  var links: arg2:@323 arg1:@311 r4:@127<Double> r5:@122<Double> r6:@284 r7:@266 r8:@277 r9:@121 r10:@120 r11:@299 r12:@123 r13:@126 r14:@128 r15:@129

Block #9 (bc#219): 
  Predecessors: #7 #8
  Dominated by: #0 #3 #6 #9
  Dominates: #9 #10 #11 #12 #13
  Phi Nodes: @229<1>->(@129, @117), @253<1>->(@123, @111), @255<1>->(@128, @116), @258<1>->(@126, @114), @261<1>->(@121, @262), @265<1>->(@266, @267), @276<1>->(@277, @108), @283<1>->(@284, @285), @298<1>->(@299, @109), @303<1>->(@120, @304), @310<2>->(@311, @312), @322<2>->(@323, @324)
  vars before: arg2:(Final, NonArray, [%DK:Object], [%DK:Object]) arg1:(Final, NonArray, [%DK:Object], [%DK:Object]) r6:(Double) r7:(Double) r8:(Int) r9:(Int) r10:(Int) r11:(Int) r12:(Double) r13:(Double) r14:(Double) r15:(Double)
  var links: arg2:@322 arg1:@310 r6:@283 r7:@265 r8:@276 r9:@261 r10:@303 r11:@298 r12:@253 r13:@258 r14:@255 r15:@229
 131:           < 3:22>	WeakJSConstant(JS|UseAsOther, 0x10e93f970 (%BC:global), bc#219)
 132:  skipped  < 0:->	MovHint(@131<Object>, r19(QC~<Object>), W:SideState, bc#219)
 133:           <!0:->	StructureTransitionWatchpoint(Cell:@131<Object>, MustGen|CanExit, %BC:global, R:JSCell_structure, bc#224)
 134:           < 1:20>	GetButterfly(Cell:@131<Object>, Storage|UseAsOther, R:JSObject_butterfly, bc#224)
 135:           < 4:22>	GetByOffset(@134<Other>, KnownCell:@131<Object>, JS|UseAsOther, id1{Math}, 117, R:NamedProperties(1), bc#224)  predicting Otherobj
 136:  skipped  < 0:->	MovHint(@135<Object>, r19(RC~<Object>), W:SideState, bc#224)
 137:           <!0:->	CheckStructure(Check:Cell:@135<Object>, MustGen|CanExit, [%BY:Math], R:JSCell_structure, bc#232)
 138:           <!0:->	Phantom(@135<Object>, MustGen, bc#232)
 139:           < 2:20>	WeakJSConstant(JS|UseAsOther, 0x10e98ef30 (%D3:Function), bc#232)
 140:  skipped  < 0:->	MovHint(@139<Function>, r17(SC~<Function>), W:SideState, bc#232)
 141:  skipped  < 0:->	MovHint(@131<Object>, r20(TC~<Object>), W:SideState, bc#241)
 142:           < 3:21>	GetGlobalVar(JS|UseAsOther, global18(0x7fecbb5040a8), R:Absolute(140654731608232), bc#246)  predicting Array
 143:  skipped  < 0:->	MovHint(@142<Array>, r21(UC~<Array>), W:SideState, bc#246)
 144:           <!0:->	CheckStructure(Check:Cell:@142<Array>, MustGen|CanExit, [%B4:Array], R:JSCell_structure, bc#254)
 145:           < 1:24>	GetButterfly(Cell:@142<Array>, Storage|UseAsOther, R:JSObject_butterfly, bc#254)
 146:           < 1:21>	GetByOffset(@145<Other>, KnownCell:@142<Array>, JS|UseAsOther, id5{LastPx}, 104, R:NamedProperties(5), bc#254)  predicting Int
 147:  skipped  < 0:->	MovHint(@146<Int32>, r20(VC~<Int32>), W:SideState, bc#254)
 148:           < 1:24>	GetLocal(@229, JS|UseAsOther, r15(HC<Double>), R:Variables(15), bc#263)  predicting Double, forcing double
 343:           < 1:21>	Int32ToDouble(Check:Number:@146<Int32>, Number|PureInt|CanExit, bc#263)
 149:           <!1:24>	ValueAdd(Number:@343<Double>, Number:@148<Double>, JS|MustGen|MightClobber|UseAsOther, bc#263)
 150:  skipped  < 0:->	MovHint(@149<Double>, r18(XC~<Double>), W:SideState, bc#263)
 151:           <!0:->	Phantom(@139<Function>, @135<Object>, MustGen, bc#268)
 152:           <!2:24>	Call(@139<Function>, @135<Object>, @149<Double>, JS|MustGen|VarArgs|Clobbers|UseAsOther|CanExit, R:World, W:World, bc#268)  predicting Int
 153:           < 2:->	SetLocal(Check:Int32:@152<Int32>, CanExit|NodeExitsForward, r15(YC<Int32>), W:Variables(15), bc#268)  predicting Int
 154:  skipped  < 0:->	MovHint(@131<Object>, r17(ZC~<Object>), W:SideState, bc#276)
 155:           < 3:22>	GetGlobalVar(JS|UseAsOther, global18(0x7fecbb5040a8), R:Absolute(140654731608232), bc#281)  predicting Array
 156:  skipped  < 0:->	MovHint(@155<Array>, r18(AD~<Array>), W:SideState, bc#281)
 157:           <!0:->	CheckStructure(Check:Cell:@155<Array>, MustGen|CanExit, [%B4:Array], R:JSCell_structure, bc#289)
 158:           < 1:20>	GetButterfly(Cell:@155<Array>, Storage|UseAsOther, R:JSObject_butterfly, bc#289)
 159:           < 2:22>	GetByOffset(@158<Other>, KnownCell:@155<Array>, JS|UseAsOther, id5{LastPx}, 104, R:NamedProperties(5), bc#289)  predicting Int
 160:           < 1:->	SetLocal(Check:Int32:@159<Int32>, CanExit|NodeExitsForward, r16(BD<Int32>), W:Variables(16), bc#289)  predicting Int
 161:           <!1:24>	CompareLess(Int32:@159<Int32>, Int32:@152<Int32>, Boolean|MustGen|MightClobber|UseAsOther|CanExit, bc#298)
 162:           <!0:->	Branch(Boolean:@161<Boolean>, MustGen|CanExit, T:#10, F:#13, W:SideState, bc#298)
  vars after: arg2:(Final, TOP, TOP, [%DK:Object]) arg1:(Final, TOP, TOP, [%DK:Object]) r6:(Double) r7:(Double) r8:(Int) r9:(Int) r10:(Int) r11:(Int) r12:(Double) r13:(Double) r14:(Double) r15:(Int) r16:(Int) r17:(Otherobj, TOP, TOP, [%BC:global], Cell: 0x10e93f970 (%BC:global)) r18:(Array, ArrayWithContiguous, [%B4:Array], [%B4:Array]) r19:(Otherobj, TOP, TOP, [%BY:Math]) r20:(IntDouble) r21:(Array, TOP, TOP, [%B4:Array])
  var links: arg2:@322 arg1:@310 r6:@283 r7:@265 r8:@276 r9:@261 r10:@303 r11:@298 r12:@253 r13:@258 r14:@255 r15:@153 r16:@160 r17:@154 r18:@156 r19:@136 r20:@147 r21:@143

Block #10 (bc#303):  (OSR target)
  Predecessors: #9 #12
  Dominated by: #0 #3 #6 #9 #10
  Dominates: #10 #11 #12
  Loop header, contains: #10 #11 #12
  Containing loop headers: #10
  Phi Nodes: @226<1>->(@257, @258), @227<3>->(@254, @255), @228<3>->(@252, @253), @259<2>->(@260, @261), @264<2>->(@191, @265), @274<2>->(@275, @276), @282<2>->(@187, @283), @293<2>->(@219, @153), @295<2>->(@195, @160), @297<2>->(@217, @298), @302<2>->(@215, @303), @320<2>->(@309, @310), @332<2>->(@321, @322)
  vars before: arg2:(Final, TOP, TOP, [%DK:Object]) arg1:(Final, TOP, TOP, [%DK:Object]) arg0:(Otherobj, NonArray, [%BC:global], [%BC:global], Cell: 0x10e93f970 (%BC:global)) r0:(Doublereal, Double: 4639342159172064522, 146.034796) r1:(Doublereal, Double: 4640571429092064255, 180.972749) r2:(Doublereal, Double: 4638361214191237942, 123.077331) r3:(Doublereal, Double: 4639132401904757561, 140.073136) r4:(Doublereal, Double: 4630113896989498324, 34.937952) r5:(Doublereal, Double: 4625477111388794096, 16.995805) r6:(Double) r7:(Double) r8:(Int) r9:(Int) r10:(Int) r11:(Int) r12:(Double) r13:(Double) r14:(Double) r15:(Int) r16:(Int)
  var links: arg2:@332 arg1:@320 r6:@282 r7:@264 r8:@274 r9:@259 r10:@302 r11:@297 r12:@228 r13:@226 r14:@227 r15:@293 r16:@295
 164:           < 1:24>	GetLocal(@226, JS|UseAsOther, r13(EC<Double>), R:Variables(13), bc#303)  predicting Double, forcing double
 165:           < 1:22>	GetLocal(@227, JS|UseAsOther, r14(GC<Double>), R:Variables(14), bc#303)  predicting Double, forcing double
 166:           <!2:22>	ValueAdd(Number:@164<Double>, Number:@165<Double>, JS|MustGen|MightClobber|UseAsOther|MayOverflow, bc#303)
 167:           < 2:->	SetLocal(Number:@166<Double>, NodeExitsForward, r13(EC<Double>), W:Variables(13), bc#303)  predicting Double, forcing double
 168:           < 1:24>	GetLocal(@228, JS|UseAsOther, r12(DC<Double>), R:Variables(12), bc#308)  predicting Double, forcing double
 169:           <!1:24>	CompareGreaterEq(Number:@166<Double>, Number:@168<Double>, Boolean|MustGen|MightClobber|UseAsOther|CanExit, bc#308)
 170:           <!0:->	Branch(Boolean:@169<Boolean>, MustGen|CanExit, T:#11, F:#12, W:SideState, bc#308)
  vars after: arg2:(Final, TOP, TOP, [%DK:Object]) arg1:(Final, TOP, TOP, [%DK:Object]) r6:(Double) r7:(Double) r8:(Int) r9:(Int) r10:(Int) r11:(Int) r12:(Double) r13:(Double) r14:(Double) r15:(Int) r16:(Int)
  var links: arg2:@332 arg1:@320 r6:@282 r7:@264 r8:@274 r9:@259 r10:@302 r11:@297 r12:@168<Double> r13:@167 r14:@165<Double> r15:@293 r16:@295

Block #11 (bc#312): 
  Predecessors: #10
  Dominated by: #0 #3 #6 #9 #10 #11
  Dominates: #11
  Containing loop headers: #10
  Phi Nodes: @220<1>->(@167), @221<2>->(@228), @222<1>->(@282), @223<2>->(@274), @224<1>->(@264), @225<2>->(@259), @256<1>->(@227), @292<1>->(@293), @294<1>->(@295), @296<1>->(@297), @301<1>->(@302), @319<1>->(@320), @331<1>->(@332)
  vars before: arg2:(Final, TOP, TOP, [%DK:Object]) arg1:(Final, TOP, TOP, [%DK:Object]) r6:(Double) r7:(Double) r8:(Int) r9:(Int) r10:(Int) r11:(Int) r12:(Double) r13:(Double) r14:(Double) r15:(Int) r16:(Int)
  var links: arg2:@331 arg1:@319 r6:@222 r7:@224 r8:@223 r9:@225 r10:@301 r11:@296 r12:@221 r13:@220 r14:@256 r15:@292 r16:@294
 171:           < 1:24>	GetLocal(@220, JS|UseAsOther, r13(EC<Double>), R:Variables(13), bc#312)  predicting Double, forcing double
 172:           < 1:22>	GetLocal(@221, JS|UseAsOther, r12(DC<Double>), R:Variables(12), bc#312)  predicting Double, forcing double
 173:           <!1:22>	ArithSub(Number:@171<Double>, Number:@172<Double>, Number|MustGen|UseAsOther|MayOverflow, bc#312)
 174:           < 1:->	SetLocal(Number:@173<Double>, NodeExitsForward, r13(EC<Double>), W:Variables(13), bc#312)  predicting Double, forcing double
 175:           < 1:22>	GetLocal(@222, JS|UseAsOther, r6(MB<Double>), R:Variables(6), bc#317)  predicting Double, forcing double
 176:           < 1:24>	GetLocal(@223, JS|UseAsOther, r8(OB~<Int32>), R:Variables(8), bc#317)  predicting Int
 344:           < 1:24>	Int32ToDouble(Number:@176<Int32>, Number|PureInt, bc#317)
 177:           <!1:24>	ValueAdd(Number:@175<Double>, Number:@344<Double>, JS|MustGen|MightClobber|UseAsOther|MayOverflow, bc#317)
 178:           < 1:->	SetLocal(Number:@177<Double>, NodeExitsForward, r6(MB<Double>), W:Variables(6), bc#317)  predicting Double, forcing double
 179:           < 1:24>	GetLocal(@224, JS|UseAsOther, r7(NB<Double>), R:Variables(7), bc#322)  predicting Double, forcing double
 180:           < 1:22>	GetLocal(@225, JS|UseAsOther, r9(UB~<Int32>), R:Variables(9), bc#322)  predicting Int
 345:           < 1:22>	Int32ToDouble(Number:@180<Int32>, Number|PureInt, bc#322)
 181:           <!1:22>	ValueAdd(Number:@179<Double>, Number:@345<Double>, JS|MustGen|MightClobber|UseAsOther|MayOverflow, bc#322)
 182:           < 1:->	SetLocal(Number:@181<Double>, NodeExitsForward, r7(NB<Double>), W:Variables(7), bc#322)  predicting Double, forcing double
 183:           <!0:->	Jump(MustGen, T:#12, W:SideState, bc#327)
  vars after: arg2:(Final, TOP, TOP, [%DK:Object]) arg1:(Final, TOP, TOP, [%DK:Object]) r6:(Double) r7:(Double) r8:(Int) r9:(Int) r10:(Int) r11:(Int) r12:(Double) r13:(Double) r14:(Double) r15:(Int) r16:(Int)
  var links: arg2:@331 arg1:@319 r6:@178 r7:@182 r8:@176<Int32> r9:@180<Int32> r10:@301 r11:@296 r12:@172<Double> r13:@174 r14:@256 r15:@292 r16:@294

Block #12 (bc#327): 
  Predecessors: #10 #11
  Dominated by: #0 #3 #6 #9 #10 #12
  Dominates: #12
  Containing loop headers: #10
  Phi Nodes: @214<1>->(@178, @282), @215<2>->(@301, @302), @216<1>->(@182, @264), @217<2>->(@296, @297), @218<1>->(@294, @295), @219<3>->(@292, @293), @252<1>->(@221, @228), @254<1>->(@256, @227), @257<1>->(@174, @167), @260<1>->(@225, @259), @275<1>->(@223, @274), @309<2>->(@319, @320), @321<2>->(@331, @332)
  vars before: arg2:(Final, TOP, TOP, [%DK:Object]) arg1:(Final, TOP, TOP, [%DK:Object]) r6:(Double) r7:(Double) r8:(Int) r9:(Int) r10:(Int) r11:(Int) r12:(Double) r13:(Double) r14:(Double) r15:(Int) r16:(Int)
  var links: arg2:@321 arg1:@309 r6:@214 r7:@216 r8:@275 r9:@260 r10:@215 r11:@217 r12:@252 r13:@257 r14:@254 r15:@219 r16:@218
 184:           < 1:22>	GetLocal(@214, JS|UseAsOther, r6(MB<Double>), R:Variables(6), bc#327)  predicting Double, forcing double
 185:           < 1:24>	GetLocal(@215, JS|UseAsOther, r10(PB~<Int32>), R:Variables(10), bc#327)  predicting Int
 346:           < 1:24>	Int32ToDouble(Number:@185<Int32>, Number|PureInt, bc#327)
 186:           <!1:24>	ValueAdd(Number:@184<Double>, Number:@346<Double>, JS|MustGen|MightClobber|UseAsOther|MayOverflow, bc#327)
 187:           < 1:->	SetLocal(Number:@186<Double>, NodeExitsForward, r6(MB<Double>), W:Variables(6), bc#327)  predicting Double, forcing double
 188:           < 1:24>	GetLocal(@216, JS|UseAsOther, r7(NB<Double>), R:Variables(7), bc#332)  predicting Double, forcing double
 189:           < 1:22>	GetLocal(@217, JS|UseAsOther, r11(VB~<Int32>), R:Variables(11), bc#332)  predicting Int
 347:           < 1:22>	Int32ToDouble(Number:@189<Int32>, Number|PureInt, bc#332)
 190:           <!1:22>	ValueAdd(Number:@188<Double>, Number:@347<Double>, JS|MustGen|MightClobber|UseAsOther|MayOverflow, bc#332)
 191:           < 1:->	SetLocal(Number:@190<Double>, NodeExitsForward, r7(NB<Double>), W:Variables(7), bc#332)  predicting Double, forcing double
 192:           < 1:22>	GetLocal(@218, JS|UseAsOther, r16(BD<Int32>), R:Variables(16), bc#337)  predicting Int
 193:           < 1:24>	JSConstant(JS|UseAsOther, $1 = Int32: 1, bc#337)
 194:           <!2:24>	ArithAdd(Int32:@192<Int32>, Int32:@193<Int32>, Number|MustGen|UseAsOther|CanExit, bc#337)
 195:           < 1:->	SetLocal(Int32:@194<Int32>, NodeExitsForward, r16(BD<Int32>), W:Variables(16), bc#337)  predicting Int
 196:           < 1:22>	GetLocal(@219, JS|UseAsOther, r15(YC<Int32>), R:Variables(15), bc#339)  predicting Int
 197:           <!1:22>	CompareLess(Int32:@194<Int32>, Int32:@196<Int32>, Boolean|MustGen|MightClobber|UseAsOther|CanExit, bc#339)
 198:           <!0:->	Branch(Boolean:@197<Boolean>, MustGen|CanExit, T:#10, F:#13, W:SideState, bc#339)
  vars after: arg2:(Final, TOP, TOP, [%DK:Object]) arg1:(Final, TOP, TOP, [%DK:Object]) r6:(Double) r7:(Double) r8:(Int) r9:(Int) r10:(Int) r11:(Int) r12:(Double) r13:(Double) r14:(Double) r15:(Int) r16:(Int)
  var links: arg2:@321 arg1:@309 r6:@187 r7:@191 r8:@275 r9:@260 r10:@185<Int32> r11:@189<Int32> r12:@252 r13:@257 r14:@254 r15:@196<Int32> r16:@195

Block #13 (bc#343): 
  Predecessors: #9 #12
  Dominated by: #0 #3 #6 #9 #13
  Dominates: #13
  Phi Nodes: @211<1>->(@219, @153), @212<1>->(@321, @322), @213<1>->(@309, @310)
  vars before: arg2:(Final, TOP, TOP, [%DK:Object]) arg1:(Final, TOP, TOP, [%DK:Object]) r15:(Int)
  var links: arg2:@207 arg1:@208 r15:@211
 199:           <!0:->	Phantom(MustGen|CanExit, bc#343)
 200:  skipped  < 0:->	ZombieHint(r17(YD~<Object>), W:SideState, bc#343)
 201:           < 3:22>	GetGlobalVar(JS|UseAsOther, global18(0x7fecbb5040a8), R:Absolute(140654731608232), bc#348)  predicting Array
 202:  skipped  < 0:->	MovHint(@201<Array>, r18(ZD~<Array>), W:SideState, bc#348)
 203:           < 1:24>	GetLocal(@211, JS|UseAsOther, r15(YC<Int32>), R:Variables(15), bc#356)  predicting Int
 204:           <!0:->	CheckStructure(Check:Cell:@201<Array>, MustGen|CanExit, [%B4:Array], R:JSCell_structure, bc#356)
 205:           < 1:20>	GetButterfly(Cell:@201<Array>, Storage|UseAsOther, R:JSObject_butterfly, bc#356)
 206:           <!0:->	PutByOffset(@205<Other>, KnownCell:@201<Array>, @203<Int32>, MustGen, id5{LastPx}, 104, W:NamedProperties(5), bc#356)
 207:           <!0:->	Flush(@212, MustGen, arg2(C<Final>), W:SideState, bc#365)  predicting Final
 208:           <!0:->	Flush(@213, MustGen, arg1(B<Final>), W:SideState, bc#365)  predicting Final
 209:           < 1:24>	JSConstant(JS|UseAsOther, $4 = Undefined, bc#365)
 210:           <!0:->	Return(@209<Other>, MustGen, W:SideState, bc#365)
  vars after: 
  var links: arg2:@207 arg1:@208 r15:@203<Int32> r17:@200 r18:@202

Structures:
    %AJ:Array    = 0x10e91e5c0:[Array, {}, ArrayWithDouble, Proto:0x10e99ffe0]
    %B4:Array    = 0x10e91a180:[Array, {Edge:100, Normal:101, Line:102, NumPx:103, LastPx:104}, ArrayWithContiguous, Proto:0x10e99ffe0]
    %BC:global   = 0x10e91a1f0:[global, {Object:100, Function:101, Array:102, Boolean:103, String:104, Number:105, Date:106, RegExp:107, Error:108, EvalError:109, RangeError:110, ReferenceError:111, SyntaxError:112, TypeError:113, URIError:114, eval:115, JSON:116, Math:117, Name:118, debug:119, describe:120, print:121, quit:122, gc:123, dumpCallFrame:124, releaseExecutableMemory:125, version:126, run:127, load:128, checkSyntax:129, jscStack:130, readline:131, preciseTime:132, Uint8Array:133, Uint8ClampedArray:134, Uint16Array:135, Uint32Array:136, Int8Array:137, Int16Array:138, Int32Array:139, Float32Array:140, Float64Array:141, arguments:142, V:143}, NonArray, Proto:0x10e99fff0]
    %BY:Math     = 0x10e91bf40:[Math, {E:100, LN2:101, LN10:102, LOG2E:103, LOG10E:104, PI:105, SQRT1_2:106, SQRT2:107, abs:108, acos:109, asin:110, atan:111, atan2:112, ceil:113, cos:114, exp:115, floor:116, log:117, max:118, min:119, pow:120, random:121, round:122, sin:123, sqrt:124, tan:125}, NonArray, Proto:0x10e99fff0]
    %D3:Function = 0x10e91f190:[Function, {name:100, length:101}, NonArray, Proto:0x10e95ffe0]
    %DK:Object   = 0x10e91a420:[Object, {V:0}, NonArray, Proto:0x10ea2fef0]
Comment 2 Filip Pizlo 2013-07-24 11:54:40 PDT
Created attachment 207408 [details]
the patch
Comment 3 Mark Hahnenberg 2013-07-24 12:31:39 PDT
Comment on attachment 207408 [details]
the patch

r=me
Comment 4 Filip Pizlo 2013-07-24 14:46:58 PDT
Landed in http://trac.webkit.org/changeset/153103