[Git][ghc/ghc][wip/toolchain-selection] 39 commits: Improve the situation with the stimes cycle

Rodrigo Mesquita (@alt-romes) gitlab at gitlab.haskell.org
Mon Jul 10 09:04:43 UTC 2023



Rodrigo Mesquita pushed to branch wip/toolchain-selection at Glasgow Haskell Compiler / GHC


Commits:
9ce44336 by meooow25 at 2023-07-05T11:42:37-04:00
Improve the situation with the stimes cycle

Currently the Semigroup stimes cycle is resolved in GHC.Base by
importing stimes implementations from a hs-boot file. Resolve the cycle
using hs-boot files for required classes (Num, Integral) instead. Now
stimes can be defined directly in GHC.Base, making inlining and
specialization possible.

This leads to some new boot files for `GHC.Num` and `GHC.Real`, the
methods for those are only used to implement `stimes` so it doesn't
appear that these boot files will introduce any new performance traps.

Metric Decrease:
    T13386
    T8095
Metric Increase:
    T13253
    T13386
    T18698a
    T18698b
    T19695
    T8095

- - - - -
9edcb1fb by Jaro Reinders at 2023-07-05T11:43:24-04:00
Refactor Unique to be represented by Word64

In #22010 we established that Int was not always sufficient to store all
the uniques we generate during compilation on 32-bit platforms. This
commit addresses that problem by using Word64 instead of Int for
uniques.

The core of the change is in GHC.Core.Types.Unique and
GHC.Core.Types.Unique.Supply. However, the representation of uniques is
used in many other places, so those needed changes too. Additionally, the RTS
has been extended with an atomic_inc64 operation.

One major change from this commit is the introduction of the Word64Set and
Word64Map data types. These are adapted versions of IntSet and IntMap
from the containers package. These are planned to be upstreamed in the
future.

As a natural consequence of these changes, the compiler will be a bit
slower and take more space on 32-bit platforms. Our CI tests indicate
around a 5% residency increase.

Metric Increase:
    CoOpt_Read
    CoOpt_Singletons
    LargeRecord
    ManyAlternatives
    ManyConstructors
    MultiComponentModules
    MultiComponentModulesRecomp
    MultiLayerModulesTH_OneShot
    RecordUpdPerf
    T10421
    T10547
    T12150
    T12227
    T12234
    T12425
    T12707
    T13035
    T13056
    T13253
    T13253-spj
    T13379
    T13386
    T13719
    T14683
    T14697
    T14766
    T15164
    T15703
    T16577
    T16875
    T17516
    T18140
    T18223
    T18282
    T18304
    T18698a
    T18698b
    T18923
    T1969
    T19695
    T20049
    T21839c
    T3064
    T3294
    T4801
    T5030
    T5321FD
    T5321Fun
    T5631
    T5642
    T5837
    T6048
    T783
    T8095
    T9020
    T9198
    T9233
    T9630
    T9675
    T9872a
    T9872b
    T9872b_defer
    T9872c
    T9872d
    T9961
    TcPlugin_RewritePerf
    UniqLoop
    WWRec
    hard_hole_fits

- - - - -
6b9db7d4 by Brandon Chinn at 2023-07-05T11:44:03-04:00
Fix docs for __GLASGOW_HASKELL_FULL_VERSION__ macro
- - - - -
40f4ef7c by Torsten Schmits at 2023-07-05T18:06:19-04:00
Substitute free variables captured by breakpoints in SpecConstr

Fixes #23267

- - - - -
2b55cb5f by sheaf at 2023-07-05T18:07:07-04:00
Reinstate untouchable variable error messages

This extra bit of information was accidentally being discarded after
a refactoring of the way we reported problems when unifying a type
variable with another type. This patch rectifies that.

- - - - -
53ed21c5 by Rodrigo Mesquita at 2023-07-05T18:07:47-04:00
configure: Drop Clang command from settings

Due to 01542cb7227614a93508b97ecad5b16dddeb6486 we no longer use the
`runClang` function, and no longer need to configure into settings the
Clang command. We used to determine options at runtime to pass clang when
it was used as an assembler, but now that we configure at configure time
we no longer need to.

- - - - -
6fdcf969 by Torsten Schmits at 2023-07-06T12:12:09-04:00
Filter out nontrivial substituted expressions in substTickish

Fixes #23272

- - - - -
41968fd6 by Sylvain Henry at 2023-07-06T12:13:02-04:00
JS: testsuite: use req_c predicate instead of js_broken

- - - - -
74a4dd2e by Sylvain Henry at 2023-07-06T12:13:02-04:00
JS: implement some file primitives (lstat,rmdir) (#22374)

- Implement lstat and rmdir.
- Implement base_c_s_is* functions (testing a file type)
- Enable passing tests

- - - - -
7e759914 by Sylvain Henry at 2023-07-07T02:39:38-04:00
JS: cleanup utils (#23314)

- Removed unused code
- Don't export unused functions
- Move toTypeList to Closure module

- - - - -
f617655c by Sylvain Henry at 2023-07-07T02:39:38-04:00
JS: rename VarType/Vt into JSRep

- - - - -
19216ca5 by Sylvain Henry at 2023-07-07T02:39:38-04:00
JS: remove custom PrimRep conversion (#23314)

We use the usual conversion to PrimRep and then we convert these
PrimReps to JSReps.

- - - - -
d3de8668 by Sylvain Henry at 2023-07-07T02:39:38-04:00
JS: don't use isRuntimeRepKindedTy in JS FFI

- - - - -
8d1b75cb by Matthew Pickering at 2023-07-07T02:40:15-04:00
ghcup-metadata: Also updates ghcup-nightlies-0.0.7.yaml file

Fixes #23600

- - - - -
e524fa7f by Matthew Pickering at 2023-07-07T02:40:15-04:00
ghcup-metadata: Use dynamically linked alpine bindists

In theory these will work much better on alpine to allow people to build
statically linked applications there. We don't need to distribute a
statically linked application ourselves in order to allow that.

Fixes #23602

- - - - -
b9e7beb9 by Ben Gamari at 2023-07-07T11:32:22-04:00
Drop circle-ci-job.sh

- - - - -
9955eead by Ben Gamari at 2023-07-07T11:32:22-04:00
testsuite: Allow preservation of unexpected output

Here we introduce a new flag to the testsuite driver,
--unexpected-output-dir=<dir>, which allows the user to ask
the driver to preserve unexpected output from tests. The intent is for
this to be used in CI to allow users to more easily fix unexpected
platform-dependent output.

- - - - -
48f80968 by Ben Gamari at 2023-07-07T11:32:22-04:00
gitlab-ci: Preserve unexpected output

Here we enable use of the testsuite driver's `--unexpected-output-dir`
flag by CI, preserving the result as an artifact for use by users.

- - - - -
76983a0d by Matthew Pickering at 2023-07-07T11:32:58-04:00
driver: Fix -S with .cmm files

There was an oversight in the driver which assumed that you would always
produce a `.o` file when compiling a .cmm file.

Fixes #23610

- - - - -
6df15e93 by Mike Pilgrem at 2023-07-07T11:33:40-04:00
Update Hadrian's stack.yaml
- - - - -
1dff43cf by Ben Gamari at 2023-07-08T05:05:37-04:00
compiler: Rework ShowSome

Previously the field used to filter the sub-declarations to show
was rather ad-hoc and was only able to show at most one sub-declaration.

- - - - -
8165404b by Ben Gamari at 2023-07-08T05:05:37-04:00
testsuite: Add test to catch changes in core libraries

This adds testing infrastructure to ensure that changes in core
libraries (e.g. `base` and `ghc-prim`) are caught in CI.

- - - - -
ec1c32e2 by Melanie Phoenix at 2023-07-08T05:06:14-04:00
Deprecate Data.List.NonEmpty.unzip

- - - - -
5d2442b8 by Ben Gamari at 2023-07-08T05:06:51-04:00
Drop latent mentions of -split-objs

Closes #21134.

- - - - -
a9bc20cb by Oleg Grenrus at 2023-07-08T05:07:31-04:00
Add warn_and_run test kind

This is a compile_and_run variant which also captures the GHC's
stderr. The warn_and_run name is best I can come up with,
as compile_and_run is taken.

This is useful specifically for testing warnings.  We want to test that
when warning triggers, and it's not a false positive, i.e. that the
runtime behaviour is indeed "incorrect".

As an example a single test is altered to use warn_and_run

- - - - -
c7026962 by Ben Gamari at 2023-07-08T05:08:11-04:00
configure: Don't use ld.gold on i386

ld.gold appears to produce invalid static constructor tables on i386.
While ideally we would add an autoconf check to check for this
brokenness, sadly such a check isn't easy to compose. Instead to
summarily reject such linkers on i386.

Somewhat hackily closes #23579.

- - - - -
054261dd by Bodigrim at 2023-07-08T19:32:47-04:00
Add since annotations for Data.Foldable1

- - - - -
550af505 by Sylvain Henry at 2023-07-08T19:33:28-04:00
JS: support -this-unit-id for programs in the linker (#23613)

- - - - -
d284470a by Bodigrim at 2023-07-08T19:34:08-04:00
Bump text submodule

- - - - -
3d3a7fec by Ben Gamari at 2023-07-10T09:42:59+01:00
ghc-toolchain: Initial commit

- - - - -
47fb3e71 by Rodrigo Mesquita at 2023-07-10T09:43:00+01:00
Create ghc_toolchain.m4

Don't pass options to ghc-toolchain, it should arrive at the same conclusion as configure for now

Don't crash on ghc-toolchain failure

Mingw bundled toolchain

- - - - -
2405b138 by Rodrigo Mesquita at 2023-07-10T09:43:00+01:00
ghc-toolchain: Toolchain Selection

ghc-toolchain: Rename readProcess to readProcessStdout

Fixes bugs regarding a translation from the original autconf program
that failed to account for the exit code.

The longer name reenforces that we really only care about the stdout,
and the exit code and stderr of the program are irrelevant for the case.

Fixes

Re-introduce ld-override option

ghc-toolchain library and usage in hadrian flags

Re-introduce flags in hadrian config

ghc-toolchain: UseLibFFI, LdCompactUnwind, LdFileList

A more complete ghc-toolchain.
Added configuration of:

* Use libffi for adjustors
* Supports compact unwind
* Supports filelist

Handle passing CPP cmd and flags from configure to ghc-toolchain

Rip more of configure that is no longer being used

Remove configure checks of GNUnoexecStack and ident directive

And fix bug in ghc-toolchain respective code

Rip out more from hadrians system.config.in

Configure CLink supports response files

Read deleted keys from host and target's target

Delete CMD_OPTS_STAGEX

Instead of having configure configure different options for different
programs depend on the stage, we delete this completely and have hadrian
select the correct target toolchain configuration file depending on the
stage, from which it can read those options.

Fix [host|target]-[os|arch] vs [host|target]-haskell-[os|arch]

Handle unspecified vs specified flags and commands better

Configure Cpp and HsCpp separately

Fixes for compilation

Link is GNU linkerg

Revert "Rip more of configure that is no longer being used"

I realized we still need this function in rts/configure.ac

This reverts commit 01f5d4b4.

Revert get_arm_isa deletion from 74f03f24

As in the previous commit, we still need this info from the rts
configure script.

I suppose it could be useful for the rts to also read somehow the
toolchain information...

helper AC function for enable/disable

Delete unused imports of SysTools.Info

Drop PROG_CPP in distrib/autoconf too

Get rid of MonadCatch instances and dependencies

ghc-toolchain: Check Cc supports extra-via-c-flags

Consider empty programs as non-specified programs

Cpp and HsCpp cleanup

Add comment from check for gold t22266

Remove more settings bits from hadrian/cfg

Use llvm target from ghc-toolchain

Print default.target

Fix bugs in MergeTool and Ar

Add check and log errors on error

X

Revert LLVMTarget deletion in mkprojectmkin

Fix stack job

Fixes for ghc-toolchain to match configure output

ghc-toolchain: Fix ar supports at file

Fixes

ghc-toolchain: Fix check for gold bug

ghc-toolchain: configure linker options correctly

Support more targets and dont use llvmtarget

allow duplos in place of triples

A TODO comment

ghc-toolchain: set CC LD plat. dependent flags

A lot to be said about the approach of configuring linker flags (what
used to be SET CC LD platform dependent flags in configure), we might
want to re-do this all eventually...
Perhaps I ought to add a TODO at the top level of these functions?

We might also not do it altogether, some of these might be outdated?

Move osElfTarget from GHC.Platform to GHC.Platform.ArchOS, to use it in
Toolchain.Tools.Link to correctly determine if -Wl,--no-as-needed is required

Windows bundled toolchain, output path, etc

Add windows bundled toolchain specific flags

- - - - -
3d05705a by Rodrigo Mesquita at 2023-07-10T09:43:00+01:00
refactor on hadrian handling of toolchains

Fixes to hadrian and ghc-toolchain

- - - - -
f1ed02d4 by Rodrigo Mesquita at 2023-07-10T09:43:00+01:00
configure: Create and validate toolchain target file

Interpolate LeadingUnderscore in distrib/configure.ac.in

- - - - -
b43857e4 by Rodrigo Mesquita at 2023-07-10T09:44:24+01:00
Split GHC.Platform.ArchOS from ghc-boot into ghc-platform

- - - - -
78744b24 by Rodrigo Mesquita at 2023-07-10T09:44:26+01:00
Use ghc-platform instead of ghc-boot

- - - - -
bf86ae78 by Rodrigo Mesquita at 2023-07-10T09:44:26+01:00
Revert "Mingw bundled toolchain"

This reverts commit 7d04d6bcb4a65d6dc97f1d59497c3c0a208b8be6.

Revert "Windows bundled toolchain, output path, etc"

This reverts commit 50089ea4b39885c38f1e6b02c9babebf47170d1c.

Revert "Add windows bundled toolchain specific flags"

This reverts commit a5734d7450890f739196d46610ba8d5558755782.

Adjust

- - - - -
a75d6630 by Rodrigo Mesquita at 2023-07-10T09:44:26+01:00
FixeWs

Fixes2

- - - - -
07e269dd by Rodrigo Mesquita at 2023-07-10T09:55:19+01:00
Try to add locally-executable arg

- - - - -


29 changed files:

- .gitlab-ci.yml
- .gitlab/ci.sh
- − .gitlab/circle-ci-job.sh
- .gitlab/generate-ci/gen_ci.hs
- .gitlab/jobs.yaml
- + TODO
- compiler/GHC/Builtin/Uniques.hs
- compiler/GHC/Cmm/CommonBlockElim.hs
- compiler/GHC/Cmm/Dataflow/Collections.hs
- compiler/GHC/Cmm/Dataflow/Label.hs
- compiler/GHC/Cmm/Dominators.hs
- compiler/GHC/Cmm/LRegSet.hs
- compiler/GHC/Cmm/Sink.hs
- compiler/GHC/CmmToAsm/CFG.hs
- compiler/GHC/CmmToAsm/CFG/Dominators.hs
- compiler/GHC/CmmToAsm/Wasm/Asm.hs
- compiler/GHC/CmmToAsm/Wasm/FromCmm.hs
- compiler/GHC/CmmToAsm/Wasm/Types.hs
- compiler/GHC/CmmToLlvm/Base.hs
- compiler/GHC/Core.hs
- compiler/GHC/Core/Opt/Monad.hs
- compiler/GHC/Core/Opt/Pipeline.hs
- compiler/GHC/Core/Opt/Simplify/Iteration.hs
- compiler/GHC/Core/Opt/Simplify/Monad.hs
- compiler/GHC/Core/Opt/SpecConstr.hs
- compiler/GHC/Core/Subst.hs
- compiler/GHC/Data/Bag.hs
- compiler/GHC/Data/Graph/UnVar.hs
- + compiler/GHC/Data/Word64Map.hs


The diff was not included because it is too large.


View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/465d92b1b0564d044d863b90eeeb0b5b99e1556a...07e269dde37f128c0d5be773a5306edb0610cf43

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/465d92b1b0564d044d863b90eeeb0b5b99e1556a...07e269dde37f128c0d5be773a5306edb0610cf43
You're receiving this email because of your account on gitlab.haskell.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20230710/400691f7/attachment-0001.html>


More information about the ghc-commits mailing list