Skip to content

Missed constant folding oportunities

A work colleague of mine found that some expressions were not being constant folded as expected.

For example:

module Test where
import Data.Int
number :: Int64
number = 2 ^ 10 - 3

compiled using:

ghc -O2 -keep-s-file -c test.hs

should result in an assembler file containing the constant 1021 but doesn't. However, if I change the above expression to:

number = 1024 -3

then the output assembler files does contain the value 1021.

I did a bit of a search and found some constant folding code in the hoopl library, but that doesn't seem to be what GHC actually uses.

Edited by Simon Peyton Jones
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information