summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* use actual functions in the Backend recordwip/backend-as-record+true-arrow-snapshotNorman Ramsey2022-02-1835-459/+326
| | | | | | | | | | | | | | | | | | | | | | As suggested by @hsyl20, this commit changes the representations of functions within a `Backend` record: instead of defunctionalized enumeration types, the fields have actual arrow types. The change has these consequences: - In order to cope with mutual recursion, a number of .hs-boot files had to be introduced. Mutual recursion occurs in both types and values; to minimize the amount of mutual recursion, modules that needed only the types were changed to import `GHC.Driver.Backend.Types` instead of `GHC.Driver.Backend`. - Module `GHC.Driver.Backend.Refunctionalize` is no longer needed and has been removed. - Client code calls functions directly instead of indirectly via an "apply" function. - Documentation is substantially simpler.
* remove obsolete Pipeline moduleNorman Ramsey2022-02-181-89/+0
|
* change `Backend` type and remove direct dependenciesNorman Ramsey2022-02-1832-481/+1764
| | | | | | | | | | | | | With this change, `Backend` is no longer a sum type with exposed value constructors. Decisions that were formerly made by asking "is the current back end equal to (or different from) this named value constructor?" are now made by interrogating the back end about its properties. The properties and the functions that interrogate them are defined in `GHC.Driver.Backend.Types`. The `Backend` type is currently a product (record) type, but it could be make a sum type with only localized changes. For an idea of what that would look like, see `GHC.Driver.Backend.Legacy`.
* rts/AdjustorPool: Silence unused function warningBen Gamari2022-02-171-1/+2
| | | | | | bitmap_get is only used in the DEBUG RTS configuration. Fixes #21079.
* Always define __GLASGOW_HASKELL_PATCHLEVEL1/2__ macrosMatthew Pickering2022-02-173-0/+11
| | | | | | | | | | | | As #21076 reports if you are using `-Wcpp-undef` then you get warnings when using the `MIN_VERSION_GLASGOW_HASKELL` macro because __GLASGOW_HASKELL_PATCHLEVEL2__ is very rarely explicitliy set (as version numbers are not 4 components long). This macro was introduced in 3549c952b535803270872adaf87262f2df0295a4 and it seems the bug has existed ever since. Fixes #21076
* docs: fix release notes formattingAdam Sandberg Ericsson2022-02-161-16/+17
|
* docs: mention -fprof-late-ccs in the release notesAdam Sandberg Ericsson2022-02-162-0/+5
| | | | And note which compiler version it was added in.
* ghci: fix -ddump-stg-cg (#21052)nineonine2022-02-164-3/+18
| | | | | The pre-codegen Stg AST dump was not available in ghci because it was performed in 'doCodeGen'. This was now moved to 'coreToStg' area.
* rts: document some closure typesAdam Sandberg Ericsson2022-02-164-68/+198
|
* rts: remove struct StgRetry, it is never usedAdam Sandberg Ericsson2022-02-161-5/+0
|
* Add test for #20562Oleg Grenrus2022-02-162-0/+16
|
* Relax load_load_barrier for aarch64Takenobu Tani2022-02-161-1/+1
| | | | | | | | | | | | | | | | | This patch relaxes the instruction for load_load_barrier(). Current load_load_barrier() implements full-barrier with `dmb sy`. It's too strong to order load-load instructions. We can relax it by using `dmb ld`. If current load_load_barrier() is used for full-barriers (load/store - load/store barrier), this patch is not suitable. See also linux-kernel's smp_rmb() implementation: https://github.com/torvalds/linux/blob/v5.14/arch/arm64/include/asm/barrier.h#L90 Hopefully, it's better to use `dmb ishld` rather than `dmb ld` to improve performance. However, I can't validate effects on a real many-core Arm machine.
* (#21044) Documented arithmetic functions in base.nikshalark2022-02-134-4/+264
| | | | Didn't get it right the ninth time. Now everything's formatted correctly.
* configure: Fix result reporting of adjustors method checkBen Gamari2022-02-131-1/+2
|
* adjustors/NativeAmd64Mingw: Use AdjustorPoolBen Gamari2022-02-134-151/+189
|
* adjustors/NativeAmd64: Use AdjustorPoolBen Gamari2022-02-134-124/+160
|
* Introduce initAdjustorsBen Gamari2022-02-138-5/+22
|
* rts: Initial commit of AdjustorPoolBen Gamari2022-02-134-0/+365
|
* rts/adjustor: Split Windows path out of NativeAmd64Ben Gamari2022-02-134-165/+229
|
* rts: Drop DEC Alpha adjustor implementationBen Gamari2022-02-131-107/+0
| | | | The last Alpha chip was produced in 2004.
* rts/Adjustor: Ensure that allocateExecPage succeededBen Gamari2022-02-134-0/+27
| | | | Previously we failed to handle the case that `allocateExecPage` failed.
* Only check the exit code in derefnull & divbyzero tests on OpenBSDGreg Steuck2022-02-123-2/+4
|
* Tag inference work.Andreas Klebinger2022-02-1288-310/+3093
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This does three major things: * Enforce the invariant that all strict fields must contain tagged pointers. * Try to predict the tag on bindings in order to omit tag checks. * Allows functions to pass arguments unlifted (call-by-value). The former is "simply" achieved by wrapping any constructor allocations with a case which will evaluate the respective strict bindings. The prediction is done by a new data flow analysis based on the STG representation of a program. This also helps us to avoid generating redudant cases for the above invariant. StrictWorkers are created by W/W directly and SpecConstr indirectly. See the Note [Strict Worker Ids] Other minor changes: * Add StgUtil module containing a few functions needed by, but not specific to the tag analysis. ------------------------- Metric Decrease: T12545 T18698b T18140 T18923 LargeRecord Metric Increase: LargeRecord ManyAlternatives ManyConstructors T10421 T12425 T12707 T13035 T13056 T13253 T13253-spj T13379 T15164 T18282 T18304 T18698a T1969 T20049 T3294 T4801 T5321FD T5321Fun T783 T9233 T9675 T9961 T19695 WWRec -------------------------
* Fix documentation about Word64Rep/Int64Rep (#16964)Sylvain Henry2022-02-111-2/+2
|
* testsuite: Make sure all tests trigger ghc rebuildMatthew Pickering2022-02-112-2/+2
| | | | | | | I made a mistake when implementing #21029 which meant that certain tests didn't trigger a GHC recompilation. By adding the `test:ghc` target to the default settings all tests will now depend on this target unless explicitly opting out via the no_deps modifier.
* Make sure all platforms have a release jobMatthew Pickering2022-02-111-20/+24
| | | | | | | | | The release bindists are currently a mixture of validate and release builds. This is bad because the validate builds don't have profiling libraries. The fix is to make sure there is a release job for each platform we want to produce a release for.t Fixes #21066
* Decrease the size of the LargeRecord testsheaf2022-02-111-30/+0
| | | | | | | | | This test was taking too long to run, so this patch makes it smaller. ------------------------- Metric Decrease: LargeRecord -------------------------
* Refine tcSemigroupWarnings to work in ghc-primMatthew Pickering2022-02-101-4/+7
| | | | | | | | | | | | | ghc-prim doesn't depend on base so can't have any Monoid or Semigroup instances. However, attempting to load these definitions ran into issues when the interface for `GHC.Base` did exist as that would try and load the interface for `GHC.Types` (which is the module we are trying to compile and has no interface). The fix is to just not do this check when we are compiling a module in ghc-prim. Fixes #21069
* Fix copy-pasto in prof-late-ccs docsMatthew Pickering2022-02-101-2/+2
|
* eventlog: Fix size of TICKY_COUNTER_BEGIN_SAMPLEMatthew Pickering2022-02-101-1/+1
|
* eventlog: Delete misleading comment in gen_event_types.pyMatthew Pickering2022-02-101-2/+0
| | | | | Not all events start with CapNo and there's not logic I could see which adds this to the length.
* eventlog: Fix event type of MEM_RETURNMatthew Pickering2022-02-101-1/+1
| | | | | | | This leads to corrupted eventlogs because the size of EVENT_MEM_RETURN is completely wrong. Fixes a bug introduced in 2e29edb7421c21902b47d130d45f60d3f584a0de
* eventlog: Fix event type of EVENT_IPEMatthew Pickering2022-02-101-1/+1
| | | | | | | This leads to corrupted eventlogs because the size of EVENT_IPE is completely wrong. Fixes a bug introduced in 2e29edb7421c21902b47d130d45f60d3f584a0de
* Add metadata to integer-gmp.cabalMorrow2022-02-101-0/+8
|
* Bump Cabal submoduleBen Gamari2022-02-108-20/+18
| | | | | | | | | Adapts GHC to the factoring-out of `Cabal-syntax`. Fixes #20991. Metric Decrease: haddock.Cabal
* ghc-boot: Simplify writePackageDb permissions handlingDaniel Gröber2022-02-101-23/+16
| | | | | | | | | | | | | | | Commit ef8a3fbf1 ("ghc-boot: Fix metadata handling of writeFileAtomic") introduced a somewhat over-engineered fix for #14017 by trying to preserve the current permissions if the target file already exists. The problem in the issue is simply that the package db cache file should be world readable but isn't if umask is too restrictive. In fact the previous fix only handles part of this problem. If the file isn't already there in a readable configuration it wont make it so which isn't really ideal either. Rather than all that we now simply always force all the read access bits to allow access while leaving the owner at the system default as it's just not our business to mess with it.
* linker/PEi386: Make addLibrarySearchPath long-path awareBen Gamari2022-02-101-15/+3
| | | | | | | | | | Previously `addLibrarySearchPath` failed to normalise the added path to UNC form before passing it to `AddDllDirectory`. Consequently, the call was subject to the MAX_PATH restriction, leading to the failure of `test-defaulting-plugin-fail`, among others. Happily, this also nicely simplifies the implementation. Closes #21059.
* PEi386: Drop Windows Vista fallback in addLibrarySearchPathBen Gamari2022-02-101-52/+3
| | | | We no longer support Windows Vista.
* Docs:Mention that safe calls don't keep their arguments alive.Andreas Klebinger2022-02-101-2/+9
|
* Add late cost centre supportAndreas Klebinger2022-02-1017-6/+157
| | | | | This allows cost centres to be inserted after the core optimization pipeline has run.
* Add some perf tests for coercionssheaf2022-02-099-0/+1189
| | | | | | | | This patch adds some performance tests for programs that create large coercions. This is useful because the existing test coverage is not very representative of real-world situations. In particular, this adds a test involving an extensible records library, a common pain-point for users.
* rts/mmap: Refactor mmapForLinkerBen Gamari2022-02-092-113/+124
| | | | | | Here we try to separate the policy decisions of where to place mappings from the mechanism of creating the mappings. This makes things significantly easier to follow.
* linker: Don't use MAP_FIXEDBen Gamari2022-02-091-7/+4
| | | | | | | | As noted in #21057, we really shouldn't be using MAP_FIXED. I would much rather have the process crash with a "failed to map" error than randomly overwrite existing mappings. Closes #21057.
* rts/linker/MMap: Use MemoryAccess in mmapForLinkerBen Gamari2022-02-095-24/+42
|
* rts/linker: Drop dead IA64 codeBen Gamari2022-02-091-6/+0
|
* rts: Move mmapForLinker and friends to linker/MMap.cBen Gamari2022-02-0911-341/+377
| | | | They are not particularly related to linking.
* rts: Rename MemoryMap.[ch] -> ReportMemoryMap.[ch]Ben Gamari2022-02-095-4/+4
|
* Include ru_name in toHsRule messageZiyang Liu2022-02-092-11/+9
| | | | See #18147
* ByteCode: avoid out-of-bound readSylvain Henry2022-02-091-5/+15
| | | | Cf https://gitlab.haskell.org/ghc/ghc/-/issues/18431#note_287139
* NCG: minor code factorizationSylvain Henry2022-02-092-51/+35
|