File tree Expand file tree Collapse file tree 3 files changed +12
-0
lines changed
src/cmd/compile/internal/ssa Expand file tree Collapse file tree 3 files changed +12
-0
lines changed Original file line number Diff line number Diff line change @@ -51,6 +51,7 @@ type Config struct {
51
51
// Storage for low-numbered values and blocks.
52
52
values [2000 ]Value
53
53
blocks [200 ]Block
54
+ locs [2000 ]Location
54
55
55
56
// Reusable stackAllocState.
56
57
// See stackalloc.go's {new,put}StackAllocState.
Original file line number Diff line number Diff line change @@ -438,6 +438,16 @@ func (f *Func) Free() {
438
438
f .Config .blocks [i ].ID = ID (i )
439
439
}
440
440
441
+ // Clear locs.
442
+ n = len (f .RegAlloc )
443
+ if n > len (f .Config .locs ) {
444
+ n = len (f .Config .locs )
445
+ }
446
+ head := f .Config .locs [:n ]
447
+ for i := range head {
448
+ head [i ] = nil
449
+ }
450
+
441
451
// Unregister from config.
442
452
if f .Config .curFunc != f {
443
453
f .Fatalf ("free of function which isn't the last one allocated" )
Original file line number Diff line number Diff line change @@ -476,6 +476,7 @@ func isLeaf(f *Func) bool {
476
476
477
477
func (s * regAllocState ) init (f * Func ) {
478
478
s .f = f
479
+ s .f .RegAlloc = s .f .Config .locs [:0 ]
479
480
s .registers = f .Config .registers
480
481
if nr := len (s .registers ); nr == 0 || nr > int (noRegister ) || nr > int (unsafe .Sizeof (regMask (0 ))* 8 ) {
481
482
s .f .Fatalf ("bad number of registers: %d" , nr )
You can’t perform that action at this time.
0 commit comments