Skip to content
Snippets Groups Projects
  1. Oct 18, 2024
    • Cheng Shao's avatar
      rts: use page sized mblocks on wasm · ecfc3539
      Cheng Shao authored
      This patch changes mblock size to page size on wasm. It allows us to
      simplify our wasi-libc fork, makes it much easier to test third party
      libc allocators like emmalloc/mimalloc, as well as experimenting with
      threaded RTS in wasm.
      
      (cherry picked from commit 558353f4)
      (cherry picked from commit f3ea9fb8)
      ecfc3539
    • Cheng Shao's avatar
      rts: cleanup inlining logic · 14b5faa1
      Cheng Shao authored
      This patch removes pre-C11 legacy code paths related to
      INLINE_HEADER/STATIC_INLINE/EXTERN_INLINE macros, ensure EXTERN_INLINE
      is treated as static inline in most cases (fixes #24945), and also
      corrects the comments accordingly.
      
      (cherry picked from commit 35a64220)
      (cherry picked from commit 241f401d)
      14b5faa1
    • Cheng Shao's avatar
      testsuite: skip objc-hi/objcxx-hi when cross compiling · bd11bf1b
      Cheng Shao authored
      objc-hi/objcxx-hi should be skipped when cross compiling. The existing
      opsys('darwin') predicate only asserts the host system is darwin but
      tells us nothing about the target, hence the oversight.
      
      (cherry picked from commit 595c0894)
      (cherry picked from commit 5273d3d0)
      bd11bf1b
    • Cheng Shao's avatar
      testsuite: bump T7653 timeout for wasm · 97ad6fb6
      Cheng Shao authored
      (cherry picked from commit 2eee65e1)
      (cherry picked from commit 3f7b718f)
      97ad6fb6
    • Cheng Shao's avatar
      testsuite: mark T7773 as fragile on wasm · 1b5ba018
      Cheng Shao authored
      (cherry picked from commit ae50a8eb)
      (cherry picked from commit b7e93bc9)
      1b5ba018
    • Cheng Shao's avatar
      hadrian: build in-tree GMP with malloc-notreentrant on wasm32 · 7c61bdb3
      Cheng Shao authored
      This patch makes hadrian build in-tree GMP with the
      --enable-alloca=malloc-notreentrant configure option. We will only
      need malloc-reentrant when we have threaded RTS and SMP support on
      wasm32, which will take some time to happen, before which we should
      use malloc-notreentrant to avoid undesired runtime overhead.
      
      (cherry picked from commit 06277d56)
      (cherry picked from commit 0f9a8aaf)
      7c61bdb3
    • Cheng Shao's avatar
      hadrian: disable in-tree gmp fft code path for wasm32 · 5eb9fc07
      Cheng Shao authored
      This patch disables in-tree GMP FFT code paths for wasm32 target in
      order to give up some performance of multiplying very large operands
      in exchange for reduced code size.
      
      (cherry picked from commit 1a32f828)
      (cherry picked from commit 097ea6e2)
      5eb9fc07
    • Cheng Shao's avatar
      hadrian: disable PIC for in-tree GMP on wasm32 · efc4e37a
      Cheng Shao authored
      This patch disables PIC for in-tree GMP on wasm32 target. Enabling PIC
      unconditionally adds undesired code size and runtime overhead for
      wasm32.
      
      (cherry picked from commit f9c1ae12)
      (cherry picked from commit 5f728fc4)
      efc4e37a
    • Cheng Shao's avatar
      compiler: fix -ddump-cmm-raw when compiling .cmm · 07bd4e6c
      Cheng Shao authored
      This patch fixes missing -ddump-cmm-raw output when compiling .cmm,
      which is useful for debugging cmm related codegen issues.
      
      (cherry picked from commit 6346c669)
      (cherry picked from commit e5a1dd43)
      07bd4e6c
    • Cheng Shao's avatar
      hadrian: handle findExecutable "" gracefully · 6a36a91d
      Cheng Shao authored
      hadrian may invoke findExecutable "" at run-time due to a certain
      program is not found by configure script. Which is fine and
      findExecutable is supposed to return Nothing in this case. However, on
      Windows there's a directory bug that throws an exception (see
      https://github.com/haskell/directory/issues/180), so we might as well
      use a wrapper for findExecutable and handle exceptions gracefully.
      
      (cherry picked from commit 1e5752f6)
      (cherry picked from commit 78150bfc)
      6a36a91d
    • Cheng Shao's avatar
      utils: add hie.yaml config file for ghc-config · fd9c7a65
      Cheng Shao authored
      Add hie.yaml to ghc-config project directory so it can be edited using
      HLS.
      
      (cherry picked from commit 7eda4bd2)
      (cherry picked from commit ed81a875)
      fd9c7a65
    • Cheng Shao's avatar
      compiler: remove ArchWasm32 special case in cmmDoCmmSwitchPlans · 39bdb0e5
      Cheng Shao authored
      This patch removes special consideration for ArchWasm32 in
      cmmDoCmmSwitchPlans, which means the compiler will now disable
      cmmImplementSwitchPlans for wasm unreg backend, just like unreg
      backend of other targets. We enabled it in the past to workaround some
      compile-time panic in older versions of LLVM, but those panics are no
      longer present, hence no need to keep this workaround.
      
      (cherry picked from commit bf0737c0)
      (cherry picked from commit 8bd28cf2)
      39bdb0e5
    • Cheng Shao's avatar
      driver: build C/C++ with -ffunction-sections -fdata-sections when split sections is enabled · 0aee272d
      Cheng Shao authored
      When -fsplit-sections is passed to GHC, pass -ffunction-sections
      -fdata-sections to gcc/clang when building C/C++. Previously,
      -fsplit-sections was only respected by the NCG/LLVM backends, but not
      the unregisterised backend; the GHC driver did not pass
      -fdata-sections and -ffunction-sections to the C compiler, which
      resulted in excessive executable sizes.
      
      Fixes #23381.
      
      -------------------------
      Metric Decrease:
          size_hello_artifact
          size_hello_unicode
      -------------------------
      
      (cherry picked from commit 02b1f91e)
      (cherry picked from commit 74cdf564)
      0aee272d
    • Cheng Shao's avatar
      hadrian: build C/C++ with split sections when enabled · c64a9363
      Cheng Shao authored
      When split sections is enabled, ensure -fsplit-sections is passed to
      GHC as well when invoking GHC to compile C/C++; and pass
      -ffunction-sections -fdata-sections to gcc/clang when compiling C/C++
      with the hadrian Cc builder. Fixes #23381.
      
      (cherry picked from commit 0958937e)
      (cherry picked from commit 7d5a22c2)
      c64a9363
    • Cheng Shao's avatar
      testsuite: bump MultiLayerModulesDefsGhciReload timeout to 10x · c0be2503
      Cheng Shao authored
      (cherry picked from commit e17f2df9)
      (cherry picked from commit 9a2f3313)
      c0be2503
    • Cheng Shao's avatar
      rts: fix missing function prototypes in ClosureMacros.h · bea77134
      Cheng Shao authored
      (cherry picked from commit 3ca72ad9)
      (cherry picked from commit 952dd3f4)
      bea77134
    • Cheng Shao's avatar
      compiler: avoid saving foreign call target to local when there are no caller-save GlobalRegs · 602537bb
      Cheng Shao authored
      This patch makes the STG->Cmm backend avoid saving foreign call target
      to local when there are no caller-save GlobalRegs.
      
      Since 321941a8, when we lower a
      foreign call, we unconditionally save the foreign call target to a
      temporary local first, then rely on cmmSink to clean it up later,
      which only happens with -fcmm-sink (implied by -O) and not in
      unoptimized code.
      
      And this is troublesome for the wasm backend NCG, which needs to infer
      a foreign call target symbol's type signature from the Cmm call site.
      Previously, the NCG has been emitting incorrect type signatures for
      unoptimized code, which happens to work with `wasm-ld` most of the
      time, but this is never future-proof against upstream toolchain
      updates, and it causes horrible breakages when LTO objects are
      included in linker input. Hence this patch.
      
      (cherry picked from commit 8dd8a076)
      (cherry picked from commit 2b2a3db8)
      602537bb
    • Cheng Shao's avatar
      testsuite: don't attempt to detect host cpu features when testing cross ghc · 15718114
      Cheng Shao authored
      The testsuite driver CPU feature detection logic only detects host CPU
      and only makes sense when we are not testing a cross GHC.
      
      (cherry picked from commit c4c6d714)
      (cherry picked from commit 07641012)
      15718114
    • Cheng Shao's avatar
      testsuite: bump T22744 timeout to 5x · e26d5947
      Cheng Shao authored
      (cherry picked from commit c739383b)
      (cherry picked from commit f21a1e56)
      e26d5947
    • Cheng Shao's avatar
      testsuite: fix T17920 for wasm backend · 1c14b8a4
      Cheng Shao authored
      T17920 was marked as fragile on wasm before; it can be trivially fixed
      by avoiding calling variadic printf() in cmm.
      
      (cherry picked from commit 7b4c1998)
      (cherry picked from commit c4060ce3)
      1c14b8a4
    • Cheng Shao's avatar
      autoconf: remove unused context diff check · 4c607276
      Cheng Shao authored
      This patch removes redundant autoconf check for the context diff
      program given it isn't actually been used anywhere, especially since
      make removal.
      
      (cherry picked from commit b7bcf729)
      (cherry picked from commit 0e9d2a0f)
      4c607276
    • Cheng Shao's avatar
      rts: fix I/O manager compilation errors for win32 target · f38ef41d
      Cheng Shao authored
      This patch fixes I/O manager compilation errors for win32 target
      discovered when cross-compiling to win32 using recent clang:
      
      ```
      rts/win32/ThrIOManager.c:117:7: error:
           error: call to undeclared function 'is_io_mng_native_p'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
            117 |   if (is_io_mng_native_p ()) {
                |       ^
          |
      117 |   if (is_io_mng_native_p ()) {
          |       ^
      
      1 error generated.
      `x86_64-w64-mingw32-clang' failed in phase `C Compiler'. (Exit code: 1)
      
      rts/fs.c:143:28: error:
           error: a function declaration without a prototype is deprecated in all versions of C [-Werror,-Wstrict-prototypes]
            143 | int setErrNoFromWin32Error () {
                |                            ^
                |                             void
          |
      143 | int setErrNoFromWin32Error () {
          |                            ^
      
      1 error generated.
      `x86_64-w64-mingw32-clang' failed in phase `C Compiler'. (Exit code: 1)
      
      rts/win32/ConsoleHandler.c:227:9: error:
           error: call to undeclared function 'interruptIOManagerEvent'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
            227 |         interruptIOManagerEvent ();
                |         ^
          |
      227 |         interruptIOManagerEvent ();
          |         ^
      
      rts/win32/ConsoleHandler.c:227:9: error:
           note: did you mean 'getIOManagerEvent'?
          |
      227 |         interruptIOManagerEvent ();
          |         ^
      
      rts/include/rts/IOInterface.h:27:10: error:
           note: 'getIOManagerEvent' declared here
             27 | void *   getIOManagerEvent  (void);
                |          ^
         |
      27 | void *   getIOManagerEvent  (void);
         |          ^
      
      1 error generated.
      `x86_64-w64-mingw32-clang' failed in phase `C Compiler'. (Exit code: 1)
      
      rts/win32/ConsoleHandler.c:196:9: error:
           error: call to undeclared function 'setThreadLabel'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
            196 |         setThreadLabel(cap, t, "signal handler thread");
                |         ^
          |
      196 |         setThreadLabel(cap, t, "signal handler thread");
          |         ^
      
      rts/win32/ConsoleHandler.c:196:9: error:
           note: did you mean 'postThreadLabel'?
          |
      196 |         setThreadLabel(cap, t, "signal handler thread");
          |         ^
      
      rts/eventlog/EventLog.h:118:6: error:
           note: 'postThreadLabel' declared here
            118 | void postThreadLabel(Capability    *cap,
                |      ^
          |
      118 | void postThreadLabel(Capability    *cap,
          |      ^
      
      1 error generated.
      `x86_64-w64-mingw32-clang' failed in phase `C Compiler'. (Exit code: 1)
      ```
      
      (cherry picked from commit 710665bd)
      (cherry picked from commit 9499ed96)
      f38ef41d
    • Cheng Shao's avatar
      testsuite: bump PartialDownSweep timeout to 5x on wasm32 · 1c5ec095
      Cheng Shao authored
      (cherry picked from commit b1e0c313)
      (cherry picked from commit 34882192)
      1c5ec095
    • Cheng Shao's avatar
      testsuite: fix req_target_smp predicate · fa597c00
      Cheng Shao authored
      (cherry picked from commit a580722e)
      (cherry picked from commit 4f317bfd)
      fa597c00
    • Cheng Shao's avatar
      autoconf: remove obsolete patch detection · 5befcf48
      Cheng Shao authored
      This commit removes obsolete deletection logic of the patch command
      from autoconf scripts, given we no longer need to patch anything in
      the GHC build process.
      
      (cherry picked from commit 71f28958)
      (cherry picked from commit 1e77ded1)
      5befcf48
    • Cheng Shao's avatar
      hadrian: remove obsolete Patch logic · cd81221d
      Cheng Shao authored
      This commit removes obsolete Patch logic from hadrian, given we no
      longer need to patch the gmp tarball when building in-tree GMP.
      
      (cherry picked from commit 65b4b92f)
      (cherry picked from commit 92065500)
      cd81221d
    • Cheng Shao's avatar
      ghc-bignum: update gmp to 6.3.0 · 9966c4b1
      Cheng Shao authored
      This patch bumps the gmp-tarballs submodule and updates gmp to 6.3.0.
      The tarball format is now xz, and gmpsrc.patch has been patched into
      the tarball so hadrian no longer needs to deal with patching logic
      when building in-tree GMP.
      
      (cherry picked from commit 6399d52b)
      (cherry picked from commit f845a792)
      9966c4b1
    • Cheng Shao's avatar
      ghc-bignum: remove obsolete ln script · 9eacabba
      Cheng Shao authored
      This commit removes an obsolete ln script in ghc-bignum/gmp. See
      060251c2 for its original intention,
      but it's been obsolete for a long time, especially since the removal
      of the make build system. Hence the house cleaning.
      
      (cherry picked from commit c62dc317)
      (cherry picked from commit 5f4848c0)
      9eacabba
    • Cheng Shao's avatar
      testsuite: drop exe extension from .hp & .prof filenames · a584dc43
      Cheng Shao authored
      See #24515 for details.
      
      (cherry picked from commit 259495ee)
      a584dc43
    • Cheng Shao's avatar
      rts: assert pointer is indeed heap allocated in Bdescr() · 18bbd355
      Cheng Shao authored
      This commit adds an assertion to Bdescr() to assert the pointer is
      indeed heap allocated. This is useful to rule out RTS bugs that
      attempt to access non-existent block descriptor of a static closure, #24492
      being one such example.
      
      (cherry picked from commit d19441d7)
      18bbd355
    • Cheng Shao's avatar
      rts: expose HeapAlloc.h as public header · 5a170384
      Cheng Shao authored
      This commit exposes HeapAlloc.h as a public header. The intention is
      to expose HEAP_ALLOCED/HEAP_ALLOCED_GC, so they can be used in
      assertions in other public headers, and they may also be useful for
      user code.
      
      (cherry picked from commit dedcf102)
      5a170384
    • Cheng Shao's avatar
      utils: remove unused lndir from tree · 70e6ea9d
      Cheng Shao authored
      Ever since the removal of the make build system, the in tree lndir
      hasn't been actually built, so this patch removes it.
      
      (cherry picked from commit d3a050d2)
      70e6ea9d
    • Cheng Shao's avatar
      ci: enable parallelism in hadrian/ghci scripts · 84e8286b
      Cheng Shao authored
      This commit enables parallelism when the hadrian/ghci scripts are
      called in CI. The time bottleneck is in the hadrian build step, but
      previously the build step wasn't parallelized.
      
      (cherry picked from commit 50bfdb46)
      84e8286b
    • Cheng Shao's avatar
      hadrian/hie-bios: pass -j to hadrian · f0eecc6a
      Cheng Shao authored
      This commit passes -j to hadrian in the hadrian/hie-bios scripts. When
      the user starts HLS in a fresh clone that has just been configured, it
      takes quite a while for hie-bios to pick up the ghc flags and start
      actual indexing, due to the fact that the hadrian build step defaulted
      to -j1, so -j speeds things up and improve HLS user experience in GHC.
      Also add -j flag to .ghcid to speed up ghcid, and sets the Windows
      build root to .hie-bios which also works and unifies with other
      platforms, the previous build root _hie-bios was missing from
      .gitignore anyway.
      
      (cherry picked from commit c71bfdff)
      f0eecc6a
    • Cheng Shao's avatar
      rts: remove redundant rCCCS initialization · 5216caab
      Cheng Shao authored
      This commit removes the redundant logic of initializing each
      Capability's rCCCS to CCS_SYSTEM in initProfiling(). Before
      initProfiling() is called during RTS startup, each Capability's rCCCS
      has already been assigned CCS_SYSTEM when they're first initialized.
      
      (cherry picked from commit a7569495)
      5216caab
    • Cheng Shao's avatar
      testsuite: fix hs_try_putmvar002 for targets without pthread.h · f8b399b5
      Cheng Shao authored
      hs_try_putmvar002 includes pthread.h and doesn't work on targets
      without this header (e.g. wasm32). It doesn't need to include this
      header at all. This was previously unnoticed by wasm CI, though recent
      toolchain upgrade brought in upstream changes that completely removes
      pthread.h in the single-threaded wasm32-wasi sysroot, therefore we
      need to handle that change.
      
      (cherry picked from commit 2ce2a493)
      f8b399b5
    • Cheng Shao's avatar
      rts: define XXH_INLINE_ALL · 4e947116
      Cheng Shao authored
      This commit cleans up how we include the xxhash.h header and only
      define XXH_INLINE_ALL, which is sufficient to inline the xxHash
      functions without symbol collision.
      
      (cherry picked from commit ee01de7d)
      4e947116
    • Cheng Shao's avatar
      rts: use XXH3_64bits hash on all 64-bit platforms · 9543640d
      Cheng Shao authored
      This commit enables XXH3_64bits hash to be used on all 64-bit
      platforms. Previously it was only enabled on x86_64, so platforms like
      aarch64 silently falls back to using XXH32 which degrades the hashing
      function quality.
      
      (cherry picked from commit 4a97bdb8)
      9543640d
    • Cheng Shao's avatar
      rts: update xxHash to v0.8.2 · 5d59bcaa
      Cheng Shao authored
      (cherry picked from commit b19ec331)
      5d59bcaa
    • Cheng Shao's avatar
      compiler: enable generic cmm optimizations in wasm backend NCG · 7d991f09
      Cheng Shao authored
      This commit enables the generic cmm optimizations in other NCGs to be
      run in the wasm backend as well, followed by a late cmm control-flow
      optimization pass. The added optimizations do catch some corner cases
      not handled by the pre-NCG cmm pipeline and are useful in generating
      smaller CFGs.
      
      (cherry picked from commit c6ce242e)
      7d991f09
Loading