Repository : ssh://g...@git.haskell.org/ghc On branch : master Link : http://ghc.haskell.org/trac/ghc/changeset/99cf45942a395e116394712c529b05744d0b136b/ghc
>--------------------------------------------------------------- commit 99cf45942a395e116394712c529b05744d0b136b Author: Austin Seipp <aus...@well-typed.com> Date: Wed Oct 9 08:49:19 2013 -0500 Use evaldUnfolding for proxyHashId Edward and I noticed this - like realWorld#, we want things applied to proxy# which are INLINE more likely to be inlined - we do this by marking proxy# as having an evaldUnfolding, which in turn makes it look like the primitive is evaluated and makes the simplifier more willing to do so. See Note [evaldUnfoldings] in MkId. Signed-off-by: Austin Seipp <aus...@well-typed.com> >--------------------------------------------------------------- 99cf45942a395e116394712c529b05744d0b136b compiler/basicTypes/MkId.lhs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/compiler/basicTypes/MkId.lhs b/compiler/basicTypes/MkId.lhs index 4a0b7d7..d398b3f 100644 --- a/compiler/basicTypes/MkId.lhs +++ b/compiler/basicTypes/MkId.lhs @@ -1056,7 +1056,8 @@ proxyName = mkWiredInIdName gHC_PRIM (fsLit "proxy#") proxyHashKe -- proxy# :: forall a. Proxy# a proxyHashId :: Id proxyHashId - = pcMiscPrelId proxyName ty noCafIdInfo + = pcMiscPrelId proxyName ty + (noCafIdInfo `setUnfoldingInfo` evaldUnfolding) -- Note [evaldUnfoldings] where ty = mkForAllTys [kv, tv] (mkProxyPrimTy k t) kv = kKiVar @@ -1297,11 +1298,15 @@ This comes up in strictness analysis realWorldPrimId :: Id realWorldPrimId -- :: State# RealWorld = pcMiscPrelId realWorldName realWorldStatePrimTy - (noCafIdInfo `setUnfoldingInfo` evaldUnfolding) - -- The evaldUnfolding makes it look that realWorld# is evaluated - -- which in turn makes Simplify.interestingArg return True, - -- which in turn makes INLINE things applied to realWorld# likely - -- to be inlined + (noCafIdInfo `setUnfoldingInfo` evaldUnfolding) -- Note [evaldUnfoldings] + +{- Note [evaldUnfoldings] +~~~~~~~~~~~~~~~~~~~~~~~~~ +The evaldUnfolding makes it look that some primitive value is +evaluated, which in turn makes Simplify.interestingArg return True, +which in turn makes INLINE things applied to said value likely to be +inlined. +-} voidArgId :: Id voidArgId -- :: State# RealWorld _______________________________________________ ghc-commits mailing list ghc-commits@haskell.org http://www.haskell.org/mailman/listinfo/ghc-commits