( Literal(..) -- Exported to ParseIface
, mkMachInt, mkMachWord
, mkMachInt64, mkMachWord64
- , isLitLitLit, maybeLitLit, litIsDupable,
+ , isLitLitLit, maybeLitLit, litSize, litIsDupable,
, literalType, literalPrimRep
, hashLiteral
import Util ( thenCmp )
import Ratio ( numerator )
-import FastString ( uniqueOfFS )
+import FastString ( uniqueOfFS, lengthFS )
import Char ( ord, chr )
\end{code}
-- False principally of strings
litIsDupable (MachStr _) = False
litIsDupable other = True
+
+litSize :: Literal -> Int
+ -- used by CoreUnfold.sizeExpr
+litSize (MachStr str) = lengthFS str `div` 4
+litSize _other = 1
\end{code}
Types
isPrimOpId_maybe
)
import VarSet
-import Literal ( isLitLitLit, litIsDupable )
+import Literal ( isLitLitLit, litSize )
import PrimOp ( PrimOp(..), primOpIsDupable, primOpOutOfLine, ccallIsCasm )
import IdInfo ( InlinePragInfo(..), OccInfo(..), IdFlavour(..),
isNeverInlinePrag
size_up (App fun (Type t)) = size_up fun
size_up (App fun arg) = size_up_app fun [arg]
- size_up (Lit lit) | litIsDupable lit = sizeOne
- | otherwise = sizeN opt_UF_DearOp -- For lack of anything better
+ size_up (Lit lit) = sizeN (litSize lit)
size_up (Lam b e) | isId b = lamScrutDiscount (size_up e `addSizeN` 1)
| otherwise = size_up e
import VarSet
import VarEnv
import Name ( hashName )
-import Literal ( hashLiteral, literalType, litIsDupable )
+import Literal ( hashLiteral, literalType, litSize, litIsDupable )
import DataCon ( DataCon, dataConRepArity )
import PrimOp ( primOpOkForSpeculation, primOpIsCheap,
primOpIsDupable )