Skip to content

Instantly share code, notes, and snippets.

@ptarjan
Created January 18, 2014 20:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ptarjan/8496150 to your computer and use it in GitHub Desktop.
Save ptarjan/8496150 to your computer and use it in GitHub Desktop.
-------------------------- after initial translation ---------------------------
B0:
Method public (leaf) A::c at 27
--- bc 27, spOff 0 (A::c)
27: String "b.php"
(00) t0:FramePtr = DefFP
(01) t1:StkPtr = DefSP<0> t0:FramePtr
--- bc 32, spOff 1 (A::c)
32: Incl
(04) t4:StkPtr = SpillStack t1:StkPtr, 0, "b.php"
(08) t6:StkPtr = InterpOneCF<Gen,Incl: bcOff:32, popped:1, pushed:1> t4:StkPtr, t0:FramePtr -> B1<Catch>
no fallthrough
B1<Catch>: (preds B0)
(05) BeginCatch
(06) t5:StkPtr = SpillStack t4:StkPtr, 0
(07) EndCatch t0:FramePtr, t5:StkPtr
no fallthrough
--------------------------------------------------------------------------------
------------------------------- after optimizing -------------------------------
B0:
Method public (leaf) A::c at 27
--- bc 27, spOff 0 (A::c)
27: String "b.php"
(00) t0:FramePtr = DefFP
(01) t1:StkPtr = DefSP<0> t0:FramePtr
--- bc 32, spOff 1 (A::c)
32: Incl
(04) t4:StkPtr = SpillStack t1:StkPtr, 0, "b.php"
(08) t6:StkPtr = InterpOneCF<Gen,Incl: bcOff:32, popped:1, pushed:1> t4:StkPtr, t0:FramePtr -> B1<Catch>
no fallthrough
B1<Catch>: (preds B0)
(05) BeginCatch
(07) EndCatch t0:FramePtr, t4:StkPtr
no fallthrough
--------------------------------------------------------------------------------
Intervals after building intervals
B0 0 DefFP => t0(%rbp):FramePtr
2 DefSP<0> t0(%rbp):FramePtr => t1(%rbx):StkPtr
4 SpillStack t1(%rbx):StkPtr, 0, "b.php" => t4(%rbx):StkPtr
6 -InterpOneCF<Gen,Incl: bcOff:32, popped:1, pushed:1> t4(%rbx):StkPtr, t0(%rbp):FramePtr => t6(%rbx):StkPtr taken->B1
B1 8 BeginCatch
10 EndCatch t0(%rbp):FramePtr, t4(%rbx):StkPtr
Intervals after walking intervals
B0 0 DefFP => t0(%rbp):FramePtr
2 DefSP<0> t0(%rbp):FramePtr => t1(%rbx):StkPtr
4 SpillStack t1(%rbx):StkPtr, 0, "b.php" => t4(%rbx):StkPtr
6 -InterpOneCF<Gen,Incl: bcOff:32, popped:1, pushed:1> t4(%rbx):StkPtr, t0(%rbp):FramePtr => t6(%rbx):StkPtr taken->B1
B1 8 BeginCatch
10 EndCatch t0(%rbp):FramePtr, t4(%rbx):StkPtr
Splits 0 Spills 0
Intervals after resolving intervals
B0 0 DefFP => t0(%rbp):FramePtr
2 DefSP<0> t0(%rbp):FramePtr => t1(%rbx):StkPtr
4 SpillStack t1(%rbx):StkPtr, 0, "b.php" => t4(%rbx):StkPtr
6 -InterpOneCF<Gen,Incl: bcOff:32, popped:1, pushed:1> t4(%rbx):StkPtr, t0(%rbp):FramePtr => t6(%rbx):StkPtr taken->B1
B1 8 BeginCatch
10 EndCatch t0(%rbp):FramePtr, t4(%rbx):StkPtr
----------------------------- after extended alloc -----------------------------
B0:
Method public (leaf) A::c at 27
--- bc 27, spOff 0 (A::c)
27: String "b.php"
(00) t0(%rbp):FramePtr = DefFP
(01) t1(%rbx):StkPtr = DefSP<0> t0(%rbp):FramePtr
--- bc 32, spOff 1 (A::c)
32: Incl
(04) t4(%rbx):StkPtr = SpillStack t1(%rbx):StkPtr, 0, "b.php"
(08) t6(%rbx):StkPtr = InterpOneCF<Gen,Incl: bcOff:32, popped:1, pushed:1> t4(%rbx):StkPtr, t0(%rbp):FramePtr -> B1<Catch>
no fallthrough
B1<Catch>: (preds B0)
(05) BeginCatch
(07) EndCatch t0(%rbp):FramePtr, t4(%rbx):StkPtr
no fallthrough
--------------------------------------------------------------------------------
-------------------------------- after code gen --------------------------------
B0:
Method public (leaf) A::c at 27
--- bc 27, spOff 0 (A::c)
27: String "b.php"
(00) t0(%rbp):FramePtr = DefFP
(01) t1(%rbx):StkPtr = DefSP<0> t0(%rbp):FramePtr
--- bc 32, spOff 1 (A::c)
32: Incl
(04) t4(%rbx):StkPtr = SpillStack t1(%rbx):StkPtr, 0, "b.php"
0x8c082c0: mov byte ptr [rbx-0x8], 0xc
0x8c082c4: mov qword ptr [rbx-0x10], 0x8b77620
0x8c082cc: add rbx, 0xfffffffffffffff0
(08) t6(%rbx):StkPtr = InterpOneCF<Gen,Incl: bcOff:32, popped:1, pushed:1> t4(%rbx):StkPtr, t0(%rbp):FramePtr -> B1<Catch>
0x8c082d0: mov rsi, rbx
0x8c082d3: mov rdi, rbp
0x8c082d6: mov edx, 0x20
0x8c082db: call 0x21d2480 <HPHP::JIT::interpOneIncl>
0x8c082e0: mov rbp, qword ptr [rax+0x20]
0x8c082e4: mov rbx, qword ptr [rax+0x10]
0x8c082e8: mov r10, qword ptr fs:[0xfff759b8]
0x8c082f1: add r10, 0x10
0x8c082f5: mov qword ptr [r10], rbx
0x8c082f8: mov qword ptr [r10+0x10], rbp
0x8c082fc: xor r10d, r10d
0x8c082ff: mov edi, 0xd
0x8c08304: ret
no fallthrough
B1<Catch>: (preds B0)
(05) BeginCatch
(07) EndCatch t0(%rbp):FramePtr, t4(%rbx):StkPtr
0xc800108: mov rdi, qword ptr [r12+0x8]
0xc80010d: call 0x2004650
0xc800112: ud2
no fallthrough
--------------------------------------------------------------------------------
-------------------------- after initial translation ---------------------------
B0:
Pseudo-main at 0 (ID 0)
--- bc 0, spOff 0 (A::)
0: FPushFuncD 1 "var_dump"
(00) t0:FramePtr = DefFP
(01) t1:StkPtr = DefSP<0> t0:FramePtr
(05) t5:StkPtr = SpillFrame<1> t1:StkPtr, t0:FramePtr, Func(var_dump), InitNull
--- bc 7, spOff 4 (A::)
7: ClsCns "class"
(07) t7:StkPtr = SpillStack t5:StkPtr, 0, Cls(A)
(11) t9:StkPtr = InterpOne<Gen,ClsCns: bcOff:7, popped:1, pushed:1> t7:StkPtr, t0:FramePtr -> B1<Catch>
-> B2
B2: (preds B0)
--- bc 12, spOff 4 (A::)
12: FPassCE 0
(12) t10:StkPtr = AssertStk<Cell,0> t9:StkPtr
--- bc 14, spOff 4 (A::)
14: FCall 1
(13) t11:Cell = LdStack<Cell,0> t10:StkPtr
(15) t13:StkPtr = SpillStack t10:StkPtr, 1
(18) t16:StkPtr = Call<> t13:StkPtr, 16, Func(var_dump), None:0
--- bc 16, spOff 1 (A::)
16: PopR
(19) DecRefStack<Gen,0> t16:StkPtr
--- bc 17, spOff 0 (A::)
17: FPushFuncD 1 "var_dump"
(20) t17:StkPtr = SpillStack t16:StkPtr, 1
(21) t18:StkPtr = SpillFrame<1> t17:StkPtr, t0:FramePtr, Func(var_dump), InitNull
--- bc 23, spOff 3 (A::)
23: LateBoundCls
(22) t19:Ctx = LdCtx<A::> t0:FramePtr
(23) t20:Cls = LdClsCtx t19:Ctx
--- bc 24, spOff 4 (A::)
24: ClsCns "class"
(24) t21:StkPtr = SpillStack t18:StkPtr, 0, t20:Cls
(28) t23:StkPtr = InterpOne<Gen,ClsCns: bcOff:24, popped:1, pushed:1> t21:StkPtr, t0:FramePtr -> B3<Catch>
-> B4
B4: (preds B2)
--- bc 29, spOff 4 (A::)
29: FPassCE 0
(29) t24:StkPtr = AssertStk<Cell,0> t23:StkPtr
--- bc 31, spOff 4 (A::)
31: FCall 1
(30) t25:Cell = LdStack<Cell,0> t24:StkPtr
(31) t26:StkPtr = SpillStack t24:StkPtr, 1
(33) t28:StkPtr = Call<> t26:StkPtr, 33, Func(var_dump), None:0
--- bc 33, spOff 1 (A::)
33: PopR
(34) DecRefStack<Gen,0> t28:StkPtr
--- bc 43, spOff 1 (A::)
43: RetC
(40) ReleaseVVOrExit t0:FramePtr -> B5<Unlikely>
-> B7
B7: (preds B4)
(41) DecRefThis t0:FramePtr
(42) StRetVal t0:FramePtr, 1
(43) t31:StkPtr = RetAdjustStack t0:FramePtr
(47) CheckSurpriseFlags -> B9<Unlikely>
-> B10
B10: (preds B9 B7)
(49) t33:RetAddr = LdRetAddr t0:FramePtr
(50) t34:FramePtr = FreeActRec t0:FramePtr
(51) RetCtrl<> t31:StkPtr, t34:FramePtr, t33:RetAddr
no fallthrough
B9<Unlikely>: (preds B7)
(48) FunctionExitSurpriseHook<> t0:FramePtr, t28:StkPtr, 1 -> B8<Catch>
-> B10
B8<Catch>: (preds B9)
--- bc 43, spOff 0 (A::)
43: RetC
(44) BeginCatch
(45) t32:StkPtr = SpillStack t28:StkPtr, 1
(46) EndCatch t0:FramePtr, t32:StkPtr
no fallthrough
B5<Unlikely>: (preds B4)
--- bc 43, spOff 1 (A::)
43: RetC
(35) t29:StkPtr = SpillStack t28:StkPtr, 1, 1
(36) SyncABIRegs t0:FramePtr, t29:StkPtr
(39) t30:StkPtr = InterpOneCF<RetC: bcOff:43, popped:0, pushed:0> t29:StkPtr, t0:FramePtr -> B6<Catch>
no fallthrough
B6<Catch>: (preds B5)
(37) BeginCatch
(38) EndCatch t0:FramePtr, t28:StkPtr
no fallthrough
B3<Catch>: (preds B2)
--- bc 24, spOff 4 (A::)
24: ClsCns "class"
(25) BeginCatch
(26) t22:StkPtr = SpillStack t21:StkPtr, 0
(27) EndCatch t0:FramePtr, t22:StkPtr
no fallthrough
B1<Catch>: (preds B0)
--- bc 7, spOff 4 (A::)
7: ClsCns "class"
(08) BeginCatch
(09) t8:StkPtr = SpillStack t7:StkPtr, 0
(10) EndCatch t0:FramePtr, t8:StkPtr
no fallthrough
--------------------------------------------------------------------------------
------------------------------- after optimizing -------------------------------
B0:
Pseudo-main at 0 (ID 0)
--- bc 0, spOff 0 (A::)
0: FPushFuncD 1 "var_dump"
(00) t0:FramePtr = DefFP
(01) t1:StkPtr = DefSP<0> t0:FramePtr
(05) t5:StkPtr = SpillFrame<1> t1:StkPtr, t0:FramePtr, Func(var_dump), InitNull
--- bc 7, spOff 4 (A::)
7: ClsCns "class"
(07) t7:StkPtr = SpillStack t5:StkPtr, 0, Cls(A)
(11) t9:StkPtr = InterpOne<Gen,ClsCns: bcOff:7, popped:1, pushed:1> t7:StkPtr, t0:FramePtr -> B1<Catch>
-> B2
B2: (preds B0)
--- bc 12, spOff 4 (A::)
12: FPassCE 0
(12) t10:StkPtr = AssertStk<Cell,0> t9:StkPtr
--- bc 14, spOff 4 (A::)
14: FCall 1
(15) t13:StkPtr = SpillStack t10:StkPtr, 1
(18) t16:StkPtr = Call<> t13:StkPtr, 16, Func(var_dump), None:0
--- bc 16, spOff 1 (A::)
16: PopR
(19) DecRefStack<Gen,0> t16:StkPtr
--- bc 17, spOff 0 (A::)
17: FPushFuncD 1 "var_dump"
(20) t17:StkPtr = SpillStack t16:StkPtr, 1
(21) t18:StkPtr = SpillFrame<1> t17:StkPtr, t0:FramePtr, Func(var_dump), InitNull
--- bc 23, spOff 3 (A::)
23: LateBoundCls
(22) t19:Ctx = LdCtx<A::> t0:FramePtr
(23) t20:Cls = LdClsCtx t19:Ctx
--- bc 24, spOff 4 (A::)
24: ClsCns "class"
(24) t21:StkPtr = SpillStack t18:StkPtr, 0, t20:Cls
(28) t23:StkPtr = InterpOne<Gen,ClsCns: bcOff:24, popped:1, pushed:1> t21:StkPtr, t0:FramePtr -> B3<Catch>
-> B4
B4: (preds B2)
--- bc 29, spOff 4 (A::)
29: FPassCE 0
(29) t24:StkPtr = AssertStk<Cell,0> t23:StkPtr
--- bc 31, spOff 4 (A::)
31: FCall 1
(31) t26:StkPtr = SpillStack t24:StkPtr, 1
(33) t28:StkPtr = Call<> t26:StkPtr, 33, Func(var_dump), None:0
--- bc 33, spOff 1 (A::)
33: PopR
(34) DecRefStack<Gen,0> t28:StkPtr
--- bc 43, spOff 1 (A::)
43: RetC
(40) ReleaseVVOrExit t0:FramePtr -> B5<Unlikely>
-> B7
B7: (preds B4)
(41) DecRefThis t0:FramePtr
(42) StRetVal t0:FramePtr, 1
(43) t31:StkPtr = RetAdjustStack t0:FramePtr
(47) CheckSurpriseFlags -> B9<Unlikely>
-> B12
B12: (preds B7)
(53) t36:None = Jmp -> B10
no fallthrough
B10: (preds B12 B11)
(49) t33:RetAddr = LdRetAddr t0:FramePtr
(50) t34:FramePtr = FreeActRec t0:FramePtr
(51) RetCtrl<> t31:StkPtr, t34:FramePtr, t33:RetAddr
no fallthrough
B9<Unlikely>: (preds B7)
(48) FunctionExitSurpriseHook<> t0:FramePtr, t28:StkPtr, 1 -> B8<Catch>
-> B11<Unlikely>
B11<Unlikely>: (preds B9)
(52) t35:None = Jmp -> B10
no fallthrough
B8<Catch>: (preds B9)
--- bc 43, spOff 0 (A::)
43: RetC
(44) BeginCatch
(45) t32:StkPtr = SpillStack t28:StkPtr, 1
(46) EndCatch t0:FramePtr, t32:StkPtr
no fallthrough
B5<Unlikely>: (preds B4)
--- bc 43, spOff 1 (A::)
43: RetC
(35) t29:StkPtr = SpillStack t28:StkPtr, 1, 1
(36) SyncABIRegs t0:FramePtr, t29:StkPtr
(39) t30:StkPtr = InterpOneCF<RetC: bcOff:43, popped:0, pushed:0> t29:StkPtr, t0:FramePtr -> B6<Catch>
no fallthrough
B6<Catch>: (preds B5)
(37) BeginCatch
(38) EndCatch t0:FramePtr, t28:StkPtr
no fallthrough
B3<Catch>: (preds B2)
--- bc 24, spOff 4 (A::)
24: ClsCns "class"
(25) BeginCatch
(27) EndCatch t0:FramePtr, t21:StkPtr
no fallthrough
B1<Catch>: (preds B0)
--- bc 7, spOff 4 (A::)
7: ClsCns "class"
(08) BeginCatch
(10) EndCatch t0:FramePtr, t7:StkPtr
no fallthrough
--------------------------------------------------------------------------------
Intervals after building intervals
19 20
B0 0 DefFP => t0(%rbp):FramePtr
2 DefSP<0> t0(%rbp):FramePtr => t1(%rbx):StkPtr
4 SpillFrame<1> t1(%rbx):StkPtr, t0(%rbp):FramePtr, Func(var_dump), InitNull => t5(%rbx):StkPtr
6 SpillStack t5(%rbx):StkPtr, 0, Cls(A) => t7(%rbx):StkPtr
8 -InterpOne<Gen,ClsCns: bcOff:7, popped:1, pushed:1> t7(%rbx):StkPtr, t0(%rbp):FramePtr => t9(%rbx):StkPtr next->B2 taken->B1
B2 10 AssertStk<Cell,0> t9(%rbx):StkPtr => t10(%rbx):StkPtr
12 SpillStack t10(%rbx):StkPtr, 1 => t13(%rbx):StkPtr
14 Call<> t13(%rbx):StkPtr, 16, Func(var_dump), None:0 => t16(%rbx):StkPtr
16 -DecRefStack<Gen,0> t16(%rbx):StkPtr
18 SpillStack t16(%rbx):StkPtr, 1 => t17(%rbx):StkPtr
20 SpillFrame<1> t17(%rbx):StkPtr, t0(%rbp):FramePtr, Func(var_dump), InitNull => t18(%rbx):StkPtr
╷╻ 22 LdCtx<A::> t0(%rbp):FramePtr => t19:Ctx
╵╹ ╷╻ 24 LdClsCtx t19:Ctx => t20:Cls
╵╹ 26 SpillStack t18(%rbx):StkPtr, 0, t20:Cls => t21(%rbx):StkPtr
28 -InterpOne<Gen,ClsCns: bcOff:24, popped:1, pushed:1> t21(%rbx):StkPtr, t0(%rbp):FramePtr => t23(%rbx):StkPtr next->B4 taken->B3
B4 30 AssertStk<Cell,0> t23(%rbx):StkPtr => t24(%rbx):StkPtr
32 SpillStack t24(%rbx):StkPtr, 1 => t26(%rbx):StkPtr
34 Call<> t26(%rbx):StkPtr, 33, Func(var_dump), None:0 => t28(%rbx):StkPtr
36 -DecRefStack<Gen,0> t28(%rbx):StkPtr
38 -ReleaseVVOrExit t0(%rbp):FramePtr next->B7 taken->B5
B7 40 -DecRefThis t0(%rbp):FramePtr
42 StRetVal t0(%rbp):FramePtr, 1
44 RetAdjustStack t0(%rbp):FramePtr => t31(%rbx):StkPtr
46 CheckSurpriseFlags next->B12 taken->B9
B12 48 Jmp => t36:None taken->B10
B9 50 -FunctionExitSurpriseHook<> t0(%rbp):FramePtr, t28(%rbx):StkPtr, 1 next->B11 taken->B8
B8 52 BeginCatch
54 SpillStack t28(%rbx):StkPtr, 1 => t32(%rbx):StkPtr
56 EndCatch t0(%rbp):FramePtr, t32(%rbx):StkPtr
B11 58 Jmp => t35:None taken->B10
B10 60 LdRetAddr t0(%rbp):FramePtr => t33:RetAddr
62 FreeActRec t0(%rbp):FramePtr => t34(%rbp):FramePtr
64 RetCtrl<> t31(%rbx):StkPtr, t34(%rbp):FramePtr, t33:RetAddr
B5 66 SpillStack t28(%rbx):StkPtr, 1, 1 => t29(%rbx):StkPtr
68 SyncABIRegs t0(%rbp):FramePtr, t29(%rbx):StkPtr
70 -InterpOneCF<RetC: bcOff:43, popped:0, pushed:0> t29(%rbx):StkPtr, t0(%rbp):FramePtr => t30(%rbx):StkPtr taken->B6
B6 72 BeginCatch
74 EndCatch t0(%rbp):FramePtr, t28(%rbx):StkPtr
B3 76 BeginCatch
78 EndCatch t0(%rbp):FramePtr, t21(%rbx):StkPtr
B1 80 BeginCatch
82 EndCatch t0(%rbp):FramePtr, t7(%rbx):StkPtr
Intervals after walking intervals
19 20
B0 0 DefFP => t0(%rbp):FramePtr
2 DefSP<0> t0(%rbp):FramePtr => t1(%rbx):StkPtr
4 SpillFrame<1> t1(%rbx):StkPtr, t0(%rbp):FramePtr, Func(var_dump), InitNull => t5(%rbx):StkPtr
6 SpillStack t5(%rbx):StkPtr, 0, Cls(A) => t7(%rbx):StkPtr
8 -InterpOne<Gen,ClsCns: bcOff:7, popped:1, pushed:1> t7(%rbx):StkPtr, t0(%rbp):FramePtr => t9(%rbx):StkPtr next->B2 taken->B1
B2 10 AssertStk<Cell,0> t9(%rbx):StkPtr => t10(%rbx):StkPtr
12 SpillStack t10(%rbx):StkPtr, 1 => t13(%rbx):StkPtr
14 Call<> t13(%rbx):StkPtr, 16, Func(var_dump), None:0 => t16(%rbx):StkPtr
16 -DecRefStack<Gen,0> t16(%rbx):StkPtr
18 SpillStack t16(%rbx):StkPtr, 1 => t17(%rbx):StkPtr
20 SpillFrame<1> t17(%rbx):StkPtr, t0(%rbp):FramePtr, Func(var_dump), InitNull => t18(%rbx):StkPtr
╷╻ 22 LdCtx<A::> t0(%rbp):FramePtr => t19:Ctx
╵╹ ╷╻ 24 LdClsCtx t19:Ctx => t20:Cls
╵╹ 26 SpillStack t18(%rbx):StkPtr, 0, t20:Cls => t21(%rbx):StkPtr
28 -InterpOne<Gen,ClsCns: bcOff:24, popped:1, pushed:1> t21(%rbx):StkPtr, t0(%rbp):FramePtr => t23(%rbx):StkPtr next->B4 taken->B3
B4 30 AssertStk<Cell,0> t23(%rbx):StkPtr => t24(%rbx):StkPtr
32 SpillStack t24(%rbx):StkPtr, 1 => t26(%rbx):StkPtr
34 Call<> t26(%rbx):StkPtr, 33, Func(var_dump), None:0 => t28(%rbx):StkPtr
36 -DecRefStack<Gen,0> t28(%rbx):StkPtr
38 -ReleaseVVOrExit t0(%rbp):FramePtr next->B7 taken->B5
B7 40 -DecRefThis t0(%rbp):FramePtr
42 StRetVal t0(%rbp):FramePtr, 1
44 RetAdjustStack t0(%rbp):FramePtr => t31(%rbx):StkPtr
46 CheckSurpriseFlags next->B12 taken->B9
B12 48 Jmp => t36:None taken->B10
B9 50 -FunctionExitSurpriseHook<> t0(%rbp):FramePtr, t28(%rbx):StkPtr, 1 next->B11 taken->B8
B8 52 BeginCatch
54 SpillStack t28(%rbx):StkPtr, 1 => t32(%rbx):StkPtr
56 EndCatch t0(%rbp):FramePtr, t32(%rbx):StkPtr
B11 58 Jmp => t35:None taken->B10
B10 60 LdRetAddr t0(%rbp):FramePtr => t33:RetAddr
62 FreeActRec t0(%rbp):FramePtr => t34(%rbp):FramePtr
64 RetCtrl<> t31(%rbx):StkPtr, t34(%rbp):FramePtr, t33:RetAddr
B5 66 SpillStack t28(%rbx):StkPtr, 1, 1 => t29(%rbx):StkPtr
68 SyncABIRegs t0(%rbp):FramePtr, t29(%rbx):StkPtr
70 -InterpOneCF<RetC: bcOff:43, popped:0, pushed:0> t29(%rbx):StkPtr, t0(%rbp):FramePtr => t30(%rbx):StkPtr taken->B6
B6 72 BeginCatch
74 EndCatch t0(%rbp):FramePtr, t28(%rbx):StkPtr
B3 76 BeginCatch
78 EndCatch t0(%rbp):FramePtr, t21(%rbx):StkPtr
B1 80 BeginCatch
82 EndCatch t0(%rbp):FramePtr, t7(%rbx):StkPtr
Splits 0 Spills 0
i19 (%rax) [23-25) {23,24}
i20 (%rax) [25-27) {25,26}
Intervals after resolving intervals
19 20
B0 0 DefFP => t0(%rbp):FramePtr
2 DefSP<0> t0(%rbp):FramePtr => t1(%rbx):StkPtr
4 SpillFrame<1> t1(%rbx):StkPtr, t0(%rbp):FramePtr, Func(var_dump), InitNull => t5(%rbx):StkPtr
6 SpillStack t5(%rbx):StkPtr, 0, Cls(A) => t7(%rbx):StkPtr
8 -InterpOne<Gen,ClsCns: bcOff:7, popped:1, pushed:1> t7(%rbx):StkPtr, t0(%rbp):FramePtr => t9(%rbx):StkPtr next->B2 taken->B1
B2 10 AssertStk<Cell,0> t9(%rbx):StkPtr => t10(%rbx):StkPtr
12 SpillStack t10(%rbx):StkPtr, 1 => t13(%rbx):StkPtr
14 Call<> t13(%rbx):StkPtr, 16, Func(var_dump), None:0 => t16(%rbx):StkPtr
16 -DecRefStack<Gen,0> t16(%rbx):StkPtr
18 SpillStack t16(%rbx):StkPtr, 1 => t17(%rbx):StkPtr
20 SpillFrame<1> t17(%rbx):StkPtr, t0(%rbp):FramePtr, Func(var_dump), InitNull => t18(%rbx):StkPtr
╷╻ 22 LdCtx<A::> t0(%rbp):FramePtr => t19(%rax):Ctx
╵╹ ╷╻ 24 LdClsCtx t19(%rax):Ctx => t20(%rax):Cls
╵╹ 26 SpillStack t18(%rbx):StkPtr, 0, t20(%rax):Cls => t21(%rbx):StkPtr
28 -InterpOne<Gen,ClsCns: bcOff:24, popped:1, pushed:1> t21(%rbx):StkPtr, t0(%rbp):FramePtr => t23(%rbx):StkPtr next->B4 taken->B3
B4 30 AssertStk<Cell,0> t23(%rbx):StkPtr => t24(%rbx):StkPtr
32 SpillStack t24(%rbx):StkPtr, 1 => t26(%rbx):StkPtr
34 Call<> t26(%rbx):StkPtr, 33, Func(var_dump), None:0 => t28(%rbx):StkPtr
36 -DecRefStack<Gen,0> t28(%rbx):StkPtr
38 -ReleaseVVOrExit t0(%rbp):FramePtr next->B7 taken->B5
B7 40 -DecRefThis t0(%rbp):FramePtr
42 StRetVal t0(%rbp):FramePtr, 1
44 RetAdjustStack t0(%rbp):FramePtr => t31(%rbx):StkPtr
46 CheckSurpriseFlags next->B12 taken->B9
B12 48 Jmp => t36:None taken->B10
B9 50 -FunctionExitSurpriseHook<> t0(%rbp):FramePtr, t28(%rbx):StkPtr, 1 next->B11 taken->B8
B8 52 BeginCatch
54 SpillStack t28(%rbx):StkPtr, 1 => t32(%rbx):StkPtr
56 EndCatch t0(%rbp):FramePtr, t32(%rbx):StkPtr
B11 58 Jmp => t35:None taken->B10
B10 60 LdRetAddr t0(%rbp):FramePtr => t33:RetAddr
62 FreeActRec t0(%rbp):FramePtr => t34(%rbp):FramePtr
64 RetCtrl<> t31(%rbx):StkPtr, t34(%rbp):FramePtr, t33:RetAddr
B5 66 SpillStack t28(%rbx):StkPtr, 1, 1 => t29(%rbx):StkPtr
68 SyncABIRegs t0(%rbp):FramePtr, t29(%rbx):StkPtr
70 -InterpOneCF<RetC: bcOff:43, popped:0, pushed:0> t29(%rbx):StkPtr, t0(%rbp):FramePtr => t30(%rbx):StkPtr taken->B6
B6 72 BeginCatch
74 EndCatch t0(%rbp):FramePtr, t28(%rbx):StkPtr
B3 76 BeginCatch
78 EndCatch t0(%rbp):FramePtr, t21(%rbx):StkPtr
B1 80 BeginCatch
82 EndCatch t0(%rbp):FramePtr, t7(%rbx):StkPtr
----------------------------- after extended alloc -----------------------------
B0:
Pseudo-main at 0 (ID 0)
--- bc 0, spOff 0 (A::)
0: FPushFuncD 1 "var_dump"
(00) t0(%rbp):FramePtr = DefFP
(01) t1(%rbx):StkPtr = DefSP<0> t0(%rbp):FramePtr
(05) t5(%rbx):StkPtr = SpillFrame<1> t1(%rbx):StkPtr, t0(%rbp):FramePtr, Func(var_dump), InitNull
--- bc 7, spOff 4 (A::)
7: ClsCns "class"
(07) t7(%rbx):StkPtr = SpillStack t5(%rbx):StkPtr, 0, Cls(A)
(11) t9(%rbx):StkPtr = InterpOne<Gen,ClsCns: bcOff:7, popped:1, pushed:1> t7(%rbx):StkPtr, t0(%rbp):FramePtr -> B1<Catch>
-> B2
B2: (preds B0)
--- bc 12, spOff 4 (A::)
12: FPassCE 0
(12) t10(%rbx):StkPtr = AssertStk<Cell,0> t9(%rbx):StkPtr
--- bc 14, spOff 4 (A::)
14: FCall 1
(15) t13(%rbx):StkPtr = SpillStack t10(%rbx):StkPtr, 1
(18) t16(%rbx):StkPtr = Call<> t13(%rbx):StkPtr, 16, Func(var_dump), None:0
--- bc 16, spOff 1 (A::)
16: PopR
(19) DecRefStack<Gen,0> t16(%rbx):StkPtr
--- bc 17, spOff 0 (A::)
17: FPushFuncD 1 "var_dump"
(20) t17(%rbx):StkPtr = SpillStack t16(%rbx):StkPtr, 1
(21) t18(%rbx):StkPtr = SpillFrame<1> t17(%rbx):StkPtr, t0(%rbp):FramePtr, Func(var_dump), InitNull
--- bc 23, spOff 3 (A::)
23: LateBoundCls
(22) t19(%rax):Ctx = LdCtx<A::> t0(%rbp):FramePtr
(23) t20(%rax):Cls = LdClsCtx t19(%rax):Ctx
--- bc 24, spOff 4 (A::)
24: ClsCns "class"
(24) t21(%rbx):StkPtr = SpillStack t18(%rbx):StkPtr, 0, t20(%rax):Cls
(28) t23(%rbx):StkPtr = InterpOne<Gen,ClsCns: bcOff:24, popped:1, pushed:1> t21(%rbx):StkPtr, t0(%rbp):FramePtr -> B3<Catch>
-> B4
B4: (preds B2)
--- bc 29, spOff 4 (A::)
29: FPassCE 0
(29) t24(%rbx):StkPtr = AssertStk<Cell,0> t23(%rbx):StkPtr
--- bc 31, spOff 4 (A::)
31: FCall 1
(31) t26(%rbx):StkPtr = SpillStack t24(%rbx):StkPtr, 1
(33) t28(%rbx):StkPtr = Call<> t26(%rbx):StkPtr, 33, Func(var_dump), None:0
--- bc 33, spOff 1 (A::)
33: PopR
(34) DecRefStack<Gen,0> t28(%rbx):StkPtr
--- bc 43, spOff 1 (A::)
43: RetC
(40) ReleaseVVOrExit t0(%rbp):FramePtr -> B5<Unlikely>
-> B7
B7: (preds B4)
(41) DecRefThis t0(%rbp):FramePtr
(42) StRetVal t0(%rbp):FramePtr, 1
(43) t31(%rbx):StkPtr = RetAdjustStack t0(%rbp):FramePtr
(47) CheckSurpriseFlags -> B9<Unlikely>
-> B12
B12: (preds B7)
(53) t36:None = Jmp -> B10
no fallthrough
B10: (preds B12 B11)
(49) t33:RetAddr = LdRetAddr t0(%rbp):FramePtr
(50) t34(%rbp):FramePtr = FreeActRec t0(%rbp):FramePtr
(51) RetCtrl<> t31(%rbx):StkPtr, t34(%rbp):FramePtr, t33:RetAddr
no fallthrough
B9<Unlikely>: (preds B7)
(48) FunctionExitSurpriseHook<> t0(%rbp):FramePtr, t28(%rbx):StkPtr, 1 -> B8<Catch>
-> B11<Unlikely>
B11<Unlikely>: (preds B9)
(52) t35:None = Jmp -> B10
no fallthrough
B8<Catch>: (preds B9)
--- bc 43, spOff 0 (A::)
43: RetC
(44) BeginCatch
(45) t32(%rbx):StkPtr = SpillStack t28(%rbx):StkPtr, 1
(46) EndCatch t0(%rbp):FramePtr, t32(%rbx):StkPtr
no fallthrough
B5<Unlikely>: (preds B4)
--- bc 43, spOff 1 (A::)
43: RetC
(35) t29(%rbx):StkPtr = SpillStack t28(%rbx):StkPtr, 1, 1
(36) SyncABIRegs t0(%rbp):FramePtr, t29(%rbx):StkPtr
(39) t30(%rbx):StkPtr = InterpOneCF<RetC: bcOff:43, popped:0, pushed:0> t29(%rbx):StkPtr, t0(%rbp):FramePtr -> B6<Catch>
no fallthrough
B6<Catch>: (preds B5)
(37) BeginCatch
(38) EndCatch t0(%rbp):FramePtr, t28(%rbx):StkPtr
no fallthrough
B3<Catch>: (preds B2)
--- bc 24, spOff 4 (A::)
24: ClsCns "class"
(25) BeginCatch
(27) EndCatch t0(%rbp):FramePtr, t21(%rbx):StkPtr
no fallthrough
B1<Catch>: (preds B0)
--- bc 7, spOff 4 (A::)
7: ClsCns "class"
(08) BeginCatch
(10) EndCatch t0(%rbp):FramePtr, t7(%rbx):StkPtr
no fallthrough
--------------------------------------------------------------------------------
-------------------------------- after code gen --------------------------------
B0:
Pseudo-main at 0 (ID 0)
--- bc 0, spOff 0 (A::)
0: FPushFuncD 1 "var_dump"
(00) t0(%rbp):FramePtr = DefFP
(01) t1(%rbx):StkPtr = DefSP<0> t0(%rbp):FramePtr
(05) t5(%rbx):StkPtr = SpillFrame<1> t1(%rbx):StkPtr, t0(%rbp):FramePtr, Func(var_dump), InitNull
0x8c08340: mov qword ptr [rbx-0x10], 0x0
0x8c08348: mov qword ptr [rbx-0x8], 0x0
0x8c08350: mov qword ptr [rbx-0x20], 0x8ad0600
0x8c08358: mov qword ptr [rbx-0x30], rbp
0x8c0835c: mov dword ptr [rbx-0x14], 0x1
0x8c08363: add rbx, 0xffffffffffffffd0
--- bc 7, spOff 4 (A::)
7: ClsCns "class"
(07) t7(%rbx):StkPtr = SpillStack t5(%rbx):StkPtr, 0, Cls(A)
0x8c08367: mov byte ptr [rbx-0x8], 0xf3
0x8c0836b: mov qword ptr [rbx-0x10], 0x8ba1840
0x8c08373: add rbx, 0xfffffffffffffff0
(11) t9(%rbx):StkPtr = InterpOne<Gen,ClsCns: bcOff:7, popped:1, pushed:1> t7(%rbx):StkPtr, t0(%rbp):FramePtr -> B1<Catch>
0x8c08377: mov rsi, rbx
0x8c0837a: mov rdi, rbp
0x8c0837d: mov edx, 0x7
0x8c08382: call 0x21ceb30 <HPHP::JIT::interpOneClsCns>
-> B2
B2: (preds B0)
--- bc 12, spOff 4 (A::)
12: FPassCE 0
(12) t10(%rbx):StkPtr = AssertStk<Cell,0> t9(%rbx):StkPtr
--- bc 14, spOff 4 (A::)
14: FCall 1
(15) t13(%rbx):StkPtr = SpillStack t10(%rbx):StkPtr, 1
0x8c08387: add rbx, 0x10
(18) t16(%rbx):StkPtr = Call<> t13(%rbx):StkPtr, 16, Func(var_dump), None:0
0x8c0838b: mov dword ptr [rbx+0x18], 0x10
0x8c08392: add rbx, 0xfffffffffffffff0
0x8c08396: mov qword ptr [rbx+0x18], 0x8c083b9
0x8c0839e: lea rbp, ptr [rbx+0x10]
0x8c083a2: test byte ptr [r12], 0xff
0x8c083a7: jnz 0xc800133
0x8c083ad: mov rdi, rbp
0x8c083b0: call 0x1862850 <HPHP::fg_var_dump>
0x8c083b5: mov rbp, qword ptr [rbp]
0x8c083b9: add rbx, 0x30
--- bc 16, spOff 1 (A::)
16: PopR
(19) DecRefStack<Gen,0> t16(%rbx):StkPtr
0x8c083bd: cmp byte ptr [rbx+0x8], 0xc
0x8c083c1: jle 0x8c083d5
0x8c083c3: mov rax, qword ptr [rbx]
0x8c083c6: cmp dword ptr [rax+0xc], 0x1
0x8c083ca: jz 0xc800140
0x8c083d0: jl 0x8c083d5
0x8c083d2: dec dword ptr [rax+0xc]
--- bc 17, spOff 0 (A::)
17: FPushFuncD 1 "var_dump"
(20) t17(%rbx):StkPtr = SpillStack t16(%rbx):StkPtr, 1
0x8c083d5: add rbx, 0x10
(21) t18(%rbx):StkPtr = SpillFrame<1> t17(%rbx):StkPtr, t0(%rbp):FramePtr, Func(var_dump), InitNull
0x8c083d9: mov qword ptr [rbx-0x10], 0x0
0x8c083e1: mov qword ptr [rbx-0x8], 0x0
0x8c083e9: mov qword ptr [rbx-0x20], 0x8ad0600
0x8c083f1: mov qword ptr [rbx-0x30], rbp
0x8c083f5: mov dword ptr [rbx-0x14], 0x1
0x8c083fc: add rbx, 0xffffffffffffffd0
--- bc 23, spOff 3 (A::)
23: LateBoundCls
(22) t19(%rax):Ctx = LdCtx<A::> t0(%rbp):FramePtr
0x8c08400: mov rax, qword ptr [rbp+0x20]
(23) t20(%rax):Cls = LdClsCtx t19(%rax):Ctx
0x8c08404: test al, 0x1
0x8c08407: jz 0x8c0840e
0x8c08409: dec rax
0x8c0840c: jmp 0x8c08411
0x8c0840e: mov rax, qword ptr [rax]
--- bc 24, spOff 4 (A::)
24: ClsCns "class"
(24) t21(%rbx):StkPtr = SpillStack t18(%rbx):StkPtr, 0, t20(%rax):Cls
0x8c08411: mov byte ptr [rbx-0x8], 0xf3
0x8c08415: mov qword ptr [rbx-0x10], rax
0x8c08419: add rbx, 0xfffffffffffffff0
(28) t23(%rbx):StkPtr = InterpOne<Gen,ClsCns: bcOff:24, popped:1, pushed:1> t21(%rbx):StkPtr, t0(%rbp):FramePtr -> B3<Catch>
0x8c0841d: mov rsi, rbx
0x8c08420: mov rdi, rbp
0x8c08423: mov edx, 0x18
0x8c08428: call 0x21ceb30 <HPHP::JIT::interpOneClsCns>
AStubs:
0xc800133: mov rdi, rbp
0xc800136: call 0x8c08280
0xc80013b: jmp 0x8c083ad
0xc800140: lea rax, ptr [rbx]
0xc800143: mov rdi, rax
0xc800146: call 0x1000750 <HPHP::JIT::tv_release_generic>
0xc80014b: jmp 0x8c083d5
-> B4
B4: (preds B2)
--- bc 29, spOff 4 (A::)
29: FPassCE 0
(29) t24(%rbx):StkPtr = AssertStk<Cell,0> t23(%rbx):StkPtr
--- bc 31, spOff 4 (A::)
31: FCall 1
(31) t26(%rbx):StkPtr = SpillStack t24(%rbx):StkPtr, 1
0x8c0842d: add rbx, 0x10
(33) t28(%rbx):StkPtr = Call<> t26(%rbx):StkPtr, 33, Func(var_dump), None:0
0x8c08431: mov dword ptr [rbx+0x18], 0x21
0x8c08438: add rbx, 0xfffffffffffffff0
0x8c0843c: mov qword ptr [rbx+0x18], 0x8c0845f
0x8c08444: lea rbp, ptr [rbx+0x10]
0x8c08448: test byte ptr [r12], 0xff
0x8c0844d: jnz 0xc800150
0x8c08453: mov rdi, rbp
0x8c08456: call 0x1862850 <HPHP::fg_var_dump>
0x8c0845b: mov rbp, qword ptr [rbp]
0x8c0845f: add rbx, 0x30
--- bc 33, spOff 1 (A::)
33: PopR
(34) DecRefStack<Gen,0> t28(%rbx):StkPtr
0x8c08463: cmp byte ptr [rbx+0x8], 0xc
0x8c08467: jle 0x8c0847b
0x8c08469: mov rax, qword ptr [rbx]
0x8c0846c: cmp dword ptr [rax+0xc], 0x1
0x8c08470: jz 0xc80015d
0x8c08476: jl 0x8c0847b
0x8c08478: dec dword ptr [rax+0xc]
--- bc 43, spOff 1 (A::)
43: RetC
(40) ReleaseVVOrExit t0(%rbp):FramePtr -> B5<Unlikely>
0x8c0847b: cmp qword ptr [rbp+0x28], 0x0
0x8c08480: jnz 0xc80016d
AStubs:
0xc800150: mov rdi, rbp
0xc800153: call 0x8c08280
0xc800158: jmp 0x8c08453
0xc80015d: lea rax, ptr [rbx]
0xc800160: mov rdi, rax
0xc800163: call 0x1000750 <HPHP::JIT::tv_release_generic>
0xc800168: jmp 0x8c0847b
0xc80016d: test dword ptr [rbp+0x28], 0x2
0xc800174: jz 0xc8001bd
0xc80017a: mov rdi, rbp
0xc80017d: call 0xff2fa0 <HPHP::ExtraArgs::deallocate>
0xc800182: jmp 0x8c08486
-> B7
B7: (preds B4)
(41) DecRefThis t0(%rbp):FramePtr
0x8c08486: mov rax, qword ptr [rbp+0x20]
0x8c0848a: test rax, rax
0x8c0848d: jz 0x8c0849d
0x8c0848f: test al, 0x1
0x8c08492: jnz 0x8c0849d
0x8c08494: dec dword ptr [rax+0xc]
0x8c08497: jz 0xc800187
(42) StRetVal t0(%rbp):FramePtr, 1
0x8c0849d: mov byte ptr [rbp+0x28], 0xa
0x8c084a1: mov qword ptr [rbp+0x20], 0x1
(43) t31(%rbx):StkPtr = RetAdjustStack t0(%rbp):FramePtr
0x8c084a9: lea rbx, ptr [rbp+0x20]
(47) CheckSurpriseFlags -> B9<Unlikely>
0x8c084ad: test byte ptr [r12], 0xff
0x8c084b2: jnz 0xc800194
AStubs:
0xc800187: mov rdi, rax
0xc80018a: call 0xff05c0 <HPHP::ObjectData::release>
0xc80018f: jmp 0x8c0849d
-> B12
B12: (preds B7)
(53) t36:None = Jmp -> B10
no fallthrough
B10: (preds B12 B11)
(49) t33:RetAddr = LdRetAddr t0(%rbp):FramePtr
0x8c084b8: push qword ptr [rbp+0x8]
(50) t34(%rbp):FramePtr = FreeActRec t0(%rbp):FramePtr
0x8c084bb: mov rbp, qword ptr [rbp]
(51) RetCtrl<> t31(%rbx):StkPtr, t34(%rbp):FramePtr, t33:RetAddr
0x8c084bf: ret
no fallthrough
B9<Unlikely>: (preds B7)
(48) FunctionExitSurpriseHook<> t0(%rbp):FramePtr, t28(%rbx):StkPtr, 1 -> B8<Catch>
0xc800194: mov byte ptr [rbx-0x28], 0xa
0xc800198: mov qword ptr [rbx-0x30], 0x1
0xc8001a0: mov rdi, rbp
0xc8001a3: call 0x231d500 <HPHP::EventHook::onFunctionExit>
-> B11<Unlikely>
B11<Unlikely>: (preds B9)
(52) t35:None = Jmp -> B10
0xc8001a8: jmp 0x8c084b8
no fallthrough
B8<Catch>: (preds B9)
--- bc 43, spOff 0 (A::)
43: RetC
(44) BeginCatch
(45) t32(%rbx):StkPtr = SpillStack t28(%rbx):StkPtr, 1
0xc8001ad: add rbx, 0x10
(46) EndCatch t0(%rbp):FramePtr, t32(%rbx):StkPtr
0xc8001b1: mov rdi, qword ptr [r12+0x8]
0xc8001b6: call 0x2004650
0xc8001bb: ud2
no fallthrough
B5<Unlikely>: (preds B4)
--- bc 43, spOff 1 (A::)
43: RetC
(35) t29(%rbx):StkPtr = SpillStack t28(%rbx):StkPtr, 1, 1
0xc8001bd: mov byte ptr [rbx+0x8], 0xa
0xc8001c1: mov qword ptr [rbx], 0x1
(36) SyncABIRegs t0(%rbp):FramePtr, t29(%rbx):StkPtr
(39) t30(%rbx):StkPtr = InterpOneCF<RetC: bcOff:43, popped:0, pushed:0> t29(%rbx):StkPtr, t0(%rbp):FramePtr -> B6<Catch>
0xc8001c8: mov rsi, rbx
0xc8001cb: mov rdi, rbp
0xc8001ce: mov edx, 0x2b
0xc8001d3: call 0x21cfaf0 <HPHP::JIT::interpOneRetC>
0xc8001d8: mov rbp, qword ptr [rax+0x20]
0xc8001dc: mov rbx, qword ptr [rax+0x10]
0xc8001e0: mov r10, qword ptr fs:[0xfff759b8]
0xc8001e9: add r10, 0x10
0xc8001ed: mov qword ptr [r10], rbx
0xc8001f0: mov qword ptr [r10+0x10], rbp
0xc8001f4: xor r10d, r10d
0xc8001f7: mov edi, 0xd
0xc8001fc: ret
no fallthrough
B6<Catch>: (preds B5)
(37) BeginCatch
(38) EndCatch t0(%rbp):FramePtr, t28(%rbx):StkPtr
0xc8001fd: mov rdi, qword ptr [r12+0x8]
0xc800202: call 0x2004650
0xc800207: ud2
no fallthrough
B3<Catch>: (preds B2)
--- bc 24, spOff 4 (A::)
24: ClsCns "class"
(25) BeginCatch
(27) EndCatch t0(%rbp):FramePtr, t21(%rbx):StkPtr
0xc800209: mov rdi, qword ptr [r12+0x8]
0xc80020e: call 0x2004650
0xc800213: ud2
no fallthrough
B1<Catch>: (preds B0)
--- bc 7, spOff 4 (A::)
7: ClsCns "class"
(08) BeginCatch
(10) EndCatch t0(%rbp):FramePtr, t7(%rbx):StkPtr
0xc800215: mov rdi, qword ptr [r12+0x8]
0xc80021a: call 0x2004650
0xc80021f: ud2
no fallthrough
--------------------------------------------------------------------------------
string(1) "A"
string(1) "B"
-------------------------- after initial translation ---------------------------
B0:
Method public (leaf) A::c at 27
--- bc 33, spOff 1 (A::c)
33: PopC
(00) t0:FramePtr = DefFP
(01) t1:StkPtr = DefSP<1> t0:FramePtr
(02) t2:StkPtr = AssertStk<Cell,0> t1:StkPtr
(03) DecRefStack<Cell,0> t2:StkPtr
--- bc 35, spOff 1 (A::c)
35: RetC
(11) ReleaseVVOrExit t0:FramePtr -> B1<Unlikely>
-> B3
B3: (preds B0)
(12) DecRefThis t0:FramePtr
(13) StRetVal t0:FramePtr, InitNull
(14) t7:StkPtr = RetAdjustStack t0:FramePtr
(18) CheckSurpriseFlags -> B5<Unlikely>
-> B6
B6: (preds B5 B3)
(20) t9:RetAddr = LdRetAddr t0:FramePtr
(21) t10:FramePtr = FreeActRec t0:FramePtr
(22) RetCtrl<> t7:StkPtr, t10:FramePtr, t9:RetAddr
no fallthrough
B5<Unlikely>: (preds B3)
(19) FunctionExitSurpriseHook<> t0:FramePtr, t2:StkPtr, InitNull -> B4<Catch>
-> B6
B4<Catch>: (preds B5)
--- bc 35, spOff 0 (A::c)
35: RetC
(15) BeginCatch
(16) t8:StkPtr = SpillStack t2:StkPtr, 1
(17) EndCatch t0:FramePtr, t8:StkPtr
no fallthrough
B1<Unlikely>: (preds B0)
--- bc 35, spOff 1 (A::c)
35: RetC
(06) t5:StkPtr = SpillStack t2:StkPtr, 1, InitNull
(07) SyncABIRegs t0:FramePtr, t5:StkPtr
(10) t6:StkPtr = InterpOneCF<RetC: bcOff:35, popped:0, pushed:0> t5:StkPtr, t0:FramePtr -> B2<Catch>
no fallthrough
B2<Catch>: (preds B1)
(08) BeginCatch
(09) EndCatch t0:FramePtr, t2:StkPtr
no fallthrough
--------------------------------------------------------------------------------
------------------------------- after optimizing -------------------------------
B0:
Method public (leaf) A::c at 27
--- bc 33, spOff 1 (A::c)
33: PopC
(00) t0:FramePtr = DefFP
(01) t1:StkPtr = DefSP<1> t0:FramePtr
(02) t2:StkPtr = AssertStk<Cell,0> t1:StkPtr
(03) DecRefStack<Cell,0> t2:StkPtr
--- bc 35, spOff 1 (A::c)
35: RetC
(11) ReleaseVVOrExit t0:FramePtr -> B1<Unlikely>
-> B3
B3: (preds B0)
(12) DecRefThis t0:FramePtr
(13) StRetVal t0:FramePtr, InitNull
(14) t7:StkPtr = RetAdjustStack t0:FramePtr
(18) CheckSurpriseFlags -> B5<Unlikely>
-> B8
B8: (preds B3)
(24) t12:None = Jmp -> B6
no fallthrough
B6: (preds B8 B7)
(20) t9:RetAddr = LdRetAddr t0:FramePtr
(21) t10:FramePtr = FreeActRec t0:FramePtr
(22) RetCtrl<> t7:StkPtr, t10:FramePtr, t9:RetAddr
no fallthrough
B5<Unlikely>: (preds B3)
(19) FunctionExitSurpriseHook<> t0:FramePtr, t2:StkPtr, InitNull -> B4<Catch>
-> B7<Unlikely>
B7<Unlikely>: (preds B5)
(23) t11:None = Jmp -> B6
no fallthrough
B4<Catch>: (preds B5)
--- bc 35, spOff 0 (A::c)
35: RetC
(15) BeginCatch
(16) t8:StkPtr = SpillStack t2:StkPtr, 1
(17) EndCatch t0:FramePtr, t8:StkPtr
no fallthrough
B1<Unlikely>: (preds B0)
--- bc 35, spOff 1 (A::c)
35: RetC
(06) t5:StkPtr = SpillStack t2:StkPtr, 1, InitNull
(07) SyncABIRegs t0:FramePtr, t5:StkPtr
(10) t6:StkPtr = InterpOneCF<RetC: bcOff:35, popped:0, pushed:0> t5:StkPtr, t0:FramePtr -> B2<Catch>
no fallthrough
B2<Catch>: (preds B1)
(08) BeginCatch
(09) EndCatch t0:FramePtr, t2:StkPtr
no fallthrough
--------------------------------------------------------------------------------
Intervals after building intervals
B0 0 DefFP => t0(%rbp):FramePtr
2 DefSP<1> t0(%rbp):FramePtr => t1(%rbx):StkPtr
4 AssertStk<Cell,0> t1(%rbx):StkPtr => t2(%rbx):StkPtr
6 -DecRefStack<Cell,0> t2(%rbx):StkPtr
8 -ReleaseVVOrExit t0(%rbp):FramePtr next->B3 taken->B1
B3 10 -DecRefThis t0(%rbp):FramePtr
12 StRetVal t0(%rbp):FramePtr, InitNull
14 RetAdjustStack t0(%rbp):FramePtr => t7(%rbx):StkPtr
16 CheckSurpriseFlags next->B8 taken->B5
B8 18 Jmp => t12:None taken->B6
B5 20 -FunctionExitSurpriseHook<> t0(%rbp):FramePtr, t2(%rbx):StkPtr, InitNull next->B7 taken->B4
B4 22 BeginCatch
24 SpillStack t2(%rbx):StkPtr, 1 => t8(%rbx):StkPtr
26 EndCatch t0(%rbp):FramePtr, t8(%rbx):StkPtr
B7 28 Jmp => t11:None taken->B6
B6 30 LdRetAddr t0(%rbp):FramePtr => t9:RetAddr
32 FreeActRec t0(%rbp):FramePtr => t10(%rbp):FramePtr
34 RetCtrl<> t7(%rbx):StkPtr, t10(%rbp):FramePtr, t9:RetAddr
B1 36 SpillStack t2(%rbx):StkPtr, 1, InitNull => t5(%rbx):StkPtr
38 SyncABIRegs t0(%rbp):FramePtr, t5(%rbx):StkPtr
40 -InterpOneCF<RetC: bcOff:35, popped:0, pushed:0> t5(%rbx):StkPtr, t0(%rbp):FramePtr => t6(%rbx):StkPtr taken->B2
B2 42 BeginCatch
44 EndCatch t0(%rbp):FramePtr, t2(%rbx):StkPtr
Intervals after walking intervals
B0 0 DefFP => t0(%rbp):FramePtr
2 DefSP<1> t0(%rbp):FramePtr => t1(%rbx):StkPtr
4 AssertStk<Cell,0> t1(%rbx):StkPtr => t2(%rbx):StkPtr
6 -DecRefStack<Cell,0> t2(%rbx):StkPtr
8 -ReleaseVVOrExit t0(%rbp):FramePtr next->B3 taken->B1
B3 10 -DecRefThis t0(%rbp):FramePtr
12 StRetVal t0(%rbp):FramePtr, InitNull
14 RetAdjustStack t0(%rbp):FramePtr => t7(%rbx):StkPtr
16 CheckSurpriseFlags next->B8 taken->B5
B8 18 Jmp => t12:None taken->B6
B5 20 -FunctionExitSurpriseHook<> t0(%rbp):FramePtr, t2(%rbx):StkPtr, InitNull next->B7 taken->B4
B4 22 BeginCatch
24 SpillStack t2(%rbx):StkPtr, 1 => t8(%rbx):StkPtr
26 EndCatch t0(%rbp):FramePtr, t8(%rbx):StkPtr
B7 28 Jmp => t11:None taken->B6
B6 30 LdRetAddr t0(%rbp):FramePtr => t9:RetAddr
32 FreeActRec t0(%rbp):FramePtr => t10(%rbp):FramePtr
34 RetCtrl<> t7(%rbx):StkPtr, t10(%rbp):FramePtr, t9:RetAddr
B1 36 SpillStack t2(%rbx):StkPtr, 1, InitNull => t5(%rbx):StkPtr
38 SyncABIRegs t0(%rbp):FramePtr, t5(%rbx):StkPtr
40 -InterpOneCF<RetC: bcOff:35, popped:0, pushed:0> t5(%rbx):StkPtr, t0(%rbp):FramePtr => t6(%rbx):StkPtr taken->B2
B2 42 BeginCatch
44 EndCatch t0(%rbp):FramePtr, t2(%rbx):StkPtr
Splits 0 Spills 0
Intervals after resolving intervals
B0 0 DefFP => t0(%rbp):FramePtr
2 DefSP<1> t0(%rbp):FramePtr => t1(%rbx):StkPtr
4 AssertStk<Cell,0> t1(%rbx):StkPtr => t2(%rbx):StkPtr
6 -DecRefStack<Cell,0> t2(%rbx):StkPtr
8 -ReleaseVVOrExit t0(%rbp):FramePtr next->B3 taken->B1
B3 10 -DecRefThis t0(%rbp):FramePtr
12 StRetVal t0(%rbp):FramePtr, InitNull
14 RetAdjustStack t0(%rbp):FramePtr => t7(%rbx):StkPtr
16 CheckSurpriseFlags next->B8 taken->B5
B8 18 Jmp => t12:None taken->B6
B5 20 -FunctionExitSurpriseHook<> t0(%rbp):FramePtr, t2(%rbx):StkPtr, InitNull next->B7 taken->B4
B4 22 BeginCatch
24 SpillStack t2(%rbx):StkPtr, 1 => t8(%rbx):StkPtr
26 EndCatch t0(%rbp):FramePtr, t8(%rbx):StkPtr
B7 28 Jmp => t11:None taken->B6
B6 30 LdRetAddr t0(%rbp):FramePtr => t9:RetAddr
32 FreeActRec t0(%rbp):FramePtr => t10(%rbp):FramePtr
34 RetCtrl<> t7(%rbx):StkPtr, t10(%rbp):FramePtr, t9:RetAddr
B1 36 SpillStack t2(%rbx):StkPtr, 1, InitNull => t5(%rbx):StkPtr
38 SyncABIRegs t0(%rbp):FramePtr, t5(%rbx):StkPtr
40 -InterpOneCF<RetC: bcOff:35, popped:0, pushed:0> t5(%rbx):StkPtr, t0(%rbp):FramePtr => t6(%rbx):StkPtr taken->B2
B2 42 BeginCatch
44 EndCatch t0(%rbp):FramePtr, t2(%rbx):StkPtr
----------------------------- after extended alloc -----------------------------
B0:
Method public (leaf) A::c at 27
--- bc 33, spOff 1 (A::c)
33: PopC
(00) t0(%rbp):FramePtr = DefFP
(01) t1(%rbx):StkPtr = DefSP<1> t0(%rbp):FramePtr
(02) t2(%rbx):StkPtr = AssertStk<Cell,0> t1(%rbx):StkPtr
(03) DecRefStack<Cell,0> t2(%rbx):StkPtr
--- bc 35, spOff 1 (A::c)
35: RetC
(11) ReleaseVVOrExit t0(%rbp):FramePtr -> B1<Unlikely>
-> B3
B3: (preds B0)
(12) DecRefThis t0(%rbp):FramePtr
(13) StRetVal t0(%rbp):FramePtr, InitNull
(14) t7(%rbx):StkPtr = RetAdjustStack t0(%rbp):FramePtr
(18) CheckSurpriseFlags -> B5<Unlikely>
-> B8
B8: (preds B3)
(24) t12:None = Jmp -> B6
no fallthrough
B6: (preds B8 B7)
(20) t9:RetAddr = LdRetAddr t0(%rbp):FramePtr
(21) t10(%rbp):FramePtr = FreeActRec t0(%rbp):FramePtr
(22) RetCtrl<> t7(%rbx):StkPtr, t10(%rbp):FramePtr, t9:RetAddr
no fallthrough
B5<Unlikely>: (preds B3)
(19) FunctionExitSurpriseHook<> t0(%rbp):FramePtr, t2(%rbx):StkPtr, InitNull -> B4<Catch>
-> B7<Unlikely>
B7<Unlikely>: (preds B5)
(23) t11:None = Jmp -> B6
no fallthrough
B4<Catch>: (preds B5)
--- bc 35, spOff 0 (A::c)
35: RetC
(15) BeginCatch
(16) t8(%rbx):StkPtr = SpillStack t2(%rbx):StkPtr, 1
(17) EndCatch t0(%rbp):FramePtr, t8(%rbx):StkPtr
no fallthrough
B1<Unlikely>: (preds B0)
--- bc 35, spOff 1 (A::c)
35: RetC
(06) t5(%rbx):StkPtr = SpillStack t2(%rbx):StkPtr, 1, InitNull
(07) SyncABIRegs t0(%rbp):FramePtr, t5(%rbx):StkPtr
(10) t6(%rbx):StkPtr = InterpOneCF<RetC: bcOff:35, popped:0, pushed:0> t5(%rbx):StkPtr, t0(%rbp):FramePtr -> B2<Catch>
no fallthrough
B2<Catch>: (preds B1)
(08) BeginCatch
(09) EndCatch t0(%rbp):FramePtr, t2(%rbx):StkPtr
no fallthrough
--------------------------------------------------------------------------------
-------------------------------- after code gen --------------------------------
B0:
Method public (leaf) A::c at 27
--- bc 33, spOff 1 (A::c)
33: PopC
(00) t0(%rbp):FramePtr = DefFP
(01) t1(%rbx):StkPtr = DefSP<1> t0(%rbp):FramePtr
(02) t2(%rbx):StkPtr = AssertStk<Cell,0> t1(%rbx):StkPtr
(03) DecRefStack<Cell,0> t2(%rbx):StkPtr
0x8c084c0: cmp byte ptr [rbx+0x8], 0xc
0x8c084c4: jle 0x8c084d8
0x8c084c6: mov rax, qword ptr [rbx]
0x8c084c9: cmp dword ptr [rax+0xc], 0x1
0x8c084cd: jz 0xc800243
0x8c084d3: jl 0x8c084d8
0x8c084d5: dec dword ptr [rax+0xc]
--- bc 35, spOff 1 (A::c)
35: RetC
(11) ReleaseVVOrExit t0(%rbp):FramePtr -> B1<Unlikely>
0x8c084d8: cmp qword ptr [rbp+0x28], 0x0
0x8c084dd: jnz 0xc800253
AStubs:
0xc800243: lea rax, ptr [rbx]
0xc800246: mov rdi, rax
0xc800249: call 0x1000750 <HPHP::JIT::tv_release_generic>
0xc80024e: jmp 0x8c084d8
0xc800253: test dword ptr [rbp+0x28], 0x2
0xc80025a: jz 0xc80029b
0xc800260: mov rdi, rbp
0xc800263: call 0xff2fa0 <HPHP::ExtraArgs::deallocate>
0xc800268: jmp 0x8c084e3
-> B3
B3: (preds B0)
(12) DecRefThis t0(%rbp):FramePtr
0x8c084e3: mov rax, qword ptr [rbp+0x20]
0x8c084e7: test al, 0x1
0x8c084ea: jnz 0x8c084f5
0x8c084ec: dec dword ptr [rax+0xc]
0x8c084ef: jz 0xc80026d
(13) StRetVal t0(%rbp):FramePtr, InitNull
0x8c084f5: mov byte ptr [rbp+0x28], 0x8
(14) t7(%rbx):StkPtr = RetAdjustStack t0(%rbp):FramePtr
0x8c084f9: lea rbx, ptr [rbp+0x20]
(18) CheckSurpriseFlags -> B5<Unlikely>
0x8c084fd: test byte ptr [r12], 0xff
0x8c08502: jnz 0xc80027a
AStubs:
0xc80026d: mov rdi, rax
0xc800270: call 0xff05c0 <HPHP::ObjectData::release>
0xc800275: jmp 0x8c084f5
-> B8
B8: (preds B3)
(24) t12:None = Jmp -> B6
no fallthrough
B6: (preds B8 B7)
(20) t9:RetAddr = LdRetAddr t0(%rbp):FramePtr
0x8c08508: push qword ptr [rbp+0x8]
(21) t10(%rbp):FramePtr = FreeActRec t0(%rbp):FramePtr
0x8c0850b: mov rbp, qword ptr [rbp]
(22) RetCtrl<> t7(%rbx):StkPtr, t10(%rbp):FramePtr, t9:RetAddr
0x8c0850f: ret
no fallthrough
B5<Unlikely>: (preds B3)
(19) FunctionExitSurpriseHook<> t0(%rbp):FramePtr, t2(%rbx):StkPtr, InitNull -> B4<Catch>
0xc80027a: mov byte ptr [rbx-0x28], 0x8
0xc80027e: mov rdi, rbp
0xc800281: call 0x231d500 <HPHP::EventHook::onFunctionExit>
-> B7<Unlikely>
B7<Unlikely>: (preds B5)
(23) t11:None = Jmp -> B6
0xc800286: jmp 0x8c08508
no fallthrough
B4<Catch>: (preds B5)
--- bc 35, spOff 0 (A::c)
35: RetC
(15) BeginCatch
(16) t8(%rbx):StkPtr = SpillStack t2(%rbx):StkPtr, 1
0xc80028b: add rbx, 0x10
(17) EndCatch t0(%rbp):FramePtr, t8(%rbx):StkPtr
0xc80028f: mov rdi, qword ptr [r12+0x8]
0xc800294: call 0x2004650
0xc800299: ud2
no fallthrough
B1<Unlikely>: (preds B0)
--- bc 35, spOff 1 (A::c)
35: RetC
(06) t5(%rbx):StkPtr = SpillStack t2(%rbx):StkPtr, 1, InitNull
0xc80029b: mov byte ptr [rbx+0x8], 0x8
(07) SyncABIRegs t0(%rbp):FramePtr, t5(%rbx):StkPtr
(10) t6(%rbx):StkPtr = InterpOneCF<RetC: bcOff:35, popped:0, pushed:0> t5(%rbx):StkPtr, t0(%rbp):FramePtr -> B2<Catch>
0xc80029f: mov rsi, rbx
0xc8002a2: mov rdi, rbp
0xc8002a5: mov edx, 0x23
0xc8002aa: call 0x21cfaf0 <HPHP::JIT::interpOneRetC>
0xc8002af: mov rbp, qword ptr [rax+0x20]
0xc8002b3: mov rbx, qword ptr [rax+0x10]
0xc8002b7: mov r10, qword ptr fs:[0xfff759b8]
0xc8002c0: add r10, 0x10
0xc8002c4: mov qword ptr [r10], rbx
0xc8002c7: mov qword ptr [r10+0x10], rbp
0xc8002cb: xor r10d, r10d
0xc8002ce: mov edi, 0xd
0xc8002d3: ret
no fallthrough
B2<Catch>: (preds B1)
(08) BeginCatch
(09) EndCatch t0(%rbp):FramePtr, t2(%rbx):StkPtr
0xc8002d4: mov rdi, qword ptr [r12+0x8]
0xc8002d9: call 0x2004650
0xc8002de: ud2
no fallthrough
--------------------------------------------------------------------------------
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment