aboutsummaryrefslogtreecommitdiffstats
path: root/backend/Duplicateaux.ml
diff options
context:
space:
mode:
authorCyril SIX <cyril.six@kalray.eu>2020-10-27 15:57:40 +0100
committerCyril SIX <cyril.six@kalray.eu>2020-10-27 15:57:40 +0100
commit9bb6fd8219fcd4ef8da5d2b3a6d93f802fc777c3 (patch)
tree9a4cfa565cf3ca9abf32011400e3cb225e31787d /backend/Duplicateaux.ml
parentdbb5f576ced7ec3acccc08edd4ca85bb316194a2 (diff)
downloadcompcert-kvx-9bb6fd8219fcd4ef8da5d2b3a6d93f802fc777c3.tar.gz
compcert-kvx-9bb6fd8219fcd4ef8da5d2b3a6d93f802fc777c3.zip
Splitting Duplicate in several passes
Diffstat (limited to 'backend/Duplicateaux.ml')
-rw-r--r--backend/Duplicateaux.ml34
1 files changed, 20 insertions, 14 deletions
diff --git a/backend/Duplicateaux.ml b/backend/Duplicateaux.ml
index eb9f42e0..2b13ab5d 100644
--- a/backend/Duplicateaux.ml
+++ b/backend/Duplicateaux.ml
@@ -836,42 +836,48 @@ let unroll_inner_loops_body f code revmap =
(!code', !revmap')
end
-let duplicate_aux f =
- (* initializing *)
+let static_predict f =
let entrypoint = f.fn_entrypoint in
let code = f.fn_code in
let revmap = make_identity_ptree code in
-
- (* static prediction *)
let code =
if !Clflags.option_fpredict then
update_directions code entrypoint
else code in
+ let code =
+ if !Clflags.option_fpredict then
+ invert_iconds code
+ else code in
+ ((code, entrypoint), revmap)
- (* unroll single *)
+let unroll_single f =
+ let entrypoint = f.fn_entrypoint in
+ let code = f.fn_code in
+ let revmap = make_identity_ptree code in
let (code, revmap) =
if !Clflags.option_funrollsingle > 0 then
unroll_inner_loops_single f code revmap
else (code, revmap) in
+ ((code, entrypoint), revmap)
- (* unroll body *)
+let unroll_body f =
+ let entrypoint = f.fn_entrypoint in
+ let code = f.fn_code in
+ let revmap = make_identity_ptree code in
let (code, revmap) =
if !Clflags.option_funrollbody > 0 then
unroll_inner_loops_body f code revmap
else (code, revmap) in
+ ((code, entrypoint), revmap)
- (* static prediction bis *)
- let code =
- if !Clflags.option_fpredict then
- invert_iconds code
- else code in
-
- (* tail duplication *)
+let tail_duplicate f =
+ let entrypoint = f.fn_entrypoint in
+ let code = f.fn_code in
+ let revmap = make_identity_ptree code in
let (code, revmap) =
if !Clflags.option_ftailduplicate > 0 then
let traces = select_traces code entrypoint in
let preds = get_predecessors_rtl code in
superblockify_traces code preds traces revmap
else (code, revmap) in
-
((code, entrypoint), revmap)