@@ -319,7 +319,16 @@ let clflags_attribute_without_payload attr ~name clflags_ref =
319
319
| Some () -> clflags_ref := true
320
320
| None -> ()
321
321
end
322
-
322
+
323
+ let clflags_attribute_without_payload' attr ~name ~f =
324
+ if String. equal attr.attr_name.txt name
325
+ || String. equal attr.attr_name.txt (" ocaml." ^ name)
326
+ then begin
327
+ match parse_empty_payload attr with
328
+ | Some () -> f ()
329
+ | None -> ()
330
+ end
331
+
323
332
let clflags_attribute_with_int_payload attr ~name clflags_ref =
324
333
if String. equal attr.attr_name.txt name
325
334
|| String. equal attr.attr_name.txt (" ocaml." ^ name)
@@ -333,6 +342,14 @@ let nolabels_attribute attr =
333
342
clflags_attribute_without_payload attr
334
343
~name: " nolabels" Clflags. classic
335
344
345
+ let flambda_o3_attribute attr =
346
+ clflags_attribute_without_payload' attr
347
+ ~name: " flambda_o3"
348
+ ~f: (fun () ->
349
+ if Config. flambda then begin
350
+ Clflags. use_inlining_arguments_set Clflags. o3_arguments
351
+ end )
352
+
336
353
let inline_attribute attr =
337
354
if String. equal attr.attr_name.txt " inline"
338
355
|| String. equal attr.attr_name.txt " ocaml.inline"
@@ -363,4 +380,5 @@ let parse_standard_implementation_attributes attr =
363
380
warning_attribute attr;
364
381
nolabels_attribute attr;
365
382
inline_attribute attr;
366
- afl_inst_ratio_attribute attr
383
+ afl_inst_ratio_attribute attr;
384
+ flambda_o3_attribute attr
0 commit comments