| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
| |
This was removed from make in 077b92fa39839a8e83cd87398435424403cf6486
|
|
|
|
| |
As noted in #16909.
|
|
|
|
| |
Fixed in #14759.
|
|
|
|
|
| |
This requires code loading and therefore can't be run in the profiled
ways when GHC is dynamically linked.
|
|
|
|
|
|
|
| |
As noted in #11645 and #8862, forking and profiling don't go well
together.
Bumps hpc and unix submodules.
|
| |
|
| |
|
|
|
|
| |
Previously it was not marked as broken in profthreaded
|
|
|
|
|
|
| |
As noted in #16914, the value `True` was used instead of `YES` here, in
contrast to the other boolean fields emitted by `--info`. This confused
the testsuite driver and broke the `ghc_debugged` testsuite predicate.
|
| |
|
|
|
|
|
| |
Otherwise the unique counter starts at 0, causing us to immediately
underflow.
|
|
|
|
| |
See #16803.
|
|
|
|
| |
This should help identify a few cases where this is throwing warnings
|
| |
|
|
|
|
|
|
|
|
| |
Otherwise we don't compile the stage2 compiler with DEBUG, meaning the
testsuite isn't checked with assertions.
Metric Increase:
haddock.Cabal
|
|
|
|
|
|
|
|
| |
By not building anything in the dynamic way on Windows, where we don't
have a working story for DLLs yet.
Also the ghcid command needs to call bash on the hadrian/ghci.sh script
explicitly as the path gets interpreted differently otherwise.
|
|
|
|
|
|
|
| |
This prepares the way for making Int32# and Word32# the actual size they
claim to be.
Updates binary submodule for (de)serializing the new runtime reps.
|
| |
|
|
|
|
|
|
|
|
|
| |
Currently initProfiling gets defined by Profiling.c only if PROFILING is
defined. Otherwise the ProfHeap.c defines it.
This is just needlessly complicated so in this commit I make Profiling and
ProfHeap into properly seperate modules and call their respective init
functions from RtsStartup.c.
|
|
|
|
|
|
|
| |
Unfortunately this will require more work; register allocation is
quite broken.
This reverts commit acd795583625401c5554f8e04ec7efca18814011.
|
|
|
|
|
|
|
|
|
|
| |
Hadrian used to have a separate flag --progress-colour to control
colored output during the build. After introduction of a Shake flag
with similar purpose Hadrian's flag became redundant. The commit removes
--progress-colour and switches to Shake's flag. The only difference
between the two is that Hadrian has special default mode when it tries
to determine if the terminal support colored output. The user can
override it using (Shake's) `--[no-]color`.
|
| |
|
| |
|
|
|
|
| |
See also the discussion at #16592
|
| |
|
|
|
| |
Found by @lehins.
|
| |
|
|
|
|
|
|
|
|
| |
These are unexploded minds as far as the linter is concerned. I don't
want to hit in my MRs by mistake!
I did this with `sed`, and then rolled back some changes in the docs,
config.guess, and the linter itself.
|
|
|
|
|
|
| |
- docs which document the lint and need to contain the unutterable
- vendored code which is outside our purview
|
|
|
|
|
| |
Instead following @angerman's suggestion put them in the config file.
Maybe we could re-key llvm-targets someday, but this is good for now.
|
|
|
|
|
|
|
|
|
|
|
|
| |
Since !712 the `settings` file is produced by the build system instead
of autoconf. However, this introduced a subtle bug where we would fail
to rebuild the `settings` file with what we have learned from the
install-time `configure` invocation. Fix this by not packaging
`settings` in the bindist tarball. The build system will take care of
the rest.
Also fix a bug where the value of `UseLibdw` was not being persisted to
the install time `configure`.
|
|
|
|
| |
Fixes #16920
|
|
|
|
|
|
|
|
|
|
|
|
| |
The compiler doesn't create uses nor compiles the uses that exist
specially. These are just plain C-- FFI.
These `await*` ones are especially important to so convert because "true"
primops are hard to make platform-specific currently.
The other exports are part of this commit so this module always exports
something, which avoids silly CPP elsewhere. More will be added later
once `foreign import prim` is extended.
|
|
|
|
|
| |
- Replace `catMaybes (map ...)` with `mapMaybe ...`
- Remove a list->set->list conversion
|
|
|
|
| |
Hadrian builds (fixes #16936)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Move switch expressions into a local variable when generating switches.
This avoids duplicating the expression if we translate the switch
to a tree search. This fixes #16933.
Further we now check if all branches of a switch have the same
destination, replacing the switch with a direct branch if that
is the case.
Both of these patterns appear in the ENTER macro used by the RTS
but are unlikely to occur in intermediate Cmm generated by GHC.
Nofib result summary:
--------------------------------------------------------------------------------
Program Size Allocs Runtime Elapsed TotalMem
--------------------------------------------------------------------------------
Min -0.0% -0.0% -15.7% -15.6% 0.0%
Max -0.0% 0.0% +5.4% +5.5% 0.0%
Geometric Mean -0.0% -0.0% -1.0% -1.0% -0.0%
Compiler allocations go up slightly: +0.2%
Example output before and after the change taken from RTS code below.
All but one of the memory loads `I32[_c3::I64 - 8]` are eliminated.
Instead the data is loaded once from memory in block c6.
Also the switch in block `ud` in the original code has been
eliminated completely.
Cmm without this commit:
```
stg_ap_0_fast() { // [R1]
{ []
}
{offset
ca: _c1::P64 = R1; // CmmAssign
goto c2; // CmmBranch
c2: if (_c1::P64 & 7 != 0) goto c4; else goto c6;
c6: _c3::I64 = I64[_c1::P64];
if (I32[_c3::I64 - 8] < 26 :: W32) goto ub; else goto ug;
ub: if (I32[_c3::I64 - 8] < 15 :: W32) goto uc; else goto ue;
uc: if (I32[_c3::I64 - 8] < 8 :: W32) goto c7; else goto ud;
ud: switch [8 .. 14] (%MO_SS_Conv_W32_W64(I32[_c3::I64 - 8])) {
case 8, 9, 10, 11, 12, 13, 14 : goto c4;
}
ue: if (I32[_c3::I64 - 8] >= 25 :: W32) goto c4; else goto uf;
uf: if (%MO_SS_Conv_W32_W64(I32[_c3::I64 - 8]) != 23) goto c7; else goto c4;
c4: R1 = _c1::P64;
call (P64[Sp])(R1) args: 8, res: 0, upd: 8;
ug: if (I32[_c3::I64 - 8] < 28 :: W32) goto uh; else goto ui;
uh: if (I32[_c3::I64 - 8] < 27 :: W32) goto c7; else goto c8;
ui: if (I32[_c3::I64 - 8] < 29 :: W32) goto c8; else goto c7;
c8: _c1::P64 = P64[_c1::P64 + 8];
goto c2;
c7: R1 = _c1::P64;
call (_c3::I64)(R1) args: 8, res: 0, upd: 8;
}
}
```
Cmm with this commit:
```
stg_ap_0_fast() { // [R1]
{ []
}
{offset
ca: _c1::P64 = R1;
goto c2;
c2: if (_c1::P64 & 7 != 0) goto c4; else goto c6;
c6: _c3::I64 = I64[_c1::P64];
_ub::I64 = %MO_SS_Conv_W32_W64(I32[_c3::I64 - 8]);
if (_ub::I64 < 26) goto uc; else goto uh;
uc: if (_ub::I64 < 15) goto ud; else goto uf;
ud: if (_ub::I64 < 8) goto c7; else goto c4;
uf: if (_ub::I64 >= 25) goto c4; else goto ug;
ug: if (_ub::I64 != 23) goto c7; else goto c4;
c4: R1 = _c1::P64;
call (P64[Sp])(R1) args: 8, res: 0, upd: 8;
uh: if (_ub::I64 < 28) goto ui; else goto uj;
ui: if (_ub::I64 < 27) goto c7; else goto c8;
uj: if (_ub::I64 < 29) goto c8; else goto c7;
c8: _c1::P64 = P64[_c1::P64 + 8];
goto c2;
c7: R1 = _c1::P64;
call (_c3::I64)(R1) args: 8, res: 0, upd: 8;
}
}
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch was motivated by some performance characterization work done
for #16822, where we suspected that GHC was spending a lot of time waiting
on the linker to be done. (That turned out to be true.)
The tracing is taken care of by ErrUtils.withTiming, so this patch just defines
and uses a little wrapper around that function in all the helpers for
calling the various systools (C compiler, linker, unlit, ...).
With this patch, assuming a GHC executable linked against an eventlog-capable
RTS (RTS ways that contain the debug, profiling or eventlog way units), we can
measure how much time is spent in each of the SysTools when building hello.hs
by simply doing:
ghc hello.hs -ddump-timings +RTS -l
The event names are "systool:{cc, linker, as, unlit, ...}".
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In one spot in kcConDecl we were passing in the return
kind signature rether than the return kind. e.g. #16828
newtype instance Foo :: Type -> Type where
MkFoo :: a -> Foo a
We were giving kcConDecl the kind (Type -> Type), whereas it
was expecting the ultimate return kind, namely Type.
This "looking past arrows" was being done, independently,
in several places, but we'd missed one. This patch moves it all
to one place -- the new function kcConDecls (note the plural).
I also took the opportunity to rename
tcDataFamHeader to tcDataFamInstHeader
(The previous name was consistently a source of confusion.)
|
| |
|
|
|
|
| |
The GitLab CI infrastructure is now in the master branch.
|
|
|
|
| |
in case -fwrite-interface was specified (#16670)
|
|
|
|
|
|
|
|
|
|
|
| |
Previously, GHC would typecheck the `via` type once per class in a
`deriving` clause, which caused the problems observed in #16923.
This patch restructures some of the functionality in `TcDeriv` and
`TcHsType` to avoid this problem. We now typecheck the `via` type
exactly once per `deriving` clause and *then* typecheck all of the
classes in the clause.
See `Note [Don't typecheck too much in DerivingVia]` in `TcDeriv`
for the full details.
|
|
|
|
|
|
|
| |
In particular we very often pass one empty list and in these
cases we want to avoid the overhead of computing `xs ++ []`.
This should fix #14759 and #16911.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
The simple optimiser was making an invalid transformation
to join points -- yikes. The fix is easy.
I also added some documentation about the fact that GHC uses
a slightly more restrictive version of join points than does
the paper.
Fix #16918
|
|
|
|
|
| |
This documents some of the lore surrounding the nature and naming of
GHC's stage numbers.
|
| |
|
|
|
|
|
| |
slightly larger testcase for :type-at and :uses
so we can see changes, if #16804 is done.
|