github.com/bir3/gocompiler@v0.3.205/src/cmd/compile/internal/ssa/allocators.go (about) 1 // Code generated from _gen/allocators.go; DO NOT EDIT. 2 3 package ssa 4 5 import ( 6 "math/bits" 7 "sync" 8 ) 9 10 var poolFreeValueSlice [27]sync.Pool 11 12 func (c *Cache) allocValueSlice(n int) []*Value { 13 var s []*Value 14 n2 := n 15 if n2 < 32 { 16 n2 = 32 17 } 18 b := bits.Len(uint(n2 - 1)) 19 v := poolFreeValueSlice[b-5].Get() 20 if v == nil { 21 s = make([]*Value, 1<<b) 22 } else { 23 sp := v.(*[]*Value) 24 s = *sp 25 *sp = nil 26 c.hdrValueSlice = append(c.hdrValueSlice, sp) 27 } 28 s = s[:n] 29 return s 30 } 31 func (c *Cache) freeValueSlice(s []*Value) { 32 for i := range s { 33 s[i] = nil 34 } 35 b := bits.Len(uint(cap(s)) - 1) 36 var sp *[]*Value 37 if len(c.hdrValueSlice) == 0 { 38 sp = new([]*Value) 39 } else { 40 sp = c.hdrValueSlice[len(c.hdrValueSlice)-1] 41 c.hdrValueSlice[len(c.hdrValueSlice)-1] = nil 42 c.hdrValueSlice = c.hdrValueSlice[:len(c.hdrValueSlice)-1] 43 } 44 *sp = s 45 poolFreeValueSlice[b-5].Put(sp) 46 } 47 48 var poolFreeBlockSlice [27]sync.Pool 49 50 func (c *Cache) allocBlockSlice(n int) []*Block { 51 var s []*Block 52 n2 := n 53 if n2 < 32 { 54 n2 = 32 55 } 56 b := bits.Len(uint(n2 - 1)) 57 v := poolFreeBlockSlice[b-5].Get() 58 if v == nil { 59 s = make([]*Block, 1<<b) 60 } else { 61 sp := v.(*[]*Block) 62 s = *sp 63 *sp = nil 64 c.hdrBlockSlice = append(c.hdrBlockSlice, sp) 65 } 66 s = s[:n] 67 return s 68 } 69 func (c *Cache) freeBlockSlice(s []*Block) { 70 for i := range s { 71 s[i] = nil 72 } 73 b := bits.Len(uint(cap(s)) - 1) 74 var sp *[]*Block 75 if len(c.hdrBlockSlice) == 0 { 76 sp = new([]*Block) 77 } else { 78 sp = c.hdrBlockSlice[len(c.hdrBlockSlice)-1] 79 c.hdrBlockSlice[len(c.hdrBlockSlice)-1] = nil 80 c.hdrBlockSlice = c.hdrBlockSlice[:len(c.hdrBlockSlice)-1] 81 } 82 *sp = s 83 poolFreeBlockSlice[b-5].Put(sp) 84 } 85 86 var poolFreeBoolSlice [24]sync.Pool 87 88 func (c *Cache) allocBoolSlice(n int) []bool { 89 var s []bool 90 n2 := n 91 if n2 < 256 { 92 n2 = 256 93 } 94 b := bits.Len(uint(n2 - 1)) 95 v := poolFreeBoolSlice[b-8].Get() 96 if v == nil { 97 s = make([]bool, 1<<b) 98 } else { 99 sp := v.(*[]bool) 100 s = *sp 101 *sp = nil 102 c.hdrBoolSlice = append(c.hdrBoolSlice, sp) 103 } 104 s = s[:n] 105 return s 106 } 107 func (c *Cache) freeBoolSlice(s []bool) { 108 for i := range s { 109 s[i] = false 110 } 111 b := bits.Len(uint(cap(s)) - 1) 112 var sp *[]bool 113 if len(c.hdrBoolSlice) == 0 { 114 sp = new([]bool) 115 } else { 116 sp = c.hdrBoolSlice[len(c.hdrBoolSlice)-1] 117 c.hdrBoolSlice[len(c.hdrBoolSlice)-1] = nil 118 c.hdrBoolSlice = c.hdrBoolSlice[:len(c.hdrBoolSlice)-1] 119 } 120 *sp = s 121 poolFreeBoolSlice[b-8].Put(sp) 122 } 123 124 var poolFreeIntSlice [27]sync.Pool 125 126 func (c *Cache) allocIntSlice(n int) []int { 127 var s []int 128 n2 := n 129 if n2 < 32 { 130 n2 = 32 131 } 132 b := bits.Len(uint(n2 - 1)) 133 v := poolFreeIntSlice[b-5].Get() 134 if v == nil { 135 s = make([]int, 1<<b) 136 } else { 137 sp := v.(*[]int) 138 s = *sp 139 *sp = nil 140 c.hdrIntSlice = append(c.hdrIntSlice, sp) 141 } 142 s = s[:n] 143 return s 144 } 145 func (c *Cache) freeIntSlice(s []int) { 146 for i := range s { 147 s[i] = 0 148 } 149 b := bits.Len(uint(cap(s)) - 1) 150 var sp *[]int 151 if len(c.hdrIntSlice) == 0 { 152 sp = new([]int) 153 } else { 154 sp = c.hdrIntSlice[len(c.hdrIntSlice)-1] 155 c.hdrIntSlice[len(c.hdrIntSlice)-1] = nil 156 c.hdrIntSlice = c.hdrIntSlice[:len(c.hdrIntSlice)-1] 157 } 158 *sp = s 159 poolFreeIntSlice[b-5].Put(sp) 160 } 161 162 var poolFreeInt32Slice [26]sync.Pool 163 164 func (c *Cache) allocInt32Slice(n int) []int32 { 165 var s []int32 166 n2 := n 167 if n2 < 64 { 168 n2 = 64 169 } 170 b := bits.Len(uint(n2 - 1)) 171 v := poolFreeInt32Slice[b-6].Get() 172 if v == nil { 173 s = make([]int32, 1<<b) 174 } else { 175 sp := v.(*[]int32) 176 s = *sp 177 *sp = nil 178 c.hdrInt32Slice = append(c.hdrInt32Slice, sp) 179 } 180 s = s[:n] 181 return s 182 } 183 func (c *Cache) freeInt32Slice(s []int32) { 184 for i := range s { 185 s[i] = 0 186 } 187 b := bits.Len(uint(cap(s)) - 1) 188 var sp *[]int32 189 if len(c.hdrInt32Slice) == 0 { 190 sp = new([]int32) 191 } else { 192 sp = c.hdrInt32Slice[len(c.hdrInt32Slice)-1] 193 c.hdrInt32Slice[len(c.hdrInt32Slice)-1] = nil 194 c.hdrInt32Slice = c.hdrInt32Slice[:len(c.hdrInt32Slice)-1] 195 } 196 *sp = s 197 poolFreeInt32Slice[b-6].Put(sp) 198 } 199 200 var poolFreeInt8Slice [24]sync.Pool 201 202 func (c *Cache) allocInt8Slice(n int) []int8 { 203 var s []int8 204 n2 := n 205 if n2 < 256 { 206 n2 = 256 207 } 208 b := bits.Len(uint(n2 - 1)) 209 v := poolFreeInt8Slice[b-8].Get() 210 if v == nil { 211 s = make([]int8, 1<<b) 212 } else { 213 sp := v.(*[]int8) 214 s = *sp 215 *sp = nil 216 c.hdrInt8Slice = append(c.hdrInt8Slice, sp) 217 } 218 s = s[:n] 219 return s 220 } 221 func (c *Cache) freeInt8Slice(s []int8) { 222 for i := range s { 223 s[i] = 0 224 } 225 b := bits.Len(uint(cap(s)) - 1) 226 var sp *[]int8 227 if len(c.hdrInt8Slice) == 0 { 228 sp = new([]int8) 229 } else { 230 sp = c.hdrInt8Slice[len(c.hdrInt8Slice)-1] 231 c.hdrInt8Slice[len(c.hdrInt8Slice)-1] = nil 232 c.hdrInt8Slice = c.hdrInt8Slice[:len(c.hdrInt8Slice)-1] 233 } 234 *sp = s 235 poolFreeInt8Slice[b-8].Put(sp) 236 } 237 238 var poolFreeIDSlice [26]sync.Pool 239 240 func (c *Cache) allocIDSlice(n int) []ID { 241 var s []ID 242 n2 := n 243 if n2 < 64 { 244 n2 = 64 245 } 246 b := bits.Len(uint(n2 - 1)) 247 v := poolFreeIDSlice[b-6].Get() 248 if v == nil { 249 s = make([]ID, 1<<b) 250 } else { 251 sp := v.(*[]ID) 252 s = *sp 253 *sp = nil 254 c.hdrIDSlice = append(c.hdrIDSlice, sp) 255 } 256 s = s[:n] 257 return s 258 } 259 func (c *Cache) freeIDSlice(s []ID) { 260 for i := range s { 261 s[i] = 0 262 } 263 b := bits.Len(uint(cap(s)) - 1) 264 var sp *[]ID 265 if len(c.hdrIDSlice) == 0 { 266 sp = new([]ID) 267 } else { 268 sp = c.hdrIDSlice[len(c.hdrIDSlice)-1] 269 c.hdrIDSlice[len(c.hdrIDSlice)-1] = nil 270 c.hdrIDSlice = c.hdrIDSlice[:len(c.hdrIDSlice)-1] 271 } 272 *sp = s 273 poolFreeIDSlice[b-6].Put(sp) 274 } 275 276 var poolFreeSparseSet [27]sync.Pool 277 278 func (c *Cache) allocSparseSet(n int) *sparseSet { 279 var s *sparseSet 280 n2 := n 281 if n2 < 32 { 282 n2 = 32 283 } 284 b := bits.Len(uint(n2 - 1)) 285 v := poolFreeSparseSet[b-5].Get() 286 if v == nil { 287 s = newSparseSet(1 << b) 288 } else { 289 s = v.(*sparseSet) 290 } 291 return s 292 } 293 func (c *Cache) freeSparseSet(s *sparseSet) { 294 s.clear() 295 b := bits.Len(uint(s.cap()) - 1) 296 poolFreeSparseSet[b-5].Put(s) 297 } 298 299 var poolFreeSparseMap [27]sync.Pool 300 301 func (c *Cache) allocSparseMap(n int) *sparseMap { 302 var s *sparseMap 303 n2 := n 304 if n2 < 32 { 305 n2 = 32 306 } 307 b := bits.Len(uint(n2 - 1)) 308 v := poolFreeSparseMap[b-5].Get() 309 if v == nil { 310 s = newSparseMap(1 << b) 311 } else { 312 s = v.(*sparseMap) 313 } 314 return s 315 } 316 func (c *Cache) freeSparseMap(s *sparseMap) { 317 s.clear() 318 b := bits.Len(uint(s.cap()) - 1) 319 poolFreeSparseMap[b-5].Put(s) 320 } 321 322 var poolFreeSparseMapPos [27]sync.Pool 323 324 func (c *Cache) allocSparseMapPos(n int) *sparseMapPos { 325 var s *sparseMapPos 326 n2 := n 327 if n2 < 32 { 328 n2 = 32 329 } 330 b := bits.Len(uint(n2 - 1)) 331 v := poolFreeSparseMapPos[b-5].Get() 332 if v == nil { 333 s = newSparseMapPos(1 << b) 334 } else { 335 s = v.(*sparseMapPos) 336 } 337 return s 338 } 339 func (c *Cache) freeSparseMapPos(s *sparseMapPos) { 340 s.clear() 341 b := bits.Len(uint(s.cap()) - 1) 342 poolFreeSparseMapPos[b-5].Put(s) 343 }