aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornicolas.nardino <nicolas.nardino@ens-lyon.fr>2021-06-16 20:27:31 +0200
committernicolas.nardino <nicolas.nardino@ens-lyon.fr>2021-06-16 20:27:31 +0200
commit21278bd87e89210bcc287116f6e35fc1b52d0df2 (patch)
treee55ca3a2c3cb35c9d610cad06da3a8819e793102
parent87c82b6fcf2bf825a8c60fc6a95498aac9f826d4 (diff)
downloadcompcert-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.ml92
-rw-r--r--scheduling/RTLpathScheduleraux.ml28
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