{-# LANGUAGE TypeFamilies #-}

-- | Configuration options for Lift the lambda lifter.
module GHC.Stg.Lift.Config (
    StgLiftConfig (..),
  ) where

import GHC.Prelude

import GHC.Platform.Profile

data StgLiftConfig = StgLiftConfig
  { StgLiftConfig -> Profile
c_targetProfile         :: !Profile
  , StgLiftConfig -> Maybe Int
c_liftLamsRecArgs       :: !(Maybe Int)
  -- ^ Maximum number of arguments after lambda lifting a recursive function.
  , StgLiftConfig -> Maybe Int
c_liftLamsNonRecArgs    :: !(Maybe Int)
  -- ^ Maximum number of arguments after lambda lifting non-recursive function.
  , StgLiftConfig -> Bool
c_liftLamsKnown         :: !Bool
  -- ^ Lambda lift even when this turns a known call into an unknown call.
  }
  deriving (Int -> StgLiftConfig -> ShowS
[StgLiftConfig] -> ShowS
StgLiftConfig -> String
(Int -> StgLiftConfig -> ShowS)
-> (StgLiftConfig -> String)
-> ([StgLiftConfig] -> ShowS)
-> Show StgLiftConfig
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> StgLiftConfig -> ShowS
showsPrec :: Int -> StgLiftConfig -> ShowS
$cshow :: StgLiftConfig -> String
show :: StgLiftConfig -> String
$cshowList :: [StgLiftConfig] -> ShowS
showList :: [StgLiftConfig] -> ShowS
Show, ReadPrec [StgLiftConfig]
ReadPrec StgLiftConfig
Int -> ReadS StgLiftConfig
ReadS [StgLiftConfig]
(Int -> ReadS StgLiftConfig)
-> ReadS [StgLiftConfig]
-> ReadPrec StgLiftConfig
-> ReadPrec [StgLiftConfig]
-> Read StgLiftConfig
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
$creadsPrec :: Int -> ReadS StgLiftConfig
readsPrec :: Int -> ReadS StgLiftConfig
$creadList :: ReadS [StgLiftConfig]
readList :: ReadS [StgLiftConfig]
$creadPrec :: ReadPrec StgLiftConfig
readPrec :: ReadPrec StgLiftConfig
$creadListPrec :: ReadPrec [StgLiftConfig]
readListPrec :: ReadPrec [StgLiftConfig]
Read, StgLiftConfig -> StgLiftConfig -> Bool
(StgLiftConfig -> StgLiftConfig -> Bool)
-> (StgLiftConfig -> StgLiftConfig -> Bool) -> Eq StgLiftConfig
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: StgLiftConfig -> StgLiftConfig -> Bool
== :: StgLiftConfig -> StgLiftConfig -> Bool
$c/= :: StgLiftConfig -> StgLiftConfig -> Bool
/= :: StgLiftConfig -> StgLiftConfig -> Bool
Eq, Eq StgLiftConfig
Eq StgLiftConfig
-> (StgLiftConfig -> StgLiftConfig -> Ordering)
-> (StgLiftConfig -> StgLiftConfig -> Bool)
-> (StgLiftConfig -> StgLiftConfig -> Bool)
-> (StgLiftConfig -> StgLiftConfig -> Bool)
-> (StgLiftConfig -> StgLiftConfig -> Bool)
-> (StgLiftConfig -> StgLiftConfig -> StgLiftConfig)
-> (StgLiftConfig -> StgLiftConfig -> StgLiftConfig)
-> Ord StgLiftConfig
StgLiftConfig -> StgLiftConfig -> Bool
StgLiftConfig -> StgLiftConfig -> Ordering
StgLiftConfig -> StgLiftConfig -> StgLiftConfig
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: StgLiftConfig -> StgLiftConfig -> Ordering
compare :: StgLiftConfig -> StgLiftConfig -> Ordering
$c< :: StgLiftConfig -> StgLiftConfig -> Bool
< :: StgLiftConfig -> StgLiftConfig -> Bool
$c<= :: StgLiftConfig -> StgLiftConfig -> Bool
<= :: StgLiftConfig -> StgLiftConfig -> Bool
$c> :: StgLiftConfig -> StgLiftConfig -> Bool
> :: StgLiftConfig -> StgLiftConfig -> Bool
$c>= :: StgLiftConfig -> StgLiftConfig -> Bool
>= :: StgLiftConfig -> StgLiftConfig -> Bool
$cmax :: StgLiftConfig -> StgLiftConfig -> StgLiftConfig
max :: StgLiftConfig -> StgLiftConfig -> StgLiftConfig
$cmin :: StgLiftConfig -> StgLiftConfig -> StgLiftConfig
min :: StgLiftConfig -> StgLiftConfig -> StgLiftConfig
Ord)