Isaac Dupree wrote:

nativeGen/MachRegs uses unboxed tuples to contain FastInts, which may be unboxed.

nativeGen/AsmCodeGen, nativeGen/RegAllocLinear, and utils/State each use unboxed tuples in return values of newtypes that are declared Monads -- efficiency of the tuple is the only excuse (not even efficiency of what it contains), and I may test how they are with boxed tuples. On the other hand, as far as I can tell, CmmOptM and RegM are really just state monads that can and should use utils/State. No, actually CmmOptM is a State/Reader monad... which it's not quite as obvious what to do with.

utf8DecodeChar# in utils/Encoding (defined) and utils/StringBuffer (used) has unboxed tuple that contains FastTypes (well, unboxed types, but I think I'm going to make a FastChar and FastPtr to allow conversion of this kind of code)

The comments make clear that some of these places *are* hotspots (at least believed at the time of writing) (nativeGen/MachRegs' trivColorable, and utf8DecodeChar -- the monads' unboxed tuples aren't mentioned)

The rest of the unboxed-tuple uses are either not part of stage1 code, or refer to actual GHC-specific uses such as using the newtype IO constructor.

Given these few places, the limitations of past GHCs, and the desire to have unoptimized GHC be a decent speed, I think UTopen and UTclose macros are probably the best solution.

Agreed. It's very difficult to test whether a particular change degrades performance, as it might only do so on certain examples.

The best approach is to try to isolate the compiler-specific code as much as possible - for example having compiler-specific implementations of utils/State.

  (opinions?)  Given those macros,
and my type-class-extension-removal patchset, a GHC stage1 is in sight (needs a little more hacking and hack-cleanup on my part before submitting, maybe 1 day) that "only" uses CPP, ForeignFunctionInterface, PatternGuards and Rank2Types; plus MagicHash, UnboxedTuples and importing GHC.*, when __GLASGOW_HASKELL__ is defined. It might be possible that the four modules that use Rank2Types could be refactored not to, but that would be no use because GHC also uses module import cycles, which neither hugs nor nyhc support.

extension matrix, am I right? (did the tabs work to format it?)

no :)

hmm... maybe I'll move some of these observations to the Trac ticket http://hackage.haskell.org/trac/ghc/ticket/1405 when I'm more organized with my patches.

Good plan.

Cheers,
        Simon

_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to