diff options
| author | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-04-01 09:30:00 -0400 |
|---|---|---|
| committer | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2015-04-01 09:30:00 -0400 |
| commit | 6c64119f553abe741d9e3d4a10d96d4caf9efdbe (patch) | |
| tree | 7285cf2448a82c817f029a675eb159c0d09b7171 | |
| parent | 3ca7d9849b1941ecc0e65d34795719c3c29c39af (diff) | |
| download | roux-6c64119f553abe741d9e3d4a10d96d4caf9efdbe.tar.gz | |
do not freeze r when allocating for r2
| -rw-r--r-- | lo2.ml | 12 |
1 files changed, 7 insertions, 5 deletions
@@ -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)) |
