mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
Run LeaveSSA prior to analyzing reactive scopes
Reorders LeaveSSA so that it runs before we begin evaluating reactive scopes. Note that reactive scopes must span the full construction of each variable — for variables with a phi, this must span the declaration and all assignments of the phi operands. And that's exactly what the new LeaveSSA does! LeaveSSA removes phi nodes and ensure that all versions of a variable which flow into a phi have been assigned a single canonical identifier (with an appropriate mutable range). This PR includes this and some related changes: * Reorders the pass * Changes hir-test to print the final HIR, eg just prior to codegen * Teaches LeaveSSA to update the mutable range of the canonical identifiers it assigns, based on the min/max of the variables assigned.
This commit is contained in:
@@ -87,6 +87,9 @@ function compile(source: string): CompilerOutput | CompilerError {
|
||||
inferMutableRanges(ir);
|
||||
const inferMutableRangesOutput = printHIR(ir.body);
|
||||
|
||||
leaveSSA(ir);
|
||||
const leaveSSAOutput = printHIR(ir.body);
|
||||
|
||||
inferReactiveScopeVariables(ir);
|
||||
const inferReactiveScopeVariablesOutput = printHIR(ir.body);
|
||||
|
||||
@@ -96,9 +99,6 @@ function compile(source: string): CompilerOutput | CompilerError {
|
||||
inferReactiveScopeDependencies(ir);
|
||||
const inferReactiveScopeDependenciesOutput = printHIR(ir.body);
|
||||
|
||||
leaveSSA(ir);
|
||||
const leaveSSAOutput = printHIR(ir.body);
|
||||
|
||||
codegen(ir);
|
||||
const ast = codegen(ir);
|
||||
const generated = generate(
|
||||
@@ -183,6 +183,11 @@ function Output({ store, setTabsOpen, tabsOpen }: Props) {
|
||||
output={compilerOutput.inferMutableRangesOutput}
|
||||
></TextTabContent>
|
||||
),
|
||||
LeaveSSA: (
|
||||
<TextTabContent
|
||||
output={compilerOutput.leaveSSAOutput}
|
||||
></TextTabContent>
|
||||
),
|
||||
InferReactiveScopeVariables: (
|
||||
<TextTabContent
|
||||
output={compilerOutput.inferReactiveScopeVariablesOutput}
|
||||
@@ -198,11 +203,6 @@ function Output({ store, setTabsOpen, tabsOpen }: Props) {
|
||||
output={compilerOutput.inferReactiveScopeDependenciesOutput}
|
||||
></TextTabContent>
|
||||
),
|
||||
LeaveSSA: (
|
||||
<TextTabContent
|
||||
output={compilerOutput.leaveSSAOutput}
|
||||
></TextTabContent>
|
||||
),
|
||||
JS: <TextTabContent output={compilerOutput.codegenOutput} />,
|
||||
SourceMap: (
|
||||
<>
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import invariant from "invariant";
|
||||
import DisjointSet from "./DisjointSet";
|
||||
import {
|
||||
HIRFunction,
|
||||
@@ -68,10 +69,10 @@ export function inferReactiveScopeVariables(fn: HIRFunction) {
|
||||
// that mutate together.
|
||||
const scopeIdentifiers = new DisjointSet<Identifier>();
|
||||
for (const [_, block] of fn.body.blocks) {
|
||||
for (const phi of block.phis) {
|
||||
const operands: Array<Identifier> = [phi.id, ...phi.operands.values()];
|
||||
scopeIdentifiers.union(operands);
|
||||
}
|
||||
invariant(
|
||||
block.phis.size === 0,
|
||||
"Expected phis to be cleared by LeaveSSA pass"
|
||||
);
|
||||
|
||||
for (const instr of block.instructions) {
|
||||
const operands: Array<Identifier> = [];
|
||||
|
||||
@@ -11,8 +11,11 @@ import {
|
||||
HIRFunction,
|
||||
Identifier,
|
||||
Instruction,
|
||||
InstructionId,
|
||||
InstructionKind,
|
||||
makeInstructionId,
|
||||
Phi,
|
||||
Place,
|
||||
} from "./HIR";
|
||||
import { eachInstructionValueOperand, eachTerminalOperand } from "./visitors";
|
||||
|
||||
@@ -28,6 +31,7 @@ export function leaveSSA(fn: HIRFunction) {
|
||||
// Maps identifiers that appear as a phi or phi operand to a single canonical identifier
|
||||
// for all instances.
|
||||
const variableMapping: Map<Identifier, Identifier> = new Map();
|
||||
const hasDeclaration: Set<Identifier> = new Set();
|
||||
|
||||
for (const [, block] of fn.body.blocks) {
|
||||
// Identifiers (from phis) that *may* need a new `let` declaration created. If the original
|
||||
@@ -78,13 +82,28 @@ export function leaveSSA(fn: HIRFunction) {
|
||||
canonicalId = operand;
|
||||
}
|
||||
}
|
||||
canonicalId.mutableRange.start = Math.min(
|
||||
canonicalId.mutableRange.start,
|
||||
terminal.id
|
||||
) as InstructionId;
|
||||
variableMapping.set(phi.id, canonicalId);
|
||||
needsDeclaration.add(canonicalId);
|
||||
if (!hasDeclaration.has(canonicalId)) {
|
||||
needsDeclaration.add(canonicalId);
|
||||
}
|
||||
}
|
||||
|
||||
// all versions of the variable need to be remapped to the canonical id
|
||||
// also extend the mutable range of the canonical id based on the min/max
|
||||
// of the ranges of its operands
|
||||
let start = canonicalId.mutableRange.start as number;
|
||||
let end = canonicalId.mutableRange.end as number;
|
||||
for (const [, operand] of phi.operands) {
|
||||
start = Math.min(start, operand.mutableRange.start);
|
||||
end = Math.max(end, operand.mutableRange.end);
|
||||
variableMapping.set(operand, canonicalId);
|
||||
}
|
||||
canonicalId.mutableRange.start = makeInstructionId(start);
|
||||
canonicalId.mutableRange.end = makeInstructionId(end);
|
||||
}
|
||||
|
||||
// Visit instructions and rewrite identifiers based on the variable mapping
|
||||
@@ -92,9 +111,7 @@ export function leaveSSA(fn: HIRFunction) {
|
||||
for (const instr of block.instructions) {
|
||||
const { lvalue, value } = instr;
|
||||
if (lvalue !== null) {
|
||||
lvalue.place.identifier =
|
||||
variableMapping.get(lvalue.place.identifier) ??
|
||||
lvalue.place.identifier;
|
||||
updatePlace(lvalue.place, variableMapping);
|
||||
if (lvalue.place.memberPath === null) {
|
||||
if (!variableMapping.has(lvalue.place.identifier)) {
|
||||
// This variable does not flow into a phi, therefore there
|
||||
@@ -109,11 +126,11 @@ export function leaveSSA(fn: HIRFunction) {
|
||||
// reassign the variable in the first place.
|
||||
needsDeclaration.delete(lvalue.place.identifier);
|
||||
}
|
||||
hasDeclaration.add(lvalue.place.identifier);
|
||||
}
|
||||
}
|
||||
for (const operand of eachInstructionValueOperand(value)) {
|
||||
operand.identifier =
|
||||
variableMapping.get(operand.identifier) ?? operand.identifier;
|
||||
updatePlace(operand, variableMapping);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -151,3 +168,24 @@ export function leaveSSA(fn: HIRFunction) {
|
||||
block.phis.clear();
|
||||
}
|
||||
}
|
||||
|
||||
function updatePlace(
|
||||
place: Place,
|
||||
variableMapping: Map<Identifier, Identifier>
|
||||
) {
|
||||
const prevIdentifier = place.identifier;
|
||||
const nextIdentifier = variableMapping.get(prevIdentifier);
|
||||
if (nextIdentifier === undefined || nextIdentifier === prevIdentifier) {
|
||||
return;
|
||||
}
|
||||
nextIdentifier.mutableRange.start = makeInstructionId(
|
||||
Math.min(
|
||||
nextIdentifier.mutableRange.start,
|
||||
prevIdentifier.mutableRange.start
|
||||
)
|
||||
);
|
||||
nextIdentifier.mutableRange.end = makeInstructionId(
|
||||
Math.max(nextIdentifier.mutableRange.end, prevIdentifier.mutableRange.end)
|
||||
);
|
||||
place.identifier = nextIdentifier;
|
||||
}
|
||||
|
||||
@@ -51,6 +51,9 @@ export default function (
|
||||
if (flags.inferMutableRanges) {
|
||||
inferMutableRanges(ir);
|
||||
}
|
||||
if (flags.leaveSSA) {
|
||||
leaveSSA(ir);
|
||||
}
|
||||
if (flags.inferReactiveScopeVariables) {
|
||||
inferReactiveScopeVariables(ir);
|
||||
}
|
||||
@@ -60,9 +63,6 @@ export default function (
|
||||
if (flags.inferReactiveScopeDependencies) {
|
||||
inferReactiveScopeDependencies(ir);
|
||||
}
|
||||
if (flags.leaveSSA) {
|
||||
leaveSSA(ir);
|
||||
}
|
||||
if (flags.codegen) {
|
||||
return {
|
||||
ast: codegen(ir),
|
||||
|
||||
+4
-4
@@ -15,8 +15,8 @@ function f() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$4_@0 = 1
|
||||
[2] Reassign mutate x$5_@1 = 2
|
||||
[1] Const mutate x$4_@0 = 1
|
||||
[2] Const mutate x$5_@1 = 2
|
||||
[3] Const mutate $6_@2 = Binary read x$5_@1 + read x$5_@1
|
||||
[4] Const mutate $7_@3 = Binary read $6_@2 + read x$5_@1
|
||||
[5] Return read $7_@3
|
||||
@@ -35,8 +35,8 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$4_@0 = 1
|
||||
[2] Reassign mutate x$5_@1 = 2
|
||||
[1] Const mutate x$4_@0 = 1
|
||||
[2] Const mutate x$5_@1 = 2
|
||||
[3] Const mutate $6_@2 = Binary read x$5_@1 + read x$5_@1
|
||||
[4] Const mutate $7_@3 = Binary read $6_@2 + read x$5_@1
|
||||
"]
|
||||
|
||||
@@ -20,23 +20,22 @@ function foo(a, b, c) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$8_@0 = null
|
||||
[1] Const mutate x$8_@0 = null
|
||||
[2] If (read a$5) then:bb3 else:bb2 fallthrough=bb2
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[3] Reassign mutate x$9_@1[3:6] = read b$6
|
||||
[3] Const mutate x$9_@1 = read b$6
|
||||
[4] Goto bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[5] Reassign mutate x$10_@1[3:6] = read c$7
|
||||
[5] Const mutate x$10_@2 = read c$7
|
||||
[6] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb3 bb2
|
||||
x$11_@1[3:6]: phi(bb3: x$9_@1, bb2: x$10_@1)
|
||||
[7] Return read x$11_@1
|
||||
scope1 [3:6]:
|
||||
[7] Return read x$11
|
||||
scope1 [3:4]:
|
||||
- read b$6
|
||||
- read a$5
|
||||
scope2 [5:6]:
|
||||
- read c$7
|
||||
```
|
||||
|
||||
@@ -47,24 +46,24 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$8_@0 = null
|
||||
[1] Const mutate x$8_@0 = null
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read a$5)"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[3] Reassign mutate x$9_@1[3:6] = read b$6
|
||||
[3] Const mutate x$9_@1 = read b$6
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[5] Reassign mutate x$10_@1[3:6] = read c$7
|
||||
[5] Const mutate x$10_@2 = read c$7
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_terminal(["Return read x$11_@1"])
|
||||
bb1_terminal(["Return read x$11"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
|
||||
@@ -33,24 +33,21 @@ bb0:
|
||||
[4] While test=bb1 loop=bb3 fallthrough=bb2
|
||||
bb1:
|
||||
predecessor blocks: bb0 bb3
|
||||
a$12_@0[0:12]: phi(bb0: a$8_@0, bb3: a$15_@0)
|
||||
b$14_@0[0:12]: phi(bb0: b$9_@0, bb3: b$17_@0)
|
||||
c$16_@0[0:12]: phi(bb0: c$10_@0, bb3: c$18_@0)
|
||||
[5] If (read cond$7) then:bb3 else:bb2 fallthrough=bb2
|
||||
bb3:
|
||||
predecessor blocks: bb1
|
||||
[6] Let mutate z$13_@0[0:12] = read a$12_@0
|
||||
[7] Reassign mutate a$15_@0[0:12] = read b$14_@0
|
||||
[8] Reassign mutate b$17_@0[0:12] = read c$16_@0
|
||||
[9] Reassign mutate c$18_@0[0:12] = read z$13_@0
|
||||
[10] Call mutate mutate$6_@0(mutate a$15_@0, mutate b$17_@0)
|
||||
[6] Const mutate z$13_@0[0:12] = read a$8_@0
|
||||
[7] Reassign mutate a$8_@0[0:12] = read b$9_@0
|
||||
[8] Reassign mutate b$9_@0[0:12] = read c$10_@0
|
||||
[9] Reassign mutate c$10_@0[0:12] = read z$13_@0
|
||||
[10] Call mutate mutate$6_@0(mutate a$8_@0, mutate b$9_@0)
|
||||
[11] Goto(Continue) bb1
|
||||
bb2:
|
||||
predecessor blocks: bb1
|
||||
[12] read a$12_@0
|
||||
[13] read b$14_@0
|
||||
[14] read c$16_@0
|
||||
[15] Return freeze a$12_@0
|
||||
[12] read a$8_@0
|
||||
[13] read b$9_@0
|
||||
[14] read c$10_@0
|
||||
[15] Return freeze a$8_@0
|
||||
|
||||
```
|
||||
|
||||
@@ -72,21 +69,21 @@ flowchart TB
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[6] Let mutate z$13_@0[0:12] = read a$12_@0
|
||||
[7] Reassign mutate a$15_@0[0:12] = read b$14_@0
|
||||
[8] Reassign mutate b$17_@0[0:12] = read c$16_@0
|
||||
[9] Reassign mutate c$18_@0[0:12] = read z$13_@0
|
||||
[10] Call mutate mutate$6_@0(mutate a$15_@0, mutate b$17_@0)
|
||||
[6] Const mutate z$13_@0[0:12] = read a$8_@0
|
||||
[7] Reassign mutate a$8_@0[0:12] = read b$9_@0
|
||||
[8] Reassign mutate b$9_@0[0:12] = read c$10_@0
|
||||
[9] Reassign mutate c$10_@0[0:12] = read z$13_@0
|
||||
[10] Call mutate mutate$6_@0(mutate a$8_@0, mutate b$9_@0)
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[12] read a$12_@0
|
||||
[13] read b$14_@0
|
||||
[14] read c$16_@0
|
||||
[12] read a$8_@0
|
||||
[13] read b$9_@0
|
||||
[14] read c$10_@0
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Return freeze a$12_@0"])
|
||||
bb2_instrs --> bb2_terminal(["Return freeze a$8_@0"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
|
||||
@@ -20,13 +20,13 @@ function g(a) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$5_@0 = 1
|
||||
[1] Const mutate x$5_@0 = 1
|
||||
[2] Const mutate $6_@1 = 1
|
||||
[3] Reassign mutate x$7_@2 = Binary read x$5_@0 + read $6_@1
|
||||
[3] Const mutate x$7_@2 = Binary read x$5_@0 + read $6_@1
|
||||
[4] Const mutate $8_@3 = 1
|
||||
[5] Reassign mutate x$9_@4 = Binary read x$7_@2 + read $8_@3
|
||||
[5] Const mutate x$9_@4 = Binary read x$7_@2 + read $8_@3
|
||||
[6] Const mutate $10_@5 = 1
|
||||
[7] Reassign mutate x$11_@6 = Binary read x$9_@4 >>> read $10_@5
|
||||
[7] Const mutate x$11_@6 = Binary read x$9_@4 >>> read $10_@5
|
||||
[8] Return
|
||||
scope2 [3:4]:
|
||||
- read x$5_@0
|
||||
@@ -46,13 +46,13 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$5_@0 = 1
|
||||
[1] Const mutate x$5_@0 = 1
|
||||
[2] Const mutate $6_@1 = 1
|
||||
[3] Reassign mutate x$7_@2 = Binary read x$5_@0 + read $6_@1
|
||||
[3] Const mutate x$7_@2 = Binary read x$5_@0 + read $6_@1
|
||||
[4] Const mutate $8_@3 = 1
|
||||
[5] Reassign mutate x$9_@4 = Binary read x$7_@2 + read $8_@3
|
||||
[5] Const mutate x$9_@4 = Binary read x$7_@2 + read $8_@3
|
||||
[6] Const mutate $10_@5 = 1
|
||||
[7] Reassign mutate x$11_@6 = Binary read x$9_@4 >>> read $10_@5
|
||||
[7] Const mutate x$11_@6 = Binary read x$9_@4 >>> read $10_@5
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["Return"])
|
||||
end
|
||||
|
||||
@@ -50,7 +50,7 @@ bb0:
|
||||
[2] Const mutate b$11_@0[0:7] = Object { }
|
||||
[3] Call mutate foo$4_@0(mutate a$10_@0, mutate b$11_@0)
|
||||
[4] Const mutate $12_@1 = "div"
|
||||
[5] Let mutate _$13_@2 = JSX <read $12_@1 a={freeze a$10_@0} ></read $12_@1>
|
||||
[5] Const mutate _$13_@2 = JSX <read $12_@1 a={freeze a$10_@0} ></read $12_@1>
|
||||
[6] Call mutate foo$4_@0(mutate b$11_@0)
|
||||
[7] Const mutate $14_@3 = "div"
|
||||
[8] Const mutate $15_@4 = JSX <read $14_@3 a={read a$10_@0} b={freeze b$11_@0} ></read $14_@3>
|
||||
@@ -74,7 +74,7 @@ flowchart TB
|
||||
[2] Const mutate b$11_@0[0:7] = Object { }
|
||||
[3] Call mutate foo$4_@0(mutate a$10_@0, mutate b$11_@0)
|
||||
[4] Const mutate $12_@1 = 'div'
|
||||
[5] Let mutate _$13_@2 = JSX <read $12_@1 a={freeze a$10_@0} ></read $12_@1>
|
||||
[5] Const mutate _$13_@2 = JSX <read $12_@1 a={freeze a$10_@0} ></read $12_@1>
|
||||
[6] Call mutate foo$4_@0(mutate b$11_@0)
|
||||
[7] Const mutate $14_@3 = 'div'
|
||||
[8] Const mutate $15_@4 = JSX <read $14_@3 a={read a$10_@0} b={freeze b$11_@0} ></read $14_@3>
|
||||
|
||||
@@ -49,6 +49,7 @@ bb3:
|
||||
predecessor blocks: bb1
|
||||
[9] Const mutate $34_@6 = null
|
||||
[10] Const mutate $36_@3[0:19] = Binary read item$10_@3 == read $34_@6
|
||||
[11] Let mutate $37_@3[0:19] = undefined
|
||||
[11] If (read $36_@3) then:bb8 else:bb9 fallthrough=bb7
|
||||
bb8:
|
||||
predecessor blocks: bb3
|
||||
@@ -56,12 +57,11 @@ bb8:
|
||||
[13] Goto bb7
|
||||
bb9:
|
||||
predecessor blocks: bb3
|
||||
[14] Const mutate $39_@3[0:19] = Call mutate seen$30_@3.has(mutate item$10_@3)
|
||||
[14] Const mutate $37_@3[0:19] = Call mutate seen$30_@3.has(mutate item$10_@3)
|
||||
[15] Goto bb7
|
||||
bb7:
|
||||
predecessor blocks: bb8 bb9
|
||||
$40_@3[0:19]: phi(bb8: $37_@3, bb9: $39_@3)
|
||||
[16] If (read $40_@3) then:bb5 else:bb4 fallthrough=bb4
|
||||
[16] If (read $37_@3) then:bb5 else:bb4 fallthrough=bb4
|
||||
bb5:
|
||||
predecessor blocks: bb7
|
||||
[17] Goto(Continue) bb1
|
||||
@@ -117,6 +117,7 @@ flowchart TB
|
||||
bb3_instrs["
|
||||
[9] Const mutate $34_@6 = null
|
||||
[10] Const mutate $36_@3[0:19] = Binary read item$10_@3 == read $34_@6
|
||||
[11] Let mutate $37_@3[0:19] = undefined
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["If (read $36_@3)"])
|
||||
end
|
||||
@@ -128,12 +129,12 @@ flowchart TB
|
||||
end
|
||||
subgraph bb9
|
||||
bb9_instrs["
|
||||
[14] Const mutate $39_@3[0:19] = Call mutate seen$30_@3.has(mutate item$10_@3)
|
||||
[14] Const mutate $37_@3[0:19] = Call mutate seen$30_@3.has(mutate item$10_@3)
|
||||
"]
|
||||
bb9_instrs --> bb9_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb7
|
||||
bb7_terminal(["If (read $40_@3)"])
|
||||
bb7_terminal(["If (read $37_@3)"])
|
||||
end
|
||||
subgraph bb5
|
||||
bb5_terminal(["Goto"])
|
||||
|
||||
@@ -50,7 +50,7 @@ bb0:
|
||||
[2] Const mutate b$11_@0[0:7] = Object { }
|
||||
[3] New mutate Foo$4_@0(mutate a$10_@0, mutate b$11_@0)
|
||||
[4] Const mutate $12_@1 = "div"
|
||||
[5] Let mutate _$13_@2 = JSX <read $12_@1 a={freeze a$10_@0} ></read $12_@1>
|
||||
[5] Const mutate _$13_@2 = JSX <read $12_@1 a={freeze a$10_@0} ></read $12_@1>
|
||||
[6] New mutate Foo$4_@0(mutate b$11_@0)
|
||||
[7] Const mutate $14_@3 = "div"
|
||||
[8] Const mutate $15_@4 = JSX <read $14_@3 a={read a$10_@0} b={freeze b$11_@0} ></read $14_@3>
|
||||
@@ -74,7 +74,7 @@ flowchart TB
|
||||
[2] Const mutate b$11_@0[0:7] = Object { }
|
||||
[3] New mutate Foo$4_@0(mutate a$10_@0, mutate b$11_@0)
|
||||
[4] Const mutate $12_@1 = 'div'
|
||||
[5] Let mutate _$13_@2 = JSX <read $12_@1 a={freeze a$10_@0} ></read $12_@1>
|
||||
[5] Const mutate _$13_@2 = JSX <read $12_@1 a={freeze a$10_@0} ></read $12_@1>
|
||||
[6] New mutate Foo$4_@0(mutate b$11_@0)
|
||||
[7] Const mutate $14_@3 = 'div'
|
||||
[8] Const mutate $15_@4 = JSX <read $14_@3 a={read a$10_@0} b={freeze b$11_@0} ></read $14_@3>
|
||||
|
||||
@@ -23,7 +23,7 @@ function foo(a, b, c) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$10_@0[1:8] = Array []
|
||||
[1] Const mutate x$10_@0[1:8] = Array []
|
||||
[2] If (read a$7) then:bb2 else:bb1 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
@@ -59,7 +59,7 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$10_@0[1:8] = Array []
|
||||
[1] Const mutate x$10_@0[1:8] = Array []
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read a$7)"])
|
||||
end
|
||||
|
||||
+18
-16
@@ -28,29 +28,30 @@ function call(x) {}
|
||||
bb0:
|
||||
[1] Const mutate cond$8_@0 = read props$7.cond
|
||||
[2] Const mutate x$9_@1 = read props$7.x
|
||||
[3] Let mutate a$10_@2 = undefined
|
||||
[3] Const mutate a$10_@2 = undefined
|
||||
[4] Let mutate a$11_@3[4:9] = undefined
|
||||
[4] If (read cond$8_@0) then:bb2 else:bb3 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[5] Reassign mutate a$11_@3[5:8] = read x$9_@1
|
||||
[5] Reassign mutate a$11_@3[4:9] = read x$9_@1
|
||||
[6] Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[7] Reassign mutate a$12_@3[5:8] = Array []
|
||||
[7] Reassign mutate a$11_@3[4:9] = Array []
|
||||
[8] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
a$14_@3[5:8]: phi(bb2: a$11_@3, bb3: a$12_@3)
|
||||
[9] Call read useFreeze$5(freeze a$14_@3)
|
||||
[10] Call read useFreeze$5(read a$14_@3)
|
||||
[11] Call mutate call$6_@4(read a$14_@3)
|
||||
[12] Return read a$14_@3
|
||||
[9] Call read useFreeze$5(freeze a$11_@3)
|
||||
[10] Call read useFreeze$5(read a$11_@3)
|
||||
[11] Call mutate call$6_@4(read a$11_@3)
|
||||
[12] Return read a$11_@3
|
||||
scope0 [1:2]:
|
||||
- read props$7.cond
|
||||
scope1 [2:3]:
|
||||
- read props$7.x
|
||||
scope3 [5:8]:
|
||||
scope3 [4:9]:
|
||||
- read x$9_@1
|
||||
- read cond$8_@0
|
||||
```
|
||||
|
||||
### CFG
|
||||
@@ -62,29 +63,30 @@ flowchart TB
|
||||
bb0_instrs["
|
||||
[1] Const mutate cond$8_@0 = read props$7.cond
|
||||
[2] Const mutate x$9_@1 = read props$7.x
|
||||
[3] Let mutate a$10_@2 = undefined
|
||||
[3] Const mutate a$10_@2 = undefined
|
||||
[4] Let mutate a$11_@3[4:9] = undefined
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read cond$8_@0)"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[5] Reassign mutate a$11_@3[5:8] = read x$9_@1
|
||||
[5] Reassign mutate a$11_@3[4:9] = read x$9_@1
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[7] Reassign mutate a$12_@3[5:8] = Array []
|
||||
[7] Reassign mutate a$11_@3[4:9] = Array []
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[9] Call read useFreeze$5(freeze a$14_@3)
|
||||
[10] Call read useFreeze$5(read a$14_@3)
|
||||
[11] Call mutate call$6_@4(read a$14_@3)
|
||||
[9] Call read useFreeze$5(freeze a$11_@3)
|
||||
[10] Call read useFreeze$5(read a$11_@3)
|
||||
[11] Call mutate call$6_@4(read a$11_@3)
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Return read a$14_@3"])
|
||||
bb1_instrs --> bb1_terminal(["Return read a$11_@3"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
|
||||
@@ -18,7 +18,7 @@ function foo(a, b, c) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate y$8_@0[1:6] = Array []
|
||||
[1] Const mutate y$8_@0[1:6] = Array []
|
||||
[2] If (read a$5) then:bb3 else:bb1 fallthrough=bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
@@ -43,7 +43,7 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate y$8_@0[1:6] = Array []
|
||||
[1] Const mutate y$8_@0[1:6] = Array []
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read a$5)"])
|
||||
end
|
||||
|
||||
@@ -24,19 +24,19 @@ function g() {}
|
||||
```
|
||||
bb0:
|
||||
[1] Const mutate $5_@0[0:2] = Call mutate f$1_@0()
|
||||
[2] Let mutate $6_@1[0:7] = undefined
|
||||
[2] If (read $5_@0) then:bb2 else:bb3 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[3] Const mutate $6_@1[0:6] = Call mutate g$4_@1()
|
||||
[3] Const mutate $6_@1[0:7] = Call mutate g$4_@1()
|
||||
[4] Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[5] Const mutate $7_@1[0:6] = read $5_@0
|
||||
[5] Const mutate $6_@1[0:7] = read $5_@0
|
||||
[6] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
$8_@1[0:6]: phi(bb2: $6_@1, bb3: $7_@1)
|
||||
[7] Return freeze $8_@1
|
||||
[7] Return freeze $6_@1
|
||||
|
||||
```
|
||||
|
||||
@@ -48,23 +48,24 @@ flowchart TB
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Const mutate $5_@0[0:2] = Call mutate f$1_@0()
|
||||
[2] Let mutate $6_@1[0:7] = undefined
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read $5_@0)"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[3] Const mutate $6_@1[0:6] = Call mutate g$4_@1()
|
||||
[3] Const mutate $6_@1[0:7] = Call mutate g$4_@1()
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[5] Const mutate $7_@1[0:6] = read $5_@0
|
||||
[5] Const mutate $6_@1[0:7] = read $5_@0
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_terminal(["Return freeze $8_@1"])
|
||||
bb1_terminal(["Return freeze $6_@1"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
@@ -92,19 +93,19 @@ function And$0() {
|
||||
```
|
||||
bb0:
|
||||
[1] Const mutate $5_@0[0:2] = Call mutate f$1_@0()
|
||||
[2] Let mutate $6_@1[0:7] = undefined
|
||||
[2] If (read $5_@0) then:bb2 else:bb3 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[3] Const mutate $6_@1[0:6] = read $5_@0
|
||||
[3] Const mutate $6_@1[0:7] = read $5_@0
|
||||
[4] Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[5] Const mutate $7_@1[0:6] = Call mutate g$4_@1()
|
||||
[5] Const mutate $6_@1[0:7] = Call mutate g$4_@1()
|
||||
[6] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
$8_@1[0:6]: phi(bb2: $6_@1, bb3: $7_@1)
|
||||
[7] Return freeze $8_@1
|
||||
[7] Return freeze $6_@1
|
||||
|
||||
```
|
||||
|
||||
@@ -116,23 +117,24 @@ flowchart TB
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Const mutate $5_@0[0:2] = Call mutate f$1_@0()
|
||||
[2] Let mutate $6_@1[0:7] = undefined
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read $5_@0)"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[3] Const mutate $6_@1[0:6] = read $5_@0
|
||||
[3] Const mutate $6_@1[0:7] = read $5_@0
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[5] Const mutate $7_@1[0:6] = Call mutate g$4_@1()
|
||||
[5] Const mutate $6_@1[0:7] = Call mutate g$4_@1()
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_terminal(["Return freeze $8_@1"])
|
||||
bb1_terminal(["Return freeze $6_@1"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
@@ -162,19 +164,19 @@ bb0:
|
||||
[1] Const mutate $9_@0[0:2] = Call mutate f$2_@0()
|
||||
[2] Const mutate $10_@1 = null
|
||||
[3] Const mutate $11_@2 = Binary read $9_@0 != read $10_@1
|
||||
[4] Let mutate $12_@3[0:9] = undefined
|
||||
[4] If (read $11_@2) then:bb2 else:bb3 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[5] Const mutate $12_@3[0:8] = read $9_@0
|
||||
[5] Const mutate $12_@3[0:9] = read $9_@0
|
||||
[6] Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[7] Const mutate $13_@3[0:8] = Call mutate g$7_@3()
|
||||
[7] Const mutate $12_@3[0:9] = Call mutate g$7_@3()
|
||||
[8] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
$14_@3[0:8]: phi(bb2: $12_@3, bb3: $13_@3)
|
||||
[9] Return freeze $14_@3
|
||||
[9] Return freeze $12_@3
|
||||
scope2 [3:4]:
|
||||
- read $9_@0
|
||||
- read $10_@1
|
||||
@@ -190,23 +192,24 @@ flowchart TB
|
||||
[1] Const mutate $9_@0[0:2] = Call mutate f$2_@0()
|
||||
[2] Const mutate $10_@1 = null
|
||||
[3] Const mutate $11_@2 = Binary read $9_@0 != read $10_@1
|
||||
[4] Let mutate $12_@3[0:9] = undefined
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read $11_@2)"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[5] Const mutate $12_@3[0:8] = read $9_@0
|
||||
[5] Const mutate $12_@3[0:9] = read $9_@0
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[7] Const mutate $13_@3[0:8] = Call mutate g$7_@3()
|
||||
[7] Const mutate $12_@3[0:9] = Call mutate g$7_@3()
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_terminal(["Return freeze $14_@3"])
|
||||
bb1_terminal(["Return freeze $12_@3"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
|
||||
@@ -97,52 +97,44 @@ function cond$0(x$2) {}
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate a$13_@0[0:23] = Object { }
|
||||
[2] Let mutate b$14_@0[0:23] = Object { }
|
||||
[3] Let mutate c$15_@0[0:23] = Object { }
|
||||
[4] Let mutate d$16_@0[0:23] = Object { }
|
||||
[1] Let mutate a$18_@0[0:23] = Object { }
|
||||
[2] Let mutate b$20_@0[0:23] = Object { }
|
||||
[3] Let mutate c$22_@0[0:23] = Object { }
|
||||
[4] Let mutate d$24_@0[0:23] = Object { }
|
||||
[5] While test=bb1 loop=bb3 fallthrough=bb2
|
||||
bb1:
|
||||
predecessor blocks: bb0 bb4
|
||||
a$18_@0[0:23]: phi(bb0: a$13_@0, bb4: a$21_@0)
|
||||
b$20_@0[0:23]: phi(bb0: b$14_@0, bb4: b$23_@0)
|
||||
c$22_@0[0:23]: phi(bb0: c$15_@0, bb4: c$25_@0)
|
||||
d$24_@0[0:23]: phi(bb0: d$16_@0, bb4: d$26_@0)
|
||||
[6] Const mutate $17_@1[6:8] = true
|
||||
[7] If (read $17_@1) then:bb3 else:bb2 fallthrough=bb2
|
||||
bb3:
|
||||
predecessor blocks: bb1
|
||||
[8] Let mutate z$19_@0[0:23] = read a$18_@0
|
||||
[9] Reassign mutate a$21_@0[0:23] = read b$20_@0
|
||||
[10] Reassign mutate b$23_@0[0:23] = read c$22_@0
|
||||
[11] Reassign mutate c$25_@0[0:23] = read d$24_@0
|
||||
[12] Reassign mutate d$26_@0[0:23] = read z$19_@0
|
||||
[13] Call mutate mutate$7_@0(mutate a$21_@0, mutate b$23_@0)
|
||||
[14] Const mutate $29_@0[0:23] = Call mutate cond$8_@0(mutate a$21_@0)
|
||||
[8] Const mutate z$19_@0[0:23] = read a$18_@0
|
||||
[9] Reassign mutate a$18_@0[0:23] = read b$20_@0
|
||||
[10] Reassign mutate b$20_@0[0:23] = read c$22_@0
|
||||
[11] Reassign mutate c$22_@0[0:23] = read d$24_@0
|
||||
[12] Reassign mutate d$24_@0[0:23] = read z$19_@0
|
||||
[13] Call mutate mutate$7_@0(mutate a$18_@0, mutate b$20_@0)
|
||||
[14] Const mutate $29_@0[0:23] = Call mutate cond$8_@0(mutate a$18_@0)
|
||||
[15] If (read $29_@0) then:bb2 else:bb4 fallthrough=bb4
|
||||
bb4:
|
||||
predecessor blocks: bb3
|
||||
[16] Goto(Continue) bb1
|
||||
bb2:
|
||||
predecessor blocks: bb3 bb1
|
||||
a$30_@0[0:23]: phi(bb3: a$21_@0, bb1: a$18_@0)
|
||||
b$31_@0[0:23]: phi(bb3: b$23_@0, bb1: b$20_@0)
|
||||
c$32_@0[0:23]: phi(bb3: c$25_@0, bb1: c$22_@0)
|
||||
d$33_@0[0:23]: phi(bb3: d$26_@0, bb1: d$24_@0)
|
||||
[17] If (read a$30_@0) then:bb7 else:bb7 fallthrough=bb7
|
||||
[17] If (read a$18_@0) then:bb7 else:bb7 fallthrough=bb7
|
||||
bb7:
|
||||
predecessor blocks: bb2
|
||||
[18] If (read b$31_@0) then:bb9 else:bb9 fallthrough=bb9
|
||||
[18] If (read b$20_@0) then:bb9 else:bb9 fallthrough=bb9
|
||||
bb9:
|
||||
predecessor blocks: bb7
|
||||
[19] If (read c$32_@0) then:bb11 else:bb11 fallthrough=bb11
|
||||
[19] If (read c$22_@0) then:bb11 else:bb11 fallthrough=bb11
|
||||
bb11:
|
||||
predecessor blocks: bb9
|
||||
[20] If (read d$33_@0) then:bb13 else:bb13 fallthrough=bb13
|
||||
[20] If (read d$24_@0) then:bb13 else:bb13 fallthrough=bb13
|
||||
bb13:
|
||||
predecessor blocks: bb11
|
||||
[21] Const mutate $34_@2 = null
|
||||
[22] Call mutate mutate$7_@0(mutate d$33_@0, read $34_@2)
|
||||
[22] Call mutate mutate$7_@0(mutate d$24_@0, read $34_@2)
|
||||
[23] Return
|
||||
|
||||
```
|
||||
@@ -154,10 +146,10 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate a$13_@0[0:23] = Object { }
|
||||
[2] Let mutate b$14_@0[0:23] = Object { }
|
||||
[3] Let mutate c$15_@0[0:23] = Object { }
|
||||
[4] Let mutate d$16_@0[0:23] = Object { }
|
||||
[1] Let mutate a$18_@0[0:23] = Object { }
|
||||
[2] Let mutate b$20_@0[0:23] = Object { }
|
||||
[3] Let mutate c$22_@0[0:23] = Object { }
|
||||
[4] Let mutate d$24_@0[0:23] = Object { }
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["While"])
|
||||
end
|
||||
@@ -169,13 +161,13 @@ flowchart TB
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[8] Let mutate z$19_@0[0:23] = read a$18_@0
|
||||
[9] Reassign mutate a$21_@0[0:23] = read b$20_@0
|
||||
[10] Reassign mutate b$23_@0[0:23] = read c$22_@0
|
||||
[11] Reassign mutate c$25_@0[0:23] = read d$24_@0
|
||||
[12] Reassign mutate d$26_@0[0:23] = read z$19_@0
|
||||
[13] Call mutate mutate$7_@0(mutate a$21_@0, mutate b$23_@0)
|
||||
[14] Const mutate $29_@0[0:23] = Call mutate cond$8_@0(mutate a$21_@0)
|
||||
[8] Const mutate z$19_@0[0:23] = read a$18_@0
|
||||
[9] Reassign mutate a$18_@0[0:23] = read b$20_@0
|
||||
[10] Reassign mutate b$20_@0[0:23] = read c$22_@0
|
||||
[11] Reassign mutate c$22_@0[0:23] = read d$24_@0
|
||||
[12] Reassign mutate d$24_@0[0:23] = read z$19_@0
|
||||
[13] Call mutate mutate$7_@0(mutate a$18_@0, mutate b$20_@0)
|
||||
[14] Const mutate $29_@0[0:23] = Call mutate cond$8_@0(mutate a$18_@0)
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["If (read $29_@0)"])
|
||||
end
|
||||
@@ -183,21 +175,21 @@ flowchart TB
|
||||
bb4_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_terminal(["If (read a$30_@0)"])
|
||||
bb2_terminal(["If (read a$18_@0)"])
|
||||
end
|
||||
subgraph bb7
|
||||
bb7_terminal(["If (read b$31_@0)"])
|
||||
bb7_terminal(["If (read b$20_@0)"])
|
||||
end
|
||||
subgraph bb9
|
||||
bb9_terminal(["If (read c$32_@0)"])
|
||||
bb9_terminal(["If (read c$22_@0)"])
|
||||
end
|
||||
subgraph bb11
|
||||
bb11_terminal(["If (read d$33_@0)"])
|
||||
bb11_terminal(["If (read d$24_@0)"])
|
||||
end
|
||||
subgraph bb13
|
||||
bb13_instrs["
|
||||
[21] Const mutate $34_@2 = null
|
||||
[22] Call mutate mutate$7_@0(mutate d$33_@0, read $34_@2)
|
||||
[22] Call mutate mutate$7_@0(mutate d$24_@0, read $34_@2)
|
||||
"]
|
||||
bb13_instrs --> bb13_terminal(["Return"])
|
||||
end
|
||||
|
||||
@@ -92,10 +92,10 @@ function cond$0() {}
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate a$12_@0[0:18] = Object { }
|
||||
[2] Let mutate b$13_@0[0:18] = Object { }
|
||||
[3] Let mutate c$14_@1 = Object { }
|
||||
[4] Let mutate d$15_@0[0:18] = Object { }
|
||||
[1] Const mutate a$12_@0[0:18] = Object { }
|
||||
[2] Const mutate b$13_@0[0:18] = Object { }
|
||||
[3] Const mutate c$14_@1 = Object { }
|
||||
[4] Const mutate d$15_@0[0:18] = Object { }
|
||||
[5] While test=bb1 loop=bb3 fallthrough=bb2
|
||||
bb1:
|
||||
predecessor blocks: bb0 bb4
|
||||
@@ -136,10 +136,10 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate a$12_@0[0:18] = Object { }
|
||||
[2] Let mutate b$13_@0[0:18] = Object { }
|
||||
[3] Let mutate c$14_@1 = Object { }
|
||||
[4] Let mutate d$15_@0[0:18] = Object { }
|
||||
[1] Const mutate a$12_@0[0:18] = Object { }
|
||||
[2] Const mutate b$13_@0[0:18] = Object { }
|
||||
[3] Const mutate c$14_@1 = Object { }
|
||||
[4] Const mutate d$15_@0[0:18] = Object { }
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["While"])
|
||||
end
|
||||
|
||||
@@ -15,8 +15,8 @@ function foo(a, b) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$7_@0[1:5] = Array []
|
||||
[2] Let mutate y$8_@0[1:5] = Array []
|
||||
[1] Const mutate x$7_@0[1:5] = Array []
|
||||
[2] Const mutate y$8_@0[1:5] = Array []
|
||||
[3] Call mutate x$7_@0.push(read a$5)
|
||||
[4] Call mutate y$8_@0.push(read b$6)
|
||||
[5] Return
|
||||
@@ -32,8 +32,8 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$7_@0[1:5] = Array []
|
||||
[2] Let mutate y$8_@0[1:5] = Array []
|
||||
[1] Const mutate x$7_@0[1:5] = Array []
|
||||
[2] Const mutate y$8_@0[1:5] = Array []
|
||||
[3] Call mutate x$7_@0.push(read a$5)
|
||||
[4] Call mutate y$8_@0.push(read b$6)
|
||||
"]
|
||||
|
||||
@@ -15,8 +15,8 @@ function foo(a, b) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$7_@0[1:5] = Array []
|
||||
[2] Let mutate y$8_@1[2:4] = Array []
|
||||
[1] Const mutate x$7_@0[1:5] = Array []
|
||||
[2] Const mutate y$8_@1[2:4] = Array []
|
||||
[3] Call mutate y$8_@1.push(read b$6)
|
||||
[4] Call mutate x$7_@0.push(read a$5)
|
||||
[5] Return
|
||||
@@ -32,8 +32,8 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$7_@0[1:5] = Array []
|
||||
[2] Let mutate y$8_@1[2:4] = Array []
|
||||
[1] Const mutate x$7_@0[1:5] = Array []
|
||||
[2] Const mutate y$8_@1[2:4] = Array []
|
||||
[3] Call mutate y$8_@1.push(read b$6)
|
||||
[4] Call mutate x$7_@0.push(read a$5)
|
||||
"]
|
||||
|
||||
+4
-4
@@ -21,11 +21,11 @@ function foo(a, b, c) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$11_@0[1:11] = Array []
|
||||
[1] Const mutate x$11_@0[1:11] = Array []
|
||||
[2] If (read a$8) then:bb2 else:bb1 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[3] Let mutate y$12_@1[3:7] = Array []
|
||||
[3] Const mutate y$12_@1[3:7] = Array []
|
||||
[4] If (read b$9) then:bb4 else:bb3 fallthrough=bb3
|
||||
bb4:
|
||||
predecessor blocks: bb2
|
||||
@@ -57,13 +57,13 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$11_@0[1:11] = Array []
|
||||
[1] Const mutate x$11_@0[1:11] = Array []
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read a$8)"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[3] Let mutate y$12_@1[3:7] = Array []
|
||||
[3] Const mutate y$12_@1[3:7] = Array []
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["If (read b$9)"])
|
||||
end
|
||||
|
||||
@@ -17,8 +17,8 @@ function foo(a, b, c) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$9_@0[1:8] = Array []
|
||||
[2] Let mutate y$10_@0[1:8] = Array []
|
||||
[1] Const mutate x$9_@0[1:8] = Array []
|
||||
[2] Const mutate y$10_@0[1:8] = Array []
|
||||
[3] While test=bb1 loop=bb3 fallthrough=bb2
|
||||
bb1:
|
||||
predecessor blocks: bb0 bb3
|
||||
@@ -44,8 +44,8 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$9_@0[1:8] = Array []
|
||||
[2] Let mutate y$10_@0[1:8] = Array []
|
||||
[1] Const mutate x$9_@0[1:8] = Array []
|
||||
[2] Const mutate y$10_@0[1:8] = Array []
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["While"])
|
||||
end
|
||||
|
||||
+4
-4
@@ -21,11 +21,11 @@ function foo(a, b, c) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$9_@0[1:9] = Array []
|
||||
[1] Const mutate x$9_@0[1:9] = Array []
|
||||
[2] If (read a$6) then:bb2 else:bb1 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[3] Let mutate y$10_@0[1:9] = Array []
|
||||
[3] Const mutate y$10_@0[1:9] = Array []
|
||||
[4] If (read b$7) then:bb4 else:bb3 fallthrough=bb3
|
||||
bb4:
|
||||
predecessor blocks: bb2
|
||||
@@ -51,13 +51,13 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$9_@0[1:9] = Array []
|
||||
[1] Const mutate x$9_@0[1:9] = Array []
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read a$6)"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[3] Let mutate y$10_@0[1:9] = Array []
|
||||
[3] Const mutate y$10_@0[1:9] = Array []
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["If (read b$7)"])
|
||||
end
|
||||
|
||||
@@ -18,9 +18,9 @@ function foo() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$4_@0[1:6] = Object { }
|
||||
[2] Let mutate y$5_@1[2:5] = Array []
|
||||
[3] Let mutate z$6_@1[2:5] = Object { }
|
||||
[1] Const mutate x$4_@0[1:6] = Object { }
|
||||
[2] Const mutate y$5_@1[2:5] = Array []
|
||||
[3] Const mutate z$6_@1[2:5] = Object { }
|
||||
[4] Call mutate y$5_@1.push(mutate z$6_@1)
|
||||
[5] Reassign mutate x$4_@0.y[1:6] = read y$5_@1
|
||||
[6] Return freeze x$4_@0
|
||||
@@ -35,9 +35,9 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$4_@0[1:6] = Object { }
|
||||
[2] Let mutate y$5_@1[2:5] = Array []
|
||||
[3] Let mutate z$6_@1[2:5] = Object { }
|
||||
[1] Const mutate x$4_@0[1:6] = Object { }
|
||||
[2] Const mutate y$5_@1[2:5] = Array []
|
||||
[3] Const mutate z$6_@1[2:5] = Object { }
|
||||
[4] Call mutate y$5_@1.push(mutate z$6_@1)
|
||||
[5] Reassign mutate x$4_@0.y[1:6] = read y$5_@1
|
||||
"]
|
||||
|
||||
@@ -19,7 +19,7 @@ function f(a, b) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$10_@0[1:8] = Array []
|
||||
[1] Const mutate x$10_@0[1:8] = Array []
|
||||
[2] Const mutate $11_@1 = 1
|
||||
[3] Const mutate $12_@2 = Binary read a$8.length === read $11_@1
|
||||
[4] If (read $12_@2) then:bb2 else:bb1 fallthrough=bb1
|
||||
@@ -53,7 +53,7 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$10_@0[1:8] = Array []
|
||||
[1] Const mutate x$10_@0[1:8] = Array []
|
||||
[2] Const mutate $11_@1 = 1
|
||||
[3] Const mutate $12_@2 = Binary read a$8.length === read $11_@1
|
||||
"]
|
||||
|
||||
@@ -25,28 +25,29 @@ function Component(props) {
|
||||
bb0:
|
||||
[1] Let mutate x$7_@0[1:7] = Array []
|
||||
[2] Call mutate x$7_@0.push(read props$6.p0)
|
||||
[3] Let mutate y$8_@0[1:7] = read x$7_@0
|
||||
[3] Const mutate y$8_@0[1:7] = read x$7_@0
|
||||
[4] If (read props$6.p1) then:bb2 else:bb1 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[5] Reassign mutate x$9_@0[1:7] = Array []
|
||||
[5] Reassign mutate x$7_@0[1:7] = Array []
|
||||
[6] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb0
|
||||
x$11_@0[1:7]: phi(bb2: x$9_@0, bb0: x$7_@0)
|
||||
[7] Let mutate _$12_@1 = JSX <read Component$0 x={freeze x$11_@0} ></read Component$0>
|
||||
[7] Const mutate _$12_@1 = JSX <read Component$0 x={freeze x$7_@0} ></read Component$0>
|
||||
[8] Call read y$8_@0.push(read props$6.p2)
|
||||
[9] Const mutate $15_@2 = JSX <read Component$0 x={read x$11_@0} y={read y$8_@0} ></read Component$0>
|
||||
[9] Const mutate $15_@2 = JSX <read Component$0 x={read x$7_@0} y={read y$8_@0} ></read Component$0>
|
||||
[10] Return read $15_@2
|
||||
scope0 [1:7]:
|
||||
- read props$6.p0
|
||||
- read props$6.p1
|
||||
scope1 [7:8]:
|
||||
- read Component$0
|
||||
- freeze x$7_@0
|
||||
- read y$8_@0.push
|
||||
- read props$6.p2
|
||||
scope2 [9:10]:
|
||||
- read Component$0
|
||||
- read x$7_@0
|
||||
- read y$8_@0
|
||||
```
|
||||
|
||||
@@ -59,21 +60,21 @@ flowchart TB
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$7_@0[1:7] = Array []
|
||||
[2] Call mutate x$7_@0.push(read props$6.p0)
|
||||
[3] Let mutate y$8_@0[1:7] = read x$7_@0
|
||||
[3] Const mutate y$8_@0[1:7] = read x$7_@0
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read props$6.p1)"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[5] Reassign mutate x$9_@0[1:7] = Array []
|
||||
[5] Reassign mutate x$7_@0[1:7] = Array []
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[7] Let mutate _$12_@1 = JSX <read Component$0 x={freeze x$11_@0} ></read Component$0>
|
||||
[7] Const mutate _$12_@1 = JSX <read Component$0 x={freeze x$7_@0} ></read Component$0>
|
||||
[8] Call read y$8_@0.push(read props$6.p2)
|
||||
[9] Const mutate $15_@2 = JSX <read Component$0 x={read x$11_@0} y={read y$8_@0} ></read Component$0>
|
||||
[9] Const mutate $15_@2 = JSX <read Component$0 x={read x$7_@0} y={read y$8_@0} ></read Component$0>
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Return read $15_@2"])
|
||||
end
|
||||
|
||||
@@ -34,7 +34,7 @@ function foo(a, b, c) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$16_@0[1:5] = Array []
|
||||
[1] Const mutate x$16_@0[1:5] = Array []
|
||||
[2] If (read a$13) then:bb2 else:bb1 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
@@ -43,30 +43,30 @@ bb2:
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb0
|
||||
[5] Const mutate $17_@1 = "div"
|
||||
[6] Let mutate y$19_@2 = JSX <read $17_@1>{freeze x$16_@0}</read $17_@1>
|
||||
[6] Const mutate y$19_@2 = JSX <read $17_@1>{freeze x$16_@0}</read $17_@1>
|
||||
[7] Const mutate $20_@3 = 0
|
||||
[8] Let mutate x$22_@4[8:15] = undefined
|
||||
[8] Switch (read b$14)
|
||||
Case read $20_@3: bb5
|
||||
Default: bb4
|
||||
Fallthrough: bb3
|
||||
bb5:
|
||||
predecessor blocks: bb1
|
||||
[9] Reassign mutate x$22_@4[9:14] = Array []
|
||||
[9] Reassign mutate x$22_@4[8:15] = Array []
|
||||
[10] Call mutate x$22_@4.push(read b$14)
|
||||
[11] Goto bb3
|
||||
bb4:
|
||||
predecessor blocks: bb1
|
||||
[12] Reassign mutate x$23_@4[9:14] = Array []
|
||||
[13] Call mutate x$23_@4.push(read c$15)
|
||||
[12] Reassign mutate x$22_@4[8:15] = Array []
|
||||
[13] Call mutate x$22_@4.push(read c$15)
|
||||
[14] Goto bb3
|
||||
bb3:
|
||||
predecessor blocks: bb5 bb4
|
||||
x$30_@4[9:14]: phi(bb5: x$22_@4, bb4: x$23_@4)
|
||||
[15] Const mutate $25_@5 = "div"
|
||||
[16] Const mutate $26_@6 = "\n "
|
||||
[17] Const mutate $27_@7 = "\n "
|
||||
[18] Const mutate $28_@8 = "\n "
|
||||
[19] Const mutate $31_@9 = JSX <read $25_@5>{read $26_@6}{read y$19_@2}{read $27_@7}{freeze x$30_@4}{read $28_@8}</read $25_@5>
|
||||
[19] Const mutate $31_@9 = JSX <read $25_@5>{read $26_@6}{read y$19_@2}{read $27_@7}{freeze x$22_@4}{read $28_@8}</read $25_@5>
|
||||
[20] Return read $31_@9
|
||||
scope0 [1:5]:
|
||||
- read a$13
|
||||
@@ -74,7 +74,7 @@ scope0 [1:5]:
|
||||
scope2 [6:7]:
|
||||
- read $17_@1
|
||||
- freeze x$16_@0
|
||||
scope4 [9:14]:
|
||||
scope4 [8:15]:
|
||||
- read c$15
|
||||
- read b$14
|
||||
- read b$14
|
||||
@@ -83,6 +83,7 @@ scope9 [19:20]:
|
||||
- read $26_@6
|
||||
- read y$19_@2
|
||||
- read $27_@7
|
||||
- freeze x$22_@4
|
||||
- read $28_@8
|
||||
```
|
||||
|
||||
@@ -93,7 +94,7 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$16_@0[1:5] = Array []
|
||||
[1] Const mutate x$16_@0[1:5] = Array []
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read a$13)"])
|
||||
end
|
||||
@@ -106,22 +107,23 @@ flowchart TB
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[5] Const mutate $17_@1 = 'div'
|
||||
[6] Let mutate y$19_@2 = JSX <read $17_@1>{freeze x$16_@0}</read $17_@1>
|
||||
[6] Const mutate y$19_@2 = JSX <read $17_@1>{freeze x$16_@0}</read $17_@1>
|
||||
[7] Const mutate $20_@3 = 0
|
||||
[8] Let mutate x$22_@4[8:15] = undefined
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Switch (read b$14)"])
|
||||
end
|
||||
subgraph bb5
|
||||
bb5_instrs["
|
||||
[9] Reassign mutate x$22_@4[9:14] = Array []
|
||||
[9] Reassign mutate x$22_@4[8:15] = Array []
|
||||
[10] Call mutate x$22_@4.push(read b$14)
|
||||
"]
|
||||
bb5_instrs --> bb5_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb4
|
||||
bb4_instrs["
|
||||
[12] Reassign mutate x$23_@4[9:14] = Array []
|
||||
[13] Call mutate x$23_@4.push(read c$15)
|
||||
[12] Reassign mutate x$22_@4[8:15] = Array []
|
||||
[13] Call mutate x$22_@4.push(read c$15)
|
||||
"]
|
||||
bb4_instrs --> bb4_terminal(["Goto"])
|
||||
end
|
||||
@@ -131,7 +133,7 @@ flowchart TB
|
||||
[16] Const mutate $26_@6 = '\n '
|
||||
[17] Const mutate $27_@7 = '\n '
|
||||
[18] Const mutate $28_@8 = '\n '
|
||||
[19] Const mutate $31_@9 = JSX <read $25_@5>{read $26_@6}{read y$19_@2}{read $27_@7}{freeze x$30_@4}{read $28_@8}</read $25_@5>
|
||||
[19] Const mutate $31_@9 = JSX <read $25_@5>{read $26_@6}{read y$19_@2}{read $27_@7}{freeze x$22_@4}{read $28_@8}</read $25_@5>
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Return read $31_@9"])
|
||||
end
|
||||
|
||||
@@ -21,11 +21,11 @@ function Component(props) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$7_@0[1:7] = Array []
|
||||
[1] Const mutate x$7_@0[1:7] = Array []
|
||||
[2] Call mutate x$7_@0.push(read props$6.p0)
|
||||
[3] Let mutate y$8_@0[1:7] = read x$7_@0
|
||||
[4] Reassign mutate x$9_@1 = Array []
|
||||
[5] Let mutate _$10_@2 = JSX <read Component$0 x={freeze x$9_@1} ></read Component$0>
|
||||
[3] Const mutate y$8_@0[1:7] = read x$7_@0
|
||||
[4] Const mutate x$9_@1 = Array []
|
||||
[5] Const mutate _$10_@2 = JSX <read Component$0 x={freeze x$9_@1} ></read Component$0>
|
||||
[6] Call mutate y$8_@0.push(read props$6.p1)
|
||||
[7] Const mutate $11_@3 = JSX <read Component$0 x={read x$9_@1} y={freeze y$8_@0} ></read Component$0>
|
||||
[8] Return read $11_@3
|
||||
@@ -48,11 +48,11 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$7_@0[1:7] = Array []
|
||||
[1] Const mutate x$7_@0[1:7] = Array []
|
||||
[2] Call mutate x$7_@0.push(read props$6.p0)
|
||||
[3] Let mutate y$8_@0[1:7] = read x$7_@0
|
||||
[4] Reassign mutate x$9_@1 = Array []
|
||||
[5] Let mutate _$10_@2 = JSX <read Component$0 x={freeze x$9_@1} ></read Component$0>
|
||||
[3] Const mutate y$8_@0[1:7] = read x$7_@0
|
||||
[4] Const mutate x$9_@1 = Array []
|
||||
[5] Const mutate _$10_@2 = JSX <read Component$0 x={freeze x$9_@1} ></read Component$0>
|
||||
[6] Call mutate y$8_@0.push(read props$6.p1)
|
||||
[7] Const mutate $11_@3 = JSX <read Component$0 x={read x$9_@1} y={freeze y$8_@0} ></read Component$0>
|
||||
"]
|
||||
|
||||
@@ -36,54 +36,56 @@ function Component(props) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$7_@0 = undefined
|
||||
[1] Const mutate x$7_@0 = undefined
|
||||
[2] Let mutate x$11_@1[2:18] = undefined
|
||||
[2] If (read props$6.cond) then:bb2 else:bb10 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[3] Const mutate $8_@1 = 2
|
||||
[4] Const mutate $9_@2 = 1
|
||||
[5] Const mutate $10_@3 = 0
|
||||
[3] Const mutate $8_@2 = 2
|
||||
[4] Const mutate $9_@3 = 1
|
||||
[5] Const mutate $10_@4 = 0
|
||||
[6] Switch (read props$6.test)
|
||||
Case read $10_@3: bb8
|
||||
Case read $9_@2: bb6
|
||||
Case read $8_@1: bb4
|
||||
Case read $10_@4: bb8
|
||||
Case read $9_@3: bb6
|
||||
Case read $8_@2: bb4
|
||||
Default: bb4
|
||||
Fallthrough: bb1
|
||||
bb8:
|
||||
predecessor blocks: bb2
|
||||
[7] Reassign mutate x$11_@4[7:17] = read props$6.v0
|
||||
[7] Reassign mutate x$11_@1[2:18] = read props$6.v0
|
||||
[8] Goto bb1
|
||||
bb6:
|
||||
predecessor blocks: bb2
|
||||
[9] Reassign mutate x$12_@4[7:17] = read props$6.v1
|
||||
[9] Reassign mutate x$11_@1[2:18] = read props$6.v1
|
||||
[10] Goto bb1
|
||||
bb4:
|
||||
predecessor blocks: bb2
|
||||
[11] Reassign mutate x$13_@4[7:17] = read props$6.v2
|
||||
[11] Reassign mutate x$11_@1[2:18] = read props$6.v2
|
||||
[12] Goto bb1
|
||||
bb10:
|
||||
predecessor blocks: bb0
|
||||
[13] If (read props$6.cond2) then:bb12 else:bb13 fallthrough=bb1
|
||||
bb12:
|
||||
predecessor blocks: bb10
|
||||
[14] Reassign mutate x$14_@4[7:17] = read props$6.b
|
||||
[14] Reassign mutate x$11_@1[2:18] = read props$6.b
|
||||
[15] Goto bb1
|
||||
bb13:
|
||||
predecessor blocks: bb10
|
||||
[16] Reassign mutate x$15_@4[7:17] = read props$6.c
|
||||
[16] Reassign mutate x$11_@1[2:18] = read props$6.c
|
||||
[17] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb8 bb6 bb4 bb12 bb13
|
||||
x$16_@4[7:17]: phi(bb8: x$11_@4, bb6: x$12_@4, bb4: x$13_@4, bb12: x$14_@4, bb13: x$15_@4)
|
||||
[18] read x$16_@4
|
||||
[18] read x$11_@1
|
||||
[19] Return
|
||||
scope4 [7:17]:
|
||||
scope1 [2:18]:
|
||||
- read props$6.v2
|
||||
- read props$6.v1
|
||||
- read props$6.v0
|
||||
- read props$6.test
|
||||
- read props$6.b
|
||||
- read props$6.c
|
||||
- read props$6.cond2
|
||||
- read props$6.cond
|
||||
```
|
||||
|
||||
### CFG
|
||||
@@ -93,33 +95,34 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$7_@0 = undefined
|
||||
[1] Const mutate x$7_@0 = undefined
|
||||
[2] Let mutate x$11_@1[2:18] = undefined
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read props$6.cond)"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[3] Const mutate $8_@1 = 2
|
||||
[4] Const mutate $9_@2 = 1
|
||||
[5] Const mutate $10_@3 = 0
|
||||
[3] Const mutate $8_@2 = 2
|
||||
[4] Const mutate $9_@3 = 1
|
||||
[5] Const mutate $10_@4 = 0
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Switch (read props$6.test)"])
|
||||
end
|
||||
subgraph bb8
|
||||
bb8_instrs["
|
||||
[7] Reassign mutate x$11_@4[7:17] = read props$6.v0
|
||||
[7] Reassign mutate x$11_@1[2:18] = read props$6.v0
|
||||
"]
|
||||
bb8_instrs --> bb8_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb6
|
||||
bb6_instrs["
|
||||
[9] Reassign mutate x$12_@4[7:17] = read props$6.v1
|
||||
[9] Reassign mutate x$11_@1[2:18] = read props$6.v1
|
||||
"]
|
||||
bb6_instrs --> bb6_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb4
|
||||
bb4_instrs["
|
||||
[11] Reassign mutate x$13_@4[7:17] = read props$6.v2
|
||||
[11] Reassign mutate x$11_@1[2:18] = read props$6.v2
|
||||
"]
|
||||
bb4_instrs --> bb4_terminal(["Goto"])
|
||||
end
|
||||
@@ -128,19 +131,19 @@ flowchart TB
|
||||
end
|
||||
subgraph bb12
|
||||
bb12_instrs["
|
||||
[14] Reassign mutate x$14_@4[7:17] = read props$6.b
|
||||
[14] Reassign mutate x$11_@1[2:18] = read props$6.b
|
||||
"]
|
||||
bb12_instrs --> bb12_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb13
|
||||
bb13_instrs["
|
||||
[16] Reassign mutate x$15_@4[7:17] = read props$6.c
|
||||
[16] Reassign mutate x$11_@1[2:18] = read props$6.c
|
||||
"]
|
||||
bb13_instrs --> bb13_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[18] read x$16_@4
|
||||
[18] read x$11_@1
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Return"])
|
||||
end
|
||||
@@ -149,9 +152,9 @@ flowchart TB
|
||||
bb0_terminal -- "then" --> bb2
|
||||
bb0_terminal -- "else" --> bb10
|
||||
bb0_terminal -- "fallthrough" --> bb1
|
||||
bb2_terminal -- "read $10_@3" --> bb8
|
||||
bb2_terminal -- "read $9_@2" --> bb6
|
||||
bb2_terminal -- "read $8_@1" --> bb4
|
||||
bb2_terminal -- "read $10_@4" --> bb8
|
||||
bb2_terminal -- "read $9_@3" --> bb6
|
||||
bb2_terminal -- "read $8_@2" --> bb4
|
||||
bb2_terminal -- "default" --> bb4
|
||||
bb2_terminal -- "fallthrough" --> bb1
|
||||
bb8_terminal --> bb1
|
||||
|
||||
@@ -47,12 +47,12 @@ function mutate$0() {}
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate a$5_@0 = Object { }
|
||||
[2] Let mutate b$6_@1[0:8] = Object { }
|
||||
[3] Let mutate c$7_@1[0:8] = Object { }
|
||||
[4] Reassign mutate a$8_@1[0:8] = read b$6_@1
|
||||
[5] Reassign mutate b$9_@1[0:8] = read c$7_@1
|
||||
[6] Reassign mutate c$10_@1[0:8] = read a$8_@1
|
||||
[1] Const mutate a$5_@0 = Object { }
|
||||
[2] Const mutate b$6_@1[0:8] = Object { }
|
||||
[3] Const mutate c$7_@1[0:8] = Object { }
|
||||
[4] Const mutate a$8_@1[0:8] = read b$6_@1
|
||||
[5] Const mutate b$9_@1[0:8] = read c$7_@1
|
||||
[6] Const mutate c$10_@1[0:8] = read a$8_@1
|
||||
[7] Call mutate mutate$4_@1(mutate a$8_@1, mutate b$9_@1)
|
||||
[8] Return freeze c$10_@1
|
||||
|
||||
@@ -65,12 +65,12 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate a$5_@0 = Object { }
|
||||
[2] Let mutate b$6_@1[0:8] = Object { }
|
||||
[3] Let mutate c$7_@1[0:8] = Object { }
|
||||
[4] Reassign mutate a$8_@1[0:8] = read b$6_@1
|
||||
[5] Reassign mutate b$9_@1[0:8] = read c$7_@1
|
||||
[6] Reassign mutate c$10_@1[0:8] = read a$8_@1
|
||||
[1] Const mutate a$5_@0 = Object { }
|
||||
[2] Const mutate b$6_@1[0:8] = Object { }
|
||||
[3] Const mutate c$7_@1[0:8] = Object { }
|
||||
[4] Const mutate a$8_@1[0:8] = read b$6_@1
|
||||
[5] Const mutate b$9_@1[0:8] = read c$7_@1
|
||||
[6] Const mutate c$10_@1[0:8] = read a$8_@1
|
||||
[7] Call mutate mutate$4_@1(mutate a$8_@1, mutate b$9_@1)
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["Return freeze c$10_@1"])
|
||||
|
||||
@@ -57,7 +57,7 @@ bb0:
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[6] Const mutate $14_@1 = "div"
|
||||
[7] Let mutate _$15_@2 = JSX <read $14_@1 a={freeze a$11_@0} ></read $14_@1>
|
||||
[7] Const mutate _$15_@2 = JSX <read $14_@1 a={freeze a$11_@0} ></read $14_@1>
|
||||
[8] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb0
|
||||
@@ -90,7 +90,7 @@ flowchart TB
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[6] Const mutate $14_@1 = 'div'
|
||||
[7] Let mutate _$15_@2 = JSX <read $14_@1 a={freeze a$11_@0} ></read $14_@1>
|
||||
[7] Const mutate _$15_@2 = JSX <read $14_@1 a={freeze a$11_@0} ></read $14_@1>
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -50,7 +50,7 @@ bb0:
|
||||
[2] Const mutate b$11_@0[0:7] = Object { }
|
||||
[3] Call mutate foo$4_@0(mutate a$10_@0, mutate b$11_@0)
|
||||
[4] Const mutate $12_@1 = "div"
|
||||
[5] Let mutate _$13_@2 = JSX <read $12_@1 a={freeze a$10_@0} ></read $12_@1>
|
||||
[5] Const mutate _$13_@2 = JSX <read $12_@1 a={freeze a$10_@0} ></read $12_@1>
|
||||
[6] Call mutate foo$4_@0(read a$10_@0, mutate b$11_@0)
|
||||
[7] Const mutate $14_@3 = "div"
|
||||
[8] Const mutate $15_@4 = JSX <read $14_@3 a={read a$10_@0} b={freeze b$11_@0} ></read $14_@3>
|
||||
@@ -74,7 +74,7 @@ flowchart TB
|
||||
[2] Const mutate b$11_@0[0:7] = Object { }
|
||||
[3] Call mutate foo$4_@0(mutate a$10_@0, mutate b$11_@0)
|
||||
[4] Const mutate $12_@1 = 'div'
|
||||
[5] Let mutate _$13_@2 = JSX <read $12_@1 a={freeze a$10_@0} ></read $12_@1>
|
||||
[5] Const mutate _$13_@2 = JSX <read $12_@1 a={freeze a$10_@0} ></read $12_@1>
|
||||
[6] Call mutate foo$4_@0(read a$10_@0, mutate b$11_@0)
|
||||
[7] Const mutate $14_@3 = 'div'
|
||||
[8] Const mutate $15_@4 = JSX <read $14_@3 a={read a$10_@0} b={freeze b$11_@0} ></read $14_@3>
|
||||
|
||||
@@ -21,29 +21,28 @@ function foo() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$7_@0[1:14] = 1
|
||||
[2] Let mutate y$8_@1 = 2
|
||||
[1] Let mutate x$7_@0[1:8] = 1
|
||||
[2] Const mutate y$8_@1 = 2
|
||||
[3] Const mutate $9_@2 = 2
|
||||
[4] Const mutate $10_@3 = Binary read y$8_@1 === read $9_@2
|
||||
[5] If (read $10_@3) then:bb2 else:bb1 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[6] Reassign mutate x$11_@0[1:14] = 3
|
||||
[6] Reassign mutate x$7_@0[1:8] = 3
|
||||
[7] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb0
|
||||
x$17_@0[1:14]: phi(bb2: x$11_@0, bb0: x$7_@0)
|
||||
[8] Const mutate $12_@4 = 3
|
||||
[9] Const mutate $14_@5 = Binary read y$8_@1 === read $12_@4
|
||||
[10] Let mutate x$15_@6[1:14] = undefined
|
||||
[10] If (read $14_@5) then:bb4 else:bb3 fallthrough=bb3
|
||||
bb4:
|
||||
predecessor blocks: bb1
|
||||
[11] Reassign mutate x$15_@0[1:14] = 5
|
||||
[11] Reassign mutate x$15_@6[1:14] = 5
|
||||
[12] Goto bb3
|
||||
bb3:
|
||||
predecessor blocks: bb4 bb1
|
||||
x$16_@0[1:14]: phi(bb4: x$15_@0, bb1: x$17_@0)
|
||||
[13] Reassign mutate y$18_@0[1:14] = read x$16_@0
|
||||
[13] Const mutate y$18_@6[1:14] = read x$15_@6
|
||||
[14] Return
|
||||
scope3 [4:5]:
|
||||
- read y$8_@1
|
||||
@@ -60,8 +59,8 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$7_@0[1:14] = 1
|
||||
[2] Let mutate y$8_@1 = 2
|
||||
[1] Let mutate x$7_@0[1:8] = 1
|
||||
[2] Const mutate y$8_@1 = 2
|
||||
[3] Const mutate $9_@2 = 2
|
||||
[4] Const mutate $10_@3 = Binary read y$8_@1 === read $9_@2
|
||||
"]
|
||||
@@ -69,7 +68,7 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[6] Reassign mutate x$11_@0[1:14] = 3
|
||||
[6] Reassign mutate x$7_@0[1:8] = 3
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
@@ -77,18 +76,19 @@ flowchart TB
|
||||
bb1_instrs["
|
||||
[8] Const mutate $12_@4 = 3
|
||||
[9] Const mutate $14_@5 = Binary read y$8_@1 === read $12_@4
|
||||
[10] Let mutate x$15_@6[1:14] = undefined
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["If (read $14_@5)"])
|
||||
end
|
||||
subgraph bb4
|
||||
bb4_instrs["
|
||||
[11] Reassign mutate x$15_@0[1:14] = 5
|
||||
[11] Reassign mutate x$15_@6[1:14] = 5
|
||||
"]
|
||||
bb4_instrs --> bb4_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[13] Reassign mutate y$18_@0[1:14] = read x$16_@0
|
||||
[13] Const mutate y$18_@6[1:14] = read x$15_@6
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Return"])
|
||||
end
|
||||
|
||||
@@ -19,18 +19,17 @@ function foo() {
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$5_@0[1:9] = 1
|
||||
[2] Let mutate y$6_@1 = 2
|
||||
[2] Const mutate y$6_@1 = 2
|
||||
[3] Const mutate $7_@2 = 2
|
||||
[4] Const mutate $8_@3 = Binary read y$6_@1 === read $7_@2
|
||||
[5] If (read $8_@3) then:bb2 else:bb1 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[6] Reassign mutate x$9_@0[1:9] = 3
|
||||
[6] Reassign mutate x$5_@0[1:9] = 3
|
||||
[7] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb0
|
||||
x$10_@0[1:9]: phi(bb2: x$9_@0, bb0: x$5_@0)
|
||||
[8] Reassign mutate y$11_@0[1:9] = read x$10_@0
|
||||
[8] Const mutate y$11_@0[1:9] = read x$5_@0
|
||||
[9] Return
|
||||
scope3 [4:5]:
|
||||
- read y$6_@1
|
||||
@@ -45,7 +44,7 @@ flowchart TB
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$5_@0[1:9] = 1
|
||||
[2] Let mutate y$6_@1 = 2
|
||||
[2] Const mutate y$6_@1 = 2
|
||||
[3] Const mutate $7_@2 = 2
|
||||
[4] Const mutate $8_@3 = Binary read y$6_@1 === read $7_@2
|
||||
"]
|
||||
@@ -53,13 +52,13 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[6] Reassign mutate x$9_@0[1:9] = 3
|
||||
[6] Reassign mutate x$5_@0[1:9] = 3
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[8] Reassign mutate y$11_@0[1:9] = read x$10_@0
|
||||
[8] Const mutate y$11_@0[1:9] = read x$5_@0
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Return"])
|
||||
end
|
||||
|
||||
@@ -19,18 +19,18 @@ function foo(cond) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate items$5_@0 = Array []
|
||||
[1] Const mutate items$5_@0 = Array []
|
||||
[2] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb0 bb4
|
||||
[3] If (read items$5_@0) then:bb3 else:bb2 fallthrough=bb2
|
||||
bb3:
|
||||
predecessor blocks: bb1
|
||||
[4] Let mutate y$7_@1 = 0
|
||||
[4] Const mutate y$7_@1 = 0
|
||||
[5] If (read cond$4) then:bb5 else:bb4 fallthrough=bb4
|
||||
bb5:
|
||||
predecessor blocks: bb3
|
||||
[6] Reassign mutate y$9_@2 = 1
|
||||
[6] Const mutate y$9_@2 = 1
|
||||
[7] Goto bb4
|
||||
bb4:
|
||||
predecessor blocks: bb5 bb3
|
||||
@@ -48,7 +48,7 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate items$5_@0 = Array []
|
||||
[1] Const mutate items$5_@0 = Array []
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["Goto"])
|
||||
end
|
||||
@@ -57,13 +57,13 @@ flowchart TB
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[4] Let mutate y$7_@1 = 0
|
||||
[4] Const mutate y$7_@1 = 0
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["If (read cond$4)"])
|
||||
end
|
||||
subgraph bb5
|
||||
bb5_instrs["
|
||||
[6] Reassign mutate y$9_@2 = 1
|
||||
[6] Const mutate y$9_@2 = 1
|
||||
"]
|
||||
bb5_instrs --> bb5_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -20,18 +20,17 @@ bb0:
|
||||
[2] For init=bb3 test=bb1 loop=bb5 update=bb4 fallthrough=bb2
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[3] Let mutate i$8_@1[3:13] = 0
|
||||
[3] Const mutate i$8_@1[3:13] = 0
|
||||
[4] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb3 bb4
|
||||
x$13_@0[1:13]: phi(bb3: x$7_@0, bb4: x$14_@0)
|
||||
[5] Const mutate $9_@2 = 10
|
||||
[6] Const mutate $11_@3[6:8] = Binary read i$8_@1 < read $9_@2
|
||||
[7] If (read $11_@3) then:bb5 else:bb2 fallthrough=bb2
|
||||
bb5:
|
||||
predecessor blocks: bb1
|
||||
[8] Const mutate $12_@4 = 1
|
||||
[9] Reassign mutate x$14_@0[1:13] = Binary read x$13_@0 + read $12_@4
|
||||
[9] Reassign mutate x$7_@0[1:13] = Binary read x$7_@0 + read $12_@4
|
||||
[10] Goto(Continue) bb4
|
||||
bb4:
|
||||
predecessor blocks: bb5
|
||||
@@ -39,7 +38,7 @@ bb4:
|
||||
[12] Goto bb1
|
||||
bb2:
|
||||
predecessor blocks: bb1
|
||||
[13] Return read x$13_@0
|
||||
[13] Return read x$7_@0
|
||||
scope3 [6:8]:
|
||||
- read $9_@2
|
||||
```
|
||||
@@ -57,7 +56,7 @@ flowchart TB
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[3] Let mutate i$8_@1[3:13] = 0
|
||||
[3] Const mutate i$8_@1[3:13] = 0
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
@@ -71,7 +70,7 @@ flowchart TB
|
||||
subgraph bb5
|
||||
bb5_instrs["
|
||||
[8] Const mutate $12_@4 = 1
|
||||
[9] Reassign mutate x$14_@0[1:13] = Binary read x$13_@0 + read $12_@4
|
||||
[9] Reassign mutate x$7_@0[1:13] = Binary read x$7_@0 + read $12_@4
|
||||
"]
|
||||
bb5_instrs --> bb5_terminal(["Goto"])
|
||||
end
|
||||
@@ -82,7 +81,7 @@ flowchart TB
|
||||
bb4_instrs --> bb4_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_terminal(["Return read x$13_@0"])
|
||||
bb2_terminal(["Return read x$7_@0"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
|
||||
@@ -19,16 +19,16 @@ function foo() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$5_@0 = 1
|
||||
[2] Let mutate y$6_@1 = 2
|
||||
[1] Const mutate x$5_@0 = 1
|
||||
[2] Const mutate y$6_@1 = 2
|
||||
[3] If (read y$6_@1) then:bb2 else:bb3 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[4] Let mutate z$7_@2 = Binary read x$5_@0 + read y$6_@1
|
||||
[4] Const mutate z$7_@2 = Binary read x$5_@0 + read y$6_@1
|
||||
[5] Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[6] Let mutate z$8_@3 = read x$5_@0
|
||||
[6] Const mutate z$8_@3 = read x$5_@0
|
||||
[7] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
@@ -47,20 +47,20 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$5_@0 = 1
|
||||
[2] Let mutate y$6_@1 = 2
|
||||
[1] Const mutate x$5_@0 = 1
|
||||
[2] Const mutate y$6_@1 = 2
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read y$6_@1)"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[4] Let mutate z$7_@2 = Binary read x$5_@0 + read y$6_@1
|
||||
[4] Const mutate z$7_@2 = Binary read x$5_@0 + read y$6_@1
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[6] Let mutate z$8_@3 = read x$5_@0
|
||||
[6] Const mutate z$8_@3 = read x$5_@0
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -28,25 +28,25 @@ function foo(a, b, c, d) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$13_@0 = 0
|
||||
[1] Const mutate x$13_@0 = 0
|
||||
[2] Const mutate $14_@1 = true
|
||||
[3] Let mutate x$18_@2[3:20] = undefined
|
||||
[3] If (read $14_@1) then:bb2 else:bb6 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[4] Const mutate $15_@2 = true
|
||||
[5] If (read $15_@2) then:bb4 else:bb5 fallthrough=bb3
|
||||
[4] Const mutate $15_@3 = true
|
||||
[5] If (read $15_@3) then:bb4 else:bb5 fallthrough=bb3
|
||||
bb4:
|
||||
predecessor blocks: bb2
|
||||
[6] Reassign mutate x$16_@3[6:17] = read a$9
|
||||
[6] Reassign mutate x$18_@2[3:20] = read a$9
|
||||
[7] Goto bb3
|
||||
bb5:
|
||||
predecessor blocks: bb2
|
||||
[8] Reassign mutate x$17_@3[6:17] = read b$10
|
||||
[8] Reassign mutate x$18_@2[3:20] = read b$10
|
||||
[9] Goto bb3
|
||||
bb3:
|
||||
predecessor blocks: bb4 bb5
|
||||
x$18_@3[6:17]: phi(bb4: x$16_@3, bb5: x$17_@3)
|
||||
[10] read x$18_@3
|
||||
[10] read x$18_@2
|
||||
[11] Goto bb1
|
||||
bb6:
|
||||
predecessor blocks: bb0
|
||||
@@ -54,28 +54,26 @@ bb6:
|
||||
[13] If (read $19_@4) then:bb8 else:bb9 fallthrough=bb7
|
||||
bb8:
|
||||
predecessor blocks: bb6
|
||||
[14] Reassign mutate x$20_@3[6:17] = read c$11
|
||||
[14] Reassign mutate x$18_@2[3:20] = read c$11
|
||||
[15] Goto bb7
|
||||
bb9:
|
||||
predecessor blocks: bb6
|
||||
[16] Reassign mutate x$21_@3[6:17] = read d$12
|
||||
[16] Reassign mutate x$18_@2[3:20] = read d$12
|
||||
[17] Goto bb7
|
||||
bb7:
|
||||
predecessor blocks: bb8 bb9
|
||||
x$22_@3[6:17]: phi(bb8: x$20_@3, bb9: x$21_@3)
|
||||
[18] read x$22_@3
|
||||
[18] read x$18_@2
|
||||
[19] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb3 bb7
|
||||
x$23_@3[6:17]: phi(bb3: x$18_@3, bb7: x$22_@3)
|
||||
[20] read x$23_@3
|
||||
[20] read x$18_@2
|
||||
[21] Return
|
||||
scope3 [6:17]:
|
||||
scope2 [3:20]:
|
||||
- read a$9
|
||||
- read b$10
|
||||
- read $15_@2
|
||||
- read c$11
|
||||
- read d$12
|
||||
- read $14_@1
|
||||
```
|
||||
|
||||
### CFG
|
||||
@@ -85,32 +83,33 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$13_@0 = 0
|
||||
[1] Const mutate x$13_@0 = 0
|
||||
[2] Const mutate $14_@1 = true
|
||||
[3] Let mutate x$18_@2[3:20] = undefined
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read $14_@1)"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[4] Const mutate $15_@2 = true
|
||||
[4] Const mutate $15_@3 = true
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["If (read $15_@2)"])
|
||||
bb2_instrs --> bb2_terminal(["If (read $15_@3)"])
|
||||
end
|
||||
subgraph bb4
|
||||
bb4_instrs["
|
||||
[6] Reassign mutate x$16_@3[6:17] = read a$9
|
||||
[6] Reassign mutate x$18_@2[3:20] = read a$9
|
||||
"]
|
||||
bb4_instrs --> bb4_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb5
|
||||
bb5_instrs["
|
||||
[8] Reassign mutate x$17_@3[6:17] = read b$10
|
||||
[8] Reassign mutate x$18_@2[3:20] = read b$10
|
||||
"]
|
||||
bb5_instrs --> bb5_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[10] read x$18_@3
|
||||
[10] read x$18_@2
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
@@ -122,25 +121,25 @@ flowchart TB
|
||||
end
|
||||
subgraph bb8
|
||||
bb8_instrs["
|
||||
[14] Reassign mutate x$20_@3[6:17] = read c$11
|
||||
[14] Reassign mutate x$18_@2[3:20] = read c$11
|
||||
"]
|
||||
bb8_instrs --> bb8_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb9
|
||||
bb9_instrs["
|
||||
[16] Reassign mutate x$21_@3[6:17] = read d$12
|
||||
[16] Reassign mutate x$18_@2[3:20] = read d$12
|
||||
"]
|
||||
bb9_instrs --> bb9_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb7
|
||||
bb7_instrs["
|
||||
[18] read x$22_@3
|
||||
[18] read x$18_@2
|
||||
"]
|
||||
bb7_instrs --> bb7_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[20] read x$23_@3
|
||||
[20] read x$18_@2
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Return"])
|
||||
end
|
||||
|
||||
@@ -21,7 +21,7 @@ function foo(a, b, c) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$9_@0 = 0
|
||||
[1] Const mutate x$9_@0 = 0
|
||||
[2] While test=bb1 loop=bb3 fallthrough=bb2
|
||||
bb1:
|
||||
predecessor blocks: bb0 bb5
|
||||
@@ -63,7 +63,7 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$9_@0 = 0
|
||||
[1] Const mutate x$9_@0 = 0
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["While"])
|
||||
end
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
|
||||
## Input
|
||||
|
||||
```javascript
|
||||
function foo(a, b, c) {
|
||||
let x = a;
|
||||
if (b) {
|
||||
if (c) {
|
||||
x = c;
|
||||
}
|
||||
x;
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
## HIR
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Const mutate x$8_@0[1:8] = read a$5
|
||||
[2] If (read b$6) then:bb2 else:bb1 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[3] If (read c$7) then:bb4 else:bb3 fallthrough=bb3
|
||||
bb4:
|
||||
predecessor blocks: bb2
|
||||
[4] Reassign mutate x$8_@0[1:8] = read c$7
|
||||
[5] Goto bb3
|
||||
bb3:
|
||||
predecessor blocks: bb4 bb2
|
||||
[6] read x$8_@0
|
||||
[7] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb3 bb0
|
||||
[8] Return
|
||||
scope0 [1:8]:
|
||||
- read a$5
|
||||
- read c$7
|
||||
- read c$7
|
||||
- read b$6
|
||||
```
|
||||
|
||||
### CFG
|
||||
|
||||
```mermaid
|
||||
flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Const mutate x$8_@0[1:8] = read a$5
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read b$6)"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_terminal(["If (read c$7)"])
|
||||
end
|
||||
subgraph bb4
|
||||
bb4_instrs["
|
||||
[4] Reassign mutate x$8_@0[1:8] = read c$7
|
||||
"]
|
||||
bb4_instrs --> bb4_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[6] read x$8_@0
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_terminal(["Return"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
bb0_terminal -- "then" --> bb2
|
||||
bb0_terminal -- "else" --> bb1
|
||||
bb2_terminal -- "then" --> bb4
|
||||
bb2_terminal -- "else" --> bb3
|
||||
bb4_terminal --> bb3
|
||||
bb3_terminal --> bb1
|
||||
|
||||
```
|
||||
|
||||
## Code
|
||||
|
||||
```javascript
|
||||
function foo$0(a$5, b$6, c$7) {
|
||||
const x$8 = a$5;
|
||||
bb1: if (b$6) {
|
||||
bb3: if (c$7) {
|
||||
x$8 = c$7;
|
||||
}
|
||||
|
||||
x$8;
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
function foo(a, b, c) {
|
||||
let x = a;
|
||||
if (b) {
|
||||
if (c) {
|
||||
x = c;
|
||||
}
|
||||
x;
|
||||
}
|
||||
}
|
||||
+6
-7
@@ -24,19 +24,18 @@ bb0:
|
||||
[2] If (read a$7) then:bb2 else:bb3 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[3] Reassign mutate x$13_@0[1:8] = read b$8
|
||||
[3] Reassign mutate x$12_@0[1:8] = read b$8
|
||||
[4] Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[5] If (read c$9) then:bb5 else:bb1 fallthrough=bb1
|
||||
bb5:
|
||||
predecessor blocks: bb3
|
||||
[6] Reassign mutate x$14_@0[1:8] = read d$10
|
||||
[6] Reassign mutate x$12_@0[1:8] = read d$10
|
||||
[7] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb5 bb3
|
||||
x$15_@0[1:8]: phi(bb2: x$13_@0, bb5: x$14_@0, bb3: x$12_@0)
|
||||
[8] Return read x$15_@0
|
||||
[8] Return read x$12_@0
|
||||
scope0 [1:8]:
|
||||
- read b$8
|
||||
- read d$10
|
||||
@@ -57,7 +56,7 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[3] Reassign mutate x$13_@0[1:8] = read b$8
|
||||
[3] Reassign mutate x$12_@0[1:8] = read b$8
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
@@ -66,12 +65,12 @@ flowchart TB
|
||||
end
|
||||
subgraph bb5
|
||||
bb5_instrs["
|
||||
[6] Reassign mutate x$14_@0[1:8] = read d$10
|
||||
[6] Reassign mutate x$12_@0[1:8] = read d$10
|
||||
"]
|
||||
bb5_instrs --> bb5_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_terminal(["Return read x$15_@0"])
|
||||
bb1_terminal(["Return read x$12_@0"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
|
||||
@@ -46,7 +46,7 @@ function Foo$0() {}
|
||||
bb0:
|
||||
[1] Const mutate a$7_@0[0:4] = Array []
|
||||
[2] Const mutate b$8_@0[0:4] = Object { }
|
||||
[3] Let mutate c$9_@0[0:4] = New mutate Foo$5_@0(mutate a$7_@0, mutate b$8_@0)
|
||||
[3] Const mutate c$9_@0[0:4] = New mutate Foo$5_@0(mutate a$7_@0, mutate b$8_@0)
|
||||
[4] Return freeze c$9_@0
|
||||
|
||||
```
|
||||
@@ -60,7 +60,7 @@ flowchart TB
|
||||
bb0_instrs["
|
||||
[1] Const mutate a$7_@0[0:4] = Array []
|
||||
[2] Const mutate b$8_@0[0:4] = Object { }
|
||||
[3] Let mutate c$9_@0[0:4] = New mutate Foo$5_@0(mutate a$7_@0, mutate b$8_@0)
|
||||
[3] Const mutate c$9_@0[0:4] = New mutate Foo$5_@0(mutate a$7_@0, mutate b$8_@0)
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["Return freeze c$9_@0"])
|
||||
end
|
||||
|
||||
@@ -25,24 +25,23 @@ bb0:
|
||||
[1] Let mutate x$6_@0[1:10] = 1
|
||||
[2] Let mutate y$7_@0[1:10] = 2
|
||||
[3] Const mutate $8_@2 = 1
|
||||
[4] Const mutate $9_@3 = Binary read x$6_@0 > read $8_@2
|
||||
[5] If (read $9_@3) then:bb2 else:bb3 fallthrough=bb1
|
||||
[4] Const mutate $9_@0[1:10] = Binary read x$6_@0 > read $8_@2
|
||||
[5] If (read $9_@0) then:bb2 else:bb3 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[6] Reassign mutate x$10_@0[1:10] = 2
|
||||
[6] Reassign mutate x$6_@0[1:10] = 2
|
||||
[7] Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[8] Reassign mutate y$11_@0[1:10] = 3
|
||||
[8] Reassign mutate y$7_@0[1:10] = 3
|
||||
[9] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
x$12_@0[1:10]: phi(bb2: x$10_@0, bb3: x$6_@0)
|
||||
y$13_@0[1:10]: phi(bb2: y$7_@0, bb3: y$11_@0)
|
||||
[10] Let mutate t$14_@4 = Object { x: read x$12_@0, y: read y$13_@0 }
|
||||
[11] Return freeze t$14_@4
|
||||
scope3 [4:5]:
|
||||
- read $8_@2
|
||||
[10] Const mutate t$14_@3 = Object { x: read x$6_@0, y: read y$7_@0 }
|
||||
[11] Return freeze t$14_@3
|
||||
scope3 [10:11]:
|
||||
- read x$6_@0
|
||||
- read y$7_@0
|
||||
```
|
||||
|
||||
### CFG
|
||||
@@ -55,27 +54,27 @@ flowchart TB
|
||||
[1] Let mutate x$6_@0[1:10] = 1
|
||||
[2] Let mutate y$7_@0[1:10] = 2
|
||||
[3] Const mutate $8_@2 = 1
|
||||
[4] Const mutate $9_@3 = Binary read x$6_@0 > read $8_@2
|
||||
[4] Const mutate $9_@0[1:10] = Binary read x$6_@0 > read $8_@2
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read $9_@3)"])
|
||||
bb0_instrs --> bb0_terminal(["If (read $9_@0)"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[6] Reassign mutate x$10_@0[1:10] = 2
|
||||
[6] Reassign mutate x$6_@0[1:10] = 2
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[8] Reassign mutate y$11_@0[1:10] = 3
|
||||
[8] Reassign mutate y$7_@0[1:10] = 3
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[10] Let mutate t$14_@4 = Object { x: read x$12_@0, y: read y$13_@0 }
|
||||
[10] Const mutate t$14_@3 = Object { x: read x$6_@0, y: read y$7_@0 }
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Return freeze t$14_@4"])
|
||||
bb1_instrs --> bb1_terminal(["Return freeze t$14_@3"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
|
||||
+4
-4
@@ -27,12 +27,12 @@ bb0:
|
||||
[3] If (read a$7) then:bb2 else:bb3 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[4] Let mutate y$10_@0[0:11] = Object { }
|
||||
[4] Const mutate y$10_@0[0:11] = Object { }
|
||||
[5] Reassign mutate x$9_@0.y[0:11] = read y$10_@0
|
||||
[6] Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[7] Let mutate z$11_@0[0:11] = Object { }
|
||||
[7] Const mutate z$11_@0[0:11] = Object { }
|
||||
[8] Reassign mutate x$9_@0.z[0:11] = read z$11_@0
|
||||
[9] Goto bb1
|
||||
bb1:
|
||||
@@ -56,14 +56,14 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[4] Let mutate y$10_@0[0:11] = Object { }
|
||||
[4] Const mutate y$10_@0[0:11] = Object { }
|
||||
[5] Reassign mutate x$9_@0.y[0:11] = read y$10_@0
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[7] Let mutate z$11_@0[0:11] = Object { }
|
||||
[7] Const mutate z$11_@0[0:11] = Object { }
|
||||
[8] Reassign mutate x$9_@0.z[0:11] = read z$11_@0
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
|
||||
@@ -24,12 +24,12 @@ bb0:
|
||||
[2] If (read a$5) then:bb2 else:bb3 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[3] Let mutate y$7_@1 = Object { }
|
||||
[3] Const mutate y$7_@1 = Object { }
|
||||
[4] Reassign mutate x$6_@0.y[1:9] = read y$7_@1
|
||||
[5] Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[6] Let mutate z$8_@2 = Object { }
|
||||
[6] Const mutate z$8_@2 = Object { }
|
||||
[7] Reassign mutate x$6_@0.z[1:9] = read z$8_@2
|
||||
[8] Goto bb1
|
||||
bb1:
|
||||
@@ -56,14 +56,14 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[3] Let mutate y$7_@1 = Object { }
|
||||
[3] Const mutate y$7_@1 = Object { }
|
||||
[4] Reassign mutate x$6_@0.y[1:9] = read y$7_@1
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[6] Let mutate z$8_@2 = Object { }
|
||||
[6] Const mutate z$8_@2 = Object { }
|
||||
[7] Reassign mutate x$6_@0.z[1:9] = read z$8_@2
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
|
||||
@@ -25,12 +25,12 @@ bb0:
|
||||
[2] If (read a$6) then:bb2 else:bb3 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[3] Let mutate y$8_@0[0:10] = Object { }
|
||||
[3] Const mutate y$8_@0[0:10] = Object { }
|
||||
[4] Reassign mutate x$7_@0.y[0:10] = read y$8_@0
|
||||
[5] Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[6] Let mutate z$9_@0[0:10] = Object { }
|
||||
[6] Const mutate z$9_@0[0:10] = Object { }
|
||||
[7] Reassign mutate x$7_@0.z[0:10] = read z$9_@0
|
||||
[8] Goto bb1
|
||||
bb1:
|
||||
@@ -53,14 +53,14 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[3] Let mutate y$8_@0[0:10] = Object { }
|
||||
[3] Const mutate y$8_@0[0:10] = Object { }
|
||||
[4] Reassign mutate x$7_@0.y[0:10] = read y$8_@0
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[6] Let mutate z$9_@0[0:10] = Object { }
|
||||
[6] Const mutate z$9_@0[0:10] = Object { }
|
||||
[7] Reassign mutate x$7_@0.z[0:10] = read z$9_@0
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
|
||||
+4
-4
@@ -25,13 +25,13 @@ bb0:
|
||||
[2] If (read a$6) then:bb2 else:bb3 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[3] Let mutate y$8_@0[0:10] = Object { }
|
||||
[3] Const mutate y$8_@0[0:10] = Object { }
|
||||
[4] Reassign mutate x$7_@0.y[0:10] = read y$8_@0
|
||||
[5] Call mutate mutate$4_@0(mutate y$8_@0)
|
||||
[6] Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[7] Let mutate z$9_@1 = Object { }
|
||||
[7] Const mutate z$9_@1 = Object { }
|
||||
[8] Reassign mutate x$7_@0.z[0:10] = read z$9_@1
|
||||
[9] Goto bb1
|
||||
bb1:
|
||||
@@ -54,7 +54,7 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[3] Let mutate y$8_@0[0:10] = Object { }
|
||||
[3] Const mutate y$8_@0[0:10] = Object { }
|
||||
[4] Reassign mutate x$7_@0.y[0:10] = read y$8_@0
|
||||
[5] Call mutate mutate$4_@0(mutate y$8_@0)
|
||||
"]
|
||||
@@ -62,7 +62,7 @@ flowchart TB
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[7] Let mutate z$9_@1 = Object { }
|
||||
[7] Const mutate z$9_@1 = Object { }
|
||||
[8] Reassign mutate x$7_@0.z[0:10] = read z$9_@1
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
|
||||
@@ -16,10 +16,10 @@ function foo(a, b, c) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$8_@0 = 0
|
||||
[2] Reassign mutate x$9_@1 = read a$5
|
||||
[3] Reassign mutate x$10_@2 = read b$6
|
||||
[4] Reassign mutate x$11_@3 = read c$7
|
||||
[1] Const mutate x$8_@0 = 0
|
||||
[2] Const mutate x$9_@1 = read a$5
|
||||
[3] Const mutate x$10_@2 = read b$6
|
||||
[4] Const mutate x$11_@3 = read c$7
|
||||
[5] Return read x$11_@3
|
||||
scope1 [2:3]:
|
||||
- read a$5
|
||||
@@ -36,10 +36,10 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$8_@0 = 0
|
||||
[2] Reassign mutate x$9_@1 = read a$5
|
||||
[3] Reassign mutate x$10_@2 = read b$6
|
||||
[4] Reassign mutate x$11_@3 = read c$7
|
||||
[1] Const mutate x$8_@0 = 0
|
||||
[2] Const mutate x$9_@1 = read a$5
|
||||
[3] Const mutate x$10_@2 = read b$6
|
||||
[4] Const mutate x$11_@3 = read c$7
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["Return read x$11_@3"])
|
||||
end
|
||||
|
||||
@@ -19,18 +19,16 @@ function foo() {
|
||||
bb0:
|
||||
[1] Let mutate x$4_@0[1:7] = 1
|
||||
[2] Const mutate $5_@1 = 1
|
||||
[3] Const mutate $6_@2 = Binary read x$4_@0 === read $5_@1
|
||||
[4] If (read $6_@2) then:bb2 else:bb1 fallthrough=bb1
|
||||
[3] Const mutate $6_@0[1:7] = Binary read x$4_@0 === read $5_@1
|
||||
[4] If (read $6_@0) then:bb2 else:bb1 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[5] Reassign mutate x$7_@0[1:7] = 2
|
||||
[5] Reassign mutate x$4_@0[1:7] = 2
|
||||
[6] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb0
|
||||
x$8_@0[1:7]: phi(bb2: x$7_@0, bb0: x$4_@0)
|
||||
[7] Return read x$8_@0
|
||||
scope2 [3:4]:
|
||||
- read $5_@1
|
||||
[7] Return read x$4_@0
|
||||
|
||||
```
|
||||
|
||||
### CFG
|
||||
@@ -42,18 +40,18 @@ flowchart TB
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$4_@0[1:7] = 1
|
||||
[2] Const mutate $5_@1 = 1
|
||||
[3] Const mutate $6_@2 = Binary read x$4_@0 === read $5_@1
|
||||
[3] Const mutate $6_@0[1:7] = Binary read x$4_@0 === read $5_@1
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read $6_@2)"])
|
||||
bb0_instrs --> bb0_terminal(["If (read $6_@0)"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[5] Reassign mutate x$7_@0[1:7] = 2
|
||||
[5] Reassign mutate x$4_@0[1:7] = 2
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_terminal(["Return read x$8_@0"])
|
||||
bb1_terminal(["Return read x$4_@0"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
|
||||
@@ -52,17 +52,16 @@ bb0:
|
||||
[2] If (read cond$5) then:bb2 else:bb3 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[3] Let mutate str$7_@1 = "other test"
|
||||
[3] Const mutate str$7_@1 = "other test"
|
||||
[4] Call mutate log$4_@2(read str$7_@1)
|
||||
[5] Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[6] Reassign mutate str$8_@0[1:8] = "fallthrough test"
|
||||
[6] Reassign mutate str$6_@0[1:8] = "fallthrough test"
|
||||
[7] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
str$10_@0[1:8]: phi(bb2: str$6_@0, bb3: str$8_@0)
|
||||
[8] Call mutate log$4_@2(read str$10_@0)
|
||||
[8] Call mutate log$4_@2(read str$6_@0)
|
||||
[9] Return
|
||||
|
||||
```
|
||||
@@ -80,20 +79,20 @@ flowchart TB
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[3] Let mutate str$7_@1 = 'other test'
|
||||
[3] Const mutate str$7_@1 = 'other test'
|
||||
[4] Call mutate log$4_@2(read str$7_@1)
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[6] Reassign mutate str$8_@0[1:8] = 'fallthrough test'
|
||||
[6] Reassign mutate str$6_@0[1:8] = 'fallthrough test'
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[8] Call mutate log$4_@2(read str$10_@0)
|
||||
[8] Call mutate log$4_@2(read str$6_@0)
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Return"])
|
||||
end
|
||||
|
||||
@@ -28,52 +28,54 @@ function foo(a, b, c, d) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$13_@0 = 0
|
||||
[1] Const mutate x$13_@0 = 0
|
||||
[2] Const mutate $14_@1 = true
|
||||
[3] If (read $14_@1) then:bb2 else:bb6 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[4] Const mutate $15_@2 = true
|
||||
[5] Let mutate x$16_@3[5:10] = undefined
|
||||
[5] If (read $15_@2) then:bb4 else:bb5 fallthrough=bb3
|
||||
bb4:
|
||||
predecessor blocks: bb2
|
||||
[6] Reassign mutate x$16_@3[6:9] = read a$9
|
||||
[6] Reassign mutate x$16_@3[5:10] = read a$9
|
||||
[7] Goto bb3
|
||||
bb5:
|
||||
predecessor blocks: bb2
|
||||
[8] Reassign mutate x$17_@3[6:9] = read b$10
|
||||
[8] Reassign mutate x$16_@3[5:10] = read b$10
|
||||
[9] Goto bb3
|
||||
bb3:
|
||||
predecessor blocks: bb4 bb5
|
||||
x$18_@3[6:9]: phi(bb4: x$16_@3, bb5: x$17_@3)
|
||||
[10] read x$18_@3
|
||||
[10] read x$16_@3
|
||||
[11] Goto bb1
|
||||
bb6:
|
||||
predecessor blocks: bb0
|
||||
[12] Const mutate $19_@4 = true
|
||||
[13] Let mutate x$20_@5[13:18] = undefined
|
||||
[13] If (read $19_@4) then:bb8 else:bb9 fallthrough=bb7
|
||||
bb8:
|
||||
predecessor blocks: bb6
|
||||
[14] Reassign mutate x$20_@5[14:17] = read c$11
|
||||
[14] Reassign mutate x$20_@5[13:18] = read c$11
|
||||
[15] Goto bb7
|
||||
bb9:
|
||||
predecessor blocks: bb6
|
||||
[16] Reassign mutate x$21_@5[14:17] = read d$12
|
||||
[16] Reassign mutate x$20_@5[13:18] = read d$12
|
||||
[17] Goto bb7
|
||||
bb7:
|
||||
predecessor blocks: bb8 bb9
|
||||
x$22_@5[14:17]: phi(bb8: x$20_@5, bb9: x$21_@5)
|
||||
[18] read x$22_@5
|
||||
[18] read x$20_@5
|
||||
[19] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb3 bb7
|
||||
[20] Return
|
||||
scope3 [6:9]:
|
||||
scope3 [5:10]:
|
||||
- read a$9
|
||||
- read b$10
|
||||
scope5 [14:17]:
|
||||
- read $15_@2
|
||||
scope5 [13:18]:
|
||||
- read c$11
|
||||
- read d$12
|
||||
- read $19_@4
|
||||
```
|
||||
|
||||
### CFG
|
||||
@@ -83,7 +85,7 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$13_@0 = 0
|
||||
[1] Const mutate x$13_@0 = 0
|
||||
[2] Const mutate $14_@1 = true
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read $14_@1)"])
|
||||
@@ -91,48 +93,50 @@ flowchart TB
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[4] Const mutate $15_@2 = true
|
||||
[5] Let mutate x$16_@3[5:10] = undefined
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["If (read $15_@2)"])
|
||||
end
|
||||
subgraph bb4
|
||||
bb4_instrs["
|
||||
[6] Reassign mutate x$16_@3[6:9] = read a$9
|
||||
[6] Reassign mutate x$16_@3[5:10] = read a$9
|
||||
"]
|
||||
bb4_instrs --> bb4_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb5
|
||||
bb5_instrs["
|
||||
[8] Reassign mutate x$17_@3[6:9] = read b$10
|
||||
[8] Reassign mutate x$16_@3[5:10] = read b$10
|
||||
"]
|
||||
bb5_instrs --> bb5_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[10] read x$18_@3
|
||||
[10] read x$16_@3
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb6
|
||||
bb6_instrs["
|
||||
[12] Const mutate $19_@4 = true
|
||||
[13] Let mutate x$20_@5[13:18] = undefined
|
||||
"]
|
||||
bb6_instrs --> bb6_terminal(["If (read $19_@4)"])
|
||||
end
|
||||
subgraph bb8
|
||||
bb8_instrs["
|
||||
[14] Reassign mutate x$20_@5[14:17] = read c$11
|
||||
[14] Reassign mutate x$20_@5[13:18] = read c$11
|
||||
"]
|
||||
bb8_instrs --> bb8_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb9
|
||||
bb9_instrs["
|
||||
[16] Reassign mutate x$21_@5[14:17] = read d$12
|
||||
[16] Reassign mutate x$20_@5[13:18] = read d$12
|
||||
"]
|
||||
bb9_instrs --> bb9_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb7
|
||||
bb7_instrs["
|
||||
[18] read x$22_@5
|
||||
[18] read x$20_@5
|
||||
"]
|
||||
bb7_instrs --> bb7_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -20,27 +20,27 @@ function foo() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate y$5_@0 = 2
|
||||
[1] Const mutate y$5_@0 = 2
|
||||
[2] Const mutate $6_@1 = 1
|
||||
[3] Const mutate $7_@2 = Binary read y$5_@0 > read $6_@1
|
||||
[4] Let mutate y$8_@3[4:10] = undefined
|
||||
[4] If (read $7_@2) then:bb2 else:bb3 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[5] Reassign mutate y$8_@3[5:10] = 1
|
||||
[5] Reassign mutate y$8_@3[4:10] = 1
|
||||
[6] Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[7] Reassign mutate y$9_@3[5:10] = 2
|
||||
[7] Reassign mutate y$8_@3[4:10] = 2
|
||||
[8] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb3
|
||||
y$10_@3[5:10]: phi(bb2: y$8_@3, bb3: y$9_@3)
|
||||
[9] Let mutate x$11_@3[5:10] = read y$10_@3
|
||||
[9] Const mutate x$11_@3[4:10] = read y$8_@3
|
||||
[10] Return
|
||||
scope2 [3:4]:
|
||||
- read y$5_@0
|
||||
- read $6_@1
|
||||
scope3 [5:10]:
|
||||
scope3 [4:10]:
|
||||
- read $7_@2
|
||||
```
|
||||
|
||||
@@ -51,27 +51,28 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate y$5_@0 = 2
|
||||
[1] Const mutate y$5_@0 = 2
|
||||
[2] Const mutate $6_@1 = 1
|
||||
[3] Const mutate $7_@2 = Binary read y$5_@0 > read $6_@1
|
||||
[4] Let mutate y$8_@3[4:10] = undefined
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read $7_@2)"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[5] Reassign mutate y$8_@3[5:10] = 1
|
||||
[5] Reassign mutate y$8_@3[4:10] = 1
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[7] Reassign mutate y$9_@3[5:10] = 2
|
||||
[7] Reassign mutate y$8_@3[4:10] = 2
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[9] Let mutate x$11_@3[5:10] = read y$10_@3
|
||||
[9] Const mutate x$11_@3[4:10] = read y$8_@3
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Return"])
|
||||
end
|
||||
|
||||
@@ -13,8 +13,8 @@ function foo() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$3_@0 = 1
|
||||
[2] Let mutate y$4_@1 = 2
|
||||
[1] Const mutate x$3_@0 = 1
|
||||
[2] Const mutate y$4_@1 = 2
|
||||
[3] Return
|
||||
|
||||
```
|
||||
@@ -26,8 +26,8 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$3_@0 = 1
|
||||
[2] Let mutate y$4_@1 = 2
|
||||
[1] Const mutate x$3_@0 = 1
|
||||
[2] Const mutate y$4_@1 = 2
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["Return"])
|
||||
end
|
||||
|
||||
@@ -17,12 +17,12 @@ function foo() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$4_@0 = 1
|
||||
[2] Let mutate y$5_@1 = 2
|
||||
[1] Const mutate x$4_@0 = 1
|
||||
[2] Const mutate y$5_@1 = 2
|
||||
[3] If (read y$5_@1) then:bb2 else:bb1 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[4] Let mutate z$6_@2 = Binary read x$4_@0 + read y$5_@1
|
||||
[4] Const mutate z$6_@2 = Binary read x$4_@0 + read y$5_@1
|
||||
[5] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb0
|
||||
@@ -39,14 +39,14 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$4_@0 = 1
|
||||
[2] Let mutate y$5_@1 = 2
|
||||
[1] Const mutate x$4_@0 = 1
|
||||
[2] Const mutate y$5_@1 = 2
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read y$5_@1)"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[4] Let mutate z$6_@2 = Binary read x$4_@0 + read y$5_@1
|
||||
[4] Const mutate z$6_@2 = Binary read x$4_@0 + read y$5_@1
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -28,11 +28,12 @@ function foo() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$10_@0 = 1
|
||||
[1] Const mutate x$10_@0 = 1
|
||||
[2] Const mutate $11_@1 = 2
|
||||
[3] Const mutate $12_@2 = Binary read x$10_@0 === read $11_@1
|
||||
[4] Const mutate $13_@3 = 1
|
||||
[5] Const mutate $14_@4 = Binary read x$10_@0 === read $13_@3
|
||||
[6] Let mutate x$16_@5[6:17] = undefined
|
||||
[6] Switch (read x$10_@0)
|
||||
Case read $14_@4: bb5
|
||||
Case read $12_@2: bb3
|
||||
@@ -40,23 +41,22 @@ bb0:
|
||||
Fallthrough: bb1
|
||||
bb5:
|
||||
predecessor blocks: bb0
|
||||
[7] Const mutate $15_@5 = 1
|
||||
[8] Reassign mutate x$16_@6[8:17] = Binary read x$10_@0 + read $15_@5
|
||||
[7] Const mutate $15_@6 = 1
|
||||
[8] Reassign mutate x$16_@5[6:17] = Binary read x$10_@0 + read $15_@6
|
||||
[9] Goto bb1
|
||||
bb3:
|
||||
predecessor blocks: bb0
|
||||
[10] Const mutate $17_@7 = 2
|
||||
[11] Reassign mutate x$18_@6[8:17] = Binary read x$10_@0 + read $17_@7
|
||||
[11] Reassign mutate x$16_@5[6:17] = Binary read x$10_@0 + read $17_@7
|
||||
[12] Goto bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[13] Const mutate $19_@8 = 3
|
||||
[14] Reassign mutate x$20_@6[8:17] = Binary read x$10_@0 + read $19_@8
|
||||
[14] Reassign mutate x$16_@5[6:17] = Binary read x$10_@0 + read $19_@8
|
||||
[15] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb5 bb3 bb2
|
||||
x$21_@6[8:17]: phi(bb5: x$16_@6, bb3: x$18_@6, bb2: x$20_@6)
|
||||
[16] Let mutate y$22_@6[8:17] = read x$21_@6
|
||||
[16] Const mutate y$22_@5[6:17] = read x$16_@5
|
||||
[17] Return
|
||||
scope2 [3:4]:
|
||||
- read x$10_@0
|
||||
@@ -64,12 +64,13 @@ scope2 [3:4]:
|
||||
scope4 [5:6]:
|
||||
- read x$10_@0
|
||||
- read $13_@3
|
||||
scope6 [8:17]:
|
||||
scope5 [6:17]:
|
||||
- read x$10_@0
|
||||
scope8 [13:14]:
|
||||
- read x$10_@0
|
||||
scope7 [10:11]:
|
||||
- read x$10_@0
|
||||
scope5 [7:8]:
|
||||
scope6 [7:8]:
|
||||
- read x$10_@0
|
||||
```
|
||||
|
||||
@@ -80,38 +81,39 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$10_@0 = 1
|
||||
[1] Const mutate x$10_@0 = 1
|
||||
[2] Const mutate $11_@1 = 2
|
||||
[3] Const mutate $12_@2 = Binary read x$10_@0 === read $11_@1
|
||||
[4] Const mutate $13_@3 = 1
|
||||
[5] Const mutate $14_@4 = Binary read x$10_@0 === read $13_@3
|
||||
[6] Let mutate x$16_@5[6:17] = undefined
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["Switch (read x$10_@0)"])
|
||||
end
|
||||
subgraph bb5
|
||||
bb5_instrs["
|
||||
[7] Const mutate $15_@5 = 1
|
||||
[8] Reassign mutate x$16_@6[8:17] = Binary read x$10_@0 + read $15_@5
|
||||
[7] Const mutate $15_@6 = 1
|
||||
[8] Reassign mutate x$16_@5[6:17] = Binary read x$10_@0 + read $15_@6
|
||||
"]
|
||||
bb5_instrs --> bb5_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[10] Const mutate $17_@7 = 2
|
||||
[11] Reassign mutate x$18_@6[8:17] = Binary read x$10_@0 + read $17_@7
|
||||
[11] Reassign mutate x$16_@5[6:17] = Binary read x$10_@0 + read $17_@7
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[13] Const mutate $19_@8 = 3
|
||||
[14] Reassign mutate x$20_@6[8:17] = Binary read x$10_@0 + read $19_@8
|
||||
[14] Reassign mutate x$16_@5[6:17] = Binary read x$10_@0 + read $19_@8
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[16] Let mutate y$22_@6[8:17] = read x$21_@6
|
||||
[16] Const mutate y$22_@5[6:17] = read x$16_@5
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Return"])
|
||||
end
|
||||
|
||||
@@ -18,18 +18,16 @@ function foo() {
|
||||
bb0:
|
||||
[1] Let mutate x$4_@0[1:7] = 1
|
||||
[2] Const mutate $5_@1 = 1
|
||||
[3] Const mutate $6_@2 = Binary read x$4_@0 === read $5_@1
|
||||
[4] If (read $6_@2) then:bb2 else:bb1 fallthrough=bb1
|
||||
[3] Const mutate $6_@0[1:7] = Binary read x$4_@0 === read $5_@1
|
||||
[4] If (read $6_@0) then:bb2 else:bb1 fallthrough=bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[5] Reassign mutate x$7_@0[1:7] = 2
|
||||
[5] Reassign mutate x$4_@0[1:7] = 2
|
||||
[6] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb0
|
||||
x$8_@0[1:7]: phi(bb2: x$7_@0, bb0: x$4_@0)
|
||||
[7] Throw read x$8_@0
|
||||
scope2 [3:4]:
|
||||
- read $5_@1
|
||||
[7] Throw read x$4_@0
|
||||
|
||||
```
|
||||
|
||||
### CFG
|
||||
@@ -41,18 +39,18 @@ flowchart TB
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$4_@0[1:7] = 1
|
||||
[2] Const mutate $5_@1 = 1
|
||||
[3] Const mutate $6_@2 = Binary read x$4_@0 === read $5_@1
|
||||
[3] Const mutate $6_@0[1:7] = Binary read x$4_@0 === read $5_@1
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["If (read $6_@2)"])
|
||||
bb0_instrs --> bb0_terminal(["If (read $6_@0)"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[5] Reassign mutate x$7_@0[1:7] = 2
|
||||
[5] Reassign mutate x$4_@0[1:7] = 2
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_terminal(["Throw read x$8_@0"])
|
||||
bb1_terminal(["Throw read x$4_@0"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
|
||||
@@ -17,7 +17,7 @@ function foo() {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$5_@0 = 1
|
||||
[1] Const mutate x$5_@0 = 1
|
||||
[2] While test=bb1 loop=bb3 fallthrough=bb2
|
||||
bb1:
|
||||
predecessor blocks: bb0 bb3
|
||||
@@ -46,7 +46,7 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$5_@0 = 1
|
||||
[1] Const mutate x$5_@0 = 1
|
||||
"]
|
||||
bb0_instrs --> bb0_terminal(["While"])
|
||||
end
|
||||
|
||||
@@ -21,18 +21,17 @@ bb0:
|
||||
[2] While test=bb1 loop=bb3 fallthrough=bb2
|
||||
bb1:
|
||||
predecessor blocks: bb0 bb3
|
||||
x$7_@0[1:9]: phi(bb0: x$5_@0, bb3: x$10_@0)
|
||||
[3] Const mutate $6_@1 = 10
|
||||
[4] Const mutate $8_@0[1:9] = Binary read x$7_@0 < read $6_@1
|
||||
[4] Const mutate $8_@0[1:9] = Binary read x$5_@0 < read $6_@1
|
||||
[5] If (read $8_@0) then:bb3 else:bb2 fallthrough=bb2
|
||||
bb3:
|
||||
predecessor blocks: bb1
|
||||
[6] Const mutate $9_@2 = 1
|
||||
[7] Reassign mutate x$10_@0[1:9] = Binary read x$7_@0 + read $9_@2
|
||||
[7] Reassign mutate x$5_@0[1:9] = Binary read x$5_@0 + read $9_@2
|
||||
[8] Goto(Continue) bb1
|
||||
bb2:
|
||||
predecessor blocks: bb1
|
||||
[9] Return read x$7_@0
|
||||
[9] Return read x$5_@0
|
||||
|
||||
```
|
||||
|
||||
@@ -50,19 +49,19 @@ flowchart TB
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[3] Const mutate $6_@1 = 10
|
||||
[4] Const mutate $8_@0[1:9] = Binary read x$7_@0 < read $6_@1
|
||||
[4] Const mutate $8_@0[1:9] = Binary read x$5_@0 < read $6_@1
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["If (read $8_@0)"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[6] Const mutate $9_@2 = 1
|
||||
[7] Reassign mutate x$10_@0[1:9] = Binary read x$7_@0 + read $9_@2
|
||||
[7] Reassign mutate x$5_@0[1:9] = Binary read x$5_@0 + read $9_@2
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_terminal(["Return read x$7_@0"])
|
||||
bb2_terminal(["Return read x$5_@0"])
|
||||
end
|
||||
|
||||
%% Jumps
|
||||
|
||||
@@ -32,7 +32,7 @@ function Component(props) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$10_@0[1:12] = Array []
|
||||
[1] Const mutate x$10_@0[1:12] = Array []
|
||||
[2] Let mutate y$11_@0[1:12] = undefined
|
||||
[3] Const mutate $12_@1 = false
|
||||
[4] Const mutate $13_@2 = true
|
||||
@@ -46,18 +46,17 @@ bb0:
|
||||
bb6:
|
||||
predecessor blocks: bb0
|
||||
[7] Call mutate x$10_@0.push(read props$9.p2)
|
||||
[8] Reassign mutate y$15_@0[1:12] = Array []
|
||||
[8] Reassign mutate y$11_@0[1:12] = Array []
|
||||
[9] Goto bb1
|
||||
bb2:
|
||||
predecessor blocks: bb0
|
||||
[10] Reassign mutate y$16_@0[1:12] = read x$10_@0
|
||||
[10] Reassign mutate y$11_@0[1:12] = read x$10_@0
|
||||
[11] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb0 bb6 bb2
|
||||
y$20_@0[1:12]: phi(bb0: y$11_@0, bb6: y$15_@0, bb2: y$16_@0)
|
||||
[12] Const mutate child$19_@4 = JSX <read Component$0 data={freeze x$10_@0} ></read Component$0>
|
||||
[13] Call read y$20_@0.push(read props$9.p4)
|
||||
[14] Const mutate $22_@5 = JSX <read Component$0 data={freeze y$20_@0} >{read child$19_@4}</read Component$0>
|
||||
[13] Call read y$11_@0.push(read props$9.p4)
|
||||
[14] Const mutate $22_@5 = JSX <read Component$0 data={freeze y$11_@0} >{read child$19_@4}</read Component$0>
|
||||
[15] Return read $22_@5
|
||||
scope0 [1:12]:
|
||||
- read props$9.p2
|
||||
@@ -65,9 +64,11 @@ scope0 [1:12]:
|
||||
scope4 [12:13]:
|
||||
- read Component$0
|
||||
- freeze x$10_@0
|
||||
- read y$11_@0.push
|
||||
- read props$9.p4
|
||||
scope5 [14:15]:
|
||||
- read Component$0
|
||||
- freeze y$11_@0
|
||||
- read child$19_@4
|
||||
```
|
||||
|
||||
@@ -78,7 +79,7 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$10_@0[1:12] = Array []
|
||||
[1] Const mutate x$10_@0[1:12] = Array []
|
||||
[2] Let mutate y$11_@0[1:12] = undefined
|
||||
[3] Const mutate $12_@1 = false
|
||||
[4] Const mutate $13_@2 = true
|
||||
@@ -89,21 +90,21 @@ flowchart TB
|
||||
subgraph bb6
|
||||
bb6_instrs["
|
||||
[7] Call mutate x$10_@0.push(read props$9.p2)
|
||||
[8] Reassign mutate y$15_@0[1:12] = Array []
|
||||
[8] Reassign mutate y$11_@0[1:12] = Array []
|
||||
"]
|
||||
bb6_instrs --> bb6_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[10] Reassign mutate y$16_@0[1:12] = read x$10_@0
|
||||
[10] Reassign mutate y$11_@0[1:12] = read x$10_@0
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[12] Const mutate child$19_@4 = JSX <read Component$0 data={freeze x$10_@0} ></read Component$0>
|
||||
[13] Call read y$20_@0.push(read props$9.p4)
|
||||
[14] Const mutate $22_@5 = JSX <read Component$0 data={freeze y$20_@0} >{read child$19_@4}</read Component$0>
|
||||
[13] Call read y$11_@0.push(read props$9.p4)
|
||||
[14] Const mutate $22_@5 = JSX <read Component$0 data={freeze y$11_@0} >{read child$19_@4}</read Component$0>
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Return read $22_@5"])
|
||||
end
|
||||
|
||||
@@ -36,7 +36,7 @@ function foo(x) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate y$10_@0 = undefined
|
||||
[1] Const mutate y$10_@0 = undefined
|
||||
[2] Const mutate $11_@1 = 5
|
||||
[3] Const mutate $12_@2 = 4
|
||||
[4] Const mutate $13_@3 = 3
|
||||
@@ -54,27 +54,27 @@ bb0:
|
||||
Fallthrough: bb1
|
||||
bb10:
|
||||
predecessor blocks: bb0
|
||||
[9] Reassign mutate y$17_@7 = 0
|
||||
[9] Const mutate y$17_@7 = 0
|
||||
[10] Goto bb9
|
||||
bb9:
|
||||
predecessor blocks: bb10 bb0
|
||||
[11] Reassign mutate y$18_@8 = 1
|
||||
[11] Const mutate y$18_@8 = 1
|
||||
[12] Goto bb1
|
||||
bb5:
|
||||
predecessor blocks: bb0
|
||||
[13] Reassign mutate y$19_@9 = 3
|
||||
[13] Const mutate y$19_@9 = 3
|
||||
[14] Goto bb1
|
||||
bb4:
|
||||
predecessor blocks: bb0
|
||||
[15] Reassign mutate y$20_@10 = 4
|
||||
[15] Const mutate y$20_@10 = 4
|
||||
[16] Goto bb3
|
||||
bb3:
|
||||
predecessor blocks: bb4 bb0
|
||||
[17] Reassign mutate y$21_@11 = 5
|
||||
[17] Const mutate y$21_@11 = 5
|
||||
[18] Goto bb2
|
||||
bb2:
|
||||
predecessor blocks: bb3 bb0
|
||||
[19] Reassign mutate y$22_@12 = 0
|
||||
[19] Const mutate y$22_@12 = 0
|
||||
[20] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb9 bb0 bb5 bb2
|
||||
@@ -89,7 +89,7 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate y$10_@0 = undefined
|
||||
[1] Const mutate y$10_@0 = undefined
|
||||
[2] Const mutate $11_@1 = 5
|
||||
[3] Const mutate $12_@2 = 4
|
||||
[4] Const mutate $13_@3 = 3
|
||||
@@ -101,37 +101,37 @@ flowchart TB
|
||||
end
|
||||
subgraph bb10
|
||||
bb10_instrs["
|
||||
[9] Reassign mutate y$17_@7 = 0
|
||||
[9] Const mutate y$17_@7 = 0
|
||||
"]
|
||||
bb10_instrs --> bb10_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb9
|
||||
bb9_instrs["
|
||||
[11] Reassign mutate y$18_@8 = 1
|
||||
[11] Const mutate y$18_@8 = 1
|
||||
"]
|
||||
bb9_instrs --> bb9_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb5
|
||||
bb5_instrs["
|
||||
[13] Reassign mutate y$19_@9 = 3
|
||||
[13] Const mutate y$19_@9 = 3
|
||||
"]
|
||||
bb5_instrs --> bb5_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb4
|
||||
bb4_instrs["
|
||||
[15] Reassign mutate y$20_@10 = 4
|
||||
[15] Const mutate y$20_@10 = 4
|
||||
"]
|
||||
bb4_instrs --> bb4_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb3
|
||||
bb3_instrs["
|
||||
[17] Reassign mutate y$21_@11 = 5
|
||||
[17] Const mutate y$21_@11 = 5
|
||||
"]
|
||||
bb3_instrs --> bb3_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[19] Reassign mutate y$22_@12 = 0
|
||||
[19] Const mutate y$22_@12 = 0
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
|
||||
@@ -28,7 +28,7 @@ function Component(props) {
|
||||
|
||||
```
|
||||
bb0:
|
||||
[1] Let mutate x$9_@0[1:12] = Array []
|
||||
[1] Const mutate x$9_@0[1:12] = Array []
|
||||
[2] Let mutate y$10_@0[1:12] = undefined
|
||||
[3] Const mutate $11_@1 = false
|
||||
[4] Const mutate $12_@2 = true
|
||||
@@ -41,18 +41,17 @@ bb4:
|
||||
predecessor blocks: bb0
|
||||
[6] Call mutate x$9_@0.push(read props$8.p2)
|
||||
[7] Call mutate x$9_@0.push(read props$8.p3)
|
||||
[8] Reassign mutate y$13_@3 = Array []
|
||||
[8] Const mutate y$13_@3 = Array []
|
||||
[9] Goto bb2
|
||||
bb2:
|
||||
predecessor blocks: bb4 bb0
|
||||
[10] Reassign mutate y$15_@0[1:12] = read x$9_@0
|
||||
[10] Reassign mutate y$10_@0[1:12] = read x$9_@0
|
||||
[11] Goto bb1
|
||||
bb1:
|
||||
predecessor blocks: bb2 bb0
|
||||
y$20_@0[1:12]: phi(bb2: y$15_@0, bb0: y$10_@0)
|
||||
[12] Const mutate child$19_@4 = JSX <read Component$0 data={freeze x$9_@0} ></read Component$0>
|
||||
[13] Call read y$20_@0.push(read props$8.p4)
|
||||
[14] Const mutate $23_@5 = JSX <read Component$0 data={read y$20_@0} >{read child$19_@4}</read Component$0>
|
||||
[13] Call read y$10_@0.push(read props$8.p4)
|
||||
[14] Const mutate $23_@5 = JSX <read Component$0 data={read y$10_@0} >{read child$19_@4}</read Component$0>
|
||||
[15] Return read $23_@5
|
||||
scope0 [1:12]:
|
||||
- read props$8.p2
|
||||
@@ -61,9 +60,11 @@ scope0 [1:12]:
|
||||
scope4 [12:13]:
|
||||
- read Component$0
|
||||
- freeze x$9_@0
|
||||
- read y$10_@0.push
|
||||
- read props$8.p4
|
||||
scope5 [14:15]:
|
||||
- read Component$0
|
||||
- read y$10_@0
|
||||
- read child$19_@4
|
||||
```
|
||||
|
||||
@@ -74,7 +75,7 @@ flowchart TB
|
||||
%% Basic Blocks
|
||||
subgraph bb0
|
||||
bb0_instrs["
|
||||
[1] Let mutate x$9_@0[1:12] = Array []
|
||||
[1] Const mutate x$9_@0[1:12] = Array []
|
||||
[2] Let mutate y$10_@0[1:12] = undefined
|
||||
[3] Const mutate $11_@1 = false
|
||||
[4] Const mutate $12_@2 = true
|
||||
@@ -85,21 +86,21 @@ flowchart TB
|
||||
bb4_instrs["
|
||||
[6] Call mutate x$9_@0.push(read props$8.p2)
|
||||
[7] Call mutate x$9_@0.push(read props$8.p3)
|
||||
[8] Reassign mutate y$13_@3 = Array []
|
||||
[8] Const mutate y$13_@3 = Array []
|
||||
"]
|
||||
bb4_instrs --> bb4_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb2
|
||||
bb2_instrs["
|
||||
[10] Reassign mutate y$15_@0[1:12] = read x$9_@0
|
||||
[10] Reassign mutate y$10_@0[1:12] = read x$9_@0
|
||||
"]
|
||||
bb2_instrs --> bb2_terminal(["Goto"])
|
||||
end
|
||||
subgraph bb1
|
||||
bb1_instrs["
|
||||
[12] Const mutate child$19_@4 = JSX <read Component$0 data={freeze x$9_@0} ></read Component$0>
|
||||
[13] Call read y$20_@0.push(read props$8.p4)
|
||||
[14] Const mutate $23_@5 = JSX <read Component$0 data={read y$20_@0} >{read child$19_@4}</read Component$0>
|
||||
[13] Call read y$10_@0.push(read props$8.p4)
|
||||
[14] Const mutate $23_@5 = JSX <read Component$0 data={read y$10_@0} >{read child$19_@4}</read Component$0>
|
||||
"]
|
||||
bb1_instrs --> bb1_terminal(["Return read $23_@5"])
|
||||
end
|
||||
|
||||
@@ -127,22 +127,7 @@ function transform(
|
||||
traverse(ast, {
|
||||
FunctionDeclaration: {
|
||||
enter(nodePath) {
|
||||
const { ir } = run(nodePath, {
|
||||
eliminateRedundantPhi: true,
|
||||
inferReferenceEffects: true,
|
||||
inferMutableRanges: true,
|
||||
inferReactiveScopeVariables: true,
|
||||
inferReactiveScopes: true,
|
||||
inferReactiveScopeDependencies: true,
|
||||
leaveSSA: false,
|
||||
codegen: false,
|
||||
});
|
||||
|
||||
// Print the HIR before leaving SSA.
|
||||
const textHIR = printFunction(ir);
|
||||
const visualization = visualizeHIRMermaid(ir);
|
||||
|
||||
const { ast } = run(nodePath, {
|
||||
const { ir, ast } = run(nodePath, {
|
||||
eliminateRedundantPhi: true,
|
||||
inferReferenceEffects: true,
|
||||
inferMutableRanges: true,
|
||||
@@ -153,6 +138,9 @@ function transform(
|
||||
codegen: true,
|
||||
});
|
||||
|
||||
const textHIR = printFunction(ir);
|
||||
const visualization = visualizeHIRMermaid(ir);
|
||||
|
||||
invariant(ast !== null, "ast is null when codegen option is enabled");
|
||||
const text = prettier.format(generate(ast).code.replace("\n\n", "\n"), {
|
||||
semi: true,
|
||||
|
||||
Reference in New Issue
Block a user