diff options
-rw-r--r-- | scheduling/MyRTLpathScheduleraux.ml | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/scheduling/MyRTLpathScheduleraux.ml b/scheduling/MyRTLpathScheduleraux.ml index 2cf58d2e..7dcb147c 100644 --- a/scheduling/MyRTLpathScheduleraux.ml +++ b/scheduling/MyRTLpathScheduleraux.ml @@ -1428,9 +1428,9 @@ let scheduler f = (sb, to_insert_compensation_pcs, live_renames ) ) in - let (sb_tocompensate_liverenames, code, next_free_reg) = ListLabels.fold_left sb_tocompensatepcs_liverenames - ~init:([], code, next_free_reg) - ~f:(fun (sbs, code, next_free_reg) (sb, to_compensate_pcs, live_renames) -> + let (sb_tocompensate_liverenames, code, pm, next_free_reg, next_free_pc) = ListLabels.fold_left sb_tocompensatepcs_liverenames + ~init:([], code, pm, next_free_reg, next_free_pc) + ~f:(fun (sbs, code, pm, next_free_reg, next_free_pc) (sb, to_compensate_pcs, live_renames) -> if !Clflags.option_fpoormansssa then ( let to_compensate = InsertPositionMap.map (fun pcs -> let insts = List.map (fun pc -> get_some @@ PTree.get pc code) pcs in @@ -1445,7 +1445,7 @@ let scheduler f = to_compensate_pcs code in - ((sb, to_compensate, live_renames)::sbs, code, next_free_reg) + ((sb, to_compensate, live_renames)::sbs, code, pm, next_free_reg, next_free_pc) ) else ( assert (PTree.elements live_renames |> List.for_all (fun (_, l) -> l = [])); let dup_count = InsertPositionMap.fold @@ -1477,6 +1477,18 @@ let scheduler f = in let pi = get_some @@ PTree.get sb.instructions.(0) pm in let (code, live_renames, next_free_reg) = rename_regs ~only_rename:arg_regs sb code ~liveatentry:pi.input_regs ~next_free_reg in + let final_restoration = final_restoration_code sb code live_renames in + let (sb, code, pm, next_free_pc, fwmap) = insert_code sb code pm final_restoration ~next_free_pc in + let live_renames = + PTree.fold + (fun acc pc insts -> + let pc' = apply_map' fwmap pc in + (* Remove final renames, which were just inserted *) + let insts = if Camlcoq.P.eq pc sb.instructions.(Array.length sb.instructions - 1) then [] else insts in + PTree.set pc' insts acc) + live_renames + PTree.empty + in let to_compensate = InsertPositionMap.map (fun pcs -> let insts = List.map (fun pc -> get_some @@ PTree.get pc code) pcs in insts) @@ -1490,7 +1502,7 @@ let scheduler f = to_compensate_pcs code in - ((sb, to_compensate, live_renames)::sbs, code, next_free_reg) )) + ((sb, to_compensate, live_renames)::sbs, code, pm, next_free_reg, next_free_pc) )) in (* Insert the compensation code (downward scheduling) and update the restoration code |