mirror of
https://github.com/golang/go
synced 2024-10-05 21:21:21 -06:00
[dev.ssa] cmd/compile/ssa: add timing to compiler passes
Add timing/allocation information to each compiler pass for both the console and html output. Change-Id: I75833003b806a09b4fb1bbf63983258612cdb7b0 Reviewed-on: https://go-review.googlesource.com/14277 Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
19447a66d6
commit
24dcede1c0
@ -5,8 +5,10 @@
|
|||||||
package ssa
|
package ssa
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Compile is the main entry point for this package.
|
// Compile is the main entry point for this package.
|
||||||
@ -36,14 +38,34 @@ func Compile(f *Func) {
|
|||||||
printFunc(f)
|
printFunc(f)
|
||||||
f.Config.HTML.WriteFunc("start", f)
|
f.Config.HTML.WriteFunc("start", f)
|
||||||
checkFunc(f)
|
checkFunc(f)
|
||||||
|
const logMemStats = false
|
||||||
for _, p := range passes {
|
for _, p := range passes {
|
||||||
phaseName = p.name
|
phaseName = p.name
|
||||||
f.Logf(" pass %s begin\n", p.name)
|
f.Logf(" pass %s begin\n", p.name)
|
||||||
// TODO: capture logging during this pass, add it to the HTML
|
// TODO: capture logging during this pass, add it to the HTML
|
||||||
|
var mStart runtime.MemStats
|
||||||
|
if logMemStats {
|
||||||
|
runtime.ReadMemStats(&mStart)
|
||||||
|
}
|
||||||
|
|
||||||
|
tStart := time.Now()
|
||||||
p.fn(f)
|
p.fn(f)
|
||||||
f.Logf(" pass %s end\n", p.name)
|
tEnd := time.Now()
|
||||||
|
|
||||||
|
time := tEnd.Sub(tStart).Nanoseconds()
|
||||||
|
var stats string
|
||||||
|
if logMemStats {
|
||||||
|
var mEnd runtime.MemStats
|
||||||
|
runtime.ReadMemStats(&mEnd)
|
||||||
|
nAllocs := mEnd.TotalAlloc - mStart.TotalAlloc
|
||||||
|
stats = fmt.Sprintf("[%d ns %d bytes]", time, nAllocs)
|
||||||
|
} else {
|
||||||
|
stats = fmt.Sprintf("[%d ns]", time)
|
||||||
|
}
|
||||||
|
|
||||||
|
f.Logf(" pass %s end %s\n", p.name, stats)
|
||||||
printFunc(f)
|
printFunc(f)
|
||||||
f.Config.HTML.WriteFunc("after "+phaseName, f)
|
f.Config.HTML.WriteFunc(fmt.Sprintf("after %s %s", phaseName, stats), f)
|
||||||
checkFunc(f)
|
checkFunc(f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user