aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2020-03-15 00:00:33 +0100
committerDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2020-03-15 00:00:33 +0100
commit192d5f379b3f1efa6f12b45af36f7cfea21d6d50 (patch)
tree1c60908b258159a96ac1c55f5aef4d89f4594cae
parent9e706de1eb25d6d6dbeb1eb2ced71e48523a499f (diff)
downloadcompcert-kvx-192d5f379b3f1efa6f12b45af36f7cfea21d6d50.tar.gz
compcert-kvx-192d5f379b3f1efa6f12b45af36f7cfea21d6d50.zip
more inlining
-rw-r--r--backend/Inliningaux.ml9
-rw-r--r--driver/Clflags.ml1
-rw-r--r--driver/Driver.ml2
3 files changed, 9 insertions, 3 deletions
diff --git a/backend/Inliningaux.ml b/backend/Inliningaux.ml
index d58704ca..cf308962 100644
--- a/backend/Inliningaux.ml
+++ b/backend/Inliningaux.ml
@@ -17,7 +17,8 @@ open Maps
open Op
open Ordered
open! RTL
-
+open Camlcoq
+
module PSet = Make(OrderedPositive)
type inlining_info = {
@@ -83,13 +84,15 @@ let static_called_once id io =
else
false
-(* To be considered: heuristics based on size of function? *)
+(* D. Monniaux: attempt at heuristic based on size *)
+let small_enough (f : coq_function) =
+ P.to_int (RTL.max_pc_function f) <= !Clflags.option_inline_auto_threshold
let should_inline (io: inlining_info) (id: ident) (f: coq_function) =
if !Clflags.option_finline then begin
match C2C.atom_inline id with
| C2C.Inline -> true
| C2C.Noinline -> false
- | C2C.No_specifier -> static_called_once id io
+ | C2C.No_specifier -> static_called_once id io || small_enough f
end else
false
diff --git a/driver/Clflags.ml b/driver/Clflags.ml
index 79c0bce0..ee5e9eeb 100644
--- a/driver/Clflags.ml
+++ b/driver/Clflags.ml
@@ -81,3 +81,4 @@ let option_faddx = ref false
let option_fcoalesce_mem = ref true
let option_fforward_moves = ref true
let option_all_loads_nontrap = ref false
+let option_inline_auto_threshold = ref 30
diff --git a/driver/Driver.ml b/driver/Driver.ml
index 43aedf50..01451e07 100644
--- a/driver/Driver.ml
+++ b/driver/Driver.ml
@@ -190,6 +190,7 @@ Processing options:
-Os Optimize for code size in preference to code speed
-Obranchless Optimize to generate fewer conditional branches; try to produce
branch-free instruction sequences as much as possible
+ -finline-auto-threshold n Inline functions under size n
-ftailcalls Optimize function calls in tail position [on]
-fconst-prop Perform global constant propagation [on]
-ffloat-const-prop <n> Control constant propagation of floats
@@ -322,6 +323,7 @@ let cmdline_actions =
_Regexp "-O[123]$", Unit (set_all optimization_options);
Exact "-Os", Set option_Osize;
Exact "-Obranchless", Set option_Obranchless;
+ Exact "-finline-auto-threshold", Integer (fun n -> option_inline_auto_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);