diff options
author | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2020-07-10 17:25:44 +0200 |
---|---|---|
committer | David Monniaux <david.monniaux@univ-grenoble-alpes.fr> | 2020-07-10 17:25:44 +0200 |
commit | 2ff09832c0c3a2c50d51ec90566ad74e093ab3da (patch) | |
tree | 2142b2552a8068b2764076e562fa2ee2107bf2b5 /kvx | |
parent | 14886020bda9c5461d488ff316b95864f1e1789c (diff) | |
download | compcert-kvx-2ff09832c0c3a2c50d51ec90566ad74e093ab3da.tar.gz compcert-kvx-2ff09832c0c3a2c50d51ec90566ad74e093ab3da.zip |
trapping loads are irreversible
Diffstat (limited to 'kvx')
-rw-r--r-- | kvx/lib/PrepassSchedulingOracle.ml | 1 | ||||
-rw-r--r-- | kvx/lib/RTLpathScheduleraux.ml | 2 |
2 files changed, 2 insertions, 1 deletions
diff --git a/kvx/lib/PrepassSchedulingOracle.ml b/kvx/lib/PrepassSchedulingOracle.ml index 5a48924e..c1a3804f 100644 --- a/kvx/lib/PrepassSchedulingOracle.ml +++ b/kvx/lib/PrepassSchedulingOracle.ml @@ -135,6 +135,7 @@ let get_simple_dependencies (seqa : (instruction*Regset.t) array) = add_input_regs i inputs; add_output_reg i (latency_of_op op (List.length inputs)) output | Iload(trap, chunk, addressing, addr_regs, output, _) -> + (if trap=TRAP then irreversible_action i); add_input_mem i; add_input_regs i addr_regs; add_output_reg i (latency_of_load trap chunk addressing (List.length addr_regs)) output diff --git a/kvx/lib/RTLpathScheduleraux.ml b/kvx/lib/RTLpathScheduleraux.ml index 11539994..12637a9d 100644 --- a/kvx/lib/RTLpathScheduleraux.ml +++ b/kvx/lib/RTLpathScheduleraux.ml @@ -112,7 +112,7 @@ let schedule_superblock sb code = let nr_instr = Array.length sb.instructions in let trailer_length = match PTree.get (sb.instructions.(nr_instr-1)) code with - | Some (Ireturn _ | Itailcall _ | Ijumptable _) -> 1 + | Some (Ireturn _ | Itailcall _ | Ijumptable _ | Icall _) -> 1 | _ -> 0 in match PrepassSchedulingOracle.schedule_sequence (Array.map (fun i -> |