chore: add separate profiling entries for base, mono, and IR phases (#9817)

This commit is contained in:
Cameron Zwarich 2025-08-09 22:00:49 -07:00 committed by GitHub
parent 361ca788a7
commit 544f9912b7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -108,24 +108,31 @@ def run (declNames : Array Name) : CompilerM (Array IR.Decl) := withAtLeastMaxRe
if let some info ← getDeclInfo? declName then
if !(isValidMainType info.type) then
throwError "`main` function must have type `(List String →)? IO (UInt32 | Unit | PUnit)`"
let mut decls ← declNames.mapM toDecl
decls := markRecDecls decls
let decls ← declNames.mapM toDecl
let decls := markRecDecls decls
let manager ← getPassManager
let isCheckEnabled := compiler.check.get (← getOptions)
for pass in manager.basePasses do
decls ← withTraceNode `Compiler (fun _ => return m!"compiler phase: {pass.phase}, pass: {pass.name}") do
withPhase pass.phase <| pass.run decls
withPhase pass.phaseOut <| checkpoint pass.name decls (isCheckEnabled || pass.shouldAlwaysRunCheck)
for pass in manager.monoPasses do
decls ← withTraceNode `Compiler (fun _ => return m!"compiler phase: {pass.phase}, pass: {pass.name}") do
withPhase pass.phase <| pass.run decls
withPhase pass.phaseOut <| checkpoint pass.name decls (isCheckEnabled || pass.shouldAlwaysRunCheck)
let decls ← profileitM Exception "compilation (LCNF base)" (← getOptions) do
let mut decls := decls
for pass in manager.basePasses do
decls ← withTraceNode `Compiler (fun _ => return m!"compiler phase: {pass.phase}, pass: {pass.name}") do
withPhase pass.phase <| pass.run decls
withPhase pass.phaseOut <| checkpoint pass.name decls (isCheckEnabled || pass.shouldAlwaysRunCheck)
return decls
let decls ← profileitM Exception "compilation (LCNF mono)" (← getOptions) do
let mut decls := decls
for pass in manager.monoPasses do
decls ← withTraceNode `Compiler (fun _ => return m!"compiler phase: {pass.phase}, pass: {pass.name}") do
withPhase pass.phase <| pass.run decls
withPhase pass.phaseOut <| checkpoint pass.name decls (isCheckEnabled || pass.shouldAlwaysRunCheck)
return decls
if (← Lean.isTracingEnabledFor `Compiler.result) then
for decl in decls do
let decl ← normalizeFVarIds decl
Lean.addTrace `Compiler.result m!"size: {decl.size}\n{← ppDecl' decl}"
let irDecls ← IR.toIR decls
IR.compile irDecls
profileitM Exception "compilation (IR)" (← getOptions) do
let irDecls ← IR.toIR decls
IR.compile irDecls
end PassManager
@ -138,9 +145,8 @@ def showDecl (phase : Phase) (declName : Name) : CoreM Format := do
@[export lean_lcnf_compile_decls]
def main (declNames : Array Name) : CoreM Unit := do
profileitM Exception "compilation" (← getOptions) do
withTraceNode `Compiler (fun _ => return m!"compiling: {declNames}") do
CompilerM.run <| discard <| PassManager.run declNames
withTraceNode `Compiler (fun _ => return m!"compiling: {declNames}") do
CompilerM.run <| discard <| PassManager.run declNames
builtin_initialize
registerTraceClass `Compiler.init (inherited := true)