aboutsummaryrefslogtreecommitdiffstats
path: root/backend/IRC.ml
diff options
context:
space:
mode:
Diffstat (limited to 'backend/IRC.ml')
-rw-r--r--backend/IRC.ml31
1 files changed, 10 insertions, 21 deletions
diff --git a/backend/IRC.ml b/backend/IRC.ml
index eb677069..d542f85e 100644
--- a/backend/IRC.ml
+++ b/backend/IRC.ml
@@ -12,13 +12,11 @@
open Printf
open Camlcoq
-open Datatypes
open AST
open Registers
open Machregs
open Locations
open Conventions1
-open Conventions
open XTL
(* Iterated Register Coalescing: George and Appel's graph coloring algorithm *)
@@ -138,7 +136,6 @@ module DLinkNode = struct
nstate = state; nprev = empty; nnext = empty }
in empty
let dummy = make Colored
- let clear dl = dl.nnext <- dl; dl.nprev <- dl
let notempty dl = dl.nnext != dl
let insert n dl =
n.nstate <- dl.nstate;
@@ -167,7 +164,6 @@ module DLinkMove = struct
mstate = state; mprev = empty; mnext = empty }
in empty
let dummy = make CoalescedMoves
- let clear dl = dl.mnext <- dl; dl.mprev <- dl
let notempty dl = dl.mnext != dl
let insert m dl =
m.mstate <- dl.mstate;
@@ -180,12 +176,6 @@ module DLinkMove = struct
remove m dl1; insert m dl2
let pick dl =
let m = dl.mnext in remove m dl; m
- let iter f dl =
- let rec iter m = if m != dl then (f m; iter m.mnext)
- in iter dl.mnext
- let fold f dl accu =
- let rec fold m accu = if m == dl then accu else fold m.mnext (f m accu)
- in fold dl.mnext accu
end
(* Auxiliary data structures *)
@@ -447,7 +437,7 @@ let moveRelated n =
(* Initial partition of nodes into spill / freeze / simplify *)
let initialNodePartition g =
- let part_node v n =
+ let part_node n =
match n.nstate with
| Initial ->
let k = g.num_available_registers.(n.regclass) in
@@ -459,43 +449,42 @@ let initialNodePartition g =
DLinkNode.insert n g.simplifyWorklist
| Colored -> ()
| _ -> assert false in
- Hashtbl.iter part_node g.varTable
-
+ Hashtbl.iter (fun _ a -> part_node a) g.varTable
(* Check invariants *)
-let degreeInvariant g n =
+let _degreeInvariant _ n =
let c = ref 0 in
iterAdjacent (fun n -> incr c) n;
if !c <> n.degree then
failwith("degree invariant violated by " ^ name_of_node n)
-let simplifyWorklistInvariant g n =
+let _simplifyWorklistInvariant g n =
if n.degree < g.num_available_registers.(n.regclass)
&& not (moveRelated n)
then ()
else failwith("simplify worklist invariant violated by " ^ name_of_node n)
-let freezeWorklistInvariant g n =
+let _freezeWorklistInvariant g n =
if n.degree < g.num_available_registers.(n.regclass)
&& moveRelated n
then ()
else failwith("freeze worklist invariant violated by " ^ name_of_node n)
-let spillWorklistInvariant g n =
+let _spillWorklistInvariant g n =
if n.degree >= g.num_available_registers.(n.regclass)
then ()
else failwith("spill worklist invariant violated by " ^ name_of_node n)
-let checkInvariants g =
+let _checkInvariants g =
DLinkNode.iter
- (fun n -> degreeInvariant g n; simplifyWorklistInvariant g n)
+ (fun n -> _degreeInvariant g n; _simplifyWorklistInvariant g n)
g.simplifyWorklist;
DLinkNode.iter
- (fun n -> degreeInvariant g n; freezeWorklistInvariant g n)
+ (fun n -> _degreeInvariant g n; _freezeWorklistInvariant g n)
g.freezeWorklist;
DLinkNode.iter
- (fun n -> degreeInvariant g n; spillWorklistInvariant g n)
+ (fun n -> _degreeInvariant g n; _spillWorklistInvariant g n)
g.spillWorklist
(* Enable moves that have become low-degree related *)