module LinearScan.Trace where import Debug.Trace (trace, traceShow) 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 LinearScan.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 PhysRegT | ESplitActiveOrInactiveInterval TrueIfActiveT | EIntervalHasUsePosReqReg IntervalIdT | EIntervalBeginsAtSplitPosition | EMoveUnhandledToActive PhysRegT | ESplitActiveIntervalForReg PhysRegT | ESplitAnyInactiveIntervalForReg PhysRegT | ESpillInterval SpillConditionT | ESpillCurrentInterval | ESplitUnhandledInterval | ESplitCurrentInterval SplitPositionT | ETryAllocateFreeReg PhysRegT (Prelude.Maybe Prelude.Int) IntervalIdT | EAllocateBlockedReg PhysRegT (Prelude.Maybe Prelude.Int) IntervalIdT | ERemoveUnhandledInterval IntervalIdT | ECannotInsertUnhandled | EIntervalBeginsBeforeUnhandled IntervalIdT | ENoValidSplitPosition IntervalIdT | ECannotSplitSingleton IntervalIdT | ERegisterAlreadyAssigned PhysRegT | ERegisterAssignmentsOverlap PhysRegT | EUnexpectedNoMoreUnhandled | ECannotSpillIfRegisterRequired PhysRegT | EFuelExhausted | ENotYetImplemented Prelude.Int