Generate INLINE pragmas for PA methods
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Thu, 3 Dec 2009 03:14:52 +0000 (03:14 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Thu, 3 Dec 2009 03:14:52 +0000 (03:14 +0000)
compiler/basicTypes/BasicTypes.lhs
compiler/vectorise/VectType.hs

index 849d507..15725fd 100644 (file)
@@ -57,7 +57,7 @@ module BasicTypes(
        CompilerPhase, 
        Activation(..), isActive, isNeverActive, isAlwaysActive, isEarlyActive,
         RuleMatchInfo(..), isConLike, isFunLike, 
-        InlinePragma(..), defaultInlinePragma, neverInlinePragma, dfunInlinePragma,
+        InlinePragma(..), defaultInlinePragma, alwaysInlinePragma, neverInlinePragma, dfunInlinePragma,
        isDefaultInlinePragma, isInlinePragma,
         inlinePragmaActivation, inlinePragmaRuleMatchInfo,
         setInlinePragmaActivation, setInlinePragmaRuleMatchInfo,
@@ -660,9 +660,12 @@ isFunLike :: RuleMatchInfo -> Bool
 isFunLike FunLike = True
 isFunLike _            = False
 
-defaultInlinePragma, neverInlinePragma, dfunInlinePragma :: InlinePragma
+defaultInlinePragma, alwaysInlinePragma, neverInlinePragma, dfunInlinePragma
+  :: InlinePragma
 defaultInlinePragma 
   = InlinePragma { inl_act = AlwaysActive, inl_rule = FunLike, inl_inline = False }
+alwaysInlinePragma
+  = InlinePragma { inl_act = AlwaysActive, inl_rule = FunLike, inl_inline = True }
 neverInlinePragma   
    = InlinePragma { inl_act = NeverActive, inl_rule = FunLike, inl_inline = False }
 dfunInlinePragma   
index 16ac82a..f31ecd8 100644 (file)
@@ -24,7 +24,7 @@ import OccName
 import Id
 import MkId
 import BasicTypes        ( StrictnessMark(..), boolToRecFlag,
-                           dfunInlinePragma )
+                           alwaysInlinePragma, dfunInlinePragma )
 import Var               ( Var, TyVar, varType )
 import Name              ( Name, getOccName )
 import NameEnv
@@ -831,6 +831,7 @@ buildPADict vect_tc prepr_tc arr_tc repr
           raw_var <- newExportedVar (method_name name) (exprType body)
           let var = raw_var
                       `setIdUnfolding` mkInlineRule needSaturated body (length args)
+                      `setInlinePragma` alwaysInlinePragma
           hoistBinding var body
           return var