aboutsummaryrefslogtreecommitdiffstats
path: root/driver
diff options
context:
space:
mode:
authorSylvain Boulmé <sylvain.boulme@univ-grenoble-alpes.fr>2021-07-24 11:42:09 +0200
committerSylvain Boulmé <sylvain.boulme@univ-grenoble-alpes.fr>2021-07-24 11:42:09 +0200
commita4570fed198034e535d0d6d99e23cfbb1d40b926 (patch)
treee4e5a9dc845fc0972622ae05fd9084234ed9a44d /driver
parent95f918c38b1e59f40ae7af455ec2c6746289375e (diff)
parentb5c4192c73d7b02e0c90354e26b35a84ee141083 (diff)
downloadcompcert-kvx-a4570fed198034e535d0d6d99e23cfbb1d40b926.tar.gz
compcert-kvx-a4570fed198034e535d0d6d99e23cfbb1d40b926.zip
Merge branch 'kvx-work' into rtl-tunneling
Diffstat (limited to 'driver')
-rw-r--r--driver/Clflags.ml4
-rw-r--r--driver/Driver.ml14
2 files changed, 12 insertions, 6 deletions
diff --git a/driver/Clflags.ml b/driver/Clflags.ml
index fa17c2d9..25bd2c78 100644
--- a/driver/Clflags.ml
+++ b/driver/Clflags.ml
@@ -51,7 +51,7 @@ let option_flooprotate = ref 0 (* rotate the innermost loops to have the conditi
let option_mtune = ref ""
let option_fprepass = ref true
-let option_fprepass_sched = ref "list"
+let option_fprepass_sched = ref "regpres"
let option_fpostpass = ref true
let option_fpostpass_sched = ref "list"
@@ -115,4 +115,6 @@ let option_inline_auto_threshold = ref 0
let option_profile_arcs = ref false
let option_fbranch_probabilities = ref true
let option_debug_compcert = ref 0
+let option_regpres_threshold = ref 2
+let option_regpres_wait_window = ref false
let main_function_name = ref "main"
diff --git a/driver/Driver.ml b/driver/Driver.ml
index 7192ba4b..3f5a4bd9 100644
--- a/driver/Driver.ml
+++ b/driver/Driver.ml
@@ -210,7 +210,9 @@ Processing options:
-mtune= Type of CPU (for scheduling on some architectures)
-fprepass Perform prepass scheduling (only on some architectures) [on]
-fprepass= <optim> Perform postpass scheduling with the specified optimization [list]
- (<optim>=list: list scheduling, <optim>=revlist: reverse list scheduling, <optim>=zigzag: zigzag scheduling, <optim>=ilp: ILP, <optim>=greedy: just packing bundles)
+ (<optim>=list: list scheduling, <optim>=revlist: reverse list scheduling, <optim>=regpres: list scheduling aware of register pressure, <optim>=regpres_bis: variant of regpres, <optim>=zigzag: zigzag scheduling, <optim>=ilp: ILP, <optim>=greedy: just packing bundles)
+ -regpres-threshold n With `-fprepass= regpres`, set threshold value for number of free registers before trying to decrease register pressure
+ -fregpres-wait-window When register pressure is high, use a 5-cycle waiting window instead of scheduling short paths first (default no)
-fpostpass Perform postpass scheduling (only for K1 architecture) [on]
-fpostpass= <optim> Perform postpass scheduling with the specified optimization [list]
(<optim>=list: list scheduling, <optim>=ilp: ILP, <optim>=greedy: just packing bundles)
@@ -296,9 +298,9 @@ let num_input_files = ref 0
let cmdline_actions =
let f_opt name ref =
[Exact("-f" ^ name), Set ref; Exact("-fno-" ^ name), Unset ref] in
- let f_opt_str name ref strref =
+ let f_opt_str name default ref strref =
[Exact("-f" ^ name ^ "="), String
- (fun s -> (strref := (if s == "" then "list" else s)); ref := true)
+ (fun s -> (strref := (if s == "" then default else s)); ref := true)
] in
let f_str name strref default =
[Exact("-f" ^ name ^ "="), String
@@ -342,6 +344,7 @@ let cmdline_actions =
Exact "-fprofile-use=", String (fun s -> Profilingaux.load_profiling_info s);
Exact "-finline-auto-threshold", Integer (fun n -> option_inline_auto_threshold := n);
Exact "-debug-compcert", Integer (fun n -> option_debug_compcert := n);
+ Exact "-regpres-threshold", Integer (fun n -> option_regpres_threshold := n);
Exact "-fsmall-data", Integer(fun n -> option_small_data := n);
Exact "-fsmall-const", Integer(fun n -> option_small_const := n);
Exact "-ffloat-const-prop", Integer(fun n -> option_ffloatconstprop := n);
@@ -424,6 +427,7 @@ let cmdline_actions =
@ f_opt "redundancy" option_fredundancy
@ [ Exact "-mtune", String (fun s -> option_mtune := s) ]
@ f_opt "prepass" option_fprepass
+ @ f_opt "regpres-wait-window" option_regpres_wait_window
@ f_opt "postpass" option_fpostpass
@ [ Exact "-ftailduplicate", Integer (fun n -> option_ftailduplicate := n) ]
@ f_opt "predict" option_fpredict
@@ -431,8 +435,8 @@ let cmdline_actions =
@ [ Exact "-funrollbody", Integer (fun n -> option_funrollbody := n) ]
@ [ Exact "-flooprotate", Integer (fun n -> option_flooprotate := n) ]
@ f_opt "tracelinearize" option_ftracelinearize
- @ f_opt_str "prepass" option_fprepass option_fprepass_sched
- @ f_opt_str "postpass" option_fpostpass option_fpostpass_sched
+ @ f_opt_str "prepass" "regpress" option_fprepass option_fprepass_sched
+ @ f_opt_str "postpass" "list" option_fpostpass option_fpostpass_sched
@ f_opt "inline" option_finline
@ f_opt "inline-functions-called-once" option_finline_functions_called_once
@ f_opt "globaladdrtmp" option_fglobaladdrtmp