V8: Hooking up the Ignition to the Turbofan
Leszek Swirski & Ross McIlroy
Google London
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Ignition + Turbofan pipeline
Why a new pipeline?
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Why a new pipeline?
�
33% of time spent parsing + compiling
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Why a new pipeline?
�
�
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Compiler Pipeline (2008)
Codegen
Semi-optimized Code
Baseline
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Compiler Pipeline (2010)
Crankshaft
Optimized Code
Optimized
Full- codegen
Unoptimized Code
Baseline
Optimize
Deoptimize
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Compiler Pipeline (2015)
Crankshaft
Optimized Code
TurboFan
Optimized
Full- codegen
Unoptimized Code
Baseline
Optimize
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Compiler Pipeline (2015)
Crankshaft
Optimized Code
TurboFan
Optimized
Full- codegen
Unoptimized Code
Baseline
Optimize
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Compiler Pipeline (2016)
Crankshaft
Optimized Code
TurboFan
Optimized
Full- codegen
Unoptimized Code
Baseline
Optimize
Ignition
Bytecode
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Compiler Pipeline (2016)
Crankshaft
Optimized Code
TurboFan
Optimized
Full- codegen
Unoptimized Code
Baseline
Optimize
Ignition
Bytecode
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Compiler Pipeline (Svelte Devices)
Crankshaft
Optimized Code
TurboFan
Optimized
Full- codegen
Unoptimized Code
Baseline
Optimize
Ignition
Bytecode
Interpreted
Optimize
Baseline
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Compiler Pipeline (Svelte Devices)
Crankshaft
Optimized Code
TurboFan
Optimized
Full- codegen
Unoptimized Code
Baseline
Optimize
Ignition
Bytecode
Interpreted
Optimize
Baseline
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Compiler Pipeline (2017)
Optimized Code
TurboFan
Optimized
Ignition
Bytecode
Interpreted
Optimize
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Bytecode to graph
Ignition to Turbofan
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
function f(a, b) {� var result = a + b;� if (a > b) {
result = a - b;� }� return result;�}
Text
Bytecode
(Ignition)
Sea-of-nodes graph
(Turbofan)
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Executing bytecode
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
0x00000004
0x00000010
a0
a1
r0
Accumulator
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Executing bytecode
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
0x00000004
0x00000010
a0
a1
r0
Accumulator
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Executing bytecode
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
0x00000004
0x00000010
a0
a1
r0
Accumulator
0x00000010
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Executing bytecode
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
0x00000004
0x00000010
a0
a1
r0
Accumulator
0x00000014
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Executing bytecode
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
0x00000004
0x00000010
a0
a1
0x00000014
r0
Accumulator
0x00000014
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Executing bytecode
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
0x00000004
0x00000010
a0
a1
0x00000014
r0
Accumulator
0x00000010
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Executing bytecode
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
0x00000004
0x00000010
a0
a1
0x00000014
r0
Accumulator
0x00000010
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Executing bytecode
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
0x00000004
0x00000010
a0
a1
0x00000014
r0
Accumulator
0x00000000
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Executing bytecode
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
0x00000004
0x00000010
a0
a1
0x00000014
r0
Accumulator
0x00000000
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Executing bytecode
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
0x00000004
0x00000010
a0
a1
0x00000014
r0
Accumulator
0x00000014
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Executing bytecode
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
0x00000004
0x00000010
a0
a1
0x00000014
r0
Accumulator
0x00000014
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
2:Parameter[2]
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
2:Parameter[2]
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
2:Parameter[2]
3:StackCheck
4:JSAdd
1:Parameter[1]
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
4:JSAdd
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
2:Parameter[2]
3:StackCheck
4:JSAdd
1:Parameter[1]
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
4:JSAdd
4:JSAdd
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
4:JSAdd
2:Parameter[2]
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
4:JSAdd
2:Parameter[2]
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
1:Parameter[1]
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
4:JSAdd
5:JSGreater
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
5:JSGreater
4:JSAdd
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
6:Branch
7:IfTrue
8:IfFalse
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
5:JSGreater
4:JSAdd
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
6:Branch
7:IfTrue
8:IfFalse
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
5:JSGreater
4:JSAdd
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
6:Branch
7:IfTrue
8:IfFalse
22:
5:JSGreater
4:JSAdd
Registers
r0
Accumulator
Parent
8:IfFalse
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
2:Parameter[2]
4:JSAdd
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
6:Branch
7:IfTrue
8:IfFalse
22:
5:JSGreater
4:JSAdd
Registers
r0
Accumulator
Parent
8:IfFalse
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
7:IfTrue
6:Branch
4:JSAdd
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
8:IfFalse
9:JSSubtract
22:
5:JSGreater
4:JSAdd
Registers
r0
Accumulator
Parent
8:IfFalse
2:Parameter[2]
1:Parameter[1]
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
7:IfTrue
6:Branch
9:JSSubtract
4:JSAdd
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
8:IfFalse
9:JSSubtract
22:
5:JSGreater
4:JSAdd
Registers
r0
Accumulator
Parent
8:IfFalse
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
7:IfTrue
6:Branch
9:JSSubtract
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
8:IfFalse
9:JSSubtract
22:
5:JSGreater
4:JSAdd
Registers
r0
Accumulator
Parent
8:IfFalse
9:JSSubtract
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
7:IfTrue
6:Branch
9:JSSubtract
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
8:IfFalse
9:JSSubtract
22:
5:JSGreater
4:JSAdd
Registers
r0
Accumulator
Parent
8:IfFalse
9:JSSubtract
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
7:IfTrue
6:Branch
9:JSSubtract
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
8:IfFalse
9:JSSubtract
22:
5:JSGreater
4:JSAdd
Registers
r0
Accumulator
Parent
8:IfFalse
9:JSSubtract
10:Merge
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
7:IfTrue
6:Branch
9:JSSubtract
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
8:IfFalse
9:JSSubtract
22:
5:JSGreater
4:JSAdd
Registers
r0
Accumulator
Parent
8:IfFalse
9:JSSubtract
10:Merge
11:Phi
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
7:IfTrue
6:Branch
11:Phi
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
8:IfFalse
9:JSSubtract
22:
5:JSGreater
4:JSAdd
Registers
r0
Accumulator
Parent
8:IfFalse
9:JSSubtract
10:Merge
11:Phi
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
7:IfTrue
6:Branch
11:Phi
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
8:IfFalse
9:JSSubtract
22:
9:JSSubtract
10:Merge
11:Phi
12:Phi
5:JSGreater
4:JSAdd
Registers
r0
Accumulator
Parent
8:IfFalse
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
7:IfTrue
6:Branch
11:Phi
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
8:IfFalse
9:JSSubtract
22:
5:JSGreater
4:JSAdd
Registers
r0
Accumulator
Parent
8:IfFalse
12:Phi
10:Merge
11:Phi
12:Phi
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
7:IfTrue
6:Branch
11:Phi
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
8:IfFalse
9:JSSubtract
11:Phi
10:Merge
11:Phi
12:Phi
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
7:IfTrue
6:Branch
11:Phi
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
8:IfFalse
9:JSSubtract
11:Phi
10:Merge
11:Phi
12:Phi
13:Return
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
7:IfTrue
6:Branch
4:JSAdd
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
8:IfFalse
9:JSSubtract
22:
5:JSGreater
4:JSAdd
Registers
r0
Accumulator
Parent
8:IfFalse
2:Parameter[2]
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
7:IfTrue
6:Branch
4:JSAdd
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
8:IfFalse
22:
5:JSGreater
4:JSAdd
Registers
r0
Accumulator
Parent
8:IfFalse
2:Parameter[2]
9:FrameState
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
7:IfTrue
6:Branch
4:JSAdd
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
8:IfFalse
22:
5:JSGreater
4:JSAdd
Registers
r0
Accumulator
Parent
8:IfFalse
2:Parameter[2]
9:FrameState
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
7:IfTrue
6:Branch
4:JSAdd
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
8:IfFalse
22:
5:JSGreater
4:JSAdd
Registers
r0
Accumulator
Parent
8:IfFalse
2:Parameter[2]
9:FrameState
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
7:IfTrue
6:Branch
4:JSAdd
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
1:Parameter[1]
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
8:IfFalse
22:
5:JSGreater
4:JSAdd
Registers
r0
Accumulator
Parent
8:IfFalse
2:Parameter[2]
9:FrameState
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
7:IfTrue
6:Branch
4:JSAdd
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
8:IfFalse
10:JSSubtract
22:
5:JSGreater
4:JSAdd
Registers
r0
Accumulator
Parent
8:IfFalse
2:Parameter[2]
9:FrameState
1:Parameter[1]
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
7:IfTrue
6:Branch
4:JSAdd
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
1:Parameter[1]
2:Parameter[2]
0:Start
2:Parameter[2]
3:StackCheck
4:JSAdd
5:JSGreater
8:IfFalse
10:JSSubtract
22:
5:JSGreater
4:JSAdd
Registers
r0
Accumulator
Parent
8:IfFalse
2:Parameter[2]
9:FrameState
1:Parameter[1]
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
0xba8320fd
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
0x1237ab57
0x1237ab57
0xfe902ab5
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Building a graph
0xba8320fd
0 : 7d StackCheck
1 : 1c 02 Ldar a1
3 : 28 03 02 Add a0, [2]
6 : 1d fa Star r0
8 : 1c 02 Ldar a1
10 : 4f 03 03 TestGreaterThan a0, [3]
13 : 74 09 JumpIfFalse [9] (@22)
15 : 1c 02 Ldar a1
17 : 29 03 04 Sub a0, [4]
20 : 1d fa Star r0
22 : 1c fa Ldar r0
24 : 81 Return
Parameters
Registers
a0
a1
r0
Accumulator
0x1237ab57
0xad80b1cf
0xfe902ab5
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Bytecode Restrictions to Simplifying Graph Creation
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Static analysis of bytecode
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Liveness analysis
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Liveness analysis
100 MB (21%)
56 ms
(12%)
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Liveness analysis
93 MB (2.5%)
114 ms
(1.1%)
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Liveness analysis
21%
6.8%
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Burning away complex control (Generators)
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Burning away complex control (Generators)
function* f() {
var i = 0;
while (true) {
yield i++;� }
}
function f(hidden_token) {
switch(hidden_token)
case %normal%: break;
case %resume%: goto loop;
var i = 0;
loop:
switch(hidden_token)
case %normal%: break;
case %resume%: goto resume;
hidden_token = %resume%;
return i++;
resume:
hidden_token = %normal%;� goto loop;
}
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Burning away complex control (try-finally)
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Burning away complex control (try-finally)
try {
if a() return;
} finally {
b();
}�
try:
if a() {
finally_token = %return%;
goto finally;
}
finally_token = %fallthrough%;
goto finally;
throw_handler:
finally_token = %throw%;
finally:
b();
switch(finally_token)
case %return%: return;
case %throw%: rethrow();
case %fallthrough%: break;
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Performance Results
Code Memory Usage (Real Websites)
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Ignition vs Full-Codegen
Octane (Nexus 5)�Crankshaft and TurboFan disabled
Better
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Ignition vs Full-Codegen
Octane (Nexus 5)�Crankshaft and TurboFan disabled
Better
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Octane Performance
Full-Codegen + Crankshaft
Ignition + Crankshaft
Ignition + Turbofan
Better
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Octane Performance
Full-Codegen + Crankshaft
Ignition + Crankshaft
Ignition + Turbofan
40% slower
75% slower
<5% slower
15% slower
Better
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Speedometer Performance
Better
Full-Codegen + Crankshaft
Ignition + Crankshaft
Ignition + Turbofan
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Speedometer Performance
Better
Full-Codegen + Crankshaft
Ignition + Crankshaft
Ignition + Turbofan
14% slower
<1% slower
10% slower
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Startup Time (Real Websites)
Inbox
BBC News (AMP)
Page Load (ms)
Default
Ignition
Default
Ignition
Default
Ignition
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Startup Time (Real Websites)
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Where time is spent (Real Websites)
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem
Summary
Source: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis non erat sem