module LinearScan.Trace where import Debug.Trace (trace, traceShow, traceShowId) import qualified Prelude import qualified Data.IntMap import qualified Data.IntSet import qualified Data.List import qualified Data.Ord import qualified Data.Functor.Identity import qualified Hask.Utils type IntervalIdT = Prelude.Int type PhysRegT = Prelude.Int data SpillConditionT = NewToHandledT IntervalIdT | UnhandledToHandledT IntervalIdT | ActiveToHandledT IntervalIdT PhysRegT | InactiveToHandledT IntervalIdT PhysRegT data SplitPositionT = BeforePosT Prelude.Int | EndOfLifetimeHoleT Prelude.Int type TrueIfActiveT = Prelude.Bool data SSTrace = EIntersectsWithFixedInterval Prelude.Int PhysRegT | ESplitAssignedIntervalForReg IntervalIdT PhysRegT SplitPositionT | ESplitActiveOrInactiveInterval IntervalIdT TrueIfActiveT SplitPositionT | EIntervalHasUsePosReqReg Prelude.Int | EIntervalBeginsAtSplitPosition | EMoveUnhandledToActive IntervalIdT PhysRegT | ESplitActiveIntervalForReg PhysRegT SplitPositionT | ESplitAnyInactiveIntervalForReg PhysRegT SplitPositionT | ESpillInterval SpillConditionT | ESpillCurrentInterval | ESplitUnhandledInterval IntervalIdT SplitPositionT | ESplitCurrentInterval IntervalIdT SplitPositionT | ETryAllocateFreeReg PhysRegT (Prelude.Maybe Prelude.Int) IntervalIdT | EAllocateBlockedReg PhysRegT (Prelude.Maybe Prelude.Int) IntervalIdT | ERemoveUnhandledInterval IntervalIdT | ECannotInsertUnhandled Prelude.Int Prelude.Int Prelude.Int Prelude.Int | EIntervalBeginsBeforeUnhandled IntervalIdT | ENoValidSplitPosition IntervalIdT | ECannotSplitSingleton IntervalIdT | ERegisterAlreadyAssigned PhysRegT | ERegisterAssignmentsOverlap PhysRegT IntervalIdT Prelude.Int | ECannotModifyHandledInterval IntervalIdT | EUnexpectedNoMoreUnhandled | ECannotSpillIfRegisterRequired IntervalIdT | ECannotSpillIfRegisterRequiredBefore IntervalIdT Prelude.Int | EFuelExhausted | EUnhandledIntervalsRemain | EActiveIntervalsRemain | EInactiveIntervalsRemain | ENotYetImplemented Prelude.Int