
#15482: the_gc_thread variable from GC.c is not aligned to 64 -------------------------------------+------------------------------------- Reporter: arrowd | Owner: (none) Type: bug | Status: closed Priority: normal | Milestone: 8.6.1 Component: Compiler | Version: 8.4.3 Resolution: fixed | Keywords: Operating System: Unknown/Multiple | Architecture: x86_64 | (amd64) Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by arrowd): Conrad Meyer, the FreeBSD guy that initially come with this suggestion also says that this fix is incorrect. Quoting him: Their change c6cc93bca only aligns the array to W_ aka StgWord aka StgWord64 aka unsigned long (8 bytes). This is insufficient for AVX2 alignment[1] (16 bytes for xmm, 32 for ymm) and still violates the guarantee attached to the gen_workspace structure (64 byte alignment). They need to remove the 64-byte gen_workspace alignment or add 64-byte alignment to the array to remove their UB. (They could align both to the smaller 32 bytes and still allow the compiler to take advantage of AVX2.) I don't know what lead them to believe an 8-byte alignment would fix an unaligned 32-byte AVX access. [1]: https://www.felixcloutier.com/x86/MOVAPS.html -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/15482#comment:8 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler