ghc-8.2.1: The GHC API

Safe HaskellNone




data SwitchTargets Source #

A value of type SwitchTargets contains the alternatives for a CmmSwitch value, and knows whether the value is signed, the possible range, an optional default value and a map from values to jump labels.

mkSwitchTargets :: Bool -> (Integer, Integer) -> Maybe Label -> Map Integer Label -> SwitchTargets Source #

The smart constructr mkSwitchTargets normalises the map a bit: * No entries outside the range * No entries equal to the default * No default if all elements have explicit values

switchTargetsCases :: SwitchTargets -> [(Integer, Label)] Source #

Returns the list of non-default branches of the SwitchTargets value

switchTargetsDefault :: SwitchTargets -> Maybe Label Source #

Return the default label of the SwitchTargets value

switchTargetsRange :: SwitchTargets -> (Integer, Integer) Source #

Return the range of the SwitchTargets value

switchTargetsSigned :: SwitchTargets -> Bool Source #

Return whether this is used for a signed value

mapSwitchTargets :: (Label -> Label) -> SwitchTargets -> SwitchTargets Source #

Changes all labels mentioned in the SwitchTargets value

switchTargetsToTable :: SwitchTargets -> (Int, [Maybe Label]) Source #

switchTargetsToTable creates a dense jump table, usable for code generation.

Also returns an offset to add to the value; the list is 0-based on the result of that addition.

The conversion from Integer to Int is a bit of a wart, as the actual scrutinee might be an unsigned word, but it just works, due to wrap-around arithmetic (as verified by the CmmSwitchTest test case).

switchTargetsFallThrough :: SwitchTargets -> ([([Integer], Label)], Maybe Label) Source #

Groups cases with equal targets, suitable for pretty-printing to a c-like switch statement with fall-through semantics.

switchTargetsToList :: SwitchTargets -> [Label] Source #

The list of all labels occuring in the SwitchTargets value.

eqSwitchTargetWith :: (Label -> Label -> Bool) -> SwitchTargets -> SwitchTargets -> Bool Source #

Custom equality helper, needed for CmmCommonBlockElim

data SwitchPlan Source #

A SwitchPlan abstractly describes how a Switch statement ought to be implemented. See Note [createSwitchPlan]

targetSupportsSwitch :: HscTarget -> Bool Source #

Does the target support switch out of the box? Then leave this to the target!

createSwitchPlan :: SwitchTargets -> SwitchPlan Source #

This function creates a SwitchPlan from a SwitchTargets value, breaking it down into smaller pieces suitable for code generation.