Source notes (CorePrep and Stg support)
authorPeter Wortmann <scpmw@leeds.ac.uk>
Tue, 14 Jan 2014 18:25:16 +0000 (18:25 +0000)
committerAustin Seipp <austin@well-typed.com>
Tue, 16 Dec 2014 21:02:19 +0000 (15:02 -0600)
commit4cdbf80250da2d3ba1c63451e5fbc9b5ca9cbfe9
tree0cb8e99ff8202cf6873fd93c22383cdc7036c13f
parent07d604fa1dba7caa39cdc4bc3d90844c600adb70
Source notes (CorePrep and Stg support)

This is basically just about continuing maintaining source notes after
the Core stage. Unfortunately, this is more involved as it might seem,
as there are more restrictions on where ticks are allowed to show up.

Notes:

* We replace the StgTick / StgSCC constructors with a unified StgTick
  that can carry any tickish.

* For handling constructor or lambda applications, we generally float
  ticks out.

* Note that thanks to the NonLam placement, we know that source notes
  can never appear on lambdas. This means that as long as we are
  careful to always use mkTick, we will never violate CorePrep
  invariants.

* This is however not automatically true for eta expansion, which
  needs to somewhat awkwardly strip, then re-tick the expression in
  question.

* Where CorePrep floats out lets, we make sure to wrap them in the
  same spirit as FloatOut.

* Detecting selector thunks becomes a bit more involved, as we can run
  into ticks at multiple points.

(From Phabricator D169)
compiler/codeGen/StgCmmBind.hs
compiler/codeGen/StgCmmExpr.hs
compiler/coreSyn/CorePrep.hs
compiler/profiling/SCCfinal.hs
compiler/simplStg/StgStats.hs
compiler/simplStg/UnariseStg.hs
compiler/stgSyn/CoreToStg.hs
compiler/stgSyn/StgLint.hs
compiler/stgSyn/StgSyn.hs