Skip to content

Primitive string literals prevent optimization

Using an Addr# literal seems to result in less aggressive optimization. If I compile the attached program like this:

ghc -O2 -fforce-recomp -ddump-simpl addr.hs

the code is optimized nicely. Everything are inlined into t, intermediate pairs are eliminated, etc.

However, when I replace the Int# literals in the code with Addr# literals by defining the ADDR macro:

ghc -O2 -fforce-recomp -ddump-simpl -DADDR addr.hs

GHC now creates 2 extra top-level bindings, each of which allocates a pair. I don't see why the presence of Addr# literals should prevent inlining, so I'm reporting a bug.

Trac metadata
Trac field Value
Version 7.6.3
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information