summaryrefslogtreecommitdiff
path: root/compiler/GHC/Cmm/Parser.y
diff options
context:
space:
mode:
authorMatthew Pickering <matthewtpickering@gmail.com>2021-11-25 17:03:08 +0000
committerAndreas Klebinger <klebinger.andreas@gmx.at>2022-03-01 14:03:25 +0100
commit1a23d2008ed90b33924ffe35f5c69eb9e3391456 (patch)
tree4ed576840047bfbada7e3e8575c2c57edeb5b05e /compiler/GHC/Cmm/Parser.y
parent80f9133e128abc61913d264ecd8b102517b266f5 (diff)
downloadhaskell-1a23d2008ed90b33924ffe35f5c69eb9e3391456.tar.gz
Ticky profiling improvements.wip/ticky-eventlog-rebase
This adds a number of changes to ticky-ticky profiling. When an executable is profiled with IPE profiling it's now possible to associate id-related ticky counters to their source location. This works by emitting the info table address as part of the counter which can be looked up in the IPE table. Add a `-ticky-ap-thunk` flag. This flag prevents the use of some standard thunks which are precompiled into the RTS. This means reduced cache locality and increased code size. But it allows better attribution of execution cost to specific source locations instead of simple attributing it to the standard thunk. ticky-ticky now uses the `arg` field to emit additional information about counters in json format. When ticky-ticky is used in combination with the eventlog eventlog2html can be used to generate a html table from the eventlog similar to the old text output for ticky-ticky.
Diffstat (limited to 'compiler/GHC/Cmm/Parser.y')
-rw-r--r--compiler/GHC/Cmm/Parser.y1
1 files changed, 1 insertions, 0 deletions
diff --git a/compiler/GHC/Cmm/Parser.y b/compiler/GHC/Cmm/Parser.y
index 6e6a130233..100e4f9b65 100644
--- a/compiler/GHC/Cmm/Parser.y
+++ b/compiler/GHC/Cmm/Parser.y
@@ -1519,6 +1519,7 @@ parseCmmFile dflags this_mod home_unit filename = do
let fstate = F.initFCodeState (profilePlatform $ targetProfile dflags)
let fcode = do
((), cmm) <- getCmm $ unEC code "global" (initEnv (targetProfile dflags)) [] >> return ()
+ -- See Note [Mapping Info Tables to Source Positions] (IPE Maps)
let used_info = map (cmmInfoTableToInfoProvEnt this_mod)
(mapMaybe topInfoTable cmm)
((), cmm2) <- getCmm $ mapM_ emitInfoTableProv used_info