diff options
author | nicolas.nardino <nicolas.nardino@ens-lyon.fr> | 2021-06-16 20:27:31 +0200 |
---|---|---|
committer | nicolas.nardino <nicolas.nardino@ens-lyon.fr> | 2021-06-16 20:27:31 +0200 |
commit | 21278bd87e89210bcc287116f6e35fc1b52d0df2 (patch) | |
tree | e55ca3a2c3cb35c9d610cad06da3a8819e793102 | |
parent | 87c82b6fcf2bf825a8c60fc6a95498aac9f826d4 (diff) | |
download | compcert-kvx-21278bd87e89210bcc287116f6e35fc1b52d0df2.tar.gz compcert-kvx-21278bd87e89210bcc287116f6e35fc1b52d0df2.zip |
Now working, tests show a decrease in spillage
Should still find a proper way to treat the case mentioned in earlier
commits
-rw-r--r-- | scheduling/InstructionScheduler.ml | 92 | ||||
-rw-r--r-- | scheduling/RTLpathScheduleraux.ml | 28 |
2 files changed, 61 insertions, 59 deletions
diff --git a/scheduling/InstructionScheduler.ml b/scheduling/InstructionScheduler.ml index 72222022..df8a4e4e 100644 --- a/scheduling/InstructionScheduler.ml +++ b/scheduling/InstructionScheduler.ml @@ -419,11 +419,11 @@ let reg_pres_scheduler (problem : problem) : solution option = let compare_regs i x y = let pyi = List.fold_left (fold_delta i) 0 mentions.(y) in - print_int y; - print_string " "; - print_int pyi; - print_newline (); - flush stdout; + (* print_int y; + * print_string " "; + * print_int pyi; + * print_newline (); + * flush stdout; *) let pxi = List.fold_left (fold_delta i) 0 mentions.(x) in match pyi - pxi with | 0 -> (match priorities.(y) - priorities.(x) with @@ -433,9 +433,9 @@ let reg_pres_scheduler (problem : problem) : solution option = (** t is the register class *) let sched_CSR t ready usages = - print_string "looking for max delta"; - print_newline (); - flush stdout; + (* print_string "looking for max delta"; + * print_newline (); + * flush stdout; *) let result = ref (-1) in iter (fun i -> if vector_less_equal usages.(i) current_resources @@ -445,7 +445,7 @@ let reg_pres_scheduler (problem : problem) : solution option = end in - let max_time = bound_max_time problem in + let max_time = bound_max_time problem + 5*nr_instructions in let ready = Array.make max_time InstrSet.empty in Array.iteri (fun i preds -> @@ -486,34 +486,34 @@ let reg_pres_scheduler (problem : problem) : solution option = let result = ref (-1) in try Array.iteri (fun i avlregs -> - print_string "avlregs: "; - print_int i; - print_string " "; - print_int avlregs; - print_newline (); - print_string "live regs: "; - print_int (Hashtbl.length live_regs); - print_newline (); - flush stdout; + (* print_string "avlregs: "; + * print_int i; + * print_string " "; + * print_int avlregs; + * print_newline (); + * print_string "live regs: "; + * print_int (Hashtbl.length live_regs); + * print_newline (); + * flush stdout; *) if !cnt < 5 && avlregs <= regs_thresholds.(i) then ( let maybe = InstrSet.sched_CSR i ready usages in - print_string "maybe\n"; - print_int maybe; - print_newline (); - flush stdout; - if maybe > 0 && - let delta = - List.fold_left (fold_delta i) 0 mentions.(maybe) in - print_string "delta "; - print_int delta; - print_newline (); - flush stdout; - delta - >= 0 then - (vector_subtract usages.(maybe) current_resources; - result := maybe) - else incr cnt; + (* print_string "maybe\n"; + * print_int maybe; + * print_newline (); + * flush stdout; *) + (if maybe > 0 && + let delta = + List.fold_left (fold_delta i) 0 mentions.(maybe) in + (* print_string "delta "; + * print_int delta; + * print_newline (); + * flush stdout; *) + delta > 0 + then + (vector_subtract usages.(maybe) current_resources; + result := maybe) + else incr cnt); raise Exit)) available_regs; InstrSet.iter (fun i -> if vector_less_equal usages.(i) current_resources @@ -534,10 +534,10 @@ let reg_pres_scheduler (problem : problem) : solution option = problem.instruction_usages with | -1 -> advance_time() | i -> (assert(times.(i) < 0); - (print_string "INSTR ISSUED: "; - print_int i; - print_newline (); - flush stdout; + ((* print_string "INSTR ISSUED: "; + * print_int i; + * print_newline (); + * flush stdout; *) cnt := 0; List.iter (fun (r,b) -> if b then @@ -546,18 +546,18 @@ let reg_pres_scheduler (problem : problem) : solution option = | Some (t, n) -> Hashtbl.remove counts r; if n = 1 then - (print_string "yaaaaaaaaaaaas "; - print_int (Camlcoq.P.to_int r); - print_newline (); + ((* print_string "yaaaaaaaaaaaas "; + * print_int (Camlcoq.P.to_int r); + * print_newline (); *) Hashtbl.remove live_regs r; available_regs.(t) <- available_regs.(t) + 1)) else let t = class_r r in match Hashtbl.find_opt live_regs r with - | None -> (print_string "noooooooooo "; - print_int (Camlcoq.P.to_int r); - print_newline (); + | None -> ((* print_string "noooooooooo "; + * print_int (Camlcoq.P.to_int r); + * print_newline (); *) Hashtbl.add live_regs r t; available_regs.(t) <- available_regs.(t) - 1) @@ -571,8 +571,10 @@ let reg_pres_scheduler (problem : problem) : solution option = match earliest_time instr_to with | -1 -> () | to_time -> + ((* DebugPrint.debug "TO TIME %d : %d\n" to_time + * (Array.length ready); *) ready.(to_time) - <- InstrSet.add instr_to ready.(to_time) + <- InstrSet.add instr_to ready.(to_time)) ) successors.(i); successors.(i) <- [] ) diff --git a/scheduling/RTLpathScheduleraux.ml b/scheduling/RTLpathScheduleraux.ml index 8df3edbc..f3f09954 100644 --- a/scheduling/RTLpathScheduleraux.ml +++ b/scheduling/RTLpathScheduleraux.ml @@ -146,20 +146,20 @@ let reference_counting (seqa : (instruction * Regset.t) array) retr.(i) <- [reg, true] | _ -> () ) seqa; - print_string "mentions\n"; - Array.iteri (fun i l -> - print_int i; - print_string ": ["; - List.iter (fun (r, b) -> - print_int (Camlcoq.P.to_int r); - print_string ":"; - print_string (if b then "a:" else "d"); - if b then print_int (snd (Hashtbl.find retl r)); - print_string ", " - ) l; - print_string "]\n"; - flush stdout; - ) retr; + (* print_string "mentions\n"; + * Array.iteri (fun i l -> + * print_int i; + * print_string ": ["; + * List.iter (fun (r, b) -> + * print_int (Camlcoq.P.to_int r); + * print_string ":"; + * print_string (if b then "a:" else "d"); + * if b then print_int (snd (Hashtbl.find retl r)); + * print_string ", " + * ) l; + * print_string "]\n"; + * flush stdout; + * ) retr; *) retl, retr |