Introduce pointer tagging for big families (fix #14373)
The data constructor pointer tagging was incomplete for certain data types that had more than an architecture-specific limit w.r.t. the number of its constructors.
E.g. on 64-bit architectures a data type with more than 7 constructors
got always assigned a pointer tag of 0b001
when evaluated (WHNF).
This MR sets such data types on equal footing with "small constructor
families" by employing pointer tags 0b001
to 0b111
. The latter
is then used as an indication that the info table needs to be consulted
(by an additional CMM switch
) to obtain missing constructor information.
See commit message for benchmark results and changes in binary sizes.