X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fprelude%2Fprimops.txt.pp;h=c5dad9bf76832505e1100d0ac16a719d64101b39;hb=9ba922ee06b048774d7a82964867ff768a78126e;hp=0e917f34df035c8e7aa1107d5b6faed65841a579;hpb=ad3b79d22b32760f25bf10069bd2957462be959d;p=ghc-hetmet.git diff --git a/compiler/prelude/primops.txt.pp b/compiler/prelude/primops.txt.pp index 0e917f3..c5dad9b 100644 --- a/compiler/prelude/primops.txt.pp +++ b/compiler/prelude/primops.txt.pp @@ -1140,10 +1140,14 @@ primop RaiseOp "raise#" GenPrimOp -- raiseIO# needs to be a primop, because exceptions in the IO monad -- must be *precise* - we don't want the strictness analyser turning -- one kind of bottom into another, as it is allowed to do in pure code. +-- +-- But we *do* want to know that it returns bottom after +-- being applied to two arguments primop RaiseIOOp "raiseIO#" GenPrimOp a -> State# RealWorld -> (# State# RealWorld, b #) with + strictness = { \ _arity -> mkStrictSig (mkTopDmdType [lazyDmd,lazyDmd] BotRes) } out_of_line = True has_side_effects = True @@ -1544,6 +1548,13 @@ primop GetSparkOp "getSpark#" GenPrimOp has_side_effects = True out_of_line = True +primop NumSparks "numSparks#" GenPrimOp + State# s -> (# State# s, Int# #) + { Returns the number of sparks in the local spark pool. } + with + has_side_effects = True + out_of_line = True + -- HWL: The first 4 Int# in all par... annotations denote: -- name, granularity info, size of result, degree of parallelism -- Same structure as _seq_ i.e. returns Int# @@ -1678,11 +1689,9 @@ pseudoop "inline" {\tt inline} function expands to the identity function in Phase zero; so its use imposes no overhead. - If the function is defined in another module, GHC only exposes its inlining - in the interface file if the function is sufficiently small that it might be - inlined by the automatic mechanism. There is currently no way to tell GHC to - expose arbitrarily-large functions in the interface file. (This shortcoming - is something that could be fixed, with some kind of pragma.) } + It is good practice to mark the function with an INLINABLE pragma at + its definition, (a) so that GHC guarantees to expose its unfolding regardless + of size, and (b) so that you have control over exactly what is inlined. } pseudoop "lazy" a -> a