diff options
author | Cyril SIX <cyril.six@kalray.eu> | 2020-03-30 15:24:40 +0200 |
---|---|---|
committer | Cyril SIX <cyril.six@kalray.eu> | 2020-03-30 15:24:40 +0200 |
commit | b52ebb5aaaf9838310d1b7e68b9198c388cab74a (patch) | |
tree | ffe1f26edf58fa24794a129ad4547575c7bac254 /backend/Duplicateaux.ml | |
parent | 36589dd043392d4d8672a82f24975371c102c286 (diff) | |
download | compcert-kvx-b52ebb5aaaf9838310d1b7e68b9198c388cab74a.tar.gz compcert-kvx-b52ebb5aaaf9838310d1b7e68b9198c388cab74a.zip |
Fixing heuristics too sure of themselves
Diffstat (limited to 'backend/Duplicateaux.ml')
-rw-r--r-- | backend/Duplicateaux.ml | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/backend/Duplicateaux.ml b/backend/Duplicateaux.ml index 54d60d24..28ad4266 100644 --- a/backend/Duplicateaux.ml +++ b/backend/Duplicateaux.ml @@ -159,8 +159,11 @@ let do_call_heuristic code cond ifso ifnot is_loop_header = let predicate n = (function | Icall _ -> true | _ -> false) @@ get_some @@ PTree.get n code - in if (look_ahead code ifso is_loop_header predicate) then Some false - else if (look_ahead code ifnot is_loop_header predicate) then Some true + in let ifso_call = look_ahead code ifso is_loop_header predicate + in let ifnot_call = look_ahead code ifnot is_loop_header predicate + in if ifso_call && ifnot_call then None + else if ifso_call then Some false + else if ifnot_call then Some true else None end @@ -176,8 +179,11 @@ let do_return_heuristic code cond ifso ifnot is_loop_header = let predicate n = (function | Ireturn _ -> true | _ -> false) @@ get_some @@ PTree.get n code - in if (look_ahead code ifso is_loop_header predicate) then Some false - else if (look_ahead code ifnot is_loop_header predicate) then Some true + in let ifso_return = look_ahead code ifso is_loop_header predicate + in let ifnot_return = look_ahead code ifnot is_loop_header predicate + in if ifso_return && ifnot_return then None + else if ifso_return then Some false + else if ifnot_return then Some true else None end @@ -187,8 +193,11 @@ let do_store_heuristic code cond ifso ifnot is_loop_header = let predicate n = (function | Istore _ -> true | _ -> false) @@ get_some @@ PTree.get n code - in if (look_ahead code ifso is_loop_header predicate) then Some false - else if (look_ahead code ifnot is_loop_header predicate) then Some true + in let ifso_store = look_ahead code ifso is_loop_header predicate + in let ifnot_store = look_ahead code ifnot is_loop_header predicate + in if ifso_store && ifnot_store then None + else if ifso_store then Some false + else if ifnot_store then Some true else None end |