From d7ccd82eacd7a03c7cf31ea56315c3a35218e122 Mon Sep 17 00:00:00 2001 From: Ico Doornekamp Date: Thu, 9 Jul 2020 19:18:35 +0200 Subject: VM profiler (#14833) * Crude VM profiler * Added --profileVM flag, refactoring * fixed FileLine hash * Use TLineInfo instead of own FileLine, updated formatting * Refactoring, moved PStackFrame to vmdefs for cleaner data structure * Moved vmprofiler to separate file * Simplified TLineInfo hash, use toFileLineCol for output * Hash * Moved profile data into Config, dump only once at end of run * Changed profile output header to show '#instr' instead of 'count' * Do not accumulate instrcount for non-top frames Co-authored-by: Ico Doornekamp --- compiler/vmdef.nim | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'compiler/vmdef.nim') diff --git a/compiler/vmdef.nim b/compiler/vmdef.nim index 7b51c626d..9228ce5eb 100644 --- a/compiler/vmdef.nim +++ b/compiler/vmdef.nim @@ -261,6 +261,21 @@ type config*: ConfigRef graph*: ModuleGraph oldErrorCount*: int + profiler*: Profiler + + PStackFrame* = ref TStackFrame + TStackFrame* = object + prc*: PSym # current prc; proc that is evaluated + slots*: seq[TFullReg] # parameters passed to the proc + locals; + # parameters come first + next*: PStackFrame # for stacking + comesFrom*: int + safePoints*: seq[int] # used for exception handling + # XXX 'break' should perform cleanup actions + # What does the C backend do for it? + Profiler* = object + tEnter*: float + tos*: PStackFrame TPosition* = distinct int -- cgit 1.4.1-2-gfad0