- (Bool,[Bool]) -- Whether the function at the head of e has rules,
- SimplCont -- plus strictness flags for further args
-
-data LetRhsFlag = AnArg -- It's just an argument not a let RHS
- | AnRhs -- It's the RHS of a let (so please float lets out of big lambdas)
-
-instance Outputable LetRhsFlag where
- ppr AnArg = ptext SLIT("arg")
- ppr AnRhs = ptext SLIT("rhs")
+ CallCtxt -- Whether *this* argument position is interesting
+ ArgInfo -- Whether the function at the head of e has rules, etc
+ SimplCont -- plus strictness flags for *further* args
+
+data ArgInfo
+ = ArgInfo {
+ ai_rules :: Bool, -- Function has rules (recursively)
+ -- => be keener to inline in all args
+ ai_strs :: [Bool], -- Strictness of arguments
+ -- Usually infinite, but if it is finite it guarantees
+ -- that the function diverges after being given
+ -- that number of args
+ ai_discs :: [Int] -- Discounts for arguments; non-zero => be keener to inline
+ -- Always infinite
+ }