Skip to content

Supposedly unarised STG still contains unboxed sum

Summary

GHC produces STG with unboxed sums even after unarisation

Steps to reproduce

Build GHC 9.0.1 from source, then look at the unarised STG for ghc-bignum (this step can use a "normal" GHC 9.0.1, we just need to build from source to get all the dependencies in place). This command line is a simplification of the one run by Hadrian.

ghc \
  -i_build/stage1/libraries/ghc-bignum/build -i_build/stage1/libraries/ghc-bignum/build/autogen -ilibraries/ghc-bignum/src/ -Iincludes -I_build/stage1/lib -I_build/stage1/libraries/ghc-bignum/build -I_build/stage1/libraries/ghc-bignum/build/include/ -I_build/stage1/libraries/ghc-bignum/build/include -Ilibraries/ghc-bignum/include/ -Ilibraries/ghc-bignum/include -I/home/mi/prog/ghc/_build/stage1/lib/x86_64-linux-ghc-9.0.1/rts-1.0/include -I_build/stage1/lib \
  -outputdir _build/stage1/libraries/ghc-bignum/build \
  -c libraries/ghc-bignum/src/GHC/Num/WordArray.hs \
  -o _build/stage1/libraries/ghc-bignum/build/GHC/Num/WordArray.o \
  -this-unit-id ghc-bignum \
  -ddump-stg-unarised | \
grep withNewWordArrayTrimedMaybe -A6

In the output, we can see that withNewWordArrayTrimedMaybe# has a return type of an unboxed sum:

GHC.Num.WordArray.withNewWordArrayTrimedMaybe#
  :: GHC.Prim.Int#
     -> (GHC.Num.WordArray.MutableWordArray# GHC.Prim.RealWorld
         -> GHC.Prim.State# GHC.Prim.RealWorld
         -> (# GHC.Prim.State# GHC.Prim.RealWorld,
               GHC.Num.Primitives.Bool# #))
     -> (# (# #) | GHC.Num.WordArray.WordArray# #)

This is causing a problem when trying to rebase GHC-WPC to GHC 9.0.1.

(BTW, shouldn't it be "Trimmed", not "Trimed"?)

Environment

  • GHC version used: 9.0.1
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information