@@ -41,29 +41,34 @@ let log_new_points new_points =
4141 L. debug " No new coverage points"
4242 else L. debug " New coverage points"
4343
44- let save_covering_mutant parent_llm seed =
44+ let save_if_cover parent_llm seed =
4545 if seed.Seedpool.CfgSeed. covers then
4646 let seed_name =
4747 Seedpool.Seed. name ~parent: (ALlvm. hash_llm parent_llm) seed
4848 in
4949 ALlvm. save_ll ! Config. covers_dir seed_name seed.llm |> ignore
5050
51+ let compute_coverage_and_seed llm lines importants covset node_tbl distmap =
52+ let is_in_slice addr = is_in_slice addr node_tbl distmap in
53+ let trace = lines |> List. map int_of_string |> List. filter is_in_slice in
54+ let cov = trace |> AUtil. pairs |> Coverage.EdgeCoverage. of_list in
55+ let new_points = Coverage.EdgeCoverage. diff cov covset in
56+ let new_seed = Seedpool.Seed. make llm trace importants node_tbl distmap in
57+ (new_seed, new_points)
58+
5159let evaluate_mutant parent_llm llm importants covset node_tbl distmap =
5260 let optim_res, _ = measure_optimizer_coverage llm in
53- L. debug " Mutant: " ;
54- L. debug " %s" (ALlvm. string_of_llmodule llm);
61+ L. debug " Mutant:\n %s" (ALlvm. string_of_llmodule llm);
5562 match optim_res with
56- | Error _ -> None
5763 | Ok lines ->
58- let is_in_slice addr = is_in_slice addr node_tbl distmap in
59- let trace = lines |> List. map int_of_string |> List. filter is_in_slice in
60- let cov = trace |> AUtil. pairs |> Coverage.EdgeCoverage. of_list in
61- let new_points = Coverage.EdgeCoverage. diff cov covset in
64+ let seed, new_points =
65+ compute_coverage_and_seed llm lines importants covset node_tbl distmap
66+ in
6267 log_new_points new_points;
63- let new_seed = Seedpool.Seed. make llm trace importants node_tbl distmap in
64- save_covering_mutant parent_llm new_seed;
68+ save_if_cover parent_llm seed;
6569 let interesting = not (Coverage.EdgeCoverage. is_empty new_points) in
66- if interesting then Some new_seed else None
70+ if interesting then Some seed else None
71+ | Error _ -> None
6772 | Assert _ -> None
6873
6974let change_suffix filename suffix =
@@ -127,19 +132,22 @@ let gen_mutants mutator node_tbl distmap energy llm pool progress =
127132 in
128133 aux energy pool progress
129134
135+ let save_importants seed =
136+ AUtil. clean " importants" ;
137+ Out_channel. with_open_text " importants" (fun line ->
138+ Printf. fprintf line " %s" seed.Seedpool.CfgSeed. importants)
139+
130140let run seed_pool node_tbl distmap llctx llset progress =
131141 (* generate and deduplicate seeds *)
132142 let mutator = mutate_seed llctx llset in
133143
134- let rec campaign pool (progress : Progress.t ) =
135- let seed, pool_popped = Seedpool. pop pool in
136- let energy = Seedpool.Seed. get_energy seed in
137- let llm = Seedpool.Seed. llmodule seed in
138- AUtil. clean " importants" ;
139- Out_channel. with_open_text " importants" (fun line ->
140- Printf. fprintf line " %s" seed.importants);
141- L. debug " campaign: seed popped (energy: %d): %a" energy Seedpool.Seed. pp
142- seed;
144+ let rec campaign pool progress =
145+ let open Seedpool in
146+ let seed, pool_popped = pop pool in
147+ let energy = Seed. get_energy seed in
148+ let llm = Seed. llmodule seed in
149+ save_importants seed;
150+ L. debug " campaign: seed popped (energy: %d): %a" energy Seed. pp seed;
143151
144152 assert (energy > = 0 );
145153
0 commit comments