private bool PlaceLiveIntervalOnTrack(LiveInterval liveInterval, MoveHint[] hints) { if (hints == null) { return(false); } foreach (var moveHint in hints) { LiveIntervalTrack track = null; var register = (liveInterval.Start == moveHint.Slot) ? moveHint.FromRegister : moveHint.ToRegister; if (register == null) { continue; // no usable hint } if (Trace.Active) { Trace.Log(" Trying move hint: " + register + " [ " + moveHint + " ]"); } if (PlaceLiveIntervalOnTrack(liveInterval, LiveIntervalTracks[register.Index])) { return(true); } } return(false); }
private bool PlaceLiveIntervalOnTrack(LiveInterval liveInterval, LiveIntervalTrack track) { if (track.IsReserved) return false; if (track.IsFloatingPoint != liveInterval.VirtualRegister.IsFloatingPoint) return false; if (track.Intersects(liveInterval)) return false; if (trace.Active) trace.Log(" Assigned live interval to: " + track.ToString()); track.Add(liveInterval); return true; }
public void Evict() { LiveIntervalTrack.Evict(this); }