diff options
Diffstat (limited to 'src/cmd/8g/peep.go')
-rw-r--r-- | src/cmd/8g/peep.go | 80 |
1 files changed, 29 insertions, 51 deletions
diff --git a/src/cmd/8g/peep.go b/src/cmd/8g/peep.go index 0838882e38..8aa6e94c61 100644 --- a/src/cmd/8g/peep.go +++ b/src/cmd/8g/peep.go @@ -63,10 +63,9 @@ func needc(p *obj.Prog) bool { } func rnops(r *gc.Flow) *gc.Flow { - var p *obj.Prog - var r1 *gc.Flow - if r != nil { + var p *obj.Prog + var r1 *gc.Flow for { p = r.Prog if p.As != obj.ANOP || p.From.Type != obj.TYPE_NONE || p.To.Type != obj.TYPE_NONE { @@ -84,14 +83,7 @@ func rnops(r *gc.Flow) *gc.Flow { } func peep(firstp *obj.Prog) { - var r *gc.Flow - var r1 *gc.Flow - var g *gc.Graph - var p *obj.Prog - var p1 *obj.Prog - var t int - - g = gc.Flowstart(firstp, nil) + g := gc.Flowstart(firstp, nil) if g == nil { return } @@ -104,7 +96,8 @@ func peep(firstp *obj.Prog) { // find MOV $con,R followed by // another MOV $con,R without // setting R in the interim - for r = g.Start; r != nil; r = r.Link { + var p *obj.Prog + for r := g.Start; r != nil; r = r.Link { p = r.Prog switch p.As { case i386.ALEAL: @@ -129,6 +122,10 @@ func peep(firstp *obj.Prog) { } } + var r1 *gc.Flow + var p1 *obj.Prog + var r *gc.Flow + var t int loop1: if gc.Debug['P'] != 0 && gc.Debug['v'] != 0 { gc.Dumpit("loop1", g.Start, 0) @@ -229,7 +226,7 @@ loop1: // can be replaced by MOVAPD, which moves the pair of float64s // instead of just the lower one. We only use the lower one, but // the processor can do better if we do moves using both. - for r = g.Start; r != nil; r = r.Link { + for r := g.Start; r != nil; r = r.Link { p = r.Prog if p.As == i386.AMOVSD { if regtyp(&p.From) { @@ -244,9 +241,7 @@ loop1: } func excise(r *gc.Flow) { - var p *obj.Prog - - p = r.Prog + p := r.Prog if gc.Debug['P'] != 0 && gc.Debug['v'] != 0 { fmt.Printf("%v ===delete===\n", p) } @@ -269,9 +264,8 @@ func regtyp(a *obj.Addr) bool { // causing any trouble. func elimshortmov(g *gc.Graph) { var p *obj.Prog - var r *gc.Flow - for r = g.Start; r != nil; r = r.Link { + for r := g.Start; r != nil; r = r.Link { p = r.Prog if regtyp(&p.To) { switch p.As { @@ -367,22 +361,17 @@ func elimshortmov(g *gc.Graph) { * will be eliminated by copy propagation. */ func subprop(r0 *gc.Flow) bool { - var p *obj.Prog - var v1 *obj.Addr - var v2 *obj.Addr - var r *gc.Flow - var t int - var info gc.ProgInfo - - p = r0.Prog - v1 = &p.From + p := r0.Prog + v1 := &p.From if !regtyp(v1) { return false } - v2 = &p.To + v2 := &p.To if !regtyp(v2) { return false } + var info gc.ProgInfo + var r *gc.Flow for r = gc.Uniqp(r0); r != nil; r = gc.Uniqp(r) { if gc.Debug['P'] != 0 && gc.Debug['v'] != 0 { fmt.Printf("\t? %v\n", r.Prog) @@ -436,7 +425,7 @@ gotit: } } - t = int(v1.Reg) + t := int(v1.Reg) v1.Reg = v2.Reg v2.Reg = int16(t) if gc.Debug['P'] != 0 { @@ -458,13 +447,9 @@ gotit: * set v2 return success */ func copyprop(g *gc.Graph, r0 *gc.Flow) bool { - var p *obj.Prog - var v1 *obj.Addr - var v2 *obj.Addr - - p = r0.Prog - v1 = &p.From - v2 = &p.To + p := r0.Prog + v1 := &p.From + v2 := &p.To if copyas(v1, v2) { return true } @@ -473,9 +458,6 @@ func copyprop(g *gc.Graph, r0 *gc.Flow) bool { } func copy1(v1 *obj.Addr, v2 *obj.Addr, r *gc.Flow, f int) bool { - var t int - var p *obj.Prog - if uint32(r.Active) == gactive { if gc.Debug['P'] != 0 { fmt.Printf("act set; return 1\n") @@ -487,6 +469,8 @@ func copy1(v1 *obj.Addr, v2 *obj.Addr, r *gc.Flow, f int) bool { if gc.Debug['P'] != 0 { fmt.Printf("copy %v->%v f=%d\n", gc.Ctxt.Dconv(v1), gc.Ctxt.Dconv(v2), f) } + var t int + var p *obj.Prog for ; r != nil; r = r.S1 { p = r.Prog if gc.Debug['P'] != 0 { @@ -577,8 +561,6 @@ func copy1(v1 *obj.Addr, v2 *obj.Addr, r *gc.Flow, f int) bool { * 0 otherwise (not touched) */ func copyu(p *obj.Prog, v *obj.Addr, s *obj.Addr) int { - var info gc.ProgInfo - switch p.As { case obj.AJMP: if s != nil { @@ -632,6 +614,7 @@ func copyu(p *obj.Prog, v *obj.Addr, s *obj.Addr) int { if p.As == obj.AVARDEF || p.As == obj.AVARKILL { return 0 } + var info gc.ProgInfo proginfo(&info, p) if (info.Reguse|info.Regset)&RtoB(int(v.Reg)) != 0 { @@ -747,10 +730,8 @@ func copyau(a *obj.Addr, v *obj.Addr) bool { * return failure to substitute */ func copysub(a *obj.Addr, v *obj.Addr, s *obj.Addr, f int) int { - var reg int - if copyas(a, v) { - reg = int(s.Reg) + reg := int(s.Reg) if reg >= i386.REG_AX && reg <= i386.REG_DI || reg >= i386.REG_X0 && reg <= i386.REG_X7 { if f != 0 { a.Reg = int16(reg) @@ -761,7 +742,7 @@ func copysub(a *obj.Addr, v *obj.Addr, s *obj.Addr, f int) int { } if regtyp(v) { - reg = int(v.Reg) + reg := int(v.Reg) if a.Type == obj.TYPE_MEM && int(a.Reg) == reg { if (s.Reg == i386.REG_BP) && a.Index != obj.TYPE_NONE { return 1 /* can't use BP-base with index */ @@ -786,15 +767,12 @@ func copysub(a *obj.Addr, v *obj.Addr, s *obj.Addr, f int) int { } func conprop(r0 *gc.Flow) { - var r *gc.Flow var p *obj.Prog - var p0 *obj.Prog var t int - var v0 *obj.Addr - p0 = r0.Prog - v0 = &p0.To - r = r0 + p0 := r0.Prog + v0 := &p0.To + r := r0 loop: r = gc.Uniqs(r) |