[Git][ghc/ghc][ghc-9.4] 4 commits: SpecConstr: Properly create rules for call patterns representing partial applications
Ben Gamari (@bgamari)
gitlab at gitlab.haskell.org
Mon Oct 24 18:34:57 UTC 2022
Ben Gamari pushed to branch ghc-9.4 at Glasgow Haskell Compiler / GHC
Commits:
ccdc1053 by Andreas Klebinger at 2022-10-23T16:54:38-04:00
SpecConstr: Properly create rules for call patterns representing partial applications
The main fix is that in addVoidWorkerArg we now add the argument to the front.
This fixes #21448.
-------------------------
Metric Decrease:
T16875
-------------------------
(cherry picked from commit 61901b32b7e680234c0f1173d96d124ecd74bbc5)
- - - - -
bbfd46cb by Ben Gamari at 2022-10-23T21:27:05-04:00
Bump VERSION=9.4.3
- - - - -
bf0cbaa3 by Ben Gamari at 2022-10-23T23:00:13-04:00
Add release notes for 9.4.3
- - - - -
9c08d9a1 by Ben Gamari at 2022-10-24T14:34:24-04:00
Accept perf shifts
Metric Decrease:
T18923
Metric Increase:
ManyAlternatives
ManyConstructors
MultiComponentModules
MultiComponentModulesRecomp
T18282
T5642
T10421
T12150
T12234
T12425
T12707
T13035
T13056
T13379
T13719
T14697
T15703
T16577
T16875
T18140
T18698a
T18698b
T1969
T20049
T3064
T3294
T4801
T4978
T5321FD
T5321Fun
T7257
T783
T9020
T9198
T9233
T9961
WWRec
- - - - -
4 changed files:
- compiler/GHC/Core/Opt/SpecConstr.hs
- configure.ac
- + docs/users_guide/9.4.3-notes.rst
- docs/users_guide/release-notes.rst
Changes:
=====================================
compiler/GHC/Core/Opt/SpecConstr.hs
=====================================
@@ -1732,14 +1732,6 @@ spec_one env fn arg_bndrs body (call_pat, rule_number)
-- changes (#4012).
rule_name = mkFastString ("SC:" ++ occNameString fn_occ ++ show rule_number)
spec_name = mkInternalName spec_uniq spec_occ fn_loc
--- ; pprTrace "spec_one {" (vcat [ text "function:" <+> ppr fn <+> ppr (idUnique fn)
--- , text "sc_count:" <+> ppr (sc_count env)
--- , text "pats:" <+> ppr pats
--- , text "-->" <+> ppr spec_name
--- , text "bndrs" <+> ppr arg_bndrs
--- , text "body" <+> ppr body
--- , text "how_bound" <+> ppr (sc_how_bound env) ]) $
--- return ()
-- Specialise the body
-- ; pprTraceM "body_subst_for" $ ppr (spec_occ) $$ ppr (sc_subst body_env)
@@ -1754,9 +1746,10 @@ spec_one env fn arg_bndrs body (call_pat, rule_number)
= calcSpecInfo fn call_pat extra_bndrs
-- Annotate the variables with the strictness information from
-- the function (see Note [Strictness information in worker binders])
-
+ add_void_arg = needsVoidWorkerArg fn arg_bndrs spec_lam_args1
(spec_lam_args, spec_call_args, spec_arity, spec_join_arity)
- | needsVoidWorkerArg fn arg_bndrs spec_lam_args1
+ | add_void_arg
+ -- See Note [SpecConst needs to add void args first]
, (spec_lam_args, spec_call_args, _) <- addVoidWorkerArg spec_lam_args1 []
-- needsVoidWorkerArg: usual w/w hack to avoid generating
-- a spec_rhs of unlifted type and no args.
@@ -1777,13 +1770,32 @@ spec_one env fn arg_bndrs body (call_pat, rule_number)
-- Conditionally use result of new worker-wrapper transform
spec_rhs = mkLams spec_lam_args (mkSeqs cbv_args spec_body_ty spec_body)
- rule_rhs = mkVarApps (Var spec_id) $
- dropTail (length extra_bndrs) spec_call_args
+ rule_rhs = mkVarApps (Var spec_id) $
+ -- This will give us all the arguments we quantify over
+ -- in the rule plus the void argument if present
+ -- since `length(qvars) + void + length(extra_bndrs) = length spec_call_args`
+ dropTail (length extra_bndrs) spec_call_args
inline_act = idInlineActivation fn
this_mod = sc_module env
rule = mkRule this_mod True {- Auto -} True {- Local -}
rule_name inline_act fn_name qvars pats rule_rhs
-- See Note [Transfer activation]
+
+ -- ; pprTrace "spec_one {" (vcat [ text "function:" <+> ppr fn <+> ppr (idUnique fn)
+ -- , text "sc_count:" <+> ppr (sc_count env)
+ -- , text "pats:" <+> ppr pats
+ -- , text "call_pat:" <+> ppr call_pat
+ -- , text "-->" <+> ppr spec_name
+ -- , text "bndrs" <+> ppr arg_bndrs
+ -- , text "extra_bndrs" <+> ppr extra_bndrs
+ -- , text "spec_lam_args" <+> ppr spec_lam_args
+ -- , text "spec_call_args" <+> ppr spec_call_args
+ -- , text "rule_rhs" <+> ppr rule_rhs
+ -- , text "adds_void_worker_arg" <+> ppr adds_void_worker_arg
+ -- , text "body" <+> ppr body
+ -- , text "spec_rhs" <+> ppr spec_rhs
+ -- , text "how_bound" <+> ppr (sc_how_bound env) ]) $
+ -- return ()
; return (spec_usg, OS { os_pat = call_pat, os_rule = rule
, os_id = spec_id
, os_rhs = spec_rhs }) }
@@ -2262,9 +2274,14 @@ callToPats env bndr_occs call@(Call fn args con_env)
"SpecConstr: bad covars"
(ppr bad_covars $$ ppr call) $
if interesting && isEmptyVarSet bad_covars
- then
+ then do
-- pprTraceM "callToPatsOut" (
- -- text "fun" <> ppr fn $$
+ -- text "fn:" <+> ppr fn $$
+ -- text "args:" <+> ppr args $$
+ -- text "in_scope:" <+> ppr in_scope $$
+ -- -- text "in_scope:" <+> ppr in_scope $$
+ -- text "pat_fvs:" <+> ppr pat_fvs
+ -- )
-- ppr (CP { cp_qvars = qvars', cp_args = pats })) >>
return (Just (CP { cp_qvars = qvars', cp_args = pats, cp_strict_args = concat cbv_ids }))
else return Nothing }
=====================================
configure.ac
=====================================
@@ -13,7 +13,7 @@ dnl
# see what flags are available. (Better yet, read the documentation!)
#
-AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.4.2], [glasgow-haskell-bugs at haskell.org], [ghc-AC_PACKAGE_VERSION])
+AC_INIT([The Glorious Glasgow Haskell Compilation System], [9.4.3], [glasgow-haskell-bugs at haskell.org], [ghc-AC_PACKAGE_VERSION])
# Version on master must be X.Y (not X.Y.Z) for ProjectVersionMunged variable
# to be useful (cf #19058). However, the version must have three components
# (X.Y.Z) on stable branches (e.g. ghc-9.2) to ensure that pre-releases are
=====================================
docs/users_guide/9.4.3-notes.rst
=====================================
@@ -0,0 +1,66 @@
+.. _release-9-4-3:
+
+Version 9.4.3
+==============
+
+The significant changes to the various parts of the compiler are listed in the
+following sections.
+
+The :ghc-flag:`LLVM backend <-fllvm>` of this release is to be used with LLVM
+10, 11, 12, or 13.
+
+Significant Changes
+~~~~~~~~~~~~~~~~~~~~
+
+Issues fixed in this release include:
+
+* A crash on Darwin in executables built with IPE support (:ghc-ticket:`22080`)
+* A runtime crash triggered by constructor specialization (:ghc-ticket:`21448`)
+* A runtime correctness issue on AArch64 (:ghc-ticket:`22282`)
+* A compile-time failure on Windows caused by the ``_UCRT`` macro being undefined (:ghc-ticket:`22159`)
+
+Included libraries
+------------------
+
+The package database provided with this distribution also contains a number of
+packages other than GHC itself. See the changelogs provided with these packages
+for further change information.
+
+.. ghc-package-list::
+
+ libraries/array/array.cabal: Dependency of ``ghc`` library
+ libraries/base/base.cabal: Core library
+ libraries/binary/binary.cabal: Dependency of ``ghc`` library
+ libraries/bytestring/bytestring.cabal: Dependency of ``ghc`` library
+ libraries/Cabal/Cabal/Cabal.cabal: Dependency of ``ghc-pkg`` utility
+ libraries/Cabal/Cabal-syntax/Cabal-syntax.cabal: Dependency of ``ghc-pkg`` utility
+ libraries/containers/containers/containers.cabal: Dependency of ``ghc`` library
+ libraries/deepseq/deepseq.cabal: Dependency of ``ghc`` library
+ libraries/directory/directory.cabal: Dependency of ``ghc`` library
+ libraries/exceptions/exceptions.cabal: Dependency of ``ghc`` and ``haskeline`` library
+ libraries/filepath/filepath.cabal: Dependency of ``ghc`` library
+ compiler/ghc.cabal: The compiler itself
+ libraries/ghci/ghci.cabal: The REPL interface
+ libraries/ghc-boot/ghc-boot.cabal: Internal compiler library
+ libraries/ghc-boot-th/ghc-boot-th.cabal: Internal compiler library
+ libraries/ghc-compact/ghc-compact.cabal: Core library
+ libraries/ghc-heap/ghc-heap.cabal: GHC heap-walking library
+ libraries/ghc-prim/ghc-prim.cabal: Core library
+ libraries/haskeline/haskeline.cabal: Dependency of ``ghci`` executable
+ libraries/hpc/hpc.cabal: Dependency of ``hpc`` executable
+ libraries/integer-gmp/integer-gmp.cabal: Core library
+ libraries/libiserv/libiserv.cabal: Internal compiler library
+ libraries/mtl/mtl.cabal: Dependency of ``Cabal`` library
+ libraries/parsec/parsec.cabal: Dependency of ``Cabal`` library
+ libraries/pretty/pretty.cabal: Dependency of ``ghc`` library
+ libraries/process/process.cabal: Dependency of ``ghc`` library
+ libraries/stm/stm.cabal: Dependency of ``haskeline`` library
+ libraries/template-haskell/template-haskell.cabal: Core library
+ libraries/terminfo/terminfo.cabal: Dependency of ``haskeline`` library
+ libraries/text/text.cabal: Dependency of ``Cabal`` library
+ libraries/time/time.cabal: Dependency of ``ghc`` library
+ libraries/transformers/transformers.cabal: Dependency of ``ghc`` library
+ libraries/unix/unix.cabal: Dependency of ``ghc`` library
+ libraries/Win32/Win32.cabal: Dependency of ``ghc`` library
+ libraries/xhtml/xhtml.cabal: Dependency of ``haddock`` executable
+
=====================================
docs/users_guide/release-notes.rst
=====================================
@@ -4,5 +4,6 @@ Release notes
.. toctree::
:maxdepth: 1
+ 9.4.3-notes
9.4.2-notes
9.4.1-notes
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/d2ea5bfb7a9c5df9601af71ccea4983a5fc9528b...9c08d9a1b40c8c66a5fdcd6cb1b02b20121c93c4
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/d2ea5bfb7a9c5df9601af71ccea4983a5fc9528b...9c08d9a1b40c8c66a5fdcd6cb1b02b20121c93c4
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20221024/5c906c40/attachment-0001.html>
More information about the ghc-commits
mailing list