mirror of
https://github.com/golang/go
synced 2024-10-05 20:41:22 -06:00
[dev.ssa] cmd/compile: log progs during ssa codegen
This is helpful when debugging generated code. Change-Id: I268efa3593a03bb2c4e9f07d9034c004cd40df41 Reviewed-on: https://go-review.googlesource.com/13099 Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
parent
38ed6c10eb
commit
b8efee0d8a
@ -1704,19 +1704,41 @@ func genssa(f *ssa.Func, ptxt *obj.Prog, gcargs, gclocals *Sym) {
|
|||||||
// and where they would like to go
|
// and where they would like to go
|
||||||
var branches []branch
|
var branches []branch
|
||||||
|
|
||||||
|
var valueProgs map[*obj.Prog]*ssa.Value
|
||||||
|
var blockProgs map[*obj.Prog]*ssa.Block
|
||||||
|
const logProgs = true
|
||||||
|
if logProgs {
|
||||||
|
valueProgs = make(map[*obj.Prog]*ssa.Value, f.NumValues())
|
||||||
|
blockProgs = make(map[*obj.Prog]*ssa.Block, f.NumBlocks())
|
||||||
|
f.Logf("genssa %s\n", f.Name)
|
||||||
|
blockProgs[Pc] = f.Blocks[0]
|
||||||
|
}
|
||||||
|
|
||||||
// Emit basic blocks
|
// Emit basic blocks
|
||||||
for i, b := range f.Blocks {
|
for i, b := range f.Blocks {
|
||||||
bstart[b.ID] = Pc
|
bstart[b.ID] = Pc
|
||||||
// Emit values in block
|
// Emit values in block
|
||||||
for _, v := range b.Values {
|
for _, v := range b.Values {
|
||||||
|
x := Pc
|
||||||
genValue(v)
|
genValue(v)
|
||||||
|
if logProgs {
|
||||||
|
for ; x != Pc; x = x.Link {
|
||||||
|
valueProgs[x] = v
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Emit control flow instructions for block
|
// Emit control flow instructions for block
|
||||||
var next *ssa.Block
|
var next *ssa.Block
|
||||||
if i < len(f.Blocks)-1 {
|
if i < len(f.Blocks)-1 {
|
||||||
next = f.Blocks[i+1]
|
next = f.Blocks[i+1]
|
||||||
}
|
}
|
||||||
|
x := Pc
|
||||||
branches = genBlock(b, next, branches)
|
branches = genBlock(b, next, branches)
|
||||||
|
if logProgs {
|
||||||
|
for ; x != Pc; x = x.Link {
|
||||||
|
blockProgs[x] = b
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Resolve branches
|
// Resolve branches
|
||||||
@ -1726,6 +1748,20 @@ func genssa(f *ssa.Func, ptxt *obj.Prog, gcargs, gclocals *Sym) {
|
|||||||
|
|
||||||
Pc.As = obj.ARET // overwrite AEND
|
Pc.As = obj.ARET // overwrite AEND
|
||||||
|
|
||||||
|
if logProgs {
|
||||||
|
for p := ptxt; p != nil; p = p.Link {
|
||||||
|
var s string
|
||||||
|
if v, ok := valueProgs[p]; ok {
|
||||||
|
s = v.String()
|
||||||
|
} else if b, ok := blockProgs[p]; ok {
|
||||||
|
s = b.String()
|
||||||
|
} else {
|
||||||
|
s = " " // most value and branch strings are 2-3 characters long
|
||||||
|
}
|
||||||
|
f.Logf("%s\t%s\n", s, p)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Emit static data
|
// Emit static data
|
||||||
if f.StaticData != nil {
|
if f.StaticData != nil {
|
||||||
for _, n := range f.StaticData.([]*Node) {
|
for _, n := range f.StaticData.([]*Node) {
|
||||||
|
Loading…
Reference in New Issue
Block a user