diff options
author | Cyril SIX <cyril.six@kalray.eu> | 2020-10-27 15:57:40 +0100 |
---|---|---|
committer | Cyril SIX <cyril.six@kalray.eu> | 2020-10-27 15:57:40 +0100 |
commit | 9bb6fd8219fcd4ef8da5d2b3a6d93f802fc777c3 (patch) | |
tree | 9a4cfa565cf3ca9abf32011400e3cb225e31787d /backend/Duplicateaux.ml | |
parent | dbb5f576ced7ec3acccc08edd4ca85bb316194a2 (diff) | |
download | compcert-kvx-9bb6fd8219fcd4ef8da5d2b3a6d93f802fc777c3.tar.gz compcert-kvx-9bb6fd8219fcd4ef8da5d2b3a6d93f802fc777c3.zip |
Splitting Duplicate in several passes
Diffstat (limited to 'backend/Duplicateaux.ml')
-rw-r--r-- | backend/Duplicateaux.ml | 34 |
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) |