Do not create bindings for Ints in the range MIN_INTLIKE, MAX_INTLIKE
Motivation
Currently for a function like f x = if x == 0 then 0 else x - 1
GHC will generate a closure for the zero literal.
Any reference to this closure will get GC'd and replaced with a reference to one of the preallocated Int closures if it is still alive during a GC run.
The obvious gain would be code size as we can get rid of these closures. But that would not make a huge difference.
However in order to be able to replace existing Int closures with preallocated ones we need to read their payload, which means potential cache misses. Which is less likely to happen when reading one of the preallocated closures.
Proposal
We should just emit a reference to the preallocated closure at compile time when possible.
We should also reconsider expanding the range for which preallocate Int closures to something in the order of <= 128.