@@ -203,11 +203,9 @@ let compile_unit ~output_prefix ~asm_filename ~keep_asm ~obj_filename gen =
203
203
if create_asm && not keep_asm then remove_file asm_filename
204
204
)
205
205
206
- let end_gen_implementation ?toplevel ~ppf_dump
207
- (clambda : Clambda.with_constants ) =
206
+ let end_gen_implementation0 ?toplevel ~ppf_dump make_cmm =
208
207
emit_begin_assembly () ;
209
- clambda
210
- ++ Profile. record " cmm" Cmmgen. compunit
208
+ make_cmm ()
211
209
++ Profile. record " compile_phrases" (List. iter (compile_phrase ~ppf_dump ))
212
210
++ (fun () -> () );
213
211
(match toplevel with None -> () | Some f -> compile_genfuns ~ppf_dump f);
@@ -224,6 +222,10 @@ let end_gen_implementation ?toplevel ~ppf_dump
224
222
! Translmod. primitive_declarations));
225
223
emit_end_assembly ()
226
224
225
+ let end_gen_implementation ?toplevel ~ppf_dump clambda =
226
+ end_gen_implementation0 ?toplevel ~ppf_dump (fun () ->
227
+ Profile. record " cmm" Cmmgen. compunit clambda)
228
+
227
229
type middle_end =
228
230
backend :(module Backend_intf .S )
229
231
-> filename :string
@@ -249,6 +251,32 @@ let compile_implementation ?toplevel ~backend ~filename ~prefixname ~middle_end
249
251
in
250
252
end_gen_implementation ?toplevel ~ppf_dump clambda_with_constants)
251
253
254
+ type middle_end_flambda2 =
255
+ ppf_dump :Format .formatter
256
+ -> prefixname :string
257
+ -> backend :(module Flambda2__Flambda_backend_intf .S )
258
+ -> filename :string
259
+ -> module_ident :Ident .t
260
+ -> module_block_size_in_words :int
261
+ -> module_initializer :Lambda .lambda
262
+ -> Flambda2__Flambda_middle_end .middle_end_result
263
+
264
+ let compile_implementation_flambda2 ?toplevel ~backend ~filename ~prefixname
265
+ ~size :module_block_size_in_words ~module_ident ~module_initializer
266
+ ~(middle_end : middle_end_flambda2 ) ~flambda2_to_cmm ~ppf_dump
267
+ ~required_globals () =
268
+ compile_unit ~output_prefix: prefixname
269
+ ~asm_filename: (asm_filename prefixname) ~keep_asm: ! keep_asm_file
270
+ ~obj_filename: (prefixname ^ ext_obj)
271
+ (fun () ->
272
+ Ident.Set. iter Compilenv. require_global required_globals;
273
+ let middle_end_result =
274
+ middle_end ~backend ~module_block_size_in_words ~filename ~prefixname
275
+ ~ppf_dump ~module_ident ~module_initializer
276
+ in
277
+ let cmm_phrases = flambda2_to_cmm middle_end_result in
278
+ end_gen_implementation0 ?toplevel ~ppf_dump (fun () -> cmm_phrases))
279
+
252
280
let linear_gen_implementation filename =
253
281
let open Linear_format in
254
282
let linear_unit_info, _ = restore filename in
0 commit comments