Skip to content

Introduce pointer tagging for big families (fix #14373)

Ben Gamari requested to merge wip/T14373 into master

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.

Edited by Ömer Sinan Ağacan

Merge request reports