@@ -2,97 +2,3 @@ open Util
22module CD = Coverage. Domain
33module L = Logger
44module D = Domain
5-
6- let run_opt llm =
7- let h = ALlvm. hash_llm llm in
8- let filename = Format. sprintf " id:%010d.ll" h in
9- let filename = ALlvm. save_ll ! Config. out_dir filename llm in
10- let module Opt = Oracle. Optimizer in
11- let res =
12- Opt. run ~passes: ! Config. optimizer_passes ~mtriple: ! Config. mtriple filename
13- in
14- AUtil. clean filename;
15- match res with
16- | Error Opt. File_not_found ->
17- Format. eprintf " Coverage not generated: %s@." filename;
18- None
19- | Error _ -> None
20- | Assert _ -> None
21- | Ok lines -> Some (h, lines)
22-
23- let can_optimize file =
24- let module Opt = Oracle. Optimizer in
25- match
26- Opt. run ~passes: ! Config. optimizer_passes ~mtriple: ! Config. mtriple file
27- with
28- | Error Non_zero_exit | Error Hang ->
29- L. info " %s cannot be optimized" file;
30- AUtil. name_opted_ver file |> AUtil. clean;
31- false
32- | Assert _ ->
33- L. info " Assertion failed: %s" file;
34- AUtil. name_opted_ver file |> AUtil. clean;
35- false
36- | Ok _ | Error File_not_found ->
37- L. info " %s can be optimized" file;
38- AUtil. name_opted_ver file |> AUtil. clean;
39- true
40-
41- let collect_cleaned_seeds llctx seed_dir =
42- assert (Sys. file_exists seed_dir && Sys. is_directory seed_dir);
43-
44- let seed_files = Sys. readdir seed_dir |> Array. to_list in
45-
46- let optimizable_seeds =
47- seed_files
48- |> List. map (Filename. concat seed_dir)
49- |> List. filter can_optimize
50- |> List. filter_map (fun path ->
51- match ALlvm. read_ll llctx path with
52- | Error _ -> None
53- | Ok llm -> Some (path, llm))
54- in
55- if optimizable_seeds = [] then (
56- L. info " No optimizable seeds found." ;
57- exit 1 );
58-
59- let cleaned_seeds =
60- optimizable_seeds
61- |> List. filter (fun (_path , llm ) -> Prep. check_llm_for_mutation llm)
62- (* |> List.filter_map (fun (path, llm) ->
63- ALlvm.clean_module_data llm;
64- Prep.clean_llm llctx true llm |> Option.map (fun llm -> (path, llm))) *)
65- in
66-
67- (* cleaned_seeds can be cached since the collection is independent of target_path *)
68- if cleaned_seeds = [] then (
69- L. info " No cleaned seeds found." ;
70- exit 1 );
71-
72- cleaned_seeds
73-
74- let parse_seed_filename filename =
75- let filename = Filename. chop_extension filename in
76- (* covers:true -> true *)
77- let parse_covers s =
78- let colon = String. index s ':' in
79- String. sub s (colon + 1 ) (String. length s - colon - 1 )
80- in
81-
82- (* score:4.500 -> 4.500 *)
83- let parse_score s =
84- let colon = String. index s ':' in
85- String. sub s (colon + 1 ) (String. length s - colon - 1 )
86- in
87- match String. split_on_char ',' filename with
88- | [ _date; _id; score; covers ] ->
89- let covers = parse_covers covers in
90- let score = parse_score score in
91- Ok (covers, score)
92- | [ _date; _id; _src; score; covers ] ->
93- let covers = parse_covers covers in
94- let score = parse_score score in
95- Ok (covers, score)
96- | lst ->
97- List. iter (Format. eprintf " %s@." ) lst;
98- Format. asprintf " Can't parse the filename: %s@." filename |> Result. error
0 commit comments