
On Monday 20 September 2010 05:09:16 you wrote:
I'm building with the latest Haskell Platform. GHC 6.12.3 and OpenGL 2.2.1.1
:sigh: So we can forget about rewrite rules, newtypes, unsafeCoerce and all that Jazz. In OpenGL-2.2.1.1, GLclampf (and GLfloat &c.) were not newtypes, they were type synonyms, type GLclampf = Float and so on. So it's clear that GHC rewrites realToFrac to double2Float# in the benchmark, since it's converting to Float (that also explains the absence of casts in your core). Then, if floatToFloat is faster than realToFrac in your programme (compiled with optimisations), that probably means GHC doesn't spot an opportunity to replace realToFrac with double2Float# because the types are still polymorphic. Perhaps some type annotations would help.