diff options
author | George Karachalias <george.karachalias@gmail.com> | 2016-02-01 11:43:12 +0100 |
---|---|---|
committer | George Karachalias <george.karachalias@gmail.com> | 2016-02-01 11:43:12 +0100 |
commit | b5df2cc6cf2af4508a4f34a718320a6d79f9adca (patch) | |
tree | 525e975eaf60e0200555e7f269fd79b7eaeb227d /compiler/nativeGen | |
parent | a883c1b7b08657102a2081b55c8fe68714d8bf73 (diff) | |
download | haskell-wip/gadtpm.tar.gz |
Overhaul the Overhauled Pattern Match Checkerwip/gadtpm
* Changed the representation of Value Set Abstractions. Instead
of using a prefix tree, we now use a list of Value Vector
Abstractions. The set of constraints Delta for every Value
Vector Abstraction is the oracle state so that we solve
everything only once.
* Instead of doing everything lazily, we prune at once (and in
general everything is much stricter). A case writtern with
pattern guards is not checked in almost the same time as the
equivalent with pattern matching.
* Do not store the covered and the divergent sets at all. Since
what we only need is a yes/no (does this clause cover anything?
Does it force any thunk?) We just keep a boolean for each.
* Removed flags `-Wtoo-many-guards` and `-ffull-guard-reasoning`.
Replaced with `fmax-pmcheck-iterations=n`. Still debatable what
should the default `n` be.
* When a guard is for sure not going to contribute anything, we
treat it as such: The oracle is not called and cases `CGuard`,
`UGuard` and `DGuard` from the paper are not happening at all
(the generation of a fresh variable, the unfolding of the
pattern list etc.). his combined with the above seems to be
enough to drop the memory increase for test T783 down to 18.7%.
* Do not export function `dsPmWarn` (it is now called directly
from within `checkSingle` and `checkMatches`).
* Make `PmExprVar` hold a `Name` instead of an `Id`. The term
oracle does not handle type information so using `Id` was a
waste of time/space.
* Added testcases T11195, T11303b (data families) and T11374
The patch addresses at least the following:
#11195, #11276, #11303, #11374, #11162
Diffstat (limited to 'compiler/nativeGen')
-rw-r--r-- | compiler/nativeGen/Dwarf/Constants.hs | 4 |
1 files changed, 0 insertions, 4 deletions
diff --git a/compiler/nativeGen/Dwarf/Constants.hs b/compiler/nativeGen/Dwarf/Constants.hs index 6ba1f8a284..40e4e7d9a8 100644 --- a/compiler/nativeGen/Dwarf/Constants.hs +++ b/compiler/nativeGen/Dwarf/Constants.hs @@ -1,9 +1,5 @@ -- | Constants describing the DWARF format. Most of this simply -- mirrors /usr/include/dwarf.h. -{-# LANGUAGE CPP #-} -#if __GLASGOW_HASKELL__ > 710 -{-# OPTIONS_GHC -ffull-guard-reasoning #-} -#endif module Dwarf.Constants where |