diff options
author | Andreas Klebinger <klebinger.andreas@gmx.at> | 2021-05-10 22:06:51 +0200 |
---|---|---|
committer | Matthew Pickering <matthewtpickering@gmail.com> | 2022-02-12 13:59:41 +0000 |
commit | 0e93023eef174262310737004d398bc7a606939a (patch) | |
tree | 091a34f78b7911d8b38f414ff8eab90796581c47 /docs/users_guide/debugging.rst | |
parent | 90a26f8b0dd99129d3fd7fe28127cb69abd46328 (diff) | |
download | haskell-0e93023eef174262310737004d398bc7a606939a.tar.gz |
Tag inference work.
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
-------------------------
Diffstat (limited to 'docs/users_guide/debugging.rst')
-rw-r--r-- | docs/users_guide/debugging.rst | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/docs/users_guide/debugging.rst b/docs/users_guide/debugging.rst index 30f31a64ef..6802fa71fb 100644 --- a/docs/users_guide/debugging.rst +++ b/docs/users_guide/debugging.rst @@ -457,6 +457,19 @@ These flags dump various phases of GHC's STG pipeline. Show the output of the unarise pass. +.. ghc-flag:: -ddump-stg-cg + :shortdesc: Show output after Stg2Stg + :type: dynamic + + Show the output of the STG after Stg2Stg. This is the result after + applying the Stg2Stg optimization passes. + +.. ghc-flag:: -ddump-stg-tags + :shortdesc: Show output of the tag inference pass. + :type: dynamic + + Show the output of the tag inference pass. + .. ghc-flag:: -ddump-stg-final :shortdesc: Show output of last STG pass. :type: dynamic @@ -1060,3 +1073,13 @@ Other is useful when debugging because it gives smaller modules and dumps, but the compiler will panic if you try to use Typeable instances of things that you built with this flag. + +.. ghc-flag:: -dtag-inference-checks + :shortdesc: Affirm tag inference results are correct at runtime. + :type: dynamic + + When tag inference tells as a specific value is supposed to be tagged then + generate code to check this at runtime. If the check fails the program will + be terminated. This helps narrowing down if an issue is due to tag inference + if things go wrong. Which would otherwise be quite difficult. + |