aboutsummaryrefslogtreecommitdiffstats
path: root/scheduling/BTLrenumber.ml
blob: dd6baa89b511ff9ae2820e14c576008875d888cc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
(* XXX uncomment
open !BTL
open DebugPrint
open AuxTools
open Maps*)

(** A quick note on the BTL renumber algorithm
    This is a simple first version where we try to reuse the entry numbering from RTL.
    In the futur, it would be great to implement a strongly connected components partitionning.
    The numbering is done by a postorder traversal.
    TODO gourdinl : note perso
    - faire un comptage global du nombre d'instructions rtl à générer
    - utiliser la structure d'info créée lors de la génération pour tenter de préserver au max
    la relation d'ordre, avec une heuristique genre (1 + max des succs) pour l'insertion
    - quand il y a un branchement conditionnel, privilégier le parcour du fils gauche en premier
    (afin d'avoir de plus petits numéros à gauche)
*)
(*
let rec get_max_rtl_ninsts code entry =
let rec postorder_blk ib =
*)

(* XXX uncomment
let postorder code entry =
  let renumbered_code = ref PTree.empty in
  let rec renum_ibf e =
    let ibf = get_some @@ PTree.get e code in
    if ibf.binfo.visited then ()
    else (
      ibf.binfo.visited <- true;
      let next_nodes = ref [] in
      let ib = ibf.entry in
      let rec renum_iblock ib =
        match ib with
      in
      let rib = renum_iblock ib in
      ibf.entry <- rib;
      renumbered_code := PTree.set e ibf !renumbered_code;
      let succs = !next_nodes in
      List.iter renum_ibf succs)
  in
  renum_ibf entry

let renumber (f: BTL.coq_function) =
  debug_flag := true;
  let code = f.fn_code in
  let entry = f.fn_entrypoint in
  let renumbered_code = postorder code entry in
  debug_flag := false;
  renumbered_code*)