| Safe Haskell | None |
|---|---|
| Language | GHC2024 |
GHC.Core.Opt.Range
Description
Range analysis
See Note [Value range analysis]
Synopsis
- data Comparison
- data Range = MkRange !(Maybe Integer) !(Maybe Integer)
- noRange :: Range
- valueRange :: Platform -> CoreExpr -> Range
- rangeIntersect :: Range -> Range -> Range
- rangeCastFrom :: Range -> Range -> Range
- inRange :: Integer -> Range -> Bool
- rangeSize :: Range -> Maybe Integer
- rangeCmp :: Comparison -> Range -> Range -> Maybe Bool
- rangeLe :: Range -> Range -> Maybe Bool
- rangeGe :: Range -> Range -> Maybe Bool
- rangeLt :: Range -> Range -> Maybe Bool
- rangeGt :: Range -> Range -> Maybe Bool
- rangeOf :: (Bounded a, Integral a) => Range
- rangeWord :: Platform -> Range
- rangeWord8 :: Range
- rangeWord16 :: Range
- rangeWord32 :: Range
- rangeWord64 :: Range
- rangeChar :: Platform -> Range
- rangeInt :: Platform -> Range
- rangeInt8 :: Range
- rangeInt16 :: Range
- rangeInt32 :: Range
- rangeInt64 :: Range
Documentation
data Comparison Source #
Instances
| Show Comparison Source # | |
Defined in GHC.Core.Opt.Range | |
A range (minBound,maxBound)
Bounds may not be known.
Constructors
| MkRange | |
rangeIntersect :: Range -> Range -> Range Source #
Compute the intersection of two overlapping ranges.
If the two ranges don't overlap, result is undefined.
rangeCastFrom :: Range -> Range -> Range Source #
Used for casts that share representation over a sub-range (e.g. [0,127] for Word8# ([0,255]) and Int8# ([-128,127]))
If from_range isn't fully included into to_range, then we return to_range. That's because for now we don't have a way to track disjoined ranges. E.g. if we wanted to cast -1,10 into 0,255, we would need to represent a range union: [0,10] U 255,255
We also use this function to ensure that the result of an arithmetic operation on ranges didn't overflow/underflow.
rangeCmp :: Comparison -> Range -> Range -> Maybe Bool Source #
Compare two ranges
See Note [Value range analysis]
rangeWord8 :: Range Source #
rangeWord16 :: Range Source #
rangeWord32 :: Range Source #
rangeWord64 :: Range Source #
rangeInt16 :: Range Source #
rangeInt32 :: Range Source #
rangeInt64 :: Range Source #