summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin Carbonneaux <quentin.carbonneaux@yale.edu>2015-04-01 09:30:00 -0400
committerQuentin Carbonneaux <quentin.carbonneaux@yale.edu>2015-04-01 09:30:00 -0400
commit6c64119f553abe741d9e3d4a10d96d4caf9efdbe (patch)
tree7285cf2448a82c817f029a675eb159c0d09b7171
parent3ca7d9849b1941ecc0e65d34795719c3c29c39af (diff)
downloadroux-6c64119f553abe741d9e3d4a10d96d4caf9efdbe.tar.gz
do not freeze r when allocating for r2
-rw-r--r--lo2.ml12
1 files changed, 7 insertions, 5 deletions
diff --git a/lo2.ml b/lo2.ml
index 58ae0de..4c35767 100644
--- 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))