aboutsummaryrefslogtreecommitdiffstats
path: root/driver
diff options
context:
space:
mode:
authorDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2020-04-23 14:25:31 +0200
committerDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2020-04-23 14:25:31 +0200
commit7b0d7a74ccfaf5843c41e2844e02e94e9a76bfd8 (patch)
tree3edc201591691eac531aa12a98a5aa08ecc0398b /driver
parent67290187fff3f813412059c6bfed69015c95c890 (diff)
downloadcompcert-kvx-7b0d7a74ccfaf5843c41e2844e02e94e9a76bfd8.tar.gz
compcert-kvx-7b0d7a74ccfaf5843c41e2844e02e94e9a76bfd8.zip
CSE3 across calls
Diffstat (limited to 'driver')
-rw-r--r--driver/Clflags.ml3
-rw-r--r--driver/Compopts.v5
-rw-r--r--driver/Driver.ml4
3 files changed, 9 insertions, 3 deletions
diff --git a/driver/Clflags.ml b/driver/Clflags.ml
index b9828f15..9d868de3 100644
--- a/driver/Clflags.ml
+++ b/driver/Clflags.ml
@@ -25,10 +25,11 @@ let option_ffpu = ref true
let option_ffloatconstprop = ref 2
let option_ftailcalls = ref true
let option_fconstprop = ref true
-let option_fcse = ref false
+let option_fcse = ref true
let option_fcse2 = ref false
let option_fcse3 = ref true
let option_fcse3_alias_analysis = ref true
+let option_fcse3_across_calls = ref false
let option_fredundancy = ref true
let option_fduplicate = ref (-1)
let option_finvertcond = ref true
diff --git a/driver/Compopts.v b/driver/Compopts.v
index 5acd2640..fb3481e2 100644
--- a/driver/Compopts.v
+++ b/driver/Compopts.v
@@ -45,9 +45,12 @@ Parameter optim_CSE2: unit -> bool.
(** Flag -fcse3. For DMonniaux's common subexpression elimination. *)
Parameter optim_CSE3: unit -> bool.
-(** Flag -fcse3-alias-analysis. For DMonniaux's common subexpression elimination. *)
+(** Flag -fcse3-alias-analysis. For DMonniaux's common subexpression elimination. Perform a simple alias analysis. *)
Parameter optim_CSE3_alias_analysis: unit -> bool.
+(** Flag -fcse3-across-calls. For DMonniaux's common subexpression elimination. Propagate information across function calls (may increase register pressure). *)
+Parameter optim_CSE3_across_calls: unit -> bool.
+
(** Flag -fmove-loop-invariants. *)
Parameter optim_move_loop_invariants: unit -> bool.
diff --git a/driver/Driver.ml b/driver/Driver.ml
index 4e4bab16..ea9af62e 100644
--- a/driver/Driver.ml
+++ b/driver/Driver.ml
@@ -195,10 +195,11 @@ Processing options:
-fconst-prop Perform global constant propagation [on]
-ffloat-const-prop <n> Control constant propagation of floats
(<n>=0: none, <n>=1: limited, <n>=2: full; default is full)
- -fcse Perform common subexpression elimination [off]
+ -fcse Perform common subexpression elimination [on]
-fcse2 Perform inter-loop common subexpression elimination [off]
-fcse3 Perform inter-loop common subexpression elimination [on]
-fcse3-alias-analysis Perform inter-loop common subexpression elimination with alias analysis [on]
+ -fcse3-across-calls Propagate CSE3 information across function calls [off]
-fmove-loop-invariants Perform loop-invariant code motion [off]
-fredundancy Perform redundancy elimination [on]
-fpostpass Perform postpass scheduling (only for K1 architecture) [on]
@@ -403,6 +404,7 @@ let cmdline_actions =
@ f_opt "cse2" option_fcse2
@ f_opt "cse3" option_fcse3
@ f_opt "cse3-alias-analysis" option_fcse3_alias_analysis
+ @ f_opt "cse3-across-calls" option_fcse3_across_calls
@ f_opt "move-loop-invariants" option_fmove_loop_invariants
@ f_opt "redundancy" option_fredundancy
@ f_opt "postpass" option_fpostpass