Skip to content

Commit c62f9c2

Browse files
committed
Wasm: type analysis
1 parent 0304274 commit c62f9c2

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
@@ -1184,7 +1185,8 @@ module Generate (Target : Target_sig.S) = struct
11841185
~should_export
11851186
~warn_on_unhandled_effect
11861187
*)
1187-
~deadcode_sentinal =
1188+
~deadcode_sentinal
1189+
~types =
11881190
global_context.unit_name <- unit_name;
11891191
let p, closures = Closure_conversion.f p in
11901192
(*
@@ -1194,6 +1196,7 @@ module Generate (Target : Target_sig.S) = struct
11941196
{ live = live_vars
11951197
; in_cps
11961198
; deadcode_sentinal
1199+
; types
11971200
; blocks = p.blocks
11981201
; closures
11991202
; global_context
@@ -1300,10 +1303,12 @@ let init = G.init
13001303

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

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

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)