Skip to content
  • Sebastian Graf's avatar
    d7758da4
    Simplifier: Do Cast W/W for INLINE strong loop-breakers · d7758da4
    Sebastian Graf authored and Marge Bot's avatar Marge Bot committed
    Strong loop-breakers never inline, INLINE pragma or not.
    Hence they should be treated as if there was no INLINE pragma on them.
    
    Also not doing Cast W/W for INLINE strong loop-breakers will trip up Strictness
    W/W, because it treats them as if there was no INLINE pragma. Subsequently,
    that will lead to a panic once Strictness W/W will no longer do eta-expansion,
    as we discovered while implementing !5814.
    
    I also renamed to `unfoldingInfo` to `realUnfoldingInfo` and redefined
    `unfoldingInfo` to zap the unfolding it returns in case of a strong loop-breaker.
    Now the naming and semantics is symmetrical to `idUnfolding`/`realIdUnfolding`.
    
    Now there was no more reason for `hasInlineUnfolding` to operate on `Id`,
    because the zapping of strong loop-breaker unfoldings moved from `idUnfolding`
    to `unfoldingInfo`, so I refactored it to take `IdInfo` and call it both from
    the Simplifier and WorkWrap, making it utterly clear that both checks are
    equivalent.
    d7758da4
    Simplifier: Do Cast W/W for INLINE strong loop-breakers
    Sebastian Graf authored and Marge Bot's avatar Marge Bot committed
    Strong loop-breakers never inline, INLINE pragma or not.
    Hence they should be treated as if there was no INLINE pragma on them.
    
    Also not doing Cast W/W for INLINE strong loop-breakers will trip up Strictness
    W/W, because it treats them as if there was no INLINE pragma. Subsequently,
    that will lead to a panic once Strictness W/W will no longer do eta-expansion,
    as we discovered while implementing !5814.
    
    I also renamed to `unfoldingInfo` to `realUnfoldingInfo` and redefined
    `unfoldingInfo` to zap the unfolding it returns in case of a strong loop-breaker.
    Now the naming and semantics is symmetrical to `idUnfolding`/`realIdUnfolding`.
    
    Now there was no more reason for `hasInlineUnfolding` to operate on `Id`,
    because the zapping of strong loop-breaker unfoldings moved from `idUnfolding`
    to `unfoldingInfo`, so I refactored it to take `IdInfo` and call it both from
    the Simplifier and WorkWrap, making it utterly clear that both checks are
    equivalent.
Loading