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