[Haskell] Expecting more inlining for bit shifting
roconnor at theorem.ca
roconnor at theorem.ca
Wed Oct 11 06:06:41 EDT 2006
On Wed, 11 Oct 2006, Simon Peyton-Jones wrote:
> Correct. GHC generates
> case (x# >=# 0#) of { True -> ...; False -> ... }
> But the argument discount only applies when we have
> case y of { ... }
>
> So you really want a discount for the args of a primop.
Do you think it should be that general? I was thinking the discount
should only apply in the situtation where a case expression contains an
expression with one free varaible that is a function argument, and all
operations are primitive.
So I was thinking the right place to patch is in sizeExpr:
size_up (Case (Var v) _ _ alts)
| v `elem` top_args
= ...
And make this branch activate is a wider range of circumstances. SamB
is/was working on such a patch.
But making sure that all operations are primitive is not quite right, for
instance in
f :: Int -> ...
f x | gcd x 21 > 1 = ...
we cannot give x an argument discount because (gcd (5::Int) 21) is not
rewritten into 1 (for some strange reason).
So, is there a way of deciding if a primitive op will be rewritten if all
its arguements are given?
--
Russell O'Connor <http://r6.ca/>
``All talk about `theft,''' the general counsel of the American Graphophone
Company wrote, ``is the merest claptrap, for there exists no property in
ideas musical, literary or artistic, except as defined by statute.''
More information about the Glasgow-haskell-users
mailing list