
On 06 October 2004 00:53, John Meacham wrote:
On Tue, Oct 05, 2004 at 01:48:30PM +0100, Simon Marlow wrote:
It would probably be better to return 0#/1# instead of a Bool from the comparison primops, because this would expose slightly more detail to the simplifier and might result in slightly better code in some cases (but no dramatic improvements). It would also let us remove a bit of complexity from the code generator.
This seems like it could be nicely generalized such that all enumeration types unbox to the unboxed integer of their offset. so
data Perhaps = Yes | Maybe | No
can unbox to an Int# with 0# == Yes 1# == Maybe and 2# == No.
Yes, a strict enumeration should be implemented as an Int#, both in the strictness analyser and also when you {-# UNPACK #-} a constructor field. This is something we'd like to try, but haven't got around to it yet. Maybe a good bite-sized project for a budding GHC hacker? :-)
Then we get the Bool optimization for free.
The original question was about the primitive comparisons, so I think we'd still have to change the types of these primitives. Furthermore we'd probably have to teach the compiler that the result of the comparison primops is compatible with a strict Bool. It wouldn't be entirely free. Cheers, Simon

Simon Marlow wrote:
On 06 October 2004 00:53, John Meacham wrote:
This seems like it could be nicely generalized such that all enumeration types unbox to the unboxed integer of their offset. so
data Perhaps = Yes | Maybe | No
can unbox to an Int# with 0# == Yes 1# == Maybe and 2# == No.
Yes, a strict enumeration should be implemented as an Int#, both in the strictness analyser and also when you {-# UNPACK #-} a constructor field. This is something we'd like to try, but haven't got around to it yet. Maybe a good bite-sized project for a budding GHC hacker? :-)
Would it really be correct to translate it to Int#? AFAIK, unboxed values may not contain bottom while a data type most certainly can. I would imagine translating it to Int, and then relying on GHC's optimiser to optimize this into Int# whenever possible. /Josef
participants (2)
-
Josef Svenningsson
-
Simon Marlow