Skip to content

Commit eb6da60

Browse files
committed
Wasm: type analysis
1 parent 73f0942 commit eb6da60

File tree

9 files changed

+507
-34
lines changed

9 files changed

+507
-34
lines changed

compiler/bin-wasm_of_ocaml/compile.ml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -245,8 +245,8 @@ let generate_prelude ~out_file =
245245
@@ fun ch ->
246246
let code, uinfo = Parse_bytecode.predefined_exceptions () in
247247
let profile = Profile.O1 in
248-
let Driver.{ program; variable_uses; in_cps; deadcode_sentinal; _ } =
249-
Driver.optimize ~profile code
248+
let Driver.{ program; variable_uses; in_cps; deadcode_sentinal; _ }, global_flow_data =
249+
Driver.optimize_for_wasm ~profile code
250250
in
251251
let context = Generate.start () in
252252
let _ =
@@ -256,6 +256,7 @@ let generate_prelude ~out_file =
256256
~live_vars:variable_uses
257257
~in_cps
258258
~deadcode_sentinal
259+
~global_flow_data
259260
program
260261
in
261262
Generate.wasm_output ch ~opt_source_map_file:None ~context;
@@ -397,8 +398,9 @@ let run
397398
check_debug one;
398399
let code = one.code in
399400
let standalone = Option.is_none unit_name in
400-
let Driver.{ program; variable_uses; in_cps; deadcode_sentinal; _ } =
401-
Driver.optimize ~profile code
401+
let Driver.{ program; variable_uses; in_cps; deadcode_sentinal; _ }, global_flow_data
402+
=
403+
Driver.optimize_for_wasm ~profile code
402404
in
403405
let context = Generate.start () in
404406
let toplevel_name, generated_js =
@@ -408,6 +410,7 @@ let run
408410
~live_vars:variable_uses
409411
~in_cps
410412
~deadcode_sentinal
413+
~global_flow_data
411414
program
412415
in
413416
if standalone then Generate.add_start_function ~context toplevel_name;

compiler/lib-wasm/generate.ml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ module Generate (Target : Target_sig.S) = struct
3636
{ live : int array
3737
; in_cps : Effects.in_cps
3838
; deadcode_sentinal : Var.t
39+
; types : Typing.typ Var.Tbl.t [@warning "-69"]
3940
; blocks : block Addr.Map.t
4041
; closures : Closure_conversion.closure Var.Map.t
4142
; global_context : Code_generation.context
@@ -1183,7 +1184,8 @@ module Generate (Target : Target_sig.S) = struct
11831184
~should_export
11841185
~warn_on_unhandled_effect
11851186
*)
1186-
~deadcode_sentinal =
1187+
~deadcode_sentinal
1188+
~types =
11871189
global_context.unit_name <- unit_name;
11881190
let p, closures = Closure_conversion.f p in
11891191
(*
@@ -1193,6 +1195,7 @@ module Generate (Target : Target_sig.S) = struct
11931195
{ live = live_vars
11941196
; in_cps
11951197
; deadcode_sentinal
1198+
; types
11961199
; blocks = p.blocks
11971200
; closures
11981201
; global_context
@@ -1299,10 +1302,12 @@ let init = G.init
12991302

13001303
let start () = make_context ~value_type:Gc_target.Type.value
13011304

1302-
let f ~context ~unit_name p ~live_vars ~in_cps ~deadcode_sentinal =
1305+
let f ~context ~unit_name p ~live_vars ~in_cps ~deadcode_sentinal ~global_flow_data =
1306+
let state, info = global_flow_data in
1307+
let types = Typing.f ~state ~info ~deadcode_sentinal p in
13031308
let t = Timer.make () in
13041309
let p = fix_switch_branches p in
1305-
let res = G.f ~context ~unit_name ~live_vars ~in_cps ~deadcode_sentinal p in
1310+
let res = G.f ~context ~unit_name ~live_vars ~in_cps ~deadcode_sentinal ~types p in
13061311
if times () then Format.eprintf " code gen.: %a@." Timer.print t;
13071312
res
13081313

compiler/lib-wasm/generate.mli

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ val f :
2727
-> live_vars:int array
2828
-> in_cps:Effects.in_cps
2929
-> deadcode_sentinal:Code.Var.t
30+
-> global_flow_data:Global_flow.state * Global_flow.info
3031
-> Wasm_ast.var * (string * Javascript.expression) list
3132

3233
val add_start_function : context:Code_generation.context -> Wasm_ast.var -> unit

0 commit comments

Comments
 (0)