@@ -92,47 +92,37 @@ let ( +> ) f g x = g (f x)
9292
9393let map_fst f (x , y , z ) = f x, y, z
9494
95- let effects ~deadcode_sentinal p =
95+ let effects_and_exact_calls ~deadcode_sentinal (profile : Profile.t ) p =
96+ let fast =
97+ match Config. effects () , profile with
98+ | (`Cps | `Double_translation ), _ -> false
99+ | _ , (O2 | O3 ) -> false
100+ | _ , O1 -> true
101+ in
102+ let info = Global_flow. f ~fast p in
103+ let p, live_vars =
104+ if Config.Flag. globaldeadcode () && Config.Flag. deadcode ()
105+ then
106+ let p = Global_deadcode. f p ~deadcode_sentinal info in
107+ Deadcode. f p
108+ else Deadcode. f p
109+ in
96110 match Config. effects () with
97111 | `Cps | `Double_translation ->
98112 if debug () then Format. eprintf " Effects...@." ;
99- let p, live_vars = Deadcode. f p in
100- let info = Global_flow. f ~fast: false p in
101- let p, live_vars =
102- if Config.Flag. globaldeadcode ()
103- then
104- let p = Global_deadcode. f p ~deadcode_sentinal info in
105- Deadcode. f p
106- else p, live_vars
107- in
108- p
109- |> Effects. f ~flow_info: info ~live_vars
113+ Effects. f ~flow_info: info ~live_vars p
110114 |> map_fst
111115 (match Config. target () with
112116 | `Wasm -> Fun. id
113117 | `JavaScript -> Lambda_lifting. f)
114118 | `Disabled | `Jspi ->
119+ let p =
120+ Specialize. f ~function_arity: (fun f -> Global_flow. function_arity info f) p
121+ in
115122 ( p
116123 , (Code.Var.Set. empty : Effects.trampolined_calls )
117124 , (Code.Var.Set. empty : Effects.in_cps ) )
118125
119- let exact_calls (profile : Profile.t ) ~deadcode_sentinal p =
120- match Config. effects () with
121- | `Disabled | `Jspi ->
122- let fast =
123- match profile with
124- | O2 | O3 -> false
125- | O1 -> true
126- in
127- let info = Global_flow. f ~fast p in
128- let p =
129- if Config.Flag. globaldeadcode () && Config.Flag. deadcode ()
130- then Global_deadcode. f p ~deadcode_sentinal info
131- else p
132- in
133- Specialize. f ~function_arity: (fun f -> Global_flow. function_arity info f) p
134- | `Cps | `Double_translation -> p
135-
136126let print p =
137127 if debug () then Code.Print. program Format. err_formatter (fun _ _ -> " " ) p;
138128 p
@@ -632,8 +622,7 @@ let optimize ~profile p =
632622 | O2 -> o2
633623 | O3 -> o3)
634624 +> specialize_js_once_after
635- +> exact_calls ~deadcode_sentinal profile
636- +> effects ~deadcode_sentinal
625+ +> effects_and_exact_calls ~deadcode_sentinal profile
637626 +> map_fst
638627 (match Config. target () , Config. effects () with
639628 | `JavaScript , `Disabled -> Generate_closure. f
0 commit comments