Skip to content

Commit f9862d1

Browse files
committedNov 27, 2024·
Remove problematic optimisation entirely.
1 parent d859fd5 commit f9862d1

File tree

3 files changed

+15
-32
lines changed

3 files changed

+15
-32
lines changed
 

‎compiler/core/js_stmt_make.ml

+2-25
Original file line numberDiff line numberDiff line change
@@ -232,8 +232,6 @@ let rec block_last_is_return_throw_or_continue (x : J.block) =
232232
*)
233233
let if_ ?comment ?declaration ?else_ (e : J.expression) (then_ : J.block) : t =
234234
let declared = ref false in
235-
let common_prefix_blocks = ref [] in
236-
let add_prefix b = common_prefix_blocks := b :: !common_prefix_blocks in
237235
let rec aux ?comment (e : J.expression) (ifso : J.block) (ifnot : J.block) : t
238236
=
239237
match (e.expression_desc, ifnot) with
@@ -301,24 +299,6 @@ let if_ ?comment ?declaration ?else_ (e : J.expression) (then_ : J.block) : t =
301299
| _, [{statement_desc = If (pred1, ifso1, ifnot1)}]
302300
when Js_analyzer.eq_block ifso ifnot1 ->
303301
aux ?comment (E.or_ e (E.not pred1)) ifso ifso1
304-
| ifso1 :: ifso_rest, ifnot1 :: ifnot_rest
305-
when Js_analyzer.eq_statement ifnot1 ifso1
306-
&& (match ifso1.statement_desc with
307-
| Exp
308-
{
309-
expression_desc =
310-
Bin (Eq, {expression_desc = Var (Id v)}, _);
311-
_;
312-
} ->
313-
let guard_vars = Js_analyzer.free_variables_of_expression e in
314-
not (Set_ident.mem guard_vars v)
315-
| _ -> true)
316-
&& Js_analyzer.no_side_effect_expression e ->
317-
(* here we do agressive optimization, because it can help optimization later,
318-
move code outside of branch is generally helpful later
319-
*)
320-
add_prefix ifso1;
321-
aux ?comment e ifso_rest ifnot_rest
322302
| _ -> {statement_desc = If (e, ifso, ifnot); comment})
323303
in
324304
let if_block =
@@ -327,12 +307,9 @@ let if_ ?comment ?declaration ?else_ (e : J.expression) (then_ : J.block) : t =
327307
| None -> []
328308
| Some v -> v)
329309
in
330-
let prefix = !common_prefix_blocks in
331310
match (!declared, declaration) with
332-
| true, _ | _, None ->
333-
if prefix = [] then if_block else block (List.rev_append prefix [if_block])
334-
| false, Some (kind, id) ->
335-
block (declare_variable ~kind id :: List.rev_append prefix [if_block])
311+
| true, _ | _, None -> if_block
312+
| false, Some (kind, id) -> block (declare_variable ~kind id :: [if_block])
336313

337314
let assign ?comment id e : t =
338315
{statement_desc = J.Exp (E.assign (E.var id) e); comment}

‎tests/tests/src/move_ref_assignment.mjs

+4-4
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ function upd() {
1111
k.c = 3;
1212
}
1313

14-
upd();
15-
16-
j = j + 2 | 0;
17-
1814
if (k.c === 1) {
15+
upd();
16+
j = j + 2 | 0;
1917
console.log("correct");
2018
} else {
19+
upd();
20+
j = j + 2 | 0;
2121
console.log("incorrect");
2222
}
2323

‎tests/tests/src/test_ramification.mjs

+9-3
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,12 @@ function f(x) {
3333
function f2(x) {
3434
let v = 0;
3535
let y;
36-
v = 1;
3736
if (x.TAG === "A") {
37+
v = 1;
3838
let z = 33;
3939
y = z + 3 | 0;
4040
} else {
41+
v = 1;
4142
let z$1 = 33;
4243
y = z$1 + 4 | 0;
4344
}
@@ -47,8 +48,13 @@ function f2(x) {
4748
function f3(x) {
4849
let v = 0;
4950
let y;
50-
v = 1;
51-
y = x.TAG === "A" ? 3 : 4;
51+
if (x.TAG === "A") {
52+
v = 1;
53+
y = 3;
54+
} else {
55+
v = 1;
56+
y = 4;
57+
}
5258
return y + 32 | 0;
5359
}
5460

0 commit comments

Comments
 (0)
Please sign in to comment.