aboutsummaryrefslogtreecommitdiffstats
path: root/scheduling
diff options
context:
space:
mode:
authornicolas.nardino <nicolas.nardino@ens-lyon.fr>2021-07-28 22:04:34 +0200
committernicolas.nardino <nicolas.nardino@ens-lyon.fr>2021-07-28 22:04:34 +0200
commitf100ea0135d6d93307c9ef35ddc2423f23556955 (patch)
treea1498661249fa8643bc7270814be0d0aafb0aafe /scheduling
parentee2112a9bacc246e0434a19fc93aab335fd56ddd (diff)
downloadcompcert-kvx-f100ea0135d6d93307c9ef35ddc2423f23556955.tar.gz
compcert-kvx-f100ea0135d6d93307c9ef35ddc2423f23556955.zip
Changes heuristic for case "no instruction decreases pressure"
Diffstat (limited to 'scheduling')
-rw-r--r--scheduling/InstructionScheduler.ml21
1 files changed, 12 insertions, 9 deletions
diff --git a/scheduling/InstructionScheduler.ml b/scheduling/InstructionScheduler.ml
index 9c5c674d..d0a18e69 100644
--- a/scheduling/InstructionScheduler.ml
+++ b/scheduling/InstructionScheduler.ml
@@ -520,13 +520,15 @@ let reg_pres_scheduler (problem : problem) : solution option =
if not !Clflags.option_regpres_wait_window
then
(InstrSet.iter (fun ins ->
- if vector_less_equal usages.(ins) current_resources &&
- List.fold_left (fold_delta i) 0 mentions.(maybe) >= 0
- then result := ins
+ if vector_less_equal usages.(ins) current_resources
+ && List.fold_left (fold_delta i) 0 mentions.(maybe) >= 0
+ then (result := ins;
+ vector_subtract usages.(!result) current_resources;
+ raise Exit)
) ready;
if !result <> -1 then
- vector_subtract usages.(!result) current_resources;
- incr cnt)
+ vector_subtract usages.(!result) current_resources
+ else incr cnt)
else
(incr cnt)
);
@@ -607,6 +609,7 @@ let reg_pres_scheduler (problem : problem) : solution option =
(* DebugPrint.debug_flag := false; *)
Some times
with Exit ->
+ (* DebugPrint.debug_flag := true; *)
DebugPrint.debug "reg_pres_sched failed\n";
(* DebugPrint.debug_flag := false; *)
None
@@ -617,8 +620,8 @@ let reg_pres_scheduler (problem : problem) : solution option =
(********************************************************************)
let reg_pres_scheduler_bis (problem : problem) : solution option =
- DebugPrint.debug_flag := true;
- Printf.printf "\nNEW\n\n";
+ (* DebugPrint.debug_flag := true; *)
+ DebugPrint.debug "\nNEW\n\n";
let nr_instructions = get_nr_instructions problem in
let successors = get_successors problem
and predecessors = get_predecessors problem
@@ -803,11 +806,11 @@ let reg_pres_scheduler_bis (problem : problem) : solution option =
if target_time > !final_time then
final_time := target_time) predecessors.(nr_instructions);
times.(nr_instructions) <- !final_time;
- DebugPrint.debug_flag := false;
+ (* DebugPrint.debug_flag := false; *)
Some times
with Exit ->
DebugPrint.debug "reg_pres_sched failed\n";
- DebugPrint.debug_flag := false;
+ (* DebugPrint.debug_flag := false; *)
None
;;