
Duncan and I have thought about this too, exactly as you describe. (Just !x) => (# tag#, x# #) -- Don lennart:
When I looked at it a year ago or so, it was a return of one constructor in a sum. Looking at core, you can see several places where a function is called and that function always returns the same constructor, so the case analysis of the return value is not needed; it should be returned as an unboxed tuple instead I'll see if I can get a simple example to illustrate the problem.
I talked to Simon PJ about it and he thought an analysis and transformation for such a thing would be a good idea, but someone has to do the work, of course.
Another unrelated problem, I think, is that ghc needs to promote in-memory variables to registers when possible. Perhaps the new code generator has such a transformation?
-- Lennart
On Mon, Mar 30, 2009 at 3:28 AM, Don Stewart
wrote: Nested constructed product returns? Or constructed sums?
lennart:
Well, yes and no. GHC actually does a decent job when given very imperative code with references and mutable arrays. Now the type I use to wrap the references to get type safe l-values and r-values makes it tricker, and ghc lacks a crucial optimization for specialization of constructor returns. With that in place I think the code could be quite performant.