aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ssa/stackalloc.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/compile/internal/ssa/stackalloc.go')
-rw-r--r--src/cmd/compile/internal/ssa/stackalloc.go26
1 files changed, 4 insertions, 22 deletions
diff --git a/src/cmd/compile/internal/ssa/stackalloc.go b/src/cmd/compile/internal/ssa/stackalloc.go
index d41f3996af..3e24b48a69 100644
--- a/src/cmd/compile/internal/ssa/stackalloc.go
+++ b/src/cmd/compile/internal/ssa/stackalloc.go
@@ -25,8 +25,6 @@ type stackAllocState struct {
values []stackValState
interfere [][]ID // interfere[v.id] = values that interfere with v.
names []LocalSlot
- slots []int
- used []bool
nArgSlot, // Number of Values sourced to arg slot
nNotNeed, // Number of Values not needing a stack slot
@@ -57,12 +55,6 @@ func putStackAllocState(s *stackAllocState) {
for i := range s.names {
s.names[i] = LocalSlot{}
}
- for i := range s.slots {
- s.slots[i] = 0
- }
- for i := range s.used {
- s.used[i] = false
- }
s.f.Cache.stackAllocState = s
s.f = nil
s.live = nil
@@ -218,25 +210,15 @@ func (s *stackAllocState) stackalloc() {
// Each time we assign a stack slot to a value v, we remember
// the slot we used via an index into locations[v.Type].
- slots := s.slots
- if n := f.NumValues(); cap(slots) >= n {
- slots = slots[:n]
- } else {
- slots = make([]int, n)
- s.slots = slots
- }
+ slots := f.Cache.allocIntSlice(f.NumValues())
+ defer f.Cache.freeIntSlice(slots)
for i := range slots {
slots[i] = -1
}
// Pick a stack slot for each value needing one.
- var used []bool
- if n := f.NumValues(); cap(s.used) >= n {
- used = s.used[:n]
- } else {
- used = make([]bool, n)
- s.used = used
- }
+ used := f.Cache.allocBoolSlice(f.NumValues())
+ defer f.Cache.freeBoolSlice(used)
for _, b := range f.Blocks {
for _, v := range b.Values {
if !s.values[v.ID].needSlot {