commit 6c64119f553abe741d9e3d4a10d96d4caf9efdbe
parent 3ca7d9849b1941ecc0e65d34795719c3c29c39af
Author: Quentin Carbonneaux <quentin.carbonneaux@yale.edu>
Date: Wed, 1 Apr 2015 09:30:00 -0400
do not freeze r when allocating for r2
Diffstat:
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/lo2.ml b/lo2.ml
@@ -219,10 +219,12 @@ let regalloc (p: iprog): rprog =
| LReg r -> r :: l
| _ -> l in
match bi.(i) with
- | `Uop (_, ir) -> [] |> block ir
- | `Bop (ir1, _, ir2) -> [] |> block ir1 |> block ir2
+ | `Uop (_, ir) ->
+ [] |> block ir
+ | `Bop (ir1, _, ir2) ->
+ [] |> block ir1 |> block ir2
| _ -> [] in
- let r = getreg [] in
+ let r = getreg frz in
free := r :: !free; (* Add it straight back to free, but freeze it. *)
(r, [r])
| LReg r -> kill ir; (r, [])
@@ -238,8 +240,8 @@ let regalloc (p: iprog): rprog =
| `Bop (ir1, op, ir2) ->
let l1 = regloc frz ir1 in
let frz = match l1 with
- | LReg r1 -> r :: r1 :: frz
- | _ -> r :: frz in (* WHY? *)
+ | LReg r1 -> r1 :: frz
+ | _ -> frz in
let l2 = regloc frz ir2 in
if s >= 0 then emiti (LSpill s) (`Mov (LReg r));
emiti (LReg r) (`Bop (l1, op, l2))