Note [TagInfo of functions]
The purpose of tag inference is really to figure out when we don't have to enter value closures. There the meaning of the tag is fairly obvious. For functions we never make use of the tag info so we have two choices: * Treat them as TagDunno * Treat them as TagProper (as they *are* tagged with their arity) and be really careful to make sure we still enter them when needed. As it makes little difference for runtime performance I've treated functions as TagDunno in a few places where it made the code simpler. But besides implementation complexity there isn't any reason why we couldn't be more rigorous in dealing with functions. NB: It turned in #21193 that PAPs get tag zero, so the tag check can't be omitted for functions. So option two isn't really an option without reworking this anyway.
References 0
This Note does not link to any other.
Referenced by 3
- Which Ids should be strictified GHC.Core.Utils
- GHC.Core.Utils call site
- GHC.StgToCmm.TagCheck call site