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