Eviter les spills preventifs 'impossibles'
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@1872 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02master
parent
c7f9a3da96
commit
01b52f7c7f
|
@ -87,9 +87,10 @@ let add_superpressure_regs op live_regs res_regs spilled =
|
|||
let lru_date = ref 1000000 and lru_reg = ref Reg.dummy in
|
||||
Reg.Set.iter
|
||||
(fun r ->
|
||||
if Proc.register_class r = cl &
|
||||
not (Reg.Set.mem r spilled) &
|
||||
r.loc = Unknown then begin
|
||||
if Proc.register_class r = cl &&
|
||||
not (Reg.Set.mem r spilled) &&
|
||||
r.loc = Unknown
|
||||
then begin
|
||||
try
|
||||
let d = Reg.Map.find r !use_date in
|
||||
if d < !lru_date then begin
|
||||
|
@ -100,8 +101,12 @@ let add_superpressure_regs op live_regs res_regs spilled =
|
|||
()
|
||||
end)
|
||||
live_regs;
|
||||
if !lru_reg != Reg.dummy then begin
|
||||
pressure.(cl) <- pressure.(cl) - 1;
|
||||
check_pressure cl (Reg.Set.add !lru_reg spilled)
|
||||
end else
|
||||
(* Couldn't find any spillable register, give up for this class *)
|
||||
check_pressure (cl+1) spilled
|
||||
end in
|
||||
check_pressure 0 spilled
|
||||
|
||||
|
|
Loading…
Reference in New Issue