[commit: ghc] wip/T14068: If there is a artificial no-inline-pragma, do not bother creating an unfolding (1d81171)
git at git.haskell.org
git at git.haskell.org
Mon Nov 6 20:14:46 UTC 2017
Repository : ssh://git@git.haskell.org/ghc
On branch : wip/T14068
Link : http://ghc.haskell.org/trac/ghc/changeset/1d811710f9681693f3dcdd647a1231dcebc8bce1/ghc
>---------------------------------------------------------------
commit 1d811710f9681693f3dcdd647a1231dcebc8bce1
Author: Joachim Breitner <mail at joachim-breitner.de>
Date: Mon Nov 6 15:14:11 2017 -0500
If there is a artificial no-inline-pragma, do not bother creating an unfolding
>---------------------------------------------------------------
1d811710f9681693f3dcdd647a1231dcebc8bce1
compiler/basicTypes/BasicTypes.hs | 8 +++++++-
compiler/simplCore/Simplify.hs | 4 +++-
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/compiler/basicTypes/BasicTypes.hs b/compiler/basicTypes/BasicTypes.hs
index a866153..3e5fbfe 100644
--- a/compiler/basicTypes/BasicTypes.hs
+++ b/compiler/basicTypes/BasicTypes.hs
@@ -88,7 +88,7 @@ module BasicTypes(
InlineSpec(..), noUserInlineSpec,
InlinePragma(..), defaultInlinePragma, alwaysInlinePragma,
neverInlinePragma, dfunInlinePragma,
- isDefaultInlinePragma,
+ isDefaultInlinePragma, isNeverInlinePragma,
isInlinePragma, isInlinablePragma, isAnyInlinePragma,
inlinePragmaSpec, inlinePragmaSat,
inlinePragmaActivation, inlinePragmaRuleMatchInfo,
@@ -1352,6 +1352,12 @@ isDefaultInlinePragma (InlinePragma { inl_act = activation
, inl_inline = inline })
= noUserInlineSpec inline && isAlwaysActive activation && isFunLike match_info
+isNeverInlinePragma :: InlinePragma -> Bool
+isNeverInlinePragma (InlinePragma { inl_act = activation
+ , inl_rule = match_info
+ , inl_inline = inline })
+ = noUserInlineSpec inline && isNeverActive activation && isFunLike match_info
+
isInlinePragma :: InlinePragma -> Bool
isInlinePragma prag = case inl_inline prag of
Inline -> True
diff --git a/compiler/simplCore/Simplify.hs b/compiler/simplCore/Simplify.hs
index 532b7ee..b576e8a 100644
--- a/compiler/simplCore/Simplify.hs
+++ b/compiler/simplCore/Simplify.hs
@@ -41,7 +41,7 @@ import CoreOpt ( pushCoTyArg, pushCoValArg
import Rules ( mkRuleInfo, lookupRule, getRules )
import Demand ( mkClosedStrictSig, topDmd, exnRes )
import BasicTypes ( TopLevelFlag(..), isNotTopLevel, isTopLevel,
- RecFlag(..), Arity )
+ RecFlag(..), Arity, isNeverInlinePragma )
import MonadUtils ( mapAccumLM, liftIO )
import Maybes ( orElse )
import Control.Monad
@@ -3263,6 +3263,8 @@ simplLetUnfolding env top_lvl cont_mb id new_rhs unf
= simplStableUnfolding env top_lvl cont_mb id unf
| isExitJoinId id
= return noUnfolding -- see Note [Do not inline exit join points]
+ | isNeverInlinePragma (idInlinePragma id)
+ = return noUnfolding -- Do not bother creating one if we never inline anyways
| otherwise
= mkLetUnfolding (seDynFlags env) top_lvl InlineRhs id new_rhs
More information about the ghc-commits
mailing list