@samitouri / QOS-React / commits / 0c5fc52c47

Refactor VisualizeHIRMermaid

- Get rid of `indent` as it was making the code hard to read - Remove unnecessary 2nd iteration over blocks - Remove extra newline between the bb subgraphs and the jumps section - Remove trailing spaces - Remove newlines between each subgraph and jump

Lauren Tan committed Nov 13, 2022 at 16:07 UTC 0c5fc52c479fd47526997ec1d0bcff23ff623c6f
53 files changed +685 -1036
compiler/forget/src/HIR/VisualizeHIRMermaid.ts
+82 -76
@@ -2,6 +2,9 @@ import { assertExhaustive } from "../Common/utils";
2 import { BasicBlock, BlockId, HIRFunction, Terminal } from "./HIR";
3 import { printInstruction, printPlace } from "./PrintHIR";
4
5 +const INSTRUCTIONS_NODE_NAME = "instrs";
6 +const TERMINAL_NODE_NAME = "terminal";
7 +
8 enum MermaidFlowchartDirection {
9 TopBottom = "TB", // top to bottom
10 TopDown = "TD", // top-down/ same as top to bottom
@@ -10,117 +13,138 @@ enum MermaidFlowchartDirection {
13 LeftRight = "LR", // left to right
14 }
15
13 -function indent(str: string, level: number = 1) {
14 - const leadingSpaces = " ".repeat(level * 2);
15 - return str
16 - .split("\n")
17 - .map((line) => `${leadingSpaces}${line}`)
18 - .join("\n");
19 -}
20 -
16 function printBlockId(id: BlockId): string {
17 return `bb${id}`;
18 }
19
25 -function printJump(from: BlockId, to: BlockId, label: string | null): string {
20 +/**
21 + * Prints a mermaid arrow with optional label connecting BasicBlocks for use in the "Jumps" section.
22 + */
23 +function printJumpArrow(
24 + from: BlockId,
25 + to: BlockId,
26 + label: string | null
27 +): string {
28 const fromId = printBlockId(from);
29 const toId = printBlockId(to);
30 if (label != null) {
29 - return `${fromId}_terminal -- ${label} --> ${toId}\n`;
31 + return `${fromId}_${TERMINAL_NODE_NAME} -- ${label} --> ${toId}\n`;
32 }
31 - return `${fromId}_terminal --> ${toId}\n`;
33 + return `${fromId}_${TERMINAL_NODE_NAME} --> ${toId}\n`;
34 }
35
34 -function visualizeInstructions({ id, instructions }: BasicBlock): string {
35 - return (
36 - `${printBlockId(id)}_instrs["\n` +
37 - indent(
38 - instructions
39 - .map((instr) => printInstruction(instr).replaceAll('"', "'"))
40 - .join("\n"),
41 - 2
42 - ) +
43 - indent('\n"]')
44 - );
36 +/**
37 + * Prints a mermaid arrow connecting a BasicBlock's instructions to its Terminal for use in the
38 + * "Basic Blocks" section.
39 + */
40 +function printTerminalArrow(blockId: BlockId, block: BasicBlock) {
41 + const bbId = printBlockId(blockId);
42 + if (block.instructions.length > 0) {
43 + return `${bbId}_${INSTRUCTIONS_NODE_NAME} --> ${bbId}_${TERMINAL_NODE_NAME}(["${printTerminalLabel(
44 + block.terminal
45 + )}"])`;
46 + }
47 + return `${bbId}_${TERMINAL_NODE_NAME}(["${printTerminalLabel(
48 + block.terminal
49 + )}"])`;
50 }
51
47 -function visualizeTerminal(terminal: Terminal) {
48 - let buffer = "";
52 +/**
53 + * Prints a BasicBlock as a mermaid `subgraph`, with instructions as a single multiline mermaid node
54 + * and the terminal as an arrow connecting the instruction node with the terminal.
55 + */
56 +function printBlockSubgraphs(blockId: BlockId, block: BasicBlock) {
57 + const buffer = [];
58 + const bbId = printBlockId(blockId);
59 + const instructions = block.instructions
60 + .map((instr) => ` ${printInstruction(instr).replaceAll('"', "'")}\n`)
61 + .join("");
62 + buffer.push(` subgraph ${bbId}\n`);
63 + if (block.instructions.length > 0) {
64 + buffer.push(` ${bbId}_${INSTRUCTIONS_NODE_NAME}["\n`);
65 + buffer.push(instructions);
66 + buffer.push(' "]\n');
67 + }
68 + buffer.push(` ${printTerminalArrow(blockId, block)}`);
69 + buffer.push("\n end\n");
70 + return buffer.join("");
71 +}
72 +
73 +function printTerminalLabel(terminal: Terminal): string {
74 + const buffer = [];
75 switch (terminal.kind) {
76 case "if": {
51 - buffer = buffer.concat(`If (${printPlace(terminal.test)})`);
77 + buffer.push(`If (${printPlace(terminal.test)})`);
78 break;
79 }
80 case "goto": {
55 - buffer = buffer.concat("Goto");
81 + buffer.push("Goto");
82 break;
83 }
84 case "return": {
85 if (terminal.value != null) {
60 - buffer = buffer.concat(`Return ${printPlace(terminal.value)}`);
86 + buffer.push(`Return ${printPlace(terminal.value)}`);
87 } else {
62 - buffer = buffer.concat("Return");
88 + buffer.push("Return");
89 }
90 break;
91 }
92 case "switch":
67 - buffer = buffer.concat(`Switch (${printPlace(terminal.test)})`);
93 + buffer.push(`Switch (${printPlace(terminal.test)})`);
94 break;
95 case "throw":
70 - buffer = buffer.concat(`Throw ${printPlace(terminal.value)}`);
96 + buffer.push(`Throw ${printPlace(terminal.value)}`);
97 break;
98 case "while":
73 - buffer = buffer.concat("While");
99 + buffer.push("While");
100 break;
101 default:
102 assertExhaustive(terminal, `unhandled terminal ${terminal}`);
103 }
78 - return buffer;
104 + return buffer.join("");
105 }
106
81 -function visualizeJump(blockId: BlockId, terminal: Terminal): string {
82 - let buffer = "";
107 +function printTerminalArrows(blockId: BlockId, terminal: Terminal): string {
108 + const buffer = [];
109 switch (terminal.kind) {
110 case "if": {
85 - buffer = buffer.concat(printJump(blockId, terminal.consequent, "then"));
86 - buffer = buffer.concat(printJump(blockId, terminal.alternate, "else"));
111 + buffer.push(printJumpArrow(blockId, terminal.consequent, "then"));
112 + buffer.push(printJumpArrow(blockId, terminal.alternate, "else"));
113 if (
114 terminal.fallthrough != null &&
115 terminal.alternate !== terminal.fallthrough
116 ) {
91 - buffer = buffer.concat(
92 - printJump(blockId, terminal.fallthrough, "fallthrough")
117 + buffer.push(
118 + printJumpArrow(blockId, terminal.fallthrough, "fallthrough")
119 );
120 }
121 break;
122 }
123 case "goto": {
98 - buffer = buffer.concat(printJump(blockId, terminal.block, null));
124 + buffer.push(printJumpArrow(blockId, terminal.block, null));
125 break;
126 }
127 case "switch": {
128 terminal.cases.forEach((case_) => {
129 if (case_.test != null) {
104 - buffer = buffer.concat(
105 - printJump(blockId, case_.block, printPlace(case_.test))
130 + buffer.push(
131 + printJumpArrow(blockId, case_.block, printPlace(case_.test))
132 );
133 } else {
108 - buffer = buffer.concat(printJump(blockId, case_.block, "default"));
134 + buffer.push(printJumpArrow(blockId, case_.block, "default"));
135 }
136 });
137 if (terminal.fallthrough != null) {
112 - buffer = buffer.concat(
113 - printJump(blockId, terminal.fallthrough, "fallthrough")
138 + buffer.push(
139 + printJumpArrow(blockId, terminal.fallthrough, "fallthrough")
140 );
141 }
142 break;
143 }
144 case "while": {
119 - buffer = buffer.concat(printJump(blockId, terminal.test, "test"));
120 - buffer = buffer.concat(printJump(blockId, terminal.loop, "loop"));
121 - buffer = buffer.concat(
122 - printJump(blockId, terminal.fallthrough, "fallthrough")
123 - );
145 + buffer.push(printJumpArrow(blockId, terminal.test, "test"));
146 + buffer.push(printJumpArrow(blockId, terminal.loop, "loop"));
147 + buffer.push(printJumpArrow(blockId, terminal.fallthrough, "fallthrough"));
148 break;
149 }
150 case "throw":
@@ -130,7 +154,7 @@ function visualizeJump(blockId: BlockId, terminal: Terminal): string {
154 default:
155 assertExhaustive(terminal, `unhandled terminal ${terminal}`);
156 }
133 - return buffer;
157 + return buffer.map((line) => ` ${line}`).join("");
158 }
159
160 /**
@@ -142,39 +166,21 @@ export default function visualizeHIRMermaid(fn: HIRFunction): string {
166 const jumps = [];
167
168 for (const [blockId, block] of ir.blocks) {
145 - let buffer;
146 - const bbId = printBlockId(blockId);
147 - buffer = indent(`subgraph ${bbId}\n`);
148 - if (block.instructions.length > 0) {
149 - buffer = buffer.concat(indent(visualizeInstructions(block)));
150 - buffer = buffer.concat(
151 - indent(
152 - `\n${bbId}_instrs --> ${bbId}_terminal(["${visualizeTerminal(
153 - block.terminal
154 - )}"])`,
155 - 2
156 - )
157 - );
158 - } else {
159 - buffer = buffer.concat(
160 - indent(`${bbId}_terminal(["${visualizeTerminal(block.terminal)}"])`)
161 - );
169 + const subgraph = printBlockSubgraphs(blockId, block);
170 + const jump = printTerminalArrows(blockId, block.terminal);
171 +
172 + if (subgraph.length > 0) {
173 + subgraphs.push(subgraph);
174 }
163 - buffer = buffer.concat(indent("\nend\n"));
164 - subgraphs.push(buffer);
165 - }
175
167 - for (const [blockId, block] of ir.blocks) {
168 - const jump = visualizeJump(blockId, block.terminal);
176 if (jump.length > 0) {
170 - jumps.push(indent(jump));
177 + jumps.push(jump);
178 }
179 }
180
181 return `flowchart ${MermaidFlowchartDirection.TopBottom}
182 %% Basic Blocks
176 -${subgraphs.length ? subgraphs.join("\n") : " %% empty"}
177 -
183 +${subgraphs.length ? subgraphs.join("") : " %% empty"}
184 %% Jumps
179 -${jumps.length ? jumps.join("\n") : " %% empty"}`;
185 +${jumps.length ? jumps.join("") : " %% empty"}`;
186 }
compiler/forget/src/__tests__/fixtures/hir/call.expect.md
+4 -6
@@ -28,9 +28,8 @@ bb0:
28 flowchart TB
29 %% Basic Blocks
30 subgraph bb0
31 - bb0_terminal(["Return"])
31 + bb0_terminal(["Return"])
32 end
33 -
33
34 %% Jumps
35 %% empty
@@ -73,11 +72,10 @@ flowchart TB
72 [5] Let mutate _$13 = JSX <read $12 a={freeze a$10} ></read $12>
73 [6] Call mutate foo$4(mutate b$11)
74 [7] Const mutate $14 = 'div'
76 - [8] Const mutate $15 = JSX <read $14 a={read a$10} b={freeze b$11} ></read $14>
77 - "]
78 - bb0_instrs --> bb0_terminal(["Return read $15"])
75 + [8] Const mutate $15 = JSX <read $14 a={read a$10} b={freeze b$11} ></read $14>
76 + "]
77 + bb0_instrs --> bb0_terminal(["Return read $15"])
78 end
80 -
79
80 %% Jumps
81 %% empty
compiler/forget/src/__tests__/fixtures/hir/complex-while.expect.md
+7 -17
@@ -42,46 +42,36 @@ bb1:
42 flowchart TB
43 %% Basic Blocks
44 subgraph bb0
45 - bb0_terminal(["If (read a$4)"])
45 + bb0_terminal(["If (read a$4)"])
46 end
47 -
47 subgraph bb3
49 - bb3_terminal(["While"])
48 + bb3_terminal(["While"])
49 end
51 -
50 subgraph bb4
53 - bb4_terminal(["If (read b$5)"])
51 + bb4_terminal(["If (read b$5)"])
52 end
55 -
53 subgraph bb6
57 - bb6_terminal(["If (read c$6)"])
54 + bb6_terminal(["If (read c$6)"])
55 end
59 -
56 subgraph bb7
61 - bb7_terminal(["Goto"])
57 + bb7_terminal(["Goto"])
58 end
63 -
59 subgraph bb1
65 - bb1_terminal(["Return"])
60 + bb1_terminal(["Return"])
61 end
67 -
62
63 %% Jumps
64 bb0_terminal -- then --> bb3
65 bb0_terminal -- else --> bb1
72 -
66 bb3_terminal -- test --> bb4
67 bb3_terminal -- loop --> bb6
68 bb3_terminal -- fallthrough --> bb1
76 -
69 bb4_terminal -- then --> bb6
70 bb4_terminal -- else --> bb1
79 -
71 bb6_terminal -- then --> bb1
72 bb6_terminal -- else --> bb7
82 -
73 bb7_terminal --> bb4
84 -
74 +
75 ```
76
77 ## Code
compiler/forget/src/__tests__/fixtures/hir/component.expect.md
+23 -41
@@ -101,60 +101,51 @@ flowchart TB
101 [3] Const mutate renderedItems$29[3:14] = Array []
102 [4] Const mutate seen$30[4:11] = New mutate Set$6()
103 [5] Const mutate $31 = 0
104 - [6] Const mutate max$32 = Call mutate Math$8.max(read $31, read maxItems$28)
105 - "]
106 - bb0_instrs --> bb0_terminal(["Goto"])
104 + [6] Const mutate max$32 = Call mutate Math$8.max(read $31, read maxItems$28)
105 + "]
106 + bb0_instrs --> bb0_terminal(["Goto"])
107 end
108 -
108 subgraph bb1
110 - bb1_terminal(["If (read items$27)"])
109 + bb1_terminal(["If (read items$27)"])
110 end
112 -
111 subgraph bb3
112 bb3_instrs["
113 [7] Const mutate $34 = null
116 - [8] Const mutate $36 = Binary read item$10 == read $34
117 - "]
118 - bb3_instrs --> bb3_terminal(["If (read $36)"])
114 + [8] Const mutate $36 = Binary read item$10 == read $34
115 + "]
116 + bb3_instrs --> bb3_terminal(["If (read $36)"])
117 end
120 -
118 subgraph bb8
119 bb8_instrs["
123 - [9] Const mutate $13 = read $36
124 - "]
125 - bb8_instrs --> bb8_terminal(["Goto"])
120 + [9] Const mutate $13 = read $36
121 + "]
122 + bb8_instrs --> bb8_terminal(["Goto"])
123 end
127 -
124 subgraph bb9
125 bb9_instrs["
130 - [10] Const mutate $13 = Call mutate seen$30.has(mutate item$10)
131 - "]
132 - bb9_instrs --> bb9_terminal(["Goto"])
126 + [10] Const mutate $13 = Call mutate seen$30.has(mutate item$10)
127 + "]
128 + bb9_instrs --> bb9_terminal(["Goto"])
129 end
134 -
130 subgraph bb7
136 - bb7_terminal(["If (read $13)"])
131 + bb7_terminal(["If (read $13)"])
132 end
138 -
133 subgraph bb5
140 - bb5_terminal(["Goto"])
134 + bb5_terminal(["Goto"])
135 end
142 -
136 subgraph bb4
137 bb4_instrs["
138 [11] Call mutate seen$30.add(mutate item$10)
139 [12] Const mutate $43 = 'div'
140 [13] Const mutate $44 = JSX <read $43>{read item$10}</read $43>
141 [14] Call mutate renderedItems$29.push(read $44)
149 - [15] Const mutate $49 = Binary read renderedItems$29.length >= read max$32
150 - "]
151 - bb4_instrs --> bb4_terminal(["If (read $49)"])
142 + [15] Const mutate $49 = Binary read renderedItems$29.length >= read max$32
143 + "]
144 + bb4_instrs --> bb4_terminal(["If (read $49)"])
145 end
153 -
146 subgraph bb10
155 - bb10_terminal(["Goto"])
147 + bb10_terminal(["Goto"])
148 end
157 -
149 subgraph bb2
150 bb2_instrs["
151 [16] Const mutate count$52 = read renderedItems$29.length
@@ -165,36 +156,27 @@ flowchart TB
156 [21] Const mutate $57 = JSX <read $55>{freeze count$52}{read $56}</read $55>
157 [22] Const mutate $58 = '\n '
158 [23] Const mutate $59 = '\n '
168 - [24] Const mutate $60 = JSX <read $53>{read $54}{read $57}{read $58}{freeze renderedItems$29}{read $59}</read $53>
169 - "]
170 - bb2_instrs --> bb2_terminal(["Return read $60"])
159 + [24] Const mutate $60 = JSX <read $53>{read $54}{read $57}{read $58}{freeze renderedItems$29}{read $59}</read $53>
160 + "]
161 + bb2_instrs --> bb2_terminal(["Return read $60"])
162 end
172 -
163
164 %% Jumps
165 bb0_terminal --> bb1
176 -
166 bb1_terminal -- then --> bb3
167 bb1_terminal -- else --> bb2
179 -
168 bb3_terminal -- then --> bb8
169 bb3_terminal -- else --> bb9
170 bb3_terminal -- fallthrough --> bb7
183 -
171 bb8_terminal --> bb7
185 -
172 bb9_terminal --> bb7
187 -
173 bb7_terminal -- then --> bb5
174 bb7_terminal -- else --> bb4
190 -
175 bb5_terminal --> bb1
192 -
176 bb4_terminal -- then --> bb2
177 bb4_terminal -- else --> bb10
195 -
178 bb10_terminal --> bb1
197 -
179 +
180 ```
181
182 ## Code
compiler/forget/src/__tests__/fixtures/hir/conditional-break.expect.md
+50 -67
@@ -99,30 +99,27 @@ flowchart TB
99 subgraph bb0
100 bb0_instrs["
101 [1] Const mutate a_DEBUG$5[1:4] = Array []
102 - [2] Call mutate a_DEBUG$5.push(read props$4.a)
103 - "]
104 - bb0_instrs --> bb0_terminal(["If (read props$4.b)"])
102 + [2] Call mutate a_DEBUG$5.push(read props$4.a)
103 + "]
104 + bb0_instrs --> bb0_terminal(["If (read props$4.b)"])
105 end
106 -
106 subgraph bb2
107 bb2_instrs["
109 - [3] Const mutate $6 = null
110 - "]
111 - bb2_instrs --> bb2_terminal(["Return read $6"])
108 + [3] Const mutate $6 = null
109 + "]
110 + bb2_instrs --> bb2_terminal(["Return read $6"])
111 end
113 -
112 subgraph bb1
113 bb1_instrs["
116 - [4] Call mutate a_DEBUG$5.push(read props$4.d)
117 - "]
118 - bb1_instrs --> bb1_terminal(["Return freeze a_DEBUG$5"])
114 + [4] Call mutate a_DEBUG$5.push(read props$4.d)
115 + "]
116 + bb1_instrs --> bb1_terminal(["Return freeze a_DEBUG$5"])
117 end
120 -
118
119 %% Jumps
120 bb0_terminal -- then --> bb2
121 bb0_terminal -- else --> bb1
125 -
122 +
123 ```
124
125 ## Code
@@ -165,32 +162,28 @@ flowchart TB
162 subgraph bb0
163 bb0_instrs["
164 [1] Const mutate a$4[1:4] = Array []
168 - [2] Call mutate a$4.push(read props$3.a)
169 - "]
170 - bb0_instrs --> bb0_terminal(["If (read props$3.b)"])
165 + [2] Call mutate a$4.push(read props$3.a)
166 + "]
167 + bb0_instrs --> bb0_terminal(["If (read props$3.b)"])
168 end
172 -
169 subgraph bb2
170 bb2_instrs["
175 - [3] Call mutate a$4.push(read props$3.c)
176 - "]
177 - bb2_instrs --> bb2_terminal(["Goto"])
171 + [3] Call mutate a$4.push(read props$3.c)
172 + "]
173 + bb2_instrs --> bb2_terminal(["Goto"])
174 end
179 -
175 subgraph bb1
176 bb1_instrs["
182 - [4] Call mutate a$4.push(read props$3.d)
183 - "]
184 - bb1_instrs --> bb1_terminal(["Return freeze a$4"])
177 + [4] Call mutate a$4.push(read props$3.d)
178 + "]
179 + bb1_instrs --> bb1_terminal(["Return freeze a$4"])
180 end
186 -
181
182 %% Jumps
183 bb0_terminal -- then --> bb2
184 bb0_terminal -- else --> bb1
191 -
185 bb2_terminal --> bb1
193 -
186 +
187 ```
188
189 ## Code
@@ -234,31 +227,28 @@ flowchart TB
227 subgraph bb0
228 bb0_instrs["
229 [1] Const mutate a$5[1:5] = Array []
237 - [2] Call mutate a$5.push(read props$4.a)
238 - "]
239 - bb0_instrs --> bb0_terminal(["If (read props$4.b)"])
230 + [2] Call mutate a$5.push(read props$4.a)
231 + "]
232 + bb0_instrs --> bb0_terminal(["If (read props$4.b)"])
233 end
241 -
234 subgraph bb2
235 bb2_instrs["
236 [3] Call mutate a$5.push(read props$4.c)
245 - [4] Const mutate $6 = null
246 - "]
247 - bb2_instrs --> bb2_terminal(["Return read $6"])
237 + [4] Const mutate $6 = null
238 + "]
239 + bb2_instrs --> bb2_terminal(["Return read $6"])
240 end
249 -
241 subgraph bb1
242 bb1_instrs["
252 - [5] Call mutate a$5.push(read props$4.d)
253 - "]
254 - bb1_instrs --> bb1_terminal(["Return freeze a$5"])
243 + [5] Call mutate a$5.push(read props$4.d)
244 + "]
245 + bb1_instrs --> bb1_terminal(["Return freeze a$5"])
246 end
256 -
247
248 %% Jumps
249 bb0_terminal -- then --> bb2
250 bb0_terminal -- else --> bb1
261 -
251 +
252 ```
253
254 ## Code
@@ -302,30 +292,27 @@ flowchart TB
292 subgraph bb0
293 bb0_instrs["
294 [1] Const mutate a$4[1:4] = Array []
305 - [2] Call mutate a$4.push(read props$3.a)
306 - "]
307 - bb0_instrs --> bb0_terminal(["If (read props$3.b)"])
295 + [2] Call mutate a$4.push(read props$3.a)
296 + "]
297 + bb0_instrs --> bb0_terminal(["If (read props$3.b)"])
298 end
309 -
299 subgraph bb2
300 bb2_instrs["
312 - [3] Call mutate a$4.push(read props$3.c)
313 - "]
314 - bb2_instrs --> bb2_terminal(["Return freeze a$4"])
301 + [3] Call mutate a$4.push(read props$3.c)
302 + "]
303 + bb2_instrs --> bb2_terminal(["Return freeze a$4"])
304 end
316 -
305 subgraph bb1
306 bb1_instrs["
319 - [4] Call mutate a$4.push(read props$3.d)
320 - "]
321 - bb1_instrs --> bb1_terminal(["Return freeze a$4"])
307 + [4] Call mutate a$4.push(read props$3.d)
308 + "]
309 + bb1_instrs --> bb1_terminal(["Return freeze a$4"])
310 end
323 -
311
312 %% Jumps
313 bb0_terminal -- then --> bb2
314 bb0_terminal -- else --> bb1
328 -
315 +
316 ```
317
318 ## Code
@@ -369,32 +356,28 @@ flowchart TB
356 subgraph bb0
357 bb0_instrs["
358 [1] Const mutate a$4[1:4] = Array []
372 - [2] Call mutate a$4.push(read props$3.a)
373 - "]
374 - bb0_instrs --> bb0_terminal(["If (read props$3.b)"])
359 + [2] Call mutate a$4.push(read props$3.a)
360 + "]
361 + bb0_instrs --> bb0_terminal(["If (read props$3.b)"])
362 end
376 -
363 subgraph bb2
364 bb2_instrs["
379 - [3] Call mutate a$4.push(read props$3.c)
380 - "]
381 - bb2_instrs --> bb2_terminal(["Goto"])
365 + [3] Call mutate a$4.push(read props$3.c)
366 + "]
367 + bb2_instrs --> bb2_terminal(["Goto"])
368 end
383 -
369 subgraph bb1
370 bb1_instrs["
386 - [4] Call mutate a$4.push(read props$3.d)
387 - "]
388 - bb1_instrs --> bb1_terminal(["Return freeze a$4"])
371 + [4] Call mutate a$4.push(read props$3.d)
372 + "]
373 + bb1_instrs --> bb1_terminal(["Return freeze a$4"])
374 end
390 -
375
376 %% Jumps
377 bb0_terminal -- then --> bb1
378 bb0_terminal -- else --> bb2
395 -
379 bb2_terminal --> bb1
397 -
380 +
381 ```
382
383 ## Code
compiler/forget/src/__tests__/fixtures/hir/conditional-on-mutable.expect.md
+30 -48
@@ -95,48 +95,40 @@ flowchart TB
95 subgraph bb0
96 bb0_instrs["
97 [1] Const mutate a$7[1:3] = Array []
98 - [2] Const mutate b$8[2:4] = Array []
99 - "]
100 - bb0_instrs --> bb0_terminal(["If (read b$8)"])
98 + [2] Const mutate b$8[2:4] = Array []
99 + "]
100 + bb0_instrs --> bb0_terminal(["If (read b$8)"])
101 end
102 -
102 subgraph bb2
103 bb2_instrs["
105 - [3] Call mutate a$7.push(read props$6.p0)
106 - "]
107 - bb2_instrs --> bb2_terminal(["Goto"])
104 + [3] Call mutate a$7.push(read props$6.p0)
105 + "]
106 + bb2_instrs --> bb2_terminal(["Goto"])
107 end
109 -
108 subgraph bb1
111 - bb1_terminal(["If (read props$6.p1)"])
109 + bb1_terminal(["If (read props$6.p1)"])
110 end
113 -
111 subgraph bb4
112 bb4_instrs["
116 - [4] Call mutate b$8.push(read props$6.p2)
117 - "]
118 - bb4_instrs --> bb4_terminal(["Goto"])
113 + [4] Call mutate b$8.push(read props$6.p2)
114 + "]
115 + bb4_instrs --> bb4_terminal(["Goto"])
116 end
120 -
117 subgraph bb3
118 bb3_instrs["
123 - [5] Const mutate $16 = JSX <read Foo$4 a={freeze a$7} b={freeze b$8} ></read Foo$4>
124 - "]
125 - bb3_instrs --> bb3_terminal(["Return read $16"])
119 + [5] Const mutate $16 = JSX <read Foo$4 a={freeze a$7} b={freeze b$8} ></read Foo$4>
120 + "]
121 + bb3_instrs --> bb3_terminal(["Return read $16"])
122 end
127 -
123
124 %% Jumps
125 bb0_terminal -- then --> bb2
126 bb0_terminal -- else --> bb1
132 -
127 bb2_terminal --> bb1
134 -
128 bb1_terminal -- then --> bb4
129 bb1_terminal -- else --> bb3
137 -
130 bb4_terminal --> bb3
139 -
131 +
132 ```
133
134 ## Code
@@ -191,48 +183,40 @@ flowchart TB
183 bb0_instrs["
184 [1] Const mutate a$9[1:4] = Array []
185 [2] Const mutate b$10[2:5] = Array []
194 - [3] Const mutate $11 = Call mutate mayMutate$4(mutate b$10)
195 - "]
196 - bb0_instrs --> bb0_terminal(["If (read $11)"])
186 + [3] Const mutate $11 = Call mutate mayMutate$4(mutate b$10)
187 + "]
188 + bb0_instrs --> bb0_terminal(["If (read $11)"])
189 end
198 -
190 subgraph bb2
191 bb2_instrs["
201 - [4] Call mutate a$9.push(read props$8.p0)
202 - "]
203 - bb2_instrs --> bb2_terminal(["Goto"])
192 + [4] Call mutate a$9.push(read props$8.p0)
193 + "]
194 + bb2_instrs --> bb2_terminal(["Goto"])
195 end
205 -
196 subgraph bb1
207 - bb1_terminal(["If (read props$8.p1)"])
197 + bb1_terminal(["If (read props$8.p1)"])
198 end
209 -
199 subgraph bb4
200 bb4_instrs["
212 - [5] Call mutate b$10.push(read props$8.p2)
213 - "]
214 - bb4_instrs --> bb4_terminal(["Goto"])
201 + [5] Call mutate b$10.push(read props$8.p2)
202 + "]
203 + bb4_instrs --> bb4_terminal(["Goto"])
204 end
216 -
205 subgraph bb3
206 bb3_instrs["
219 - [6] Const mutate $19 = JSX <read Foo$6 a={freeze a$9} b={freeze b$10} ></read Foo$6>
220 - "]
221 - bb3_instrs --> bb3_terminal(["Return read $19"])
207 + [6] Const mutate $19 = JSX <read Foo$6 a={freeze a$9} b={freeze b$10} ></read Foo$6>
208 + "]
209 + bb3_instrs --> bb3_terminal(["Return read $19"])
210 end
223 -
211
212 %% Jumps
213 bb0_terminal -- then --> bb2
214 bb0_terminal -- else --> bb1
228 -
215 bb2_terminal --> bb1
230 -
216 bb1_terminal -- then --> bb4
217 bb1_terminal -- else --> bb3
233 -
218 bb4_terminal --> bb3
235 -
219 +
220 ```
221
222 ## Code
@@ -266,9 +250,8 @@ bb0:
250 flowchart TB
251 %% Basic Blocks
252 subgraph bb0
269 - bb0_terminal(["Return"])
253 + bb0_terminal(["Return"])
254 end
271 -
255
256 %% Jumps
257 %% empty
@@ -295,9 +278,8 @@ bb0:
278 flowchart TB
279 %% Basic Blocks
280 subgraph bb0
298 - bb0_terminal(["Return"])
281 + bb0_terminal(["Return"])
282 end
300 -
283
284 %% Jumps
285 %% empty
compiler/forget/src/__tests__/fixtures/hir/constructor.expect.md
+4 -6
@@ -28,9 +28,8 @@ bb0:
28 flowchart TB
29 %% Basic Blocks
30 subgraph bb0
31 - bb0_terminal(["Return"])
31 + bb0_terminal(["Return"])
32 end
33 -
33
34 %% Jumps
35 %% empty
@@ -73,11 +72,10 @@ flowchart TB
72 [5] Let mutate _$13 = JSX <read $12 a={freeze a$10} ></read $12>
73 [6] New mutate Foo$4(mutate b$11)
74 [7] Const mutate $14 = 'div'
76 - [8] Const mutate $15 = JSX <read $14 a={read a$10} b={freeze b$11} ></read $14>
77 - "]
78 - bb0_instrs --> bb0_terminal(["Return read $15"])
75 + [8] Const mutate $15 = JSX <read $14 a={read a$10} b={freeze b$11} ></read $14>
76 + "]
77 + bb0_instrs --> bb0_terminal(["Return read $15"])
78 end
80 -
79
80 %% Jumps
81 %% empty
compiler/forget/src/__tests__/fixtures/hir/frozen-after-alias.expect.md
+5 -8
@@ -35,11 +35,10 @@ flowchart TB
35 [1] Const mutate a$5 = Array []
36 [2] Const mutate b$6 = read a$5
37 [3] Call read useFreeze$3(freeze a$5)
38 - [4] Call mutate foo$4(read b$6)
39 - "]
40 - bb0_instrs --> bb0_terminal(["Return"])
38 + [4] Call mutate foo$4(read b$6)
39 + "]
40 + bb0_instrs --> bb0_terminal(["Return"])
41 end
42 -
42
43 %% Jumps
44 %% empty
@@ -70,9 +69,8 @@ bb0:
69 flowchart TB
70 %% Basic Blocks
71 subgraph bb0
73 - bb0_terminal(["Return"])
72 + bb0_terminal(["Return"])
73 end
75 -
74
75 %% Jumps
76 %% empty
@@ -99,9 +97,8 @@ bb0:
97 flowchart TB
98 %% Basic Blocks
99 subgraph bb0
102 - bb0_terminal(["Return"])
100 + bb0_terminal(["Return"])
101 end
104 -
102
103 %% Jumps
104 %% empty
compiler/forget/src/__tests__/fixtures/hir/hook-call.expect.md
+5 -8
@@ -32,9 +32,8 @@ bb0:
32 flowchart TB
33 %% Basic Blocks
34 subgraph bb0
35 - bb0_terminal(["Return"])
35 + bb0_terminal(["Return"])
36 end
37 -
37
38 %% Jumps
39 %% empty
@@ -61,9 +60,8 @@ bb0:
60 flowchart TB
61 %% Basic Blocks
62 subgraph bb0
64 - bb0_terminal(["Return"])
63 + bb0_terminal(["Return"])
64 end
66 -
65
66 %% Jumps
67 %% empty
@@ -104,11 +102,10 @@ flowchart TB
102 [4] Const mutate $13 = '\n '
103 [5] Const mutate $14 = '\n '
104 [6] Const mutate $15 = '\n '
107 - [7] Const mutate $16 = JSX <read Component$0>{read $13}{read x$11}{read $14}{read y$12}{read $15}</read Component$0>
108 - "]
109 - bb0_instrs --> bb0_terminal(["Return read $16"])
105 + [7] Const mutate $16 = JSX <read Component$0>{read $13}{read x$11}{read $14}{read y$12}{read $15}</read Component$0>
106 + "]
107 + bb0_instrs --> bb0_terminal(["Return read $16"])
108 end
111 -
109
110 %% Jumps
111 %% empty
compiler/forget/src/__tests__/fixtures/hir/hooks-freeze-arguments.expect.md
+5 -8
@@ -36,11 +36,10 @@ flowchart TB
36 [1] Const mutate a$4 = Array []
37 [2] Call read useFreeze$2(freeze a$4)
38 [3] Call read useFreeze$2(read a$4)
39 - [4] Call mutate call$3(read a$4)
40 - "]
41 - bb0_instrs --> bb0_terminal(["Return read a$4"])
39 + [4] Call mutate call$3(read a$4)
40 + "]
41 + bb0_instrs --> bb0_terminal(["Return read a$4"])
42 end
43 -
43
44 %% Jumps
45 %% empty
@@ -71,9 +70,8 @@ bb0:
70 flowchart TB
71 %% Basic Blocks
72 subgraph bb0
74 - bb0_terminal(["Return"])
73 + bb0_terminal(["Return"])
74 end
76 -
75
76 %% Jumps
77 %% empty
@@ -100,9 +98,8 @@ bb0:
98 flowchart TB
99 %% Basic Blocks
100 subgraph bb0
103 - bb0_terminal(["Return"])
101 + bb0_terminal(["Return"])
102 end
105 -
103
104 %% Jumps
105 %% empty
compiler/forget/src/__tests__/fixtures/hir/hooks-freeze-possibly-mutable-arguments.expect.md
+15 -23
@@ -55,44 +55,38 @@ flowchart TB
55 bb0_instrs["
56 [1] Const mutate cond$8 = read props$7.cond
57 [2] Const mutate x$9 = read props$7.x
58 - [3] Let mutate a$10 = undefined
59 - "]
60 - bb0_instrs --> bb0_terminal(["If (read cond$8)"])
58 + [3] Let mutate a$10 = undefined
59 + "]
60 + bb0_instrs --> bb0_terminal(["If (read cond$8)"])
61 end
62 -
62 subgraph bb2
63 bb2_instrs["
65 - [4] Reassign mutate a$4 = read x$9
66 - "]
67 - bb2_instrs --> bb2_terminal(["Goto"])
64 + [4] Reassign mutate a$4 = read x$9
65 + "]
66 + bb2_instrs --> bb2_terminal(["Goto"])
67 end
69 -
68 subgraph bb3
69 bb3_instrs["
72 - [5] Reassign mutate a$4 = Array []
73 - "]
74 - bb3_instrs --> bb3_terminal(["Goto"])
70 + [5] Reassign mutate a$4 = Array []
71 + "]
72 + bb3_instrs --> bb3_terminal(["Goto"])
73 end
76 -
74 subgraph bb1
75 bb1_instrs["
76 [6] Call read useFreeze$5(freeze a$4)
77 [7] Call read useFreeze$5(read a$4)
81 - [8] Call mutate call$6(read a$4)
82 - "]
83 - bb1_instrs --> bb1_terminal(["Return read a$4"])
78 + [8] Call mutate call$6(read a$4)
79 + "]
80 + bb1_instrs --> bb1_terminal(["Return read a$4"])
81 end
85 -
82
83 %% Jumps
84 bb0_terminal -- then --> bb2
85 bb0_terminal -- else --> bb3
86 bb0_terminal -- fallthrough --> bb1
91 -
87 bb2_terminal --> bb1
93 -
88 bb3_terminal --> bb1
95 -
89 +
90 ```
91
92 ## Code
@@ -128,9 +122,8 @@ bb0:
122 flowchart TB
123 %% Basic Blocks
124 subgraph bb0
131 - bb0_terminal(["Return"])
125 + bb0_terminal(["Return"])
126 end
133 -
127
128 %% Jumps
129 %% empty
@@ -157,9 +150,8 @@ bb0:
150 flowchart TB
151 %% Basic Blocks
152 subgraph bb0
160 - bb0_terminal(["Return"])
153 + bb0_terminal(["Return"])
154 end
162 -
155
156 %% Jumps
157 %% empty
compiler/forget/src/__tests__/fixtures/hir/independent-across-if.expect.md
+14 -22
@@ -46,9 +46,8 @@ bb0:
46 flowchart TB
47 %% Basic Blocks
48 subgraph bb0
49 - bb0_terminal(["Return"])
49 + bb0_terminal(["Return"])
50 end
51 -
51
52 %% Jumps
53 %% empty
@@ -75,9 +74,8 @@ bb0:
74 flowchart TB
75 %% Basic Blocks
76 subgraph bb0
78 - bb0_terminal(["Return"])
77 + bb0_terminal(["Return"])
78 end
80 -
79
80 %% Jumps
81 %% empty
@@ -104,9 +102,8 @@ bb0:
102 flowchart TB
103 %% Basic Blocks
104 subgraph bb0
107 - bb0_terminal(["Return"])
105 + bb0_terminal(["Return"])
106 end
109 -
107
108 %% Jumps
109 %% empty
@@ -133,9 +130,8 @@ bb0:
130 flowchart TB
131 %% Basic Blocks
132 subgraph bb0
136 - bb0_terminal(["Return"])
133 + bb0_terminal(["Return"])
134 end
138 -
135
136 %% Jumps
137 %% empty
@@ -175,33 +171,29 @@ flowchart TB
171 subgraph bb0
172 bb0_instrs["
173 [1] Const mutate a$9[1:3] = Call mutate compute$3(read props$8.a)
178 - [2] Const mutate b$10[2:4] = Call mutate compute$3(read props$8.b)
179 - "]
180 - bb0_instrs --> bb0_terminal(["If (read props$8.c)"])
174 + [2] Const mutate b$10[2:4] = Call mutate compute$3(read props$8.b)
175 + "]
176 + bb0_instrs --> bb0_terminal(["If (read props$8.c)"])
177 end
182 -
178 subgraph bb2
179 bb2_instrs["
180 [3] Call mutate mutate$5(mutate a$9)
186 - [4] Call mutate mutate$5(mutate b$10)
187 - "]
188 - bb2_instrs --> bb2_terminal(["Goto"])
181 + [4] Call mutate mutate$5(mutate b$10)
182 + "]
183 + bb2_instrs --> bb2_terminal(["Goto"])
184 end
190 -
185 subgraph bb1
186 bb1_instrs["
193 - [5] Const mutate $14 = JSX <read Foo$6 a={freeze a$9} b={freeze b$10} ></read Foo$6>
194 - "]
195 - bb1_instrs --> bb1_terminal(["Return read $14"])
187 + [5] Const mutate $14 = JSX <read Foo$6 a={freeze a$9} b={freeze b$10} ></read Foo$6>
188 + "]
189 + bb1_instrs --> bb1_terminal(["Return read $14"])
190 end
197 -
191
192 %% Jumps
193 bb0_terminal -- then --> bb2
194 bb0_terminal -- else --> bb1
202 -
195 bb2_terminal --> bb1
204 -
196 +
197 ```
198
199 ## Code
compiler/forget/src/__tests__/fixtures/hir/independent.expect.md
+6 -10
@@ -43,11 +43,10 @@ flowchart TB
43 bb0_instrs["
44 [1] Const mutate a$8 = Call mutate compute$3(read props$7.a)
45 [2] Const mutate b$9 = Call mutate compute$3(read props$7.b)
46 - [3] Const mutate $10 = JSX <read Foo$5 a={freeze a$8} b={freeze b$9} ></read Foo$5>
47 - "]
48 - bb0_instrs --> bb0_terminal(["Return read $10"])
46 + [3] Const mutate $10 = JSX <read Foo$5 a={freeze a$8} b={freeze b$9} ></read Foo$5>
47 + "]
48 + bb0_instrs --> bb0_terminal(["Return read $10"])
49 end
50 -
50
51 %% Jumps
52 %% empty
@@ -76,9 +75,8 @@ bb0:
75 flowchart TB
76 %% Basic Blocks
77 subgraph bb0
79 - bb0_terminal(["Return"])
78 + bb0_terminal(["Return"])
79 end
81 -
80
81 %% Jumps
82 %% empty
@@ -105,9 +103,8 @@ bb0:
103 flowchart TB
104 %% Basic Blocks
105 subgraph bb0
108 - bb0_terminal(["Return"])
106 + bb0_terminal(["Return"])
107 end
110 -
108
109 %% Jumps
110 %% empty
@@ -134,9 +131,8 @@ bb0:
131 flowchart TB
132 %% Basic Blocks
133 subgraph bb0
137 - bb0_terminal(["Return"])
134 + bb0_terminal(["Return"])
135 end
139 -
136
137 %% Jumps
138 %% empty
compiler/forget/src/__tests__/fixtures/hir/interdependent-across-if.expect.md
+13 -20
@@ -40,9 +40,8 @@ bb0:
40 flowchart TB
41 %% Basic Blocks
42 subgraph bb0
43 - bb0_terminal(["Return"])
43 + bb0_terminal(["Return"])
44 end
45 -
45
46 %% Jumps
47 %% empty
@@ -69,9 +68,8 @@ bb0:
68 flowchart TB
69 %% Basic Blocks
70 subgraph bb0
72 - bb0_terminal(["Return"])
71 + bb0_terminal(["Return"])
72 end
74 -
73
74 %% Jumps
75 %% empty
@@ -98,9 +96,8 @@ bb0:
96 flowchart TB
97 %% Basic Blocks
98 subgraph bb0
101 - bb0_terminal(["Return"])
99 + bb0_terminal(["Return"])
100 end
103 -
101
102 %% Jumps
103 %% empty
@@ -139,32 +136,28 @@ flowchart TB
136 subgraph bb0
137 bb0_instrs["
138 [1] Const mutate a$9[1:3] = Call mutate compute$3(read props$8.a)
142 - [2] Const mutate b$10[2:3] = Call mutate compute$3(read props$8.b)
143 - "]
144 - bb0_instrs --> bb0_terminal(["If (read props$8.c)"])
139 + [2] Const mutate b$10[2:3] = Call mutate compute$3(read props$8.b)
140 + "]
141 + bb0_instrs --> bb0_terminal(["If (read props$8.c)"])
142 end
146 -
143 subgraph bb2
144 bb2_instrs["
149 - [3] Call mutate foo$5(mutate a$9, mutate b$10)
150 - "]
151 - bb2_instrs --> bb2_terminal(["Goto"])
145 + [3] Call mutate foo$5(mutate a$9, mutate b$10)
146 + "]
147 + bb2_instrs --> bb2_terminal(["Goto"])
148 end
153 -
149 subgraph bb1
150 bb1_instrs["
156 - [4] Const mutate $14 = JSX <read Foo$6 a={freeze a$9} b={freeze b$10} ></read Foo$6>
157 - "]
158 - bb1_instrs --> bb1_terminal(["Return read $14"])
151 + [4] Const mutate $14 = JSX <read Foo$6 a={freeze a$9} b={freeze b$10} ></read Foo$6>
152 + "]
153 + bb1_instrs --> bb1_terminal(["Return read $14"])
154 end
160 -
155
156 %% Jumps
157 bb0_terminal -- then --> bb2
158 bb0_terminal -- else --> bb1
165 -
159 bb2_terminal --> bb1
167 -
160 +
161 ```
162
163 ## Code
compiler/forget/src/__tests__/fixtures/hir/interdependent.expect.md
+6 -10
@@ -45,11 +45,10 @@ flowchart TB
45 [1] Const mutate a$9[1:3] = Call mutate compute$3(read props$8.a)
46 [2] Const mutate b$10[2:3] = Call mutate compute$3(read props$8.b)
47 [3] Call mutate foo$5(mutate a$9, mutate b$10)
48 - [4] Const mutate $11 = JSX <read Foo$6 a={freeze a$9} b={freeze b$10} ></read Foo$6>
49 - "]
50 - bb0_instrs --> bb0_terminal(["Return read $11"])
48 + [4] Const mutate $11 = JSX <read Foo$6 a={freeze a$9} b={freeze b$10} ></read Foo$6>
49 + "]
50 + bb0_instrs --> bb0_terminal(["Return read $11"])
51 end
52 -
52
53 %% Jumps
54 %% empty
@@ -79,9 +78,8 @@ bb0:
78 flowchart TB
79 %% Basic Blocks
80 subgraph bb0
82 - bb0_terminal(["Return"])
81 + bb0_terminal(["Return"])
82 end
84 -
83
84 %% Jumps
85 %% empty
@@ -108,9 +106,8 @@ bb0:
106 flowchart TB
107 %% Basic Blocks
108 subgraph bb0
111 - bb0_terminal(["Return"])
109 + bb0_terminal(["Return"])
110 end
113 -
111
112 %% Jumps
113 %% empty
@@ -137,9 +134,8 @@ bb0:
134 flowchart TB
135 %% Basic Blocks
136 subgraph bb0
140 - bb0_terminal(["Return"])
137 + bb0_terminal(["Return"])
138 end
142 -
139
140 %% Jumps
141 %% empty
compiler/forget/src/__tests__/fixtures/hir/jsx-fragment.expect.md
+3 -4
@@ -50,11 +50,10 @@ flowchart TB
50 [8] Const mutate $21 = '\n '
51 [9] Const mutate $22 = JSX <read $17>{read $18}{read $20}{read $21}</read $17>
52 [10] Const mutate $23 = '\n '
53 - [11] Const mutate $24 = JsxFragment [read $14, read props$13.greeting, read $15, read $16, read $22, read $23]
54 - "]
55 - bb0_instrs --> bb0_terminal(["Return read $24"])
53 + [11] Const mutate $24 = JsxFragment [read $14, read props$13.greeting, read $15, read $16, read $22, read $23]
54 + "]
55 + bb0_instrs --> bb0_terminal(["Return read $24"])
56 end
57 -
57
58 %% Jumps
59 %% empty
compiler/forget/src/__tests__/fixtures/hir/logical-expression.expect.md
+35 -55
@@ -45,39 +45,33 @@ flowchart TB
45 %% Basic Blocks
46 subgraph bb0
47 bb0_instrs["
48 - [1] Const mutate $5 = Call mutate f$1()
49 - "]
50 - bb0_instrs --> bb0_terminal(["If (read $5)"])
48 + [1] Const mutate $5 = Call mutate f$1()
49 + "]
50 + bb0_instrs --> bb0_terminal(["If (read $5)"])
51 end
52 -
52 subgraph bb2
53 bb2_instrs["
55 - [2] Const mutate $3 = Call mutate g$4()
56 - "]
57 - bb2_instrs --> bb2_terminal(["Goto"])
54 + [2] Const mutate $3 = Call mutate g$4()
55 + "]
56 + bb2_instrs --> bb2_terminal(["Goto"])
57 end
59 -
58 subgraph bb3
59 bb3_instrs["
62 - [3] Const mutate $3 = read $5
63 - "]
64 - bb3_instrs --> bb3_terminal(["Goto"])
60 + [3] Const mutate $3 = read $5
61 + "]
62 + bb3_instrs --> bb3_terminal(["Goto"])
63 end
66 -
64 subgraph bb1
68 - bb1_terminal(["Return freeze $3"])
65 + bb1_terminal(["Return freeze $3"])
66 end
70 -
67
68 %% Jumps
69 bb0_terminal -- then --> bb2
70 bb0_terminal -- else --> bb3
71 bb0_terminal -- fallthrough --> bb1
76 -
72 bb2_terminal --> bb1
78 -
73 bb3_terminal --> bb1
80 -
74 +
75 ```
76
77 ## Code
@@ -117,39 +111,33 @@ flowchart TB
111 %% Basic Blocks
112 subgraph bb0
113 bb0_instrs["
120 - [1] Const mutate $5 = Call mutate f$1()
121 - "]
122 - bb0_instrs --> bb0_terminal(["If (read $5)"])
114 + [1] Const mutate $5 = Call mutate f$1()
115 + "]
116 + bb0_instrs --> bb0_terminal(["If (read $5)"])
117 end
124 -
118 subgraph bb2
119 bb2_instrs["
127 - [2] Const mutate $3 = read $5
128 - "]
129 - bb2_instrs --> bb2_terminal(["Goto"])
120 + [2] Const mutate $3 = read $5
121 + "]
122 + bb2_instrs --> bb2_terminal(["Goto"])
123 end
131 -
124 subgraph bb3
125 bb3_instrs["
134 - [3] Const mutate $3 = Call mutate g$4()
135 - "]
136 - bb3_instrs --> bb3_terminal(["Goto"])
126 + [3] Const mutate $3 = Call mutate g$4()
127 + "]
128 + bb3_instrs --> bb3_terminal(["Goto"])
129 end
138 -
130 subgraph bb1
140 - bb1_terminal(["Return freeze $3"])
131 + bb1_terminal(["Return freeze $3"])
132 end
142 -
133
134 %% Jumps
135 bb0_terminal -- then --> bb2
136 bb0_terminal -- else --> bb3
137 bb0_terminal -- fallthrough --> bb1
148 -
138 bb2_terminal --> bb1
150 -
139 bb3_terminal --> bb1
152 -
140 +
141 ```
142
143 ## Code
@@ -193,39 +181,33 @@ flowchart TB
181 bb0_instrs["
182 [1] Const mutate $9 = Call mutate f$2()
183 [2] Const mutate $10 = null
196 - [3] Const mutate $11 = Binary read $9 != read $10
197 - "]
198 - bb0_instrs --> bb0_terminal(["If (read $11)"])
184 + [3] Const mutate $11 = Binary read $9 != read $10
185 + "]
186 + bb0_instrs --> bb0_terminal(["If (read $11)"])
187 end
200 -
188 subgraph bb2
189 bb2_instrs["
203 - [4] Const mutate $6 = read $9
204 - "]
205 - bb2_instrs --> bb2_terminal(["Goto"])
190 + [4] Const mutate $6 = read $9
191 + "]
192 + bb2_instrs --> bb2_terminal(["Goto"])
193 end
207 -
194 subgraph bb3
195 bb3_instrs["
210 - [5] Const mutate $6 = Call mutate g$7()
211 - "]
212 - bb3_instrs --> bb3_terminal(["Goto"])
196 + [5] Const mutate $6 = Call mutate g$7()
197 + "]
198 + bb3_instrs --> bb3_terminal(["Goto"])
199 end
214 -
200 subgraph bb1
216 - bb1_terminal(["Return freeze $6"])
201 + bb1_terminal(["Return freeze $6"])
202 end
218 -
203
204 %% Jumps
205 bb0_terminal -- then --> bb2
206 bb0_terminal -- else --> bb3
207 bb0_terminal -- fallthrough --> bb1
224 -
208 bb2_terminal --> bb1
226 -
209 bb3_terminal --> bb1
228 -
210 +
211 ```
212
213 ## Code
@@ -252,9 +234,8 @@ bb0:
234 flowchart TB
235 %% Basic Blocks
236 subgraph bb0
255 - bb0_terminal(["Return"])
237 + bb0_terminal(["Return"])
238 end
257 -
239
240 %% Jumps
241 %% empty
@@ -281,9 +262,8 @@ bb0:
262 flowchart TB
263 %% Basic Blocks
264 subgraph bb0
284 - bb0_terminal(["Return"])
265 + bb0_terminal(["Return"])
266 end
286 -
267
268 %% Jumps
269 %% empty
compiler/forget/src/__tests__/fixtures/hir/mutable-lifetime-loops.expect.md
+20 -38
@@ -52,9 +52,8 @@ bb0:
52 flowchart TB
53 %% Basic Blocks
54 subgraph bb0
55 - bb0_terminal(["Return"])
55 + bb0_terminal(["Return"])
56 end
57 -
57
58 %% Jumps
59 %% empty
@@ -81,9 +80,8 @@ bb0:
80 flowchart TB
81 %% Basic Blocks
82 subgraph bb0
84 - bb0_terminal(["Return"])
83 + bb0_terminal(["Return"])
84 end
86 -
85
86 %% Jumps
87 %% empty
@@ -152,18 +150,16 @@ flowchart TB
150 [1] Let mutate a$2 = Object { }
151 [2] Let mutate b$3 = Object { }
152 [3] Let mutate c$4 = Object { }
155 - [4] Let mutate d$5 = Object { }
156 - "]
157 - bb0_instrs --> bb0_terminal(["While"])
153 + [4] Let mutate d$5 = Object { }
154 + "]
155 + bb0_instrs --> bb0_terminal(["While"])
156 end
159 -
157 subgraph bb1
158 bb1_instrs["
162 - [5] Const mutate $17 = true
163 - "]
164 - bb1_instrs --> bb1_terminal(["If (read $17)"])
159 + [5] Const mutate $17 = true
160 + "]
161 + bb1_instrs --> bb1_terminal(["If (read $17)"])
162 end
166 -
163 subgraph bb3
164 bb3_instrs["
165 [6] Let mutate z$19 = read a$2
@@ -172,65 +168,51 @@ flowchart TB
168 [9] Reassign mutate c$4 = read d$5
169 [10] Reassign mutate d$5 = read z$19
170 [11] Call mutate mutate$7(mutate a$2, mutate b$3)
175 - [12] Const mutate $29 = Call mutate cond$8(mutate a$2)
176 - "]
177 - bb3_instrs --> bb3_terminal(["If (read $29)"])
171 + [12] Const mutate $29 = Call mutate cond$8(mutate a$2)
172 + "]
173 + bb3_instrs --> bb3_terminal(["If (read $29)"])
174 end
179 -
175 subgraph bb4
181 - bb4_terminal(["Goto"])
176 + bb4_terminal(["Goto"])
177 end
183 -
178 subgraph bb2
185 - bb2_terminal(["If (read a$2)"])
179 + bb2_terminal(["If (read a$2)"])
180 end
187 -
181 subgraph bb7
189 - bb7_terminal(["If (read b$3)"])
182 + bb7_terminal(["If (read b$3)"])
183 end
191 -
184 subgraph bb9
193 - bb9_terminal(["If (read c$4)"])
185 + bb9_terminal(["If (read c$4)"])
186 end
195 -
187 subgraph bb11
197 - bb11_terminal(["If (read d$5)"])
188 + bb11_terminal(["If (read d$5)"])
189 end
199 -
190 subgraph bb13
191 bb13_instrs["
192 [13] Const mutate $34 = null
203 - [14] Call mutate mutate$7(mutate d$5, read $34)
204 - "]
205 - bb13_instrs --> bb13_terminal(["Return"])
193 + [14] Call mutate mutate$7(mutate d$5, read $34)
194 + "]
195 + bb13_instrs --> bb13_terminal(["Return"])
196 end
207 -
197
198 %% Jumps
199 bb0_terminal -- test --> bb1
200 bb0_terminal -- loop --> bb3
201 bb0_terminal -- fallthrough --> bb2
213 -
202 bb1_terminal -- then --> bb3
203 bb1_terminal -- else --> bb2
216 -
204 bb3_terminal -- then --> bb2
205 bb3_terminal -- else --> bb4
219 -
206 bb4_terminal --> bb1
221 -
207 bb2_terminal -- then --> bb7
208 bb2_terminal -- else --> bb7
224 -
209 bb7_terminal -- then --> bb9
210 bb7_terminal -- else --> bb9
227 -
211 bb9_terminal -- then --> bb11
212 bb9_terminal -- else --> bb11
230 -
213 bb11_terminal -- then --> bb13
214 bb11_terminal -- else --> bb13
233 -
215 +
216 ```
217
218 ## Code
compiler/forget/src/__tests__/fixtures/hir/mutable-lifetime-with-aliasing.expect.md
+12 -23
@@ -48,9 +48,8 @@ bb0:
48 flowchart TB
49 %% Basic Blocks
50 subgraph bb0
51 - bb0_terminal(["Return"])
51 + bb0_terminal(["Return"])
52 end
53 -
53
54 %% Jumps
55 %% empty
@@ -108,52 +107,42 @@ flowchart TB
107 [4] Const mutate d$14[4:7] = Object { c: read c$13 }
108 [5] Const mutate x$15[5:9] = Object { }
109 [6] Reassign mutate x$15.b[5:9] = read b$12
111 - [7] Const mutate y$16 = Call mutate mutate$8(mutate x$15, mutate d$14)
112 - "]
113 - bb0_instrs --> bb0_terminal(["If (read a$11)"])
110 + [7] Const mutate y$16 = Call mutate mutate$8(mutate x$15, mutate d$14)
111 + "]
112 + bb0_instrs --> bb0_terminal(["If (read a$11)"])
113 end
115 -
114 subgraph bb1
117 - bb1_terminal(["If (read b$12)"])
115 + bb1_terminal(["If (read b$12)"])
116 end
119 -
117 subgraph bb3
121 - bb3_terminal(["If (read c$13)"])
118 + bb3_terminal(["If (read c$13)"])
119 end
123 -
120 subgraph bb5
125 - bb5_terminal(["If (read d$14)"])
121 + bb5_terminal(["If (read d$14)"])
122 end
127 -
123 subgraph bb7
129 - bb7_terminal(["If (read y$16)"])
124 + bb7_terminal(["If (read y$16)"])
125 end
131 -
126 subgraph bb9
127 bb9_instrs["
128 [8] Const mutate $17 = null
135 - [9] Call mutate mutate$8(mutate x$15, read $17)
136 - "]
137 - bb9_instrs --> bb9_terminal(["Return"])
129 + [9] Call mutate mutate$8(mutate x$15, read $17)
130 + "]
131 + bb9_instrs --> bb9_terminal(["Return"])
132 end
139 -
133
134 %% Jumps
135 bb0_terminal -- then --> bb1
136 bb0_terminal -- else --> bb1
144 -
137 bb1_terminal -- then --> bb3
138 bb1_terminal -- else --> bb3
147 -
139 bb3_terminal -- then --> bb5
140 bb3_terminal -- else --> bb5
150 -
141 bb5_terminal -- then --> bb7
142 bb5_terminal -- else --> bb7
153 -
143 bb7_terminal -- then --> bb9
144 bb7_terminal -- else --> bb9
156 -
145 +
146 ```
147
148 ## Code
compiler/forget/src/__tests__/fixtures/hir/mutable-liverange-loop.expect.md
+20 -38
@@ -47,9 +47,8 @@ bb0:
47 flowchart TB
48 %% Basic Blocks
49 subgraph bb0
50 - bb0_terminal(["Return"])
50 + bb0_terminal(["Return"])
51 end
52 -
52
53 %% Jumps
54 %% empty
@@ -76,9 +75,8 @@ bb0:
75 flowchart TB
76 %% Basic Blocks
77 subgraph bb0
79 - bb0_terminal(["Return"])
78 + bb0_terminal(["Return"])
79 end
81 -
80
81 %% Jumps
82 %% empty
@@ -142,80 +140,64 @@ flowchart TB
140 [1] Let mutate a$12[1:7] = Object { }
141 [2] Let mutate b$13[2:6] = Object { }
142 [3] Let mutate c$14 = Object { }
145 - [4] Let mutate d$15[4:9] = Object { }
146 - "]
147 - bb0_instrs --> bb0_terminal(["While"])
143 + [4] Let mutate d$15[4:9] = Object { }
144 + "]
145 + bb0_instrs --> bb0_terminal(["While"])
146 end
149 -
147 subgraph bb1
148 bb1_instrs["
152 - [5] Const mutate $16 = true
153 - "]
154 - bb1_instrs --> bb1_terminal(["If (read $16)"])
149 + [5] Const mutate $16 = true
150 + "]
151 + bb1_instrs --> bb1_terminal(["If (read $16)"])
152 end
156 -
153 subgraph bb3
154 bb3_instrs["
155 [6] Call mutate mutate$6(mutate a$12, mutate b$13)
160 - [7] Const mutate $21 = Call mutate cond$7(mutate a$12)
161 - "]
162 - bb3_instrs --> bb3_terminal(["If (read $21)"])
156 + [7] Const mutate $21 = Call mutate cond$7(mutate a$12)
157 + "]
158 + bb3_instrs --> bb3_terminal(["If (read $21)"])
159 end
164 -
160 subgraph bb4
166 - bb4_terminal(["Goto"])
161 + bb4_terminal(["Goto"])
162 end
168 -
163 subgraph bb2
170 - bb2_terminal(["If (read a$12)"])
164 + bb2_terminal(["If (read a$12)"])
165 end
172 -
166 subgraph bb7
174 - bb7_terminal(["If (read b$13)"])
167 + bb7_terminal(["If (read b$13)"])
168 end
176 -
169 subgraph bb9
178 - bb9_terminal(["If (read c$14)"])
170 + bb9_terminal(["If (read c$14)"])
171 end
180 -
172 subgraph bb11
182 - bb11_terminal(["If (read d$15)"])
173 + bb11_terminal(["If (read d$15)"])
174 end
184 -
175 subgraph bb13
176 bb13_instrs["
177 [8] Const mutate $28 = null
188 - [9] Call mutate mutate$6(mutate d$15, read $28)
189 - "]
190 - bb13_instrs --> bb13_terminal(["Return"])
178 + [9] Call mutate mutate$6(mutate d$15, read $28)
179 + "]
180 + bb13_instrs --> bb13_terminal(["Return"])
181 end
192 -
182
183 %% Jumps
184 bb0_terminal -- test --> bb1
185 bb0_terminal -- loop --> bb3
186 bb0_terminal -- fallthrough --> bb2
198 -
187 bb1_terminal -- then --> bb3
188 bb1_terminal -- else --> bb2
201 -
189 bb3_terminal -- then --> bb2
190 bb3_terminal -- else --> bb4
204 -
191 bb4_terminal --> bb1
206 -
192 bb2_terminal -- then --> bb7
193 bb2_terminal -- else --> bb7
209 -
194 bb7_terminal -- then --> bb9
195 bb7_terminal -- else --> bb9
212 -
196 bb9_terminal -- then --> bb11
197 bb9_terminal -- else --> bb11
215 -
198 bb11_terminal -- then --> bb13
199 bb11_terminal -- else --> bb13
218 -
200 +
201 ```
202
203 ## Code
compiler/forget/src/__tests__/fixtures/hir/property-assignment.expect.md
+3 -4
@@ -38,11 +38,10 @@ flowchart TB
38 [3] Reassign mutate x$7.y[1:5] = read y$8
39 [4] Const mutate child$9 = JSX <read Component$0 data={freeze y$8} ></read Component$0>
40 [5] Call mutate x$7.y.push(read props$6.p0)
41 - [6] Const mutate $10 = JSX <read Component$0 data={freeze x$7} >{read child$9}</read Component$0>
42 - "]
43 - bb0_instrs --> bb0_terminal(["Return read $10"])
41 + [6] Const mutate $10 = JSX <read Component$0 data={freeze x$7} >{read child$9}</read Component$0>
42 + "]
43 + bb0_instrs --> bb0_terminal(["Return read $10"])
44 end
45 -
45
46 %% Jumps
47 %% empty
compiler/forget/src/__tests__/fixtures/hir/reassignment-conditional.expect.md
+10 -14
@@ -48,34 +48,30 @@ flowchart TB
48 bb0_instrs["
49 [1] Let mutate x$2 = Array []
50 [2] Call mutate x$2.push(read props$6.p0)
51 - [3] Let mutate y$8 = read x$2
52 - "]
53 - bb0_instrs --> bb0_terminal(["If (read props$6.p1)"])
51 + [3] Let mutate y$8 = read x$2
52 + "]
53 + bb0_instrs --> bb0_terminal(["If (read props$6.p1)"])
54 end
55 -
55 subgraph bb2
56 bb2_instrs["
58 - [4] Reassign mutate x$2 = Array []
59 - "]
60 - bb2_instrs --> bb2_terminal(["Goto"])
57 + [4] Reassign mutate x$2 = Array []
58 + "]
59 + bb2_instrs --> bb2_terminal(["Goto"])
60 end
62 -
61 subgraph bb1
62 bb1_instrs["
63 [5] Let mutate _$12 = JSX <read Component$0 x={freeze x$2} ></read Component$0>
64 [6] Call read y$8.push(read props$6.p2)
67 - [7] Const mutate $15 = JSX <read Component$0 x={read x$2} y={read y$8} ></read Component$0>
68 - "]
69 - bb1_instrs --> bb1_terminal(["Return read $15"])
65 + [7] Const mutate $15 = JSX <read Component$0 x={read x$2} y={read y$8} ></read Component$0>
66 + "]
67 + bb1_instrs --> bb1_terminal(["Return read $15"])
68 end
71 -
69
70 %% Jumps
71 bb0_terminal -- then --> bb2
72 bb0_terminal -- else --> bb1
76 -
73 bb2_terminal --> bb1
78 -
74 +
75 ```
76
77 ## Code
compiler/forget/src/__tests__/fixtures/hir/reassignment.expect.md
+3 -4
@@ -44,11 +44,10 @@ flowchart TB
44 [4] Reassign mutate x$9 = Array []
45 [5] Let mutate _$10 = JSX <read Component$0 x={freeze x$9} ></read Component$0>
46 [6] Call mutate y$8.push(read props$6.p1)
47 - [7] Const mutate $11 = JSX <read Component$0 x={read x$9} y={freeze y$8} ></read Component$0>
48 - "]
49 - bb0_instrs --> bb0_terminal(["Return read $11"])
47 + [7] Const mutate $11 = JSX <read Component$0 x={read x$9} y={freeze y$8} ></read Component$0>
48 + "]
49 + bb0_instrs --> bb0_terminal(["Return read $11"])
50 end
51 -
51
52 %% Jumps
53 %% empty
compiler/forget/src/__tests__/fixtures/hir/reverse-postorder.expect.md
+26 -42
@@ -84,92 +84,76 @@ flowchart TB
84 %% Basic Blocks
85 subgraph bb0
86 bb0_instrs["
87 - [1] Let mutate x$7 = undefined
88 - "]
89 - bb0_instrs --> bb0_terminal(["If (read props$6.cond)"])
87 + [1] Let mutate x$7 = undefined
88 + "]
89 + bb0_instrs --> bb0_terminal(["If (read props$6.cond)"])
90 end
91 -
91 subgraph bb2
92 bb2_instrs["
93 [2] Const mutate $8 = 2
94 [3] Const mutate $9 = 1
96 - [4] Const mutate $10 = 0
97 - "]
98 - bb2_instrs --> bb2_terminal(["Switch (read props$6.test)"])
95 + [4] Const mutate $10 = 0
96 + "]
97 + bb2_instrs --> bb2_terminal(["Switch (read props$6.test)"])
98 end
100 -
99 subgraph bb8
100 bb8_instrs["
103 - [5] Reassign mutate x$2 = read props$6.v0
104 - "]
105 - bb8_instrs --> bb8_terminal(["Goto"])
101 + [5] Reassign mutate x$2 = read props$6.v0
102 + "]
103 + bb8_instrs --> bb8_terminal(["Goto"])
104 end
107 -
105 subgraph bb6
106 bb6_instrs["
110 - [6] Reassign mutate x$2 = read props$6.v1
111 - "]
112 - bb6_instrs --> bb6_terminal(["Goto"])
107 + [6] Reassign mutate x$2 = read props$6.v1
108 + "]
109 + bb6_instrs --> bb6_terminal(["Goto"])
110 end
114 -
111 subgraph bb4
112 bb4_instrs["
117 - [7] Reassign mutate x$2 = read props$6.v2
118 - "]
119 - bb4_instrs --> bb4_terminal(["Goto"])
113 + [7] Reassign mutate x$2 = read props$6.v2
114 + "]
115 + bb4_instrs --> bb4_terminal(["Goto"])
116 end
121 -
117 subgraph bb10
123 - bb10_terminal(["If (read props$6.cond2)"])
118 + bb10_terminal(["If (read props$6.cond2)"])
119 end
125 -
120 subgraph bb12
121 bb12_instrs["
128 - [8] Reassign mutate x$2 = read props$6.b
129 - "]
130 - bb12_instrs --> bb12_terminal(["Goto"])
122 + [8] Reassign mutate x$2 = read props$6.b
123 + "]
124 + bb12_instrs --> bb12_terminal(["Goto"])
125 end
132 -
126 subgraph bb13
127 bb13_instrs["
135 - [9] Reassign mutate x$2 = read props$6.c
136 - "]
137 - bb13_instrs --> bb13_terminal(["Goto"])
128 + [9] Reassign mutate x$2 = read props$6.c
129 + "]
130 + bb13_instrs --> bb13_terminal(["Goto"])
131 end
139 -
132 subgraph bb1
133 bb1_instrs["
142 - [10] read x$2
143 - "]
144 - bb1_instrs --> bb1_terminal(["Return"])
134 + [10] read x$2
135 + "]
136 + bb1_instrs --> bb1_terminal(["Return"])
137 end
146 -
138
139 %% Jumps
140 bb0_terminal -- then --> bb2
141 bb0_terminal -- else --> bb10
142 bb0_terminal -- fallthrough --> bb1
152 -
143 bb2_terminal -- read $10 --> bb8
144 bb2_terminal -- read $9 --> bb6
145 bb2_terminal -- read $8 --> bb4
146 bb2_terminal -- default --> bb4
147 bb2_terminal -- fallthrough --> bb1
158 -
148 bb8_terminal --> bb1
160 -
149 bb6_terminal --> bb1
162 -
150 bb4_terminal --> bb1
164 -
151 bb10_terminal -- then --> bb12
152 bb10_terminal -- else --> bb13
153 bb10_terminal -- fallthrough --> bb1
168 -
154 bb12_terminal --> bb1
170 -
155 bb13_terminal --> bb1
172 -
156 +
157 ```
158
159 ## Code
compiler/forget/src/__tests__/fixtures/hir/simple.expect.md
+8 -11
@@ -35,31 +35,28 @@ bb1:
35 flowchart TB
36 %% Basic Blocks
37 subgraph bb0
38 - bb0_terminal(["If (read x$8)"])
38 + bb0_terminal(["If (read x$8)"])
39 end
40 -
40 subgraph bb2
41 bb2_instrs["
42 [1] Const mutate $10 = false
44 - [2] Const mutate $11 = Call read foo$0(read $10, read y$9)
45 - "]
46 - bb2_instrs --> bb2_terminal(["Return freeze $11"])
43 + [2] Const mutate $11 = Call read foo$0(read $10, read y$9)
44 + "]
45 + bb2_instrs --> bb2_terminal(["Return freeze $11"])
46 end
48 -
47 subgraph bb1
48 bb1_instrs["
49 [3] Const mutate $12 = 10
50 [4] Const mutate $13 = Binary read y$9 * read $12
53 - [5] Const mutate $14 = Array [read $13]
54 - "]
55 - bb1_instrs --> bb1_terminal(["Return freeze $14"])
51 + [5] Const mutate $14 = Array [read $13]
52 + "]
53 + bb1_instrs --> bb1_terminal(["Return freeze $14"])
54 end
57 -
55
56 %% Jumps
57 bb0_terminal -- then --> bb2
58 bb0_terminal -- else --> bb1
62 -
59 +
60 ```
61
62 ## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-arrayexpression.expect.md
+3 -4
@@ -30,11 +30,10 @@ flowchart TB
30 bb0_instrs["
31 [1] Const mutate a$6 = 1
32 [2] Const mutate b$7 = 2
33 - [3] Const mutate x$8 = Array [read a$6, read b$7]
34 - "]
35 - bb0_instrs --> bb0_terminal(["Return freeze x$8"])
33 + [3] Const mutate x$8 = Array [read a$6, read b$7]
34 + "]
35 + bb0_instrs --> bb0_terminal(["Return freeze x$8"])
36 end
37 -
37
38 %% Jumps
39 %% empty
compiler/forget/src/__tests__/fixtures/hir/ssa-call-jsx-2.expect.md
+11 -16
@@ -31,9 +31,8 @@ bb0:
31 flowchart TB
32 %% Basic Blocks
33 subgraph bb0
34 - bb0_terminal(["Return"])
34 + bb0_terminal(["Return"])
35 end
36 -
36
37 %% Jumps
38 %% empty
@@ -79,35 +78,31 @@ flowchart TB
78 [1] Const mutate a$11[1:3] = Array []
79 [2] Const mutate b$12[2:7] = Object { }
80 [3] Call mutate foo$4(mutate a$11, mutate b$12)
82 - [4] Const mutate $13 = Call mutate foo$4()
83 - "]
84 - bb0_instrs --> bb0_terminal(["If (read $13)"])
81 + [4] Const mutate $13 = Call mutate foo$4()
82 + "]
83 + bb0_instrs --> bb0_terminal(["If (read $13)"])
84 end
86 -
85 subgraph bb2
86 bb2_instrs["
87 [5] Const mutate $14 = 'div'
90 - [6] Let mutate _$15 = JSX <read $14 a={freeze a$11} ></read $14>
91 - "]
92 - bb2_instrs --> bb2_terminal(["Goto"])
88 + [6] Let mutate _$15 = JSX <read $14 a={freeze a$11} ></read $14>
89 + "]
90 + bb2_instrs --> bb2_terminal(["Goto"])
91 end
94 -
92 subgraph bb1
93 bb1_instrs["
94 [7] Call mutate foo$4(read a$11, mutate b$12)
95 [8] Const mutate $19 = 'div'
99 - [9] Const mutate $20 = JSX <read $19 a={freeze a$11} b={freeze b$12} ></read $19>
100 - "]
101 - bb1_instrs --> bb1_terminal(["Return read $20"])
96 + [9] Const mutate $20 = JSX <read $19 a={freeze a$11} b={freeze b$12} ></read $19>
97 + "]
98 + bb1_instrs --> bb1_terminal(["Return read $20"])
99 end
103 -
100
101 %% Jumps
102 bb0_terminal -- then --> bb2
103 bb0_terminal -- else --> bb1
108 -
104 bb2_terminal --> bb1
110 -
105 +
106 ```
107
108 ## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-call-jsx.expect.md
+4 -6
@@ -28,9 +28,8 @@ bb0:
28 flowchart TB
29 %% Basic Blocks
30 subgraph bb0
31 - bb0_terminal(["Return"])
31 + bb0_terminal(["Return"])
32 end
33 -
33
34 %% Jumps
35 %% empty
@@ -73,11 +72,10 @@ flowchart TB
72 [5] Let mutate _$13 = JSX <read $12 a={freeze a$10} ></read $12>
73 [6] Call mutate foo$4(read a$10, mutate b$11)
74 [7] Const mutate $14 = 'div'
76 - [8] Const mutate $15 = JSX <read $14 a={read a$10} b={freeze b$11} ></read $14>
77 - "]
78 - bb0_instrs --> bb0_terminal(["Return read $15"])
75 + [8] Const mutate $15 = JSX <read $14 a={read a$10} b={freeze b$11} ></read $14>
76 + "]
77 + bb0_instrs --> bb0_terminal(["Return read $15"])
78 end
80 -
79
80 %% Jumps
81 %% empty
compiler/forget/src/__tests__/fixtures/hir/ssa-complex-multiple-if.expect.md
+16 -24
@@ -55,52 +55,44 @@ flowchart TB
55 [1] Let mutate x$1 = 1
56 [2] Let mutate y$8 = 2
57 [3] Const mutate $9 = 2
58 - [4] Const mutate $10 = Binary read y$8 === read $9
59 - "]
60 - bb0_instrs --> bb0_terminal(["If (read $10)"])
58 + [4] Const mutate $10 = Binary read y$8 === read $9
59 + "]
60 + bb0_instrs --> bb0_terminal(["If (read $10)"])
61 end
62 -
62 subgraph bb2
63 bb2_instrs["
65 - [5] Reassign mutate x$1 = 3
66 - "]
67 - bb2_instrs --> bb2_terminal(["Goto"])
64 + [5] Reassign mutate x$1 = 3
65 + "]
66 + bb2_instrs --> bb2_terminal(["Goto"])
67 end
69 -
68 subgraph bb1
69 bb1_instrs["
70 [6] Const mutate $12 = 3
73 - [7] Const mutate $14 = Binary read y$8 === read $12
74 - "]
75 - bb1_instrs --> bb1_terminal(["If (read $14)"])
71 + [7] Const mutate $14 = Binary read y$8 === read $12
72 + "]
73 + bb1_instrs --> bb1_terminal(["If (read $14)"])
74 end
77 -
75 subgraph bb4
76 bb4_instrs["
80 - [8] Reassign mutate x$1 = 5
81 - "]
82 - bb4_instrs --> bb4_terminal(["Goto"])
77 + [8] Reassign mutate x$1 = 5
78 + "]
79 + bb4_instrs --> bb4_terminal(["Goto"])
80 end
84 -
81 subgraph bb3
82 bb3_instrs["
87 - [9] Reassign mutate y$18 = read x$1
88 - "]
89 - bb3_instrs --> bb3_terminal(["Return"])
83 + [9] Reassign mutate y$18 = read x$1
84 + "]
85 + bb3_instrs --> bb3_terminal(["Return"])
86 end
91 -
87
88 %% Jumps
89 bb0_terminal -- then --> bb2
90 bb0_terminal -- else --> bb1
96 -
91 bb2_terminal --> bb1
98 -
92 bb1_terminal -- then --> bb4
93 bb1_terminal -- else --> bb3
101 -
94 bb4_terminal --> bb3
103 -
95 +
96 ```
97
98 ## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-complex-single-if.expect.md
+10 -14
@@ -43,32 +43,28 @@ flowchart TB
43 [1] Let mutate x$1 = 1
44 [2] Let mutate y$6 = 2
45 [3] Const mutate $7 = 2
46 - [4] Const mutate $8 = Binary read y$6 === read $7
47 - "]
48 - bb0_instrs --> bb0_terminal(["If (read $8)"])
46 + [4] Const mutate $8 = Binary read y$6 === read $7
47 + "]
48 + bb0_instrs --> bb0_terminal(["If (read $8)"])
49 end
50 -
50 subgraph bb2
51 bb2_instrs["
53 - [5] Reassign mutate x$1 = 3
54 - "]
55 - bb2_instrs --> bb2_terminal(["Goto"])
52 + [5] Reassign mutate x$1 = 3
53 + "]
54 + bb2_instrs --> bb2_terminal(["Goto"])
55 end
57 -
56 subgraph bb1
57 bb1_instrs["
60 - [6] Reassign mutate y$11 = read x$1
61 - "]
62 - bb1_instrs --> bb1_terminal(["Return"])
58 + [6] Reassign mutate y$11 = read x$1
59 + "]
60 + bb1_instrs --> bb1_terminal(["Return"])
61 end
64 -
62
63 %% Jumps
64 bb0_terminal -- then --> bb2
65 bb0_terminal -- else --> bb1
69 -
66 bb2_terminal --> bb1
71 -
67 +
68 ```
69
70 ## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-for-of.expect.md
+13 -23
@@ -47,51 +47,41 @@ flowchart TB
47 %% Basic Blocks
48 subgraph bb0
49 bb0_instrs["
50 - [1] Let mutate items$5 = Array []
51 - "]
52 - bb0_instrs --> bb0_terminal(["Goto"])
50 + [1] Let mutate items$5 = Array []
51 + "]
52 + bb0_instrs --> bb0_terminal(["Goto"])
53 end
54 -
54 subgraph bb1
56 - bb1_terminal(["If (read items$5)"])
55 + bb1_terminal(["If (read items$5)"])
56 end
58 -
57 subgraph bb3
58 bb3_instrs["
61 - [2] Let mutate y$7 = 0
62 - "]
63 - bb3_instrs --> bb3_terminal(["If (read cond$4)"])
59 + [2] Let mutate y$7 = 0
60 + "]
61 + bb3_instrs --> bb3_terminal(["If (read cond$4)"])
62 end
65 -
63 subgraph bb5
64 bb5_instrs["
68 - [3] Reassign mutate y$9 = 1
69 - "]
70 - bb5_instrs --> bb5_terminal(["Goto"])
65 + [3] Reassign mutate y$9 = 1
66 + "]
67 + bb5_instrs --> bb5_terminal(["Goto"])
68 end
72 -
69 subgraph bb4
74 - bb4_terminal(["Goto"])
70 + bb4_terminal(["Goto"])
71 end
76 -
72 subgraph bb2
78 - bb2_terminal(["Return freeze items$5"])
73 + bb2_terminal(["Return freeze items$5"])
74 end
80 -
75
76 %% Jumps
77 bb0_terminal --> bb1
84 -
78 bb1_terminal -- then --> bb3
79 bb1_terminal -- else --> bb2
87 -
80 bb3_terminal -- then --> bb5
81 bb3_terminal -- else --> bb4
90 -
82 bb5_terminal --> bb4
92 -
83 bb4_terminal --> bb1
94 -
84 +
85 ```
86
87 ## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-for.expect.md
+11 -17
@@ -40,40 +40,34 @@ flowchart TB
40 %% Basic Blocks
41 subgraph bb0
42 bb0_instrs["
43 - [1] Let mutate x$1 = 0
44 - "]
45 - bb0_instrs --> bb0_terminal(["Goto"])
43 + [1] Let mutate x$1 = 0
44 + "]
45 + bb0_instrs --> bb0_terminal(["Goto"])
46 end
47 -
47 subgraph bb1
48 bb1_instrs["
49 [2] Const mutate $6 = 10
51 - [3] Const mutate $8 = Binary read x$1 < read $6
52 - "]
53 - bb1_instrs --> bb1_terminal(["If (read $8)"])
50 + [3] Const mutate $8 = Binary read x$1 < read $6
51 + "]
52 + bb1_instrs --> bb1_terminal(["If (read $8)"])
53 end
55 -
54 subgraph bb4
55 bb4_instrs["
56 [4] Const mutate $9 = 1
59 - [5] Reassign mutate x$1 = Binary read x$1 + read $9
60 - "]
61 - bb4_instrs --> bb4_terminal(["Goto"])
57 + [5] Reassign mutate x$1 = Binary read x$1 + read $9
58 + "]
59 + bb4_instrs --> bb4_terminal(["Goto"])
60 end
63 -
61 subgraph bb2
65 - bb2_terminal(["Return read x$1"])
62 + bb2_terminal(["Return read x$1"])
63 end
67 -
64
65 %% Jumps
66 bb0_terminal --> bb1
71 -
67 bb1_terminal -- then --> bb4
68 bb1_terminal -- else --> bb2
74 -
69 bb4_terminal --> bb1
76 -
70 +
71 ```
72
73 ## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-if-else.expect.md
+11 -17
@@ -43,39 +43,33 @@ flowchart TB
43 subgraph bb0
44 bb0_instrs["
45 [1] Let mutate x$5 = 1
46 - [2] Let mutate y$6 = 2
47 - "]
48 - bb0_instrs --> bb0_terminal(["If (read y$6)"])
46 + [2] Let mutate y$6 = 2
47 + "]
48 + bb0_instrs --> bb0_terminal(["If (read y$6)"])
49 end
50 -
50 subgraph bb2
51 bb2_instrs["
53 - [3] Let mutate z$7 = Binary read x$5 + read y$6
54 - "]
55 - bb2_instrs --> bb2_terminal(["Goto"])
52 + [3] Let mutate z$7 = Binary read x$5 + read y$6
53 + "]
54 + bb2_instrs --> bb2_terminal(["Goto"])
55 end
57 -
56 subgraph bb3
57 bb3_instrs["
60 - [4] Let mutate z$8 = read x$5
61 - "]
62 - bb3_instrs --> bb3_terminal(["Goto"])
58 + [4] Let mutate z$8 = read x$5
59 + "]
60 + bb3_instrs --> bb3_terminal(["Goto"])
61 end
64 -
62 subgraph bb1
66 - bb1_terminal(["Return"])
63 + bb1_terminal(["Return"])
64 end
68 -
65
66 %% Jumps
67 bb0_terminal -- then --> bb2
68 bb0_terminal -- else --> bb3
69 bb0_terminal -- fallthrough --> bb1
74 -
70 bb2_terminal --> bb1
76 -
71 bb3_terminal --> bb1
78 -
72 +
73 ```
74
75 ## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-nested-loops-no-reassign.expect.md
+15 -33
@@ -61,80 +61,62 @@ flowchart TB
61 %% Basic Blocks
62 subgraph bb0
63 bb0_instrs["
64 - [1] Let mutate x$9 = 0
65 - "]
66 - bb0_instrs --> bb0_terminal(["While"])
64 + [1] Let mutate x$9 = 0
65 + "]
66 + bb0_instrs --> bb0_terminal(["While"])
67 end
68 -
68 subgraph bb1
70 - bb1_terminal(["If (read a$6)"])
69 + bb1_terminal(["If (read a$6)"])
70 end
72 -
71 subgraph bb3
74 - bb3_terminal(["While"])
72 + bb3_terminal(["While"])
73 end
76 -
74 subgraph bb4
78 - bb4_terminal(["If (read b$7)"])
75 + bb4_terminal(["If (read b$7)"])
76 end
80 -
77 subgraph bb6
82 - bb6_terminal(["While"])
78 + bb6_terminal(["While"])
79 end
84 -
80 subgraph bb7
86 - bb7_terminal(["If (read c$8)"])
81 + bb7_terminal(["If (read c$8)"])
82 end
88 -
83 subgraph bb9
84 bb9_instrs["
85 [2] Const mutate $13 = 1
92 - [3] Binary read x$9 + read $13
93 - "]
94 - bb9_instrs --> bb9_terminal(["Goto"])
86 + [3] Binary read x$9 + read $13
87 + "]
88 + bb9_instrs --> bb9_terminal(["Goto"])
89 end
96 -
90 subgraph bb8
98 - bb8_terminal(["Goto"])
91 + bb8_terminal(["Goto"])
92 end
100 -
93 subgraph bb5
102 - bb5_terminal(["Goto"])
94 + bb5_terminal(["Goto"])
95 end
104 -
96 subgraph bb2
106 - bb2_terminal(["Return read x$9"])
97 + bb2_terminal(["Return read x$9"])
98 end
108 -
99
100 %% Jumps
101 bb0_terminal -- test --> bb1
102 bb0_terminal -- loop --> bb3
103 bb0_terminal -- fallthrough --> bb2
114 -
104 bb1_terminal -- then --> bb3
105 bb1_terminal -- else --> bb2
117 -
106 bb3_terminal -- test --> bb4
107 bb3_terminal -- loop --> bb6
108 bb3_terminal -- fallthrough --> bb5
121 -
109 bb4_terminal -- then --> bb6
110 bb4_terminal -- else --> bb5
124 -
111 bb6_terminal -- test --> bb7
112 bb6_terminal -- loop --> bb9
113 bb6_terminal -- fallthrough --> bb8
128 -
114 bb7_terminal -- then --> bb9
115 bb7_terminal -- else --> bb8
131 -
116 bb9_terminal --> bb7
133 -
117 bb8_terminal --> bb4
135 -
118 bb5_terminal --> bb1
137 -
119 +
120 ```
121
122 ## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-newexpression.expect.md
+4 -6
@@ -26,9 +26,8 @@ bb0:
26 flowchart TB
27 %% Basic Blocks
28 subgraph bb0
29 - bb0_terminal(["Return"])
29 + bb0_terminal(["Return"])
30 end
31 -
31
32 %% Jumps
33 %% empty
@@ -61,11 +60,10 @@ flowchart TB
60 bb0_instrs["
61 [1] Const mutate a$7[1:3] = Array []
62 [2] Const mutate b$8[2:3] = Object { }
64 - [3] Let mutate c$9 = New mutate Foo$5(mutate a$7, mutate b$8)
65 - "]
66 - bb0_instrs --> bb0_terminal(["Return freeze c$9"])
63 + [3] Let mutate c$9 = New mutate Foo$5(mutate a$7, mutate b$8)
64 + "]
65 + bb0_instrs --> bb0_terminal(["Return freeze c$9"])
66 end
68 -
67
68 %% Jumps
69 %% empty
compiler/forget/src/__tests__/fixtures/hir/ssa-objectexpression-phi.expect.md
+13 -19
@@ -51,42 +51,36 @@ flowchart TB
51 [1] Let mutate x$1 = 1
52 [2] Let mutate y$2 = 2
53 [3] Const mutate $8 = 1
54 - [4] Const mutate $9 = Binary read x$1 > read $8
55 - "]
56 - bb0_instrs --> bb0_terminal(["If (read $9)"])
54 + [4] Const mutate $9 = Binary read x$1 > read $8
55 + "]
56 + bb0_instrs --> bb0_terminal(["If (read $9)"])
57 end
58 -
58 subgraph bb2
59 bb2_instrs["
61 - [5] Reassign mutate x$1 = 2
62 - "]
63 - bb2_instrs --> bb2_terminal(["Goto"])
60 + [5] Reassign mutate x$1 = 2
61 + "]
62 + bb2_instrs --> bb2_terminal(["Goto"])
63 end
65 -
64 subgraph bb3
65 bb3_instrs["
68 - [6] Reassign mutate y$2 = 3
69 - "]
70 - bb3_instrs --> bb3_terminal(["Goto"])
66 + [6] Reassign mutate y$2 = 3
67 + "]
68 + bb3_instrs --> bb3_terminal(["Goto"])
69 end
72 -
70 subgraph bb1
71 bb1_instrs["
75 - [7] Let mutate t$14 = Object { x: read x$1, y: read y$2 }
76 - "]
77 - bb1_instrs --> bb1_terminal(["Return freeze t$14"])
72 + [7] Let mutate t$14 = Object { x: read x$1, y: read y$2 }
73 + "]
74 + bb1_instrs --> bb1_terminal(["Return freeze t$14"])
75 end
79 -
76
77 %% Jumps
78 bb0_terminal -- then --> bb2
79 bb0_terminal -- else --> bb3
80 bb0_terminal -- fallthrough --> bb1
85 -
81 bb2_terminal --> bb1
87 -
82 bb3_terminal --> bb1
89 -
83 +
84 ```
85
86 ## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-objectexpression.expect.md
+3 -4
@@ -30,11 +30,10 @@ flowchart TB
30 bb0_instrs["
31 [1] Const mutate a$6 = 1
32 [2] Const mutate b$7 = 2
33 - [3] Const mutate x$8 = Object { a: read a$6, b: read b$7 }
34 - "]
35 - bb0_instrs --> bb0_terminal(["Return freeze x$8"])
33 + [3] Const mutate x$8 = Object { a: read a$6, b: read b$7 }
34 + "]
35 + bb0_instrs --> bb0_terminal(["Return freeze x$8"])
36 end
37 -
37
38 %% Jumps
39 %% empty
compiler/forget/src/__tests__/fixtures/hir/ssa-property-call.expect.md
+3 -4
@@ -32,11 +32,10 @@ flowchart TB
32 [1] Const mutate x$4 = Array []
33 [2] Const mutate y$5[2:4] = Object { x: read x$4 }
34 [3] Const mutate $6[3:4] = Array []
35 - [4] Call mutate y$5.x.push(mutate $6)
36 - "]
37 - bb0_instrs --> bb0_terminal(["Return freeze y$5"])
35 + [4] Call mutate y$5.x.push(mutate $6)
36 + "]
37 + bb0_instrs --> bb0_terminal(["Return freeze y$5"])
38 end
39 -
39
40 %% Jumps
41 %% empty
compiler/forget/src/__tests__/fixtures/hir/ssa-property.expect.md
+3 -4
@@ -30,11 +30,10 @@ flowchart TB
30 bb0_instrs["
31 [1] Const mutate x$3 = Array []
32 [2] Const mutate y$4[2:3] = Object { }
33 - [3] Reassign mutate y$4.x[2:3] = read x$3
34 - "]
35 - bb0_instrs --> bb0_terminal(["Return freeze y$4"])
33 + [3] Reassign mutate y$4.x[2:3] = read x$3
34 + "]
35 + bb0_instrs --> bb0_terminal(["Return freeze y$4"])
36 end
37 -
37
38 %% Jumps
39 %% empty
compiler/forget/src/__tests__/fixtures/hir/ssa-return.expect.md
+8 -12
@@ -39,29 +39,25 @@ flowchart TB
39 bb0_instrs["
40 [1] Let mutate x$1 = 1
41 [2] Const mutate $5 = 1
42 - [3] Const mutate $6 = Binary read x$1 === read $5
43 - "]
44 - bb0_instrs --> bb0_terminal(["If (read $6)"])
42 + [3] Const mutate $6 = Binary read x$1 === read $5
43 + "]
44 + bb0_instrs --> bb0_terminal(["If (read $6)"])
45 end
46 -
46 subgraph bb2
47 bb2_instrs["
49 - [4] Reassign mutate x$1 = 2
50 - "]
51 - bb2_instrs --> bb2_terminal(["Goto"])
48 + [4] Reassign mutate x$1 = 2
49 + "]
50 + bb2_instrs --> bb2_terminal(["Goto"])
51 end
53 -
52 subgraph bb1
55 - bb1_terminal(["Return read x$1"])
53 + bb1_terminal(["Return read x$1"])
54 end
57 -
55
56 %% Jumps
57 bb0_terminal -- then --> bb2
58 bb0_terminal -- else --> bb1
62 -
59 bb2_terminal --> bb1
64 -
60 +
61 ```
62
63 ## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-shadowing.expect.md
+14 -21
@@ -30,9 +30,8 @@ bb0:
30 flowchart TB
31 %% Basic Blocks
32 subgraph bb0
33 - bb0_terminal(["Return"])
33 + bb0_terminal(["Return"])
34 end
35 -
35
36 %% Jumps
37 %% empty
@@ -74,43 +73,37 @@ flowchart TB
73 %% Basic Blocks
74 subgraph bb0
75 bb0_instrs["
77 - [1] Let mutate str$2 = ''
78 - "]
79 - bb0_instrs --> bb0_terminal(["If (read cond$5)"])
76 + [1] Let mutate str$2 = ''
77 + "]
78 + bb0_instrs --> bb0_terminal(["If (read cond$5)"])
79 end
81 -
80 subgraph bb2
81 bb2_instrs["
82 [2] Let mutate str$7 = 'other test'
85 - [3] Call mutate log$4(read str$7)
86 - "]
87 - bb2_instrs --> bb2_terminal(["Goto"])
83 + [3] Call mutate log$4(read str$7)
84 + "]
85 + bb2_instrs --> bb2_terminal(["Goto"])
86 end
89 -
87 subgraph bb3
88 bb3_instrs["
92 - [4] Reassign mutate str$2 = 'fallthrough test'
93 - "]
94 - bb3_instrs --> bb3_terminal(["Goto"])
89 + [4] Reassign mutate str$2 = 'fallthrough test'
90 + "]
91 + bb3_instrs --> bb3_terminal(["Goto"])
92 end
96 -
93 subgraph bb1
94 bb1_instrs["
99 - [5] Call mutate log$4(read str$2)
100 - "]
101 - bb1_instrs --> bb1_terminal(["Return"])
95 + [5] Call mutate log$4(read str$2)
96 + "]
97 + bb1_instrs --> bb1_terminal(["Return"])
98 end
103 -
99
100 %% Jumps
101 bb0_terminal -- then --> bb2
102 bb0_terminal -- else --> bb3
103 bb0_terminal -- fallthrough --> bb1
109 -
104 bb2_terminal --> bb1
111 -
105 bb3_terminal --> bb1
113 -
106 +
107 ```
108
109 ## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-simple-phi.expect.md
+13 -19
@@ -47,42 +47,36 @@ flowchart TB
47 bb0_instrs["
48 [1] Let mutate y$5 = 2
49 [2] Const mutate $6 = 1
50 - [3] Const mutate $7 = Binary read y$5 > read $6
51 - "]
52 - bb0_instrs --> bb0_terminal(["If (read $7)"])
50 + [3] Const mutate $7 = Binary read y$5 > read $6
51 + "]
52 + bb0_instrs --> bb0_terminal(["If (read $7)"])
53 end
54 -
54 subgraph bb2
55 bb2_instrs["
57 - [4] Reassign mutate y$1 = 1
58 - "]
59 - bb2_instrs --> bb2_terminal(["Goto"])
56 + [4] Reassign mutate y$1 = 1
57 + "]
58 + bb2_instrs --> bb2_terminal(["Goto"])
59 end
61 -
60 subgraph bb3
61 bb3_instrs["
64 - [5] Reassign mutate y$1 = 2
65 - "]
66 - bb3_instrs --> bb3_terminal(["Goto"])
62 + [5] Reassign mutate y$1 = 2
63 + "]
64 + bb3_instrs --> bb3_terminal(["Goto"])
65 end
68 -
66 subgraph bb1
67 bb1_instrs["
71 - [6] Let mutate x$11 = read y$1
72 - "]
73 - bb1_instrs --> bb1_terminal(["Return"])
68 + [6] Let mutate x$11 = read y$1
69 + "]
70 + bb1_instrs --> bb1_terminal(["Return"])
71 end
75 -
72
73 %% Jumps
74 bb0_terminal -- then --> bb2
75 bb0_terminal -- else --> bb3
76 bb0_terminal -- fallthrough --> bb1
81 -
77 bb2_terminal --> bb1
83 -
78 bb3_terminal --> bb1
85 -
79 +
80 ```
81
82 ## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-simple.expect.md
+3 -4
@@ -26,11 +26,10 @@ flowchart TB
26 subgraph bb0
27 bb0_instrs["
28 [1] Let mutate x$3 = 1
29 - [2] Let mutate y$4 = 2
30 - "]
31 - bb0_instrs --> bb0_terminal(["Return"])
29 + [2] Let mutate y$4 = 2
30 + "]
31 + bb0_instrs --> bb0_terminal(["Return"])
32 end
33 -
33
34 %% Jumps
35 %% empty
compiler/forget/src/__tests__/fixtures/hir/ssa-single-if.expect.md
+8 -12
@@ -37,29 +37,25 @@ flowchart TB
37 subgraph bb0
38 bb0_instrs["
39 [1] Let mutate x$4 = 1
40 - [2] Let mutate y$5 = 2
41 - "]
42 - bb0_instrs --> bb0_terminal(["If (read y$5)"])
40 + [2] Let mutate y$5 = 2
41 + "]
42 + bb0_instrs --> bb0_terminal(["If (read y$5)"])
43 end
44 -
44 subgraph bb2
45 bb2_instrs["
47 - [3] Let mutate z$6 = Binary read x$4 + read y$5
48 - "]
49 - bb2_instrs --> bb2_terminal(["Goto"])
46 + [3] Let mutate z$6 = Binary read x$4 + read y$5
47 + "]
48 + bb2_instrs --> bb2_terminal(["Goto"])
49 end
51 -
50 subgraph bb1
53 - bb1_terminal(["Return"])
51 + bb1_terminal(["Return"])
52 end
55 -
53
54 %% Jumps
55 bb0_terminal -- then --> bb2
56 bb0_terminal -- else --> bb1
60 -
57 bb2_terminal --> bb1
62 -
58 +
59 ```
60
61 ## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-switch.expect.md
+16 -24
@@ -69,55 +69,47 @@ flowchart TB
69 [2] Const mutate $11 = 2
70 [3] Const mutate $12 = Binary read x$10 === read $11
71 [4] Const mutate $13 = 1
72 - [5] Const mutate $14 = Binary read x$10 === read $13
73 - "]
74 - bb0_instrs --> bb0_terminal(["Switch (read x$10)"])
72 + [5] Const mutate $14 = Binary read x$10 === read $13
73 + "]
74 + bb0_instrs --> bb0_terminal(["Switch (read x$10)"])
75 end
76 -
76 subgraph bb5
77 bb5_instrs["
78 [6] Const mutate $15 = 1
80 - [7] Reassign mutate x$1 = Binary read x$10 + read $15
81 - "]
82 - bb5_instrs --> bb5_terminal(["Goto"])
79 + [7] Reassign mutate x$1 = Binary read x$10 + read $15
80 + "]
81 + bb5_instrs --> bb5_terminal(["Goto"])
82 end
84 -
83 subgraph bb3
84 bb3_instrs["
85 [8] Const mutate $17 = 2
88 - [9] Reassign mutate x$1 = Binary read x$10 + read $17
89 - "]
90 - bb3_instrs --> bb3_terminal(["Goto"])
86 + [9] Reassign mutate x$1 = Binary read x$10 + read $17
87 + "]
88 + bb3_instrs --> bb3_terminal(["Goto"])
89 end
92 -
90 subgraph bb2
91 bb2_instrs["
92 [10] Const mutate $19 = 3
96 - [11] Reassign mutate x$1 = Binary read x$10 + read $19
97 - "]
98 - bb2_instrs --> bb2_terminal(["Goto"])
93 + [11] Reassign mutate x$1 = Binary read x$10 + read $19
94 + "]
95 + bb2_instrs --> bb2_terminal(["Goto"])
96 end
100 -
97 subgraph bb1
98 bb1_instrs["
103 - [12] Let mutate y$22 = read x$1
104 - "]
105 - bb1_instrs --> bb1_terminal(["Return"])
99 + [12] Let mutate y$22 = read x$1
100 + "]
101 + bb1_instrs --> bb1_terminal(["Return"])
102 end
107 -
103
104 %% Jumps
105 bb0_terminal -- read $14 --> bb5
106 bb0_terminal -- read $12 --> bb3
107 bb0_terminal -- default --> bb2
108 bb0_terminal -- fallthrough --> bb1
114 -
109 bb5_terminal --> bb1
116 -
110 bb3_terminal --> bb1
118 -
111 bb2_terminal --> bb1
120 -
112 +
113 ```
114
115 ## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-throw.expect.md
+8 -12
@@ -38,29 +38,25 @@ flowchart TB
38 bb0_instrs["
39 [1] Let mutate x$1 = 1
40 [2] Const mutate $5 = 1
41 - [3] Const mutate $6 = Binary read x$1 === read $5
42 - "]
43 - bb0_instrs --> bb0_terminal(["If (read $6)"])
41 + [3] Const mutate $6 = Binary read x$1 === read $5
42 + "]
43 + bb0_instrs --> bb0_terminal(["If (read $6)"])
44 end
45 -
45 subgraph bb2
46 bb2_instrs["
48 - [4] Reassign mutate x$1 = 2
49 - "]
50 - bb2_instrs --> bb2_terminal(["Goto"])
47 + [4] Reassign mutate x$1 = 2
48 + "]
49 + bb2_instrs --> bb2_terminal(["Goto"])
50 end
52 -
51 subgraph bb1
54 - bb1_terminal(["Throw read x$1"])
52 + bb1_terminal(["Throw read x$1"])
53 end
56 -
54
55 %% Jumps
56 bb0_terminal -- then --> bb2
57 bb0_terminal -- else --> bb1
61 -
58 bb2_terminal --> bb1
63 -
59 +
60 ```
61
62 ## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-while-no-reassign.expect.md
+11 -17
@@ -41,42 +41,36 @@ flowchart TB
41 %% Basic Blocks
42 subgraph bb0
43 bb0_instrs["
44 - [1] Let mutate x$5 = 1
45 - "]
46 - bb0_instrs --> bb0_terminal(["While"])
44 + [1] Let mutate x$5 = 1
45 + "]
46 + bb0_instrs --> bb0_terminal(["While"])
47 end
48 -
48 subgraph bb1
49 bb1_instrs["
50 [2] Const mutate $6 = 10
52 - [3] Const mutate $8 = Binary read x$5 < read $6
53 - "]
54 - bb1_instrs --> bb1_terminal(["If (read $8)"])
51 + [3] Const mutate $8 = Binary read x$5 < read $6
52 + "]
53 + bb1_instrs --> bb1_terminal(["If (read $8)"])
54 end
56 -
55 subgraph bb3
56 bb3_instrs["
57 [4] Const mutate $9 = 1
60 - [5] Binary read x$5 + read $9
61 - "]
62 - bb3_instrs --> bb3_terminal(["Goto"])
58 + [5] Binary read x$5 + read $9
59 + "]
60 + bb3_instrs --> bb3_terminal(["Goto"])
61 end
64 -
62 subgraph bb2
66 - bb2_terminal(["Return read x$5"])
63 + bb2_terminal(["Return read x$5"])
64 end
68 -
65
66 %% Jumps
67 bb0_terminal -- test --> bb1
68 bb0_terminal -- loop --> bb3
69 bb0_terminal -- fallthrough --> bb2
74 -
70 bb1_terminal -- then --> bb3
71 bb1_terminal -- else --> bb2
77 -
72 bb3_terminal --> bb1
79 -
73 +
74 ```
75
76 ## Code
compiler/forget/src/__tests__/fixtures/hir/ssa-while.expect.md
+11 -17
@@ -41,42 +41,36 @@ flowchart TB
41 %% Basic Blocks
42 subgraph bb0
43 bb0_instrs["
44 - [1] Let mutate x$1 = 1
45 - "]
46 - bb0_instrs --> bb0_terminal(["While"])
44 + [1] Let mutate x$1 = 1
45 + "]
46 + bb0_instrs --> bb0_terminal(["While"])
47 end
48 -
48 subgraph bb1
49 bb1_instrs["
50 [2] Const mutate $6 = 10
52 - [3] Const mutate $8 = Binary read x$1 < read $6
53 - "]
54 - bb1_instrs --> bb1_terminal(["If (read $8)"])
51 + [3] Const mutate $8 = Binary read x$1 < read $6
52 + "]
53 + bb1_instrs --> bb1_terminal(["If (read $8)"])
54 end
56 -
55 subgraph bb3
56 bb3_instrs["
57 [4] Const mutate $9 = 1
60 - [5] Reassign mutate x$1 = Binary read x$1 + read $9
61 - "]
62 - bb3_instrs --> bb3_terminal(["Goto"])
58 + [5] Reassign mutate x$1 = Binary read x$1 + read $9
59 + "]
60 + bb3_instrs --> bb3_terminal(["Goto"])
61 end
64 -
62 subgraph bb2
66 - bb2_terminal(["Return read x$1"])
63 + bb2_terminal(["Return read x$1"])
64 end
68 -
65
66 %% Jumps
67 bb0_terminal -- test --> bb1
68 bb0_terminal -- loop --> bb3
69 bb0_terminal -- fallthrough --> bb2
74 -
70 bb1_terminal -- then --> bb3
71 bb1_terminal -- else --> bb2
77 -
72 bb3_terminal --> bb1
79 -
73 +
74 ```
75
76 ## Code
compiler/forget/src/__tests__/fixtures/hir/switch-non-final-default.expect.md
+13 -19
@@ -70,35 +70,31 @@ flowchart TB
70 [2] Let mutate y$3 = undefined
71 [3] Const mutate $12 = false
72 [4] Const mutate $13 = true
73 - [5] Const mutate $14 = 1
74 - "]
75 - bb0_instrs --> bb0_terminal(["Switch (read props$9.p0)"])
73 + [5] Const mutate $14 = 1
74 + "]
75 + bb0_instrs --> bb0_terminal(["Switch (read props$9.p0)"])
76 end
77 -
77 subgraph bb6
78 bb6_instrs["
79 [6] Call mutate x$10.push(read props$9.p2)
81 - [7] Reassign mutate y$3 = Array []
82 - "]
83 - bb6_instrs --> bb6_terminal(["Goto"])
80 + [7] Reassign mutate y$3 = Array []
81 + "]
82 + bb6_instrs --> bb6_terminal(["Goto"])
83 end
85 -
84 subgraph bb2
85 bb2_instrs["
88 - [8] Reassign mutate y$3 = read x$10
89 - "]
90 - bb2_instrs --> bb2_terminal(["Goto"])
86 + [8] Reassign mutate y$3 = read x$10
87 + "]
88 + bb2_instrs --> bb2_terminal(["Goto"])
89 end
92 -
90 subgraph bb1
91 bb1_instrs["
92 [9] Const mutate child$19 = JSX <read Component$0 data={freeze x$10} ></read Component$0>
93 [10] Call read y$3.push(read props$9.p4)
97 - [11] Const mutate $22 = JSX <read Component$0 data={freeze y$3} >{read child$19}</read Component$0>
98 - "]
99 - bb1_instrs --> bb1_terminal(["Return read $22"])
94 + [11] Const mutate $22 = JSX <read Component$0 data={freeze y$3} >{read child$19}</read Component$0>
95 + "]
96 + bb1_instrs --> bb1_terminal(["Return read $22"])
97 end
101 -
98
99 %% Jumps
100 bb0_terminal -- read $14 --> bb1
@@ -106,11 +102,9 @@ flowchart TB
102 bb0_terminal -- default --> bb1
103 bb0_terminal -- read $12 --> bb2
104 bb0_terminal -- fallthrough --> bb1
109 -
105 bb6_terminal --> bb1
111 -
106 bb2_terminal --> bb1
113 -
107 +
108 ```
109
110 ## Code
compiler/forget/src/__tests__/fixtures/hir/switch-with-fallthrough.expect.md
+23 -37
@@ -93,57 +93,49 @@ flowchart TB
93 [4] Const mutate $13 = 3
94 [5] Const mutate $14 = 2
95 [6] Const mutate $15 = 1
96 - [7] Const mutate $16 = 0
97 - "]
98 - bb0_instrs --> bb0_terminal(["Switch (read x$9)"])
96 + [7] Const mutate $16 = 0
97 + "]
98 + bb0_instrs --> bb0_terminal(["Switch (read x$9)"])
99 end
100 -
100 subgraph bb10
101 bb10_instrs["
103 - [8] Reassign mutate y$17 = 0
104 - "]
105 - bb10_instrs --> bb10_terminal(["Goto"])
102 + [8] Reassign mutate y$17 = 0
103 + "]
104 + bb10_instrs --> bb10_terminal(["Goto"])
105 end
107 -
106 subgraph bb9
107 bb9_instrs["
110 - [9] Reassign mutate y$18 = 1
111 - "]
112 - bb9_instrs --> bb9_terminal(["Goto"])
108 + [9] Reassign mutate y$18 = 1
109 + "]
110 + bb9_instrs --> bb9_terminal(["Goto"])
111 end
114 -
112 subgraph bb5
113 bb5_instrs["
117 - [10] Reassign mutate y$19 = 3
118 - "]
119 - bb5_instrs --> bb5_terminal(["Goto"])
114 + [10] Reassign mutate y$19 = 3
115 + "]
116 + bb5_instrs --> bb5_terminal(["Goto"])
117 end
121 -
118 subgraph bb4
119 bb4_instrs["
124 - [11] Reassign mutate y$20 = 4
125 - "]
126 - bb4_instrs --> bb4_terminal(["Goto"])
120 + [11] Reassign mutate y$20 = 4
121 + "]
122 + bb4_instrs --> bb4_terminal(["Goto"])
123 end
128 -
124 subgraph bb3
125 bb3_instrs["
131 - [12] Reassign mutate y$21 = 5
132 - "]
133 - bb3_instrs --> bb3_terminal(["Goto"])
126 + [12] Reassign mutate y$21 = 5
127 + "]
128 + bb3_instrs --> bb3_terminal(["Goto"])
129 end
135 -
130 subgraph bb2
131 bb2_instrs["
138 - [13] Reassign mutate y$22 = 0
139 - "]
140 - bb2_instrs --> bb2_terminal(["Goto"])
132 + [13] Reassign mutate y$22 = 0
133 + "]
134 + bb2_instrs --> bb2_terminal(["Goto"])
135 end
142 -
136 subgraph bb1
144 - bb1_terminal(["Return"])
137 + bb1_terminal(["Return"])
138 end
146 -
139
140 %% Jumps
141 bb0_terminal -- read $16 --> bb10
@@ -154,19 +146,13 @@ flowchart TB
146 bb0_terminal -- read $11 --> bb3
147 bb0_terminal -- default --> bb2
148 bb0_terminal -- fallthrough --> bb1
157 -
149 bb10_terminal --> bb9
159 -
150 bb9_terminal --> bb1
161 -
151 bb5_terminal --> bb1
163 -
152 bb4_terminal --> bb3
165 -
153 bb3_terminal --> bb2
167 -
154 bb2_terminal --> bb1
169 -
155 +
156 ```
157
158 ## Code
compiler/forget/src/__tests__/fixtures/hir/switch.expect.md
+13 -19
@@ -64,47 +64,41 @@ flowchart TB
64 [1] Let mutate x$9[1:6] = Array []
65 [2] Let mutate y$3 = undefined
66 [3] Const mutate $11 = false
67 - [4] Const mutate $12 = true
68 - "]
69 - bb0_instrs --> bb0_terminal(["Switch (read props$8.p0)"])
67 + [4] Const mutate $12 = true
68 + "]
69 + bb0_instrs --> bb0_terminal(["Switch (read props$8.p0)"])
70 end
71 -
71 subgraph bb4
72 bb4_instrs["
73 [5] Call mutate x$9.push(read props$8.p2)
74 [6] Call mutate x$9.push(read props$8.p3)
76 - [7] Reassign mutate y$13 = Array []
77 - "]
78 - bb4_instrs --> bb4_terminal(["Goto"])
75 + [7] Reassign mutate y$13 = Array []
76 + "]
77 + bb4_instrs --> bb4_terminal(["Goto"])
78 end
80 -
79 subgraph bb2
80 bb2_instrs["
83 - [8] Reassign mutate y$3 = read x$9
84 - "]
85 - bb2_instrs --> bb2_terminal(["Goto"])
81 + [8] Reassign mutate y$3 = read x$9
82 + "]
83 + bb2_instrs --> bb2_terminal(["Goto"])
84 end
87 -
85 subgraph bb1
86 bb1_instrs["
87 [9] Const mutate child$19 = JSX <read Component$0 data={freeze x$9} ></read Component$0>
88 [10] Call read y$3.push(read props$8.p4)
92 - [11] Const mutate $23 = JSX <read Component$0 data={read y$3} >{read child$19}</read Component$0>
93 - "]
94 - bb1_instrs --> bb1_terminal(["Return read $23"])
89 + [11] Const mutate $23 = JSX <read Component$0 data={read y$3} >{read child$19}</read Component$0>
90 + "]
91 + bb1_instrs --> bb1_terminal(["Return read $23"])
92 end
96 -
93
94 %% Jumps
95 bb0_terminal -- read $12 --> bb4
96 bb0_terminal -- read $11 --> bb2
97 bb0_terminal -- default --> bb1
98 bb0_terminal -- fallthrough --> bb1
103 -
99 bb4_terminal --> bb2
105 -
100 bb2_terminal --> bb1
107 -
101 +
102 ```
103
104 ## Code
compiler/forget/src/__tests__/fixtures/hir/while-break.expect.md
+4 -8
@@ -30,26 +30,22 @@ bb2:
30 flowchart TB
31 %% Basic Blocks
32 subgraph bb0
33 - bb0_terminal(["While"])
33 + bb0_terminal(["While"])
34 end
35 -
35 subgraph bb1
37 - bb1_terminal(["If (read a$3)"])
36 + bb1_terminal(["If (read a$3)"])
37 end
39 -
38 subgraph bb2
41 - bb2_terminal(["Return read b$4"])
39 + bb2_terminal(["Return read b$4"])
40 end
43 -
41
42 %% Jumps
43 bb0_terminal -- test --> bb1
44 bb0_terminal -- loop --> bb2
45 bb0_terminal -- fallthrough --> bb2
49 -
46 bb1_terminal -- then --> bb2
47 bb1_terminal -- else --> bb2
52 -
48 +
49 ```
50
51 ## Code
compiler/forget/src/__tests__/fixtures/hir/while-conditional-continue.expect.md
+11 -21
@@ -45,51 +45,41 @@ bb2:
45 flowchart TB
46 %% Basic Blocks
47 subgraph bb0
48 - bb0_terminal(["While"])
48 + bb0_terminal(["While"])
49 end
50 -
50 subgraph bb1
52 - bb1_terminal(["If (read a$5)"])
51 + bb1_terminal(["If (read a$5)"])
52 end
54 -
53 subgraph bb3
56 - bb3_terminal(["If (read b$6)"])
54 + bb3_terminal(["If (read b$6)"])
55 end
58 -
56 subgraph bb5
60 - bb5_terminal(["Goto"])
57 + bb5_terminal(["Goto"])
58 end
62 -
59 subgraph bb4
60 bb4_instrs["
65 - [1] Call read c$7()
66 - "]
67 - bb4_instrs --> bb4_terminal(["Goto"])
61 + [1] Call read c$7()
62 + "]
63 + bb4_instrs --> bb4_terminal(["Goto"])
64 end
69 -
65 subgraph bb2
66 bb2_instrs["
72 - [2] Call read d$8()
73 - "]
74 - bb2_instrs --> bb2_terminal(["Return"])
67 + [2] Call read d$8()
68 + "]
69 + bb2_instrs --> bb2_terminal(["Return"])
70 end
76 -
71
72 %% Jumps
73 bb0_terminal -- test --> bb1
74 bb0_terminal -- loop --> bb3
75 bb0_terminal -- fallthrough --> bb2
82 -
76 bb1_terminal -- then --> bb3
77 bb1_terminal -- else --> bb2
85 -
78 bb3_terminal -- then --> bb5
79 bb3_terminal -- else --> bb4
88 -
80 bb5_terminal --> bb1
90 -
81 bb4_terminal --> bb1
92 -
82 +
83 ```
84
85 ## Code