| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
Add missing "Natural -> Integer -> Word#" rule.
|
|
|
|
|
| |
Otherwise the instances aren't good list producers.
See Note [Stable Unfolding for list producers].
|
| |
|
|
|
|
|
| |
It seems more clear to think of lines as LF-terminated rather than
LF-separated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Users of `undefined` don’t want to see
```
files.hs: Prelude.undefined:
CallStack (from HasCallStack):
error, called at libraries/base/GHC/Err.hs:79:14 in base:GHC.Err
undefined, called at file.hs:151:19 in main:Main
```
but want to see
```
files.hs: Prelude.undefined:
CallStack (from HasCallStack):
undefined, called at file.hs:151:19 in main:Main
```
so let’s make that so.
The function for that is `withFrozenCallStack`, but that is not usable
here (module dependencies, and also not representation-polymorphic). And
even if it were, it could confuse GHC’s strictness analyzer, leading to
big regressions in some perf tests (T10421 in particular).
So after shuffling modules and definitions around, I eventually noticed
that the easiest way is to just not call `error` here.
Fixes #19886
|
|
|
|
| |
We no longer need it after previous IndefUnitId refactoring.
|
|
|
|
|
|
|
|
| |
Allow T12545 to increase because it only happens on CI with dwarf
enabled and probably not related to this patch.
Metric Increase:
T12545
|
|
|
|
|
|
|
|
|
| |
T17516 allocations increase by 48% because Integer's predicates are
inlined in some Ord instance methods. These methods become too big to be
inlined while they probably should: this is tracked in #20516.
Metric Increase:
T17516
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
PHASE 1: we never rewrite Concrete# evidence.
This patch migrates all the representation polymorphism checks to
the typechecker, using a new constraint form
Concrete# :: forall k. k -> TupleRep '[]
Whenever a type `ty` must be representation-polymorphic
(e.g. it is the type of an argument to a function), we emit a new
`Concrete# ty` Wanted constraint. If this constraint goes
unsolved, we report a representation-polymorphism error to the user.
The 'FRROrigin' datatype keeps track of the context of the
representation-polymorphism check, for more informative error messages.
This paves the way for further improvements, such as
allowing type families in RuntimeReps and improving the soundness
of typed Template Haskell. This is left as future work (PHASE 2).
fixes #17907 #20277 #20330 #20423 #20426
updates haddock submodule
-------------------------
Metric Decrease:
T5642
-------------------------
|
| |
|
| |
|
|
|
|
|
| |
We don't need built-in rules now that bignum literals (e.g. 123 :: Natural)
match with their constructors (e.g. NS 123##).
|
|
|
|
|
|
|
|
|
|
| |
Perform constant folding on bigNatCompare instead.
Some functions of the Enum class for Natural now need to be inlined
explicitly to be specialized at call sites (because `x > lim` for
Natural is inlined and the resulting function is a little too big to
inline). If we don't do this, T17499 runtime allocations regresses by
16%.
|
|
|
|
| |
We now perform constant folding on bigNatEq# instead.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
While the thread ids had been changed to 64 bit words in
e57b7cc6d8b1222e0939d19c265b51d2c3c2b4c0 the return type of the foreign
import function used to retrieve these ids - namely
'GHC.Conc.Sync.getThreadId' - was never updated accordingly.
In order to fix that this function returns now a 'CUULong'.
In addition to that the types used in the thread labeling subsystem were
adjusted as well and several format strings were modified throughout the
whole RTS to display thread ids in a consistent and correct way.
Fixes #16761
|
|
|
|
| |
It may not always be a Unicode encoding
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
This is a writeup of the state of play for better than linear `elem` via
a helper type class.
|
| |
|
|
|
|
|
|
| |
- Add link to laws from the class head
- Simplify wording of left/right associativity intro paragraph
- Avoid needless mention of "endomorphisms"
|
|
|
|
| |
Closes #20404.
|
|
|
|
|
|
|
|
|
|
| |
When we derive the Show instance of the big record in #16577, I get the
following compilation times (with -O):
Before: 0.91s
After: 0.77s
Metric Decrease:
T19695
|
|
|
|
| |
Closes #20307.
|
|
|
|
|
| |
Metric Decrease:
T12545
|
|
|
|
|
|
|
|
|
| |
Previously we were using `System.Environment.getEnvironment`, which
decodes all environment variables into Haskell `String`s, where a simple
environment lookup would do. This made the compiler's allocations
unnecessarily dependent on the environment.
Fixes #20431.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
allocateForCompact() is called when the current allocation for the
compact region does not fit in the nursery. It previously had a special
case for objects exceeding the large object threshold. In that case, it
would allocate a new compact region block just for that object. That led
to a lot of small blocks being allocated in compact regions with a
larger default block size (`autoBlockW`).
This commit removes this special case because having a lot of small
compact region blocks contributes significantly to memory fragmentation.
The removal should be valid because
- a more generic case for allocating a new compact region block follows
at the end of allocateForCompact(), and that one takes `autoBlockW`
into account
- the reason for allocating separate blocks for large objects in the
main heap seems to be to avoid copying during GCs, but once inside
the compact region, the object will never be copied anyway.
Fixes #18757.
A regression test T18757 was added.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Emit an Info Table Provenance Entry (IPE) for every stack represeted info table
if -finfo-table-map is turned on.
To decode a cloned stack, lookupIPE() is used. It provides a mapping between
info tables and their source location.
Please see these notes for details:
- [Stacktraces from Info Table Provenance Entries (IPE based stack unwinding)]
- [Mapping Info Tables to Source Positions]
Metric Increase:
T12545
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Add `StackSnapshot#` primitive type that represents a cloned stack (StgStack).
The cloning interface consists of two functions, that clone either the treads
own stack (cloneMyStack) or another threads stack (cloneThreadStack).
The stack snapshot is offline/cold, i.e. it isn't evaluated any further. This is
useful for analyses as it prevents concurrent modifications.
For technical details, please see Note [Stack Cloning].
Co-authored-by: Ben Gamari <bgamari.foss@gmail.com>
Co-authored-by: Matthew Pickering <matthewtpickering@gmail.com>
|
|
|
|
|
| |
Make it polymorphic in the type of the MVar's value. This simple generalization
makes it usable for `MVar a` instead of only `MVar ()` values.
|
|
|
|
| |
fixes #20388
|
| |
|
|
|
|
|
|
|
|
|
| |
The examples were just missing the surrounding brackets.
ghci> escapeArgs ["hello \"world\""]
"hello\\ \\\"world\\\"\n"
Fixes #20340
|
| |
|
|
|
|
|
|
|
|
|
| |
Oleg Grenrus pointed out that `Solo` was missing `Eq`, `Ord`,
`Bounded`, `Enum`, and `Ix` instances, which were all apparently
available for the `OneTuple` type (in the `OneTuple` package).
Though only the first three really seem useful, there's no reason
not to take them all. For `Ix`, `Solo` naturally fills a gap
between `()` and `(,)`.
|
|
|
|
|
|
|
|
| |
Previously the implementation of writeFileAtomic (which was stolen from
Cabal) failed to preserve file mode, user and group, resulting
in #14017.
Fixes #14017.
|
| |
|
|
|
|
| |
Fixes #20009
|
|
|
|
| |
As noted in #17568.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Judging from the Assumption, we should never call `roundingMode#` on a negative
number. Yet the strange "dummy" conversion from `IN` to `IP` and the following
recursive call where making the function recursive.
Replacing the call by a panic makes `roundingMode#` non-recursive, so that we
may be able to inline it.
Fixes #20352.
It seems we trigger #19414 on some jobs, hence
Metric Decrease:
T12545
|
| |
|
|
|
|
|
|
|
|
|
|
| |
The constraint was there in order to show the 'Integral' value in case
of error. Instead we can show the result of `toInteger`, which will be
close (i.e. it will still show the same integer except if the 'Show'
instance was funky).
This changes a bit runtime semantic (i.e. exception string may be a bit
different).
|
| |
|
|
|
| |
ie `succ (0000) == 0001` -- (not 1001)
|
|
|
|
|
|
|
|
| |
* make "passthrough" rules non built-in: they don't need to
* enhance note about efficient conversions between numeric types
* make integerFromNatural a little more efficient
* fix noinline pragma for naturalToWordClamp# (at least with non
built-in rules, we get warnings in cases like this)
|