mirror of
https://github.com/golang/go.git
synced 2026-06-28 03:40:37 +00:00
runtime: skip gcBlackenEnabled check and gcmarknewobject in fast path
We check earlier that it's zero before entering the fast path. For #79286 Change-Id: I1f5d9d6c04bcf3a30e550423d1a47c236a6a6964 Reviewed-on: https://go-review.googlesource.com/c/go/+/780080 Reviewed-by: Michael Pratt <mpratt@google.com> LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Michael Matloob <matloob@google.com>
This commit is contained in:
parent
2a93576965
commit
15f44ffcc3
3 changed files with 29 additions and 142 deletions
|
|
@ -464,6 +464,13 @@ func foldIfCondition(node ast.Node, from, to string) ast.Node {
|
|||
cursor.InsertBefore(stmt)
|
||||
}
|
||||
}
|
||||
if n.Else != nil {
|
||||
if block, ok := n.Else.(*ast.BlockStmt); ok {
|
||||
for i := len(block.List) - 1; i >= 0; i-- {
|
||||
cursor.InsertAfter(block.List[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
cursor.Delete()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -135,13 +135,7 @@ func mallocgcSmallScanNoHeaderSC1(size uintptr, typ *_type, needzero bool) unsaf
|
|||
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
|
||||
gcmarknewobject(span, uintptr(x))
|
||||
} else {
|
||||
|
||||
span.freeIndexForScan = span.freeindex
|
||||
}
|
||||
span.freeIndexForScan = span.freeindex
|
||||
|
||||
c.nextSample -= int64(elemsize)
|
||||
if c.nextSample < 0 || MemProfileRate != c.memProfRate {
|
||||
|
|
@ -284,13 +278,7 @@ func mallocgcSmallScanNoHeaderSC2(size uintptr, typ *_type, needzero bool) unsaf
|
|||
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
|
||||
gcmarknewobject(span, uintptr(x))
|
||||
} else {
|
||||
|
||||
span.freeIndexForScan = span.freeindex
|
||||
}
|
||||
span.freeIndexForScan = span.freeindex
|
||||
|
||||
c.nextSample -= int64(elemsize)
|
||||
if c.nextSample < 0 || MemProfileRate != c.memProfRate {
|
||||
|
|
@ -433,13 +421,7 @@ func mallocgcSmallScanNoHeaderSC3(size uintptr, typ *_type, needzero bool) unsaf
|
|||
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
|
||||
gcmarknewobject(span, uintptr(x))
|
||||
} else {
|
||||
|
||||
span.freeIndexForScan = span.freeindex
|
||||
}
|
||||
span.freeIndexForScan = span.freeindex
|
||||
|
||||
c.nextSample -= int64(elemsize)
|
||||
if c.nextSample < 0 || MemProfileRate != c.memProfRate {
|
||||
|
|
@ -582,13 +564,7 @@ func mallocgcSmallScanNoHeaderSC4(size uintptr, typ *_type, needzero bool) unsaf
|
|||
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
|
||||
gcmarknewobject(span, uintptr(x))
|
||||
} else {
|
||||
|
||||
span.freeIndexForScan = span.freeindex
|
||||
}
|
||||
span.freeIndexForScan = span.freeindex
|
||||
|
||||
c.nextSample -= int64(elemsize)
|
||||
if c.nextSample < 0 || MemProfileRate != c.memProfRate {
|
||||
|
|
@ -731,13 +707,7 @@ func mallocgcSmallScanNoHeaderSC5(size uintptr, typ *_type, needzero bool) unsaf
|
|||
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
|
||||
gcmarknewobject(span, uintptr(x))
|
||||
} else {
|
||||
|
||||
span.freeIndexForScan = span.freeindex
|
||||
}
|
||||
span.freeIndexForScan = span.freeindex
|
||||
|
||||
c.nextSample -= int64(elemsize)
|
||||
if c.nextSample < 0 || MemProfileRate != c.memProfRate {
|
||||
|
|
@ -880,13 +850,7 @@ func mallocgcSmallScanNoHeaderSC6(size uintptr, typ *_type, needzero bool) unsaf
|
|||
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
|
||||
gcmarknewobject(span, uintptr(x))
|
||||
} else {
|
||||
|
||||
span.freeIndexForScan = span.freeindex
|
||||
}
|
||||
span.freeIndexForScan = span.freeindex
|
||||
|
||||
c.nextSample -= int64(elemsize)
|
||||
if c.nextSample < 0 || MemProfileRate != c.memProfRate {
|
||||
|
|
@ -1029,13 +993,7 @@ func mallocgcSmallScanNoHeaderSC7(size uintptr, typ *_type, needzero bool) unsaf
|
|||
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
|
||||
gcmarknewobject(span, uintptr(x))
|
||||
} else {
|
||||
|
||||
span.freeIndexForScan = span.freeindex
|
||||
}
|
||||
span.freeIndexForScan = span.freeindex
|
||||
|
||||
c.nextSample -= int64(elemsize)
|
||||
if c.nextSample < 0 || MemProfileRate != c.memProfRate {
|
||||
|
|
@ -1178,13 +1136,7 @@ func mallocgcSmallScanNoHeaderSC8(size uintptr, typ *_type, needzero bool) unsaf
|
|||
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
|
||||
gcmarknewobject(span, uintptr(x))
|
||||
} else {
|
||||
|
||||
span.freeIndexForScan = span.freeindex
|
||||
}
|
||||
span.freeIndexForScan = span.freeindex
|
||||
|
||||
c.nextSample -= int64(elemsize)
|
||||
if c.nextSample < 0 || MemProfileRate != c.memProfRate {
|
||||
|
|
@ -1327,13 +1279,7 @@ func mallocgcSmallScanNoHeaderSC9(size uintptr, typ *_type, needzero bool) unsaf
|
|||
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
|
||||
gcmarknewobject(span, uintptr(x))
|
||||
} else {
|
||||
|
||||
span.freeIndexForScan = span.freeindex
|
||||
}
|
||||
span.freeIndexForScan = span.freeindex
|
||||
|
||||
c.nextSample -= int64(elemsize)
|
||||
if c.nextSample < 0 || MemProfileRate != c.memProfRate {
|
||||
|
|
@ -1476,13 +1422,7 @@ func mallocgcSmallScanNoHeaderSC10(size uintptr, typ *_type, needzero bool) unsa
|
|||
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
|
||||
gcmarknewobject(span, uintptr(x))
|
||||
} else {
|
||||
|
||||
span.freeIndexForScan = span.freeindex
|
||||
}
|
||||
span.freeIndexForScan = span.freeindex
|
||||
|
||||
c.nextSample -= int64(elemsize)
|
||||
if c.nextSample < 0 || MemProfileRate != c.memProfRate {
|
||||
|
|
@ -1589,13 +1529,7 @@ func mallocgcTinySC2(size uintptr, typ *_type, needzero bool) unsafe.Pointer {
|
|||
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
|
||||
gcmarknewobject(span, uintptr(x))
|
||||
} else {
|
||||
|
||||
span.freeIndexForScan = span.freeindex
|
||||
}
|
||||
span.freeIndexForScan = span.freeindex
|
||||
|
||||
c.nextSample -= int64(elemsize)
|
||||
if c.nextSample < 0 || MemProfileRate != c.memProfRate {
|
||||
|
|
@ -1683,13 +1617,7 @@ func mallocgcSmallNoScanSC2(size uintptr, typ *_type, needzero bool) unsafe.Poin
|
|||
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
|
||||
gcmarknewobject(span, uintptr(x))
|
||||
} else {
|
||||
|
||||
span.freeIndexForScan = span.freeindex
|
||||
}
|
||||
span.freeIndexForScan = span.freeindex
|
||||
|
||||
c.nextSample -= int64(elemsize)
|
||||
if c.nextSample < 0 || MemProfileRate != c.memProfRate {
|
||||
|
|
@ -1777,13 +1705,7 @@ func mallocgcSmallNoScanSC3(size uintptr, typ *_type, needzero bool) unsafe.Poin
|
|||
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
|
||||
gcmarknewobject(span, uintptr(x))
|
||||
} else {
|
||||
|
||||
span.freeIndexForScan = span.freeindex
|
||||
}
|
||||
span.freeIndexForScan = span.freeindex
|
||||
|
||||
c.nextSample -= int64(elemsize)
|
||||
if c.nextSample < 0 || MemProfileRate != c.memProfRate {
|
||||
|
|
@ -1871,13 +1793,7 @@ func mallocgcSmallNoScanSC4(size uintptr, typ *_type, needzero bool) unsafe.Poin
|
|||
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
|
||||
gcmarknewobject(span, uintptr(x))
|
||||
} else {
|
||||
|
||||
span.freeIndexForScan = span.freeindex
|
||||
}
|
||||
span.freeIndexForScan = span.freeindex
|
||||
|
||||
c.nextSample -= int64(elemsize)
|
||||
if c.nextSample < 0 || MemProfileRate != c.memProfRate {
|
||||
|
|
@ -1965,13 +1881,7 @@ func mallocgcSmallNoScanSC5(size uintptr, typ *_type, needzero bool) unsafe.Poin
|
|||
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
|
||||
gcmarknewobject(span, uintptr(x))
|
||||
} else {
|
||||
|
||||
span.freeIndexForScan = span.freeindex
|
||||
}
|
||||
span.freeIndexForScan = span.freeindex
|
||||
|
||||
c.nextSample -= int64(elemsize)
|
||||
if c.nextSample < 0 || MemProfileRate != c.memProfRate {
|
||||
|
|
@ -2059,13 +1969,7 @@ func mallocgcSmallNoScanSC6(size uintptr, typ *_type, needzero bool) unsafe.Poin
|
|||
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
|
||||
gcmarknewobject(span, uintptr(x))
|
||||
} else {
|
||||
|
||||
span.freeIndexForScan = span.freeindex
|
||||
}
|
||||
span.freeIndexForScan = span.freeindex
|
||||
|
||||
c.nextSample -= int64(elemsize)
|
||||
if c.nextSample < 0 || MemProfileRate != c.memProfRate {
|
||||
|
|
@ -2153,13 +2057,7 @@ func mallocgcSmallNoScanSC7(size uintptr, typ *_type, needzero bool) unsafe.Poin
|
|||
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
|
||||
gcmarknewobject(span, uintptr(x))
|
||||
} else {
|
||||
|
||||
span.freeIndexForScan = span.freeindex
|
||||
}
|
||||
span.freeIndexForScan = span.freeindex
|
||||
|
||||
c.nextSample -= int64(elemsize)
|
||||
if c.nextSample < 0 || MemProfileRate != c.memProfRate {
|
||||
|
|
@ -2247,13 +2145,7 @@ func mallocgcSmallNoScanSC8(size uintptr, typ *_type, needzero bool) unsafe.Poin
|
|||
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
|
||||
gcmarknewobject(span, uintptr(x))
|
||||
} else {
|
||||
|
||||
span.freeIndexForScan = span.freeindex
|
||||
}
|
||||
span.freeIndexForScan = span.freeindex
|
||||
|
||||
c.nextSample -= int64(elemsize)
|
||||
if c.nextSample < 0 || MemProfileRate != c.memProfRate {
|
||||
|
|
@ -2341,13 +2233,7 @@ func mallocgcSmallNoScanSC9(size uintptr, typ *_type, needzero bool) unsafe.Poin
|
|||
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
|
||||
gcmarknewobject(span, uintptr(x))
|
||||
} else {
|
||||
|
||||
span.freeIndexForScan = span.freeindex
|
||||
}
|
||||
span.freeIndexForScan = span.freeindex
|
||||
|
||||
c.nextSample -= int64(elemsize)
|
||||
if c.nextSample < 0 || MemProfileRate != c.memProfRate {
|
||||
|
|
@ -2435,13 +2321,7 @@ func mallocgcSmallNoScanSC10(size uintptr, typ *_type, needzero bool) unsafe.Poi
|
|||
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
|
||||
gcmarknewobject(span, uintptr(x))
|
||||
} else {
|
||||
|
||||
span.freeIndexForScan = span.freeindex
|
||||
}
|
||||
span.freeIndexForScan = span.freeindex
|
||||
|
||||
c.nextSample -= int64(elemsize)
|
||||
if c.nextSample < 0 || MemProfileRate != c.memProfRate {
|
||||
|
|
|
|||
|
|
@ -256,7 +256,7 @@ func smallStub(size uintptr, typ *_type, needzero bool) unsafe.Pointer {
|
|||
// but see uninitialized memory or stale heap bits.
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
if isSlowPath_ && writeBarrier.enabled {
|
||||
// Allocate black during GC.
|
||||
// All slots hold nil so no scanning is needed.
|
||||
// This may be racing with GC so do it atomically if there can be
|
||||
|
|
@ -419,7 +419,7 @@ func tinyStub(size uintptr, typ *_type, needzero bool) unsafe.Pointer {
|
|||
// but see uninitialized memory or stale heap bits.
|
||||
publicationBarrier()
|
||||
|
||||
if writeBarrier.enabled {
|
||||
if isSlowPath_ && writeBarrier.enabled {
|
||||
// Allocate black during GC.
|
||||
// All slots hold nil so no scanning is needed.
|
||||
// This may be racing with GC so do it atomically if there can be
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue