Refactor temp files cleanup
authorDouglas Wilson <douglas.wilson@gmail.com>
Thu, 8 Jun 2017 18:59:49 +0000 (14:59 -0400)
committerBen Gamari <ben@smart-cactus.org>
Thu, 8 Jun 2017 19:35:58 +0000 (15:35 -0400)
commit3ee3822ce588565e912ab6211e9d2cd545fc6ba6
tree50ac09557a3908efc67037c5213c6207bb5fc454
parentcd8f4b9917c6fd9aa894ecafc505224e41b947fa
Refactor temp files cleanup

Remove filesToNotIntermediateClean from DynFlags, create a data type
FilesToClean, and change filesToClean in DynFlags to be a FilesToClean.

Modify SysTools.newTempName and the Temporary constructor of
PipelineMonad.PipelineOutput to take a TempFileLifetime, which specifies
whether a temp file should live until the end of GhcMonad.withSession,
or until the next time cleanIntermediateTempFiles is called.

These changes allow the cleaning of intermediate files in GhcMake to be
much more efficient.

HscTypes.hptObjs is removed as it is no longer used.

A new performance test T13701 is added, which passes both with and
without -keep-tmp-files.  The test fails by 25% without the patch, and
passes when -keep-tmp-files is added.

Note that there are still at two hotspots caused by
algorithms quadratic in the number of modules, however neither of them
allocate. They are:

* DriverPipeline.compileOne'.needsLinker
* GhcMake.getModLoop

DriverPipeline.compileOne'.needsLinker is changed slightly to improve
the situation.

I don't like adding these Types to DynFlags, but they need to be seen by
Dynflags, SysTools and PipelineMonad. The alternative seems to be to
create a new module.

Reviewers: austin, hvr, bgamari, dfeuer, niteria, simonmar, erikd

Reviewed By: simonmar

Subscribers: rwbarton, thomie

GHC Trac Issues: #13701

Differential Revision: https://phabricator.haskell.org/D3620
18 files changed:
compiler/ghc.cabal.in
compiler/ghc.mk
compiler/ghci/Linker.hs
compiler/iface/MkIface.hs
compiler/main/CodeOutput.hs
compiler/main/DriverMkDepend.hs
compiler/main/DriverPipeline.hs
compiler/main/DynFlags.hs
compiler/main/ErrUtils.hs
compiler/main/FileCleanup.hs [new file with mode: 0644]
compiler/main/GHC.hs
compiler/main/GhcMake.hs
compiler/main/HscTypes.hs
compiler/main/PipelineMonad.hs
compiler/main/SysTools.hs
ghc/GHCi/UI.hs
testsuite/tests/perf/compiler/all.T
testsuite/tests/perf/compiler/genT13701 [new file with mode: 0755]