Simon,

Possibly, yes.  IIRC, -O3 was mainly to get some loop unrolling.  This
is a performance-critical part of the system though, and when making any
changes we like to measure things to make sure we haven't pessimised
performance.

I will try to test it both ways, then. Also, -optc-O3 is turned on even for debug builds since GC_HC_OPTS is set unconditionally. I could change it to:

        ifneq (,$(findstring $(SRC_HC_OPTS), -DDEBUG))
        GC_HC_OPTS += -optc-O3
        endif


(3) I have been looking at how to implement a dual-constructor-in-a-
pointer for Integer (i.e., merge constructors of small Integers and
big Integers into the Int#).  Would that solution be workable or
might it break current Haskell programs?  Just a thought.

Which representation in particular are you talking about here?

I was talking about the definition of Integer in packages/base/GHC/ Num.lhs particularly the implementation in PrimOps.cmm, which returns Integers as:

   /* returns (# size  :: Int#,
                         data  :: ByteArray# #)
   */
   RET_NP(s,p);

If the ByteArray were indicated through a pointer, the representation in Haskell would be

        J# IntegerT#
        {- new type, depending on pointer size,
           either holding 30 or 62 bits of precision -}

and a Cmm procedure returning an Integer would be:

        RET_NP(p);

I hope this doesn't confuse you.

Best regards,
Peter
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to