aboutsummaryrefslogtreecommitdiffstats
path: root/kvx
diff options
context:
space:
mode:
authorDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2020-07-10 17:25:44 +0200
committerDavid Monniaux <david.monniaux@univ-grenoble-alpes.fr>2020-07-10 17:25:44 +0200
commit2ff09832c0c3a2c50d51ec90566ad74e093ab3da (patch)
tree2142b2552a8068b2764076e562fa2ee2107bf2b5 /kvx
parent14886020bda9c5461d488ff316b95864f1e1789c (diff)
downloadcompcert-kvx-2ff09832c0c3a2c50d51ec90566ad74e093ab3da.tar.gz
compcert-kvx-2ff09832c0c3a2c50d51ec90566ad74e093ab3da.zip
trapping loads are irreversible
Diffstat (limited to 'kvx')
-rw-r--r--kvx/lib/PrepassSchedulingOracle.ml1
-rw-r--r--kvx/lib/RTLpathScheduleraux.ml2
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 ->