Skip to content

Commit 56964db

Browse files
committed
More invariant
1 parent 852540e commit 56964db

File tree

3 files changed

+16
-8
lines changed

3 files changed

+16
-8
lines changed

compiler/lib/generate_closure.ml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -323,8 +323,11 @@ let f p : Code.program =
323323
(fun pc _ (blocks, free_pc) ->
324324
(* make sure we have the latest version *)
325325
let block = Addr.Map.find pc blocks in
326-
let free_pc, blocks, body = rewrite_closures free_pc blocks block.body in
327-
Addr.Map.add pc { block with body } blocks, free_pc)
326+
if List.exists block.body ~f:(function (Let (_, Closure _)) -> true | _ -> false)
327+
then
328+
let free_pc, blocks, body = rewrite_closures free_pc blocks block.body in
329+
Addr.Map.add pc { block with body } blocks, free_pc
330+
else blocks, free_pc)
328331
p.blocks
329332
(p.blocks, p.free_pc)
330333
in

compiler/lib/lambda_lifting.ml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -225,15 +225,16 @@ let rec traverse var_depth (program, functions) pc depth limit =
225225
program.blocks
226226
(program, functions)
227227

228-
let f program =
228+
let f p =
229229
let t = Timer.make () in
230230
let nv = Var.count () in
231231
let var_depth = Array.make nv (-1) in
232-
let program, functions =
232+
let p, functions =
233233
let threshold = Config.Param.lambda_lifting_threshold () in
234234
let baseline = Config.Param.lambda_lifting_baseline () in
235-
traverse var_depth (program, []) program.start 0 (baseline + threshold)
235+
traverse var_depth (p, []) p.start 0 (baseline + threshold)
236236
in
237237
assert (List.is_empty functions);
238238
if Debug.find "times" () then Format.eprintf " lambda lifting: %a@." Timer.print t;
239-
program
239+
Code.invariant p;
240+
p

compiler/lib/specialize_js.ml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,9 @@ let f_once_before p =
448448
let blocks =
449449
Addr.Map.map (fun block -> { block with Code.body = loop [] block.body }) p.blocks
450450
in
451-
{ p with blocks }
451+
let p = { p with blocks } in
452+
Code.invariant p;
453+
p
452454

453455
let rec args_equal xs ys =
454456
match xs, ys with
@@ -491,5 +493,7 @@ let f_once_after p =
491493
(fun block -> { block with Code.body = List.map block.body ~f })
492494
p.blocks
493495
in
494-
Deadcode.remove_unused_blocks { p with blocks }
496+
let p = Deadcode.remove_unused_blocks { p with blocks } in
497+
Code.invariant p;
498+
p
495499
else p

0 commit comments

Comments
 (0)