From 98a7a04258f2cf6caf9f18925cbeeae2f5b17be4 Mon Sep 17 00:00:00 2001 From: "nicolas.nardino" Date: Fri, 4 Jun 2021 16:56:32 +0200 Subject: computing live regs at sb entry from its live output regs --- scheduling/RTLpathScheduleraux.ml | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'scheduling') diff --git a/scheduling/RTLpathScheduleraux.ml b/scheduling/RTLpathScheduleraux.ml index 55f1a078..30da5d5d 100644 --- a/scheduling/RTLpathScheduleraux.ml +++ b/scheduling/RTLpathScheduleraux.ml @@ -73,8 +73,26 @@ let get_superblocks code entry pm typing = end (* PLACEHOLDER *) -let get_live_regs_entry (sb : superblock) = - Registers.Regset.empty +let get_live_regs_entry (sb : superblock) code = + let seqa = Array.map (fun i -> + (match PTree.get i code with + | Some ii -> ii + | None -> failwith "RTLpathScheduleraux.get_live_regs_entry" + ), + (match PTree.get i sb.liveins with + | Some s -> s + | None -> Regset.empty)) + sb.instructions in + Array.fold_right (fun (ins, liveins) regset -> + match ins with + | Inop l -> regset + | Iop (op, args, dest, succ) -> + Registers.Regset.add dest + (List.fold_left (fun set reg -> + Registers.Regset.remove reg set) + regset args) + | _ -> regset (* PLACEHOLDER *) + ) seqa Registers.Regset.empty (* TODO David *) @@ -95,7 +113,7 @@ let schedule_superblock sb code = match predicted_successor ii with | Some _ -> 0 | None -> 1 in - let live_regs_entry = get_live_regs_entry sb in + let live_regs_entry = get_live_regs_entry sb code in match PrepassSchedulingOracle.schedule_sequence (Array.map (fun i -> (match PTree.get i code with -- cgit