x86 NCG SIMD: Code generation error if packFloatX4# is called with 0.0# and -mavx is set
Summary
GHC panics when compiling packFloatX4# (# 0.0#, 1.0#, 2.0#, 3.0# #)
with -mavx
flag.
Steps to reproduce
{-# LANGUAGE MagicHash, UnboxedTuples #-}
import GHC.Exts
unpackFloatX4 :: FloatX4# -> (Float, Float, Float, Float)
unpackFloatX4 v = case unpackFloatX4# v of
(# a0, a1, a2, a3 #) -> (F# a0, F# a1, F# a2, F# a3)
main :: IO ()
main = do
let v = packFloatX4# (# 0.0#, 1.0#, 2.0#, 3.0# #) -- error
-- let v = packFloatX4# (# 3.0#, 2.0#, 1.0#, 0.0# #) -- error
-- let v = packFloatX4# (# 1.0#, 1.0#, 2.0#, 3.0# #) -- OK
print $ unpackFloatX4 v
$ ghc -fforce-recomp -msse4 simd_pack_0.hs # without -mavx: OK
$ ghc -fforce-recomp -fllvm -msse4 -mavx simd_pack_0.hs # with -fllvm: OK
$ ghc -fforce-recomp -msse4 -mavx simd_pack_0.hs # with -mavx: error
[1 of 2] Compiling Main ( simd_pack_0.hs, simd_pack_0.o )
<no location info>: error:
panic! (the 'impossible' happened)
GHC version 9.13.20241102:
GHC.CmmToAsm.X86.Ppr.pprVxor: elementy type must be Float or Double
FF32
Call stack:
CallStack (from HasCallStack):
callStackDoc, called at compiler/GHC/Utils/Panic.hs:191:37 in ghc-9.13-inplace:GHC.Utils.Panic
pprPanic, called at compiler/GHC/CmmToAsm/X86/Ppr.hs:1348:14 in ghc-9.13-inplace:GHC.CmmToAsm.X86.Ppr
CallStack (from HasCallStack):
panic, called at compiler/GHC/Utils/Error.hs:507:29 in ghc-9.13-inplace:GHC.Utils.Error
Please report this as a GHC bug: https://www.haskell.org/ghc/reportabug
Expected behavior
GHC should compile the program without error.
Environment
- GHC version used: 9.13.20241102 (fdd9f62a)
- Operating System: Linux
- System Architecture: x86_64