golang / go

The Go programming language
https://go.dev
BSD 3-Clause "New" or "Revised" License
122.83k stars 17.51k forks source link

cmd/compile: pgo after CL 449477 cause worse performance on benchmark #68974

Open qiulaidongfeng opened 3 weeks ago

qiulaidongfeng commented 3 weeks ago

Go version

go version devel go1.24-f428c7b7 Sat Aug 3 05:06:40 2024 +0000 windows/amd64

Output of go env in your module/workspace:

set GO111MODULE=auto
set GOARCH=amd64
set GOBIN=
set GOCACHE=D:\file\go-build
set GOENV=C:\Users\26454\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=D:\file\gofile\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=D:\file\gofile
set GOPRIVATE=
set GOPROXY=https://goproxy.cn,direct
set GOROOT=C:\Users\26454\.go\current
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLCHAIN=local
set GOTOOLDIR=C:\Users\26454\.go\current\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=devel go1.24-f428c7b7 Sat Aug 3 05:06:40 2024 +0000
set GODEBUG=
set GOTELEMETRY=on
set GOTELEMETRYDIR=C:\Users\26454\AppData\Roaming\go\telemetry
set GCCGO=gccgo
set GOAMD64=v3
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
go: stripping unprintable or unescapable characters from %"GOMOD"%
set GOMOD=D:\file\gofile\U������\u\u-language\ucom\go.mod
set GOWORK=
set CGO_CFLAGS=-O2 -g
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-O2 -g
set CGO_FFLAGS=-O2 -g
set CGO_LDFLAGS=-O2 -g
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=C:\Users\26454\AppData\Local\Temp\go-build1658404967=/tmp/go-build -gno-record-gcc-switches

What did you do?

Repeat step:

git clone https://gitee.com/u-language/u-language.git -b pgo2024-8-20

cd u-language Set environment variable URoot to the current path cd ucom

go test -run=ssss -bench="ComplierToCBuildMode2/多文件" -count=10 -pgo off > new.txt && sleep 20 && go test -run=ssss -bench="ComplierToCBuildMode2/多文件" -count=10 -pgo default.pgo > pgo.txt && benchstat new.txt pgo.txt

What did you see happen?

pgo does not cause performance degradation

What did you expect to see?

                             │   new.txt   │               pgo.txt               │
                             │   sec/op    │   sec/op     vs base                │
ComplierToCBuildMode2/多文件-16   177.0µ ± 1%   202.8µ ± 1%  +14.58% (p=0.000 n=10)

                             │   new.txt    │
                             │     B/s      │
ComplierToCBuildMode2/多文件-16   9.766Ki ± 0%

                             │   new.txt    │               pgo.txt               │
                             │     B/op     │     B/op      vs base               │
ComplierToCBuildMode2/多文件-16   32.64Ki ± 0%   32.51Ki ± 0%  -0.38% (p=0.000 n=10)

                             │  new.txt   │              pgo.txt              │
                             │ allocs/op  │ allocs/op   vs base               │
ComplierToCBuildMode2/多文件-16   498.0 ± 0%   495.0 ± 0%  -0.60% (p=0.000 n=10)

                             │  pgo.txt   │
                             │    MB/s    │
ComplierToCBuildMode2/多文件-16   0.000 ± 0%

I tried tip,happen pgo cause worse performance on benchmark. I tried 4b43b741710eb87cbae25f19cbde7eb733b08df1 , no happen pgo cause worse performance on benchmark. git bisect to 1b03568ae18715ad081cc57197b61388c8e6caa4

gabyhelp commented 3 weeks ago

Related Issues and Documentation

(Emoji vote if this was helpful or unhelpful; more detailed feedback welcome in this discussion.)

cherrymui commented 3 weeks ago

That CL changed some inlining threshould. What function inlining changes at that CL, like it was not inlined before the CL and inlined after, or vice versa?

What type of benchmark is it? Is it a micro benchmark? How is the profile collected? Thanks.

qiulaidongfeng commented 3 weeks ago

What type of benchmark is it?

Benckmark come from open source code that I wrote while researching compilation principles.It reads the test data and processes it.

Is it a micro benchmark?

no,benchmark calls multiple functions,and according to the benchmark data, the time is in the microsecond level.

How is the profile collected?

run go test -run=ssss -bench=. -trimpath -benchtime=400ms -cpuprofile="default.pgo"

qiulaidongfeng commented 3 weeks ago

That CL changed some inlining threshould. What function inlining changes at that CL, like it was not inlined before the CL and inlined after, or vice versa?

I use D:\file\gofile\gogit\go1\bin\go build -gcflags=all="-d=pgoinline=1" -pgo default.pgo -trimpath and https://github.com/qiulaidongfeng/diffbench

I got:

// old inline , but new not inline
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*Tree).parserExpr at gitee.com/u-language/u-language/ucom/ast2\parser.go:210:30
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*Tree).parserExpr at gitee.com/u-language/u-language/ucom/ast2\parser.go:584:32
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*Tree).parserExpr at gitee.com/u-language/u-language/ucom/ast2\parser.go:876:28
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*Tree).parserExpr at gitee.com/u-language/u-language/ucom/ast2\parser.go:915:27
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*Tree).parserType at gitee.com/u-language/u-language/ucom/ast2\parser.go:196:27
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*Tree).parserType at gitee.com/u-language/u-language/ucom/ast2\parser.go:837:28
----------------
// new inline , but old not inline
hot-budget check allows inlining for call bufio.(*Reader).ReadLine at gitee.com/u-language/u-language/ucom/internal/utils\Split.go:55:34
hot-budget check allows inlining for call bufio.(*Reader).ReadSlice at bufio\bufio.go:401:25
hot-budget check allows inlining for call bufio.(*Reader).fill at bufio\bufio.go:372:9
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*FuncNode).C at gitee.com/u-language/u-language/ucom/cast2\utoc.go:66:5
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*Object).C at gitee.com/u-language/u-language/ucom/ast2\type.go:1289:15
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*Package).AddFile at gitee.com/u-language/u-language/ucom/parser\buildmode2.go:104:13
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*Sbt).AddStruct at gitee.com/u-language/u-language/ucom/ast2\parser.go:816:17
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*Sbt).add at gitee.com/u-language/u-language/ucom/ast2\sbt.go:94:14
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*Sbt).have at gitee.com/u-language/u-language/ucom/ast2\sbt.go:288:19
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*StructDecl).c at gitee.com/u-language/u-language/ucom/ast2\type.go:1123:5
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*Tree).SubRbrace at gitee.com/u-language/u-language/ucom/ast2\parser.go:53:14
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*Tree).SubRbrace at gitee.com/u-language/u-language/ucom/check3\check3.go:67:14
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*Tree).parserCase at gitee.com/u-language/u-language/ucom/ast2\parser.go:119:15
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*Tree).parserObject2 at gitee.com/u-language/u-language/ucom/ast2\parser.go:332:24
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*VarNode).C at gitee.com/u-language/u-language/ucom/cast2\utoc.go:73:12
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*stack).AutoPop at gitee.com/u-language/u-language/ucom/ast2\expr3.go:395:19
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*stack).PopValue at gitee.com/u-language/u-language/ucom/ast2\expr3.go:262:42
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*stack).PopValue at gitee.com/u-language/u-language/ucom/ast2\expr3.go:303:66
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*stack).PopValue at gitee.com/u-language/u-language/ucom/ast2\expr3.go:348:19
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.(*stack).PushValue at gitee.com/u-language/u-language/ucom/ast2\expr3.go:254:14
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.newstack at gitee.com/u-language/u-language/ucom/ast2\parser.go:282:15
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.tocVarNode at gitee.com/u-language/u-language/ucom/ast2\type.go:141:13
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/ast2.utoCCall at gitee.com/u-language/u-language/ucom/ast2\type.go:782:14
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/astdata.Generate_method_symbol at gitee.com/u-language/u-language/ucom/ast2\type.go:1469:41
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/cast2.generateCFile at gitee.com/u-language/u-language/ucom/cast2\package.go:114:16
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/cast2.generateHeaderFile at gitee.com/u-language/u-language/ucom/cast2\utoc.go:41:20
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/cast2.nodeCmp at gitee.com/u-language/u-language/ucom/cast2\utoc.go:98:17
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/check3.CheckPackage at gitee.com/u-language/u-language/ucom/parser\buildmode2.go:118:21
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/check3.CheckTree at gitee.com/u-language/u-language/ucom/check3\package.go:11:12
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/check3.checkBoolExpr at gitee.com/u-language/u-language/ucom/check3\check3.go:730:15
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/check3.checkFunc at gitee.com/u-language/u-language/ucom/check3\check3.go:61:12
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/check3.check_selector_Left_right at gitee.com/u-language/u-language/ucom/check3\check3.go:555:50
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/check3.getFuncName at gitee.com/u-language/u-language/ucom/check3\check3.go:262:47
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/check3.retType at gitee.com/u-language/u-language/ucom/check3\check3.go:123:17
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/data.(*Slice[go.shape.interface { C(*strings.Builder); CDecl(*strings.Builder); String() string }]).Add at gitee.com/u-language/u-language/ucom/ast2\parser.go:380:19
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/data.(*Slice[go.shape.interface { C(*strings.Builder); CDecl(*strings.Builder); String() string }]).Add at gitee.com/u-language/u-language/ucom/ast2\parser.go:818:20
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/data.(*Slice[go.shape.interface { C(*strings.Builder); CDecl(*strings.Builder); String() string }]).Add at gitee.com/u-language/u-language/ucom/ast2\parser.go:984:20
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/internal/utils.FindU at gitee.com/u-language/u-language/ucom/parser\buildmode2.go:64:27
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/internal/utils.GeneratePackageSymbol at gitee.com/u-language/u-language/ucom/ast2\parser.go:366:42
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/internal/utils.GeneratePackageSymbol at gitee.com/u-language/u-language/ucom/cast2\utoc.go:56:47
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/internal/utils.ReadLine at gitee.com/u-language/u-language/ucom/internal/utils\Split.go:42:26
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/internal/utils.ReadLine at gitee.com/u-language/u-language/ucom/lex\lex.go:64:32
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex.(*Scan).parserToken at gitee.com/u-language/u-language/ucom/lex\scan.go:367:40
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex.autoAddToken at gitee.com/u-language/u-language/ucom/lex\scan.go:126:16
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex.autoAddToken at gitee.com/u-language/u-language/ucom/lex\scan.go:129:16
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex.autoAddToken at gitee.com/u-language/u-language/ucom/lex\scan.go:138:16
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex.autoAddToken at gitee.com/u-language/u-language/ucom/lex\scan.go:153:16
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex.autoAddToken at gitee.com/u-language/u-language/ucom/lex\scan.go:203:16
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex.autoAddToken at gitee.com/u-language/u-language/ucom/lex\scan.go:285:14
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex.autoAddToken at gitee.com/u-language/u-language/ucom/lex\scan.go:58:16
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex.autoAddToken at gitee.com/u-language/u-language/ucom/lex\scan.go:76:16
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex.scanMLCEnd at gitee.com/u-language/u-language/ucom/lex\lex.go:30:17
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex2.(*FileToken).Next at gitee.com/u-language/u-language/ucom/ast2\expr3.go:262:61
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex2.(*FileToken).Next at gitee.com/u-language/u-language/ucom/ast2\expr3.go:303:85
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex2.(*FileToken).Next at gitee.com/u-language/u-language/ucom/ast2\expr3.go:389:21
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex2.(*FileToken).Next at gitee.com/u-language/u-language/ucom/ast2\parser.go:244:18
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex2.(*FileToken).Next at gitee.com/u-language/u-language/ucom/ast2\parser.go:26:22
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex2.(*FileToken).Next at gitee.com/u-language/u-language/ucom/ast2\parser.go:26:62
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex2.(*FileToken).Next at gitee.com/u-language/u-language/ucom/ast2\parser.go:272:33
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex2.(*FileToken).Next at gitee.com/u-language/u-language/ucom/ast2\parser.go:295:19
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex2.(*FileToken).Next at gitee.com/u-language/u-language/ucom/ast2\parser.go:300:19
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex2.(*FileToken).Next at gitee.com/u-language/u-language/ucom/ast2\parser.go:332:39
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex2.(*FileToken).Next at gitee.com/u-language/u-language/ucom/ast2\parser.go:396:20
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex2.(*FileToken).Next at gitee.com/u-language/u-language/ucom/ast2\parser.go:442:18
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex2.(*FileToken).Next at gitee.com/u-language/u-language/ucom/ast2\parser.go:492:43
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex2.(*FileToken).Next at gitee.com/u-language/u-language/ucom/ast2\parser.go:495:20
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex2.(*FileToken).Next at gitee.com/u-language/u-language/ucom/ast2\parser.go:593:22
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex2.(*FileToken).Next at gitee.com/u-language/u-language/ucom/ast2\parser.go:593:43
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex2.(*FileToken).Next at gitee.com/u-language/u-language/ucom/ast2\parser.go:669:30
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex2.(*FileToken).Next at gitee.com/u-language/u-language/ucom/ast2\parser.go:707:21
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/lex2.(*FileToken).Next at gitee.com/u-language/u-language/ucom/ast2\parser.go:826:19
hot-budget check allows inlining for call gitee.com/u-language/u-language/ucom/parser.openfileAndStat at gitee.com/u-language/u-language/ucom/parser\test.go:46:35
hot-budget check allows inlining for call internal/poll.(*FD).destroy at internal/poll\fd_mutex.go:213:20
hot-budget check allows inlining for call internal/reflectlite.Swapper at sort\slice.go:23:29
hot-budget check allows inlining for call os.(*File).readdir at os\dir.go:98:33
hot-budget check allows inlining for call os.(*file).close at os\file_posix.go:25:21
hot-budget check allows inlining for call os.Open at gitee.com/u-language/u-language/ucom/parser\test.go:68:22
hot-budget check allows inlining for call os.OpenFile at os\file.go:309:17
hot-budget check allows inlining for call os.Stat at gitee.com/u-language/u-language/ucom/parser\parser.go:30:27
hot-budget check allows inlining for call os.openFileNolog at os\file.go:329:25
hot-budget check allows inlining for call path/filepath.Join at path/filepath\path.go:425:16
hot-budget check allows inlining for call path/filepath.WalkDir at gitee.com/u-language/u-language/ucom/internal/utils\utils.go:59:25
hot-budget check allows inlining for call path/filepath.join at path/filepath\path.go:225:13
hot-budget check allows inlining for call reflect.implements at reflect\value.go:3484:15
hot-budget check allows inlining for call runtime.(*activeSweep).end at runtime\mgcsweep.go:405:18
hot-budget check allows inlining for call runtime.(*fixalloc).alloc at runtime\mheap.go:1108:53
hot-budget check allows inlining for call runtime.(*gcControllerState).enlistWorker at runtime\mgcwork.go:304:28
hot-budget check allows inlining for call runtime.(*gcControllerState).update at runtime\mcache.go:212:21
hot-budget check allows inlining for call runtime.(*gcWork).init at runtime\mgcwork.go:207:9
hot-budget check allows inlining for call runtime.(*gcWork).tryGet at runtime\mgcmark.go:1170:18
hot-budget check allows inlining for call runtime.(*itabTableType).find at runtime\iface.go:55:15
hot-budget check allows inlining for call runtime.(*lfstack).push at runtime\mgcwork.go:420:16
hot-budget check allows inlining for call runtime.(*mcache).refill at runtime\malloc.go:855:11
hot-budget check allows inlining for call runtime.(*mcentral).uncacheSpan at runtime\mcache.go:159:43
hot-budget check allows inlining for call runtime.(*mheap).alloc at runtime\mcentral.go:246:19
hot-budget check allows inlining for call runtime.(*mheap).nextSpanForSweep at runtime\mgcsweep.go:373:31
hot-budget check allows inlining for call runtime.(*mspan).initHeapBits at runtime\mcentral.go:255:16
hot-budget check allows inlining for call runtime.(*mspan).nextFreeIndex at runtime\malloc.go:848:30
hot-budget check allows inlining for call runtime.(*mspan).refillAllocCache at runtime\mbitmap.go:182:21
hot-budget check allows inlining for call runtime.(*pallocBits).summarize at runtime\mpagealloc.go:425:31
hot-budget check allows inlining for call runtime.(*scavengerState).run at runtime\mgcscavenge.go:631:38
hot-budget check allows inlining for call runtime.(*spanSet).pop at runtime\mgcsweep.go:106:29
hot-budget check allows inlining for call runtime.(*spanSet).pop at runtime\mgcsweep.go:108:32
hot-budget check allows inlining for call runtime.(*spanSet).reset at runtime\mgcsweep.go:259:29
hot-budget check allows inlining for call runtime.casgstatus at runtime\mgcmark.go:569:12
hot-budget check allows inlining for call runtime.concatstrings at runtime\string.go:60:22
hot-budget check allows inlining for call runtime.copystack at runtime\stack.go:1112:11
hot-budget check allows inlining for call runtime.copystack at runtime\stack.go:1214:11
hot-budget check allows inlining for call runtime.findObject at runtime\mgcmark.go:1237:42
hot-budget check allows inlining for call runtime.forEachG at runtime\mgc.go:1591:10
hot-budget check allows inlining for call runtime.funcMaxSPDelta at runtime\stack.go:1081:32
hot-budget check allows inlining for call runtime.gcAssistAlloc1 at runtime\mgcmark.go:475:17
hot-budget check allows inlining for call runtime.getempty at runtime\mgcwork.go:439:16
hot-budget check allows inlining for call runtime.greyobject at runtime\mgcmark.go:1238:17
hot-budget check allows inlining for call runtime.growWork_faststr at runtime\map_faststr.go:227:19
hot-budget check allows inlining for call runtime.handoff at runtime\mgcwork.go:297:20
hot-budget check allows inlining for call runtime.mProf_FlushLocked at runtime\mprof.go:373:19
hot-budget check allows inlining for call runtime.mProf_Malloc at runtime\malloc.go:1280:14
hot-budget check allows inlining for call runtime.makeBucketArray at runtime\map.go:1051:45
hot-budget check allows inlining for call runtime.memclrHasPointers at runtime\map.go:371:21
hot-budget check allows inlining for call runtime.netpoll at runtime\proc.go:1327:18
hot-budget check allows inlining for call runtime.notewakeup at runtime\proc.go:1753:13
hot-budget check allows inlining for call runtime.pcvalue at runtime\symtab.go:1074:17
hot-budget check allows inlining for call runtime.pcvalue at runtime\symtab.go:1109:17
hot-budget check allows inlining for call runtime.pcvalue at runtime\symtab.go:1117:17
hot-budget check allows inlining for call runtime.preemptM at runtime\preempt.go:231:14
hot-budget check allows inlining for call runtime.putfull at runtime\mgcwork.go:446:9
hot-budget check allows inlining for call runtime.runSafePointFn at runtime\proc.go:2677:17
hot-budget check allows inlining for call runtime.runqgrab at runtime\proc.go:6192:15
hot-budget check allows inlining for call runtime.scanblock at runtime\mgcmark.go:284:11
hot-budget check allows inlining for call runtime.scanobject at runtime\mgcmark.go:1192:13
hot-budget check allows inlining for call runtime.semawakeup at runtime\lock_sema.go:161:13
hot-budget check allows inlining for call runtime.shrinkstack at runtime\mgcmark.go:775:14
hot-budget check allows inlining for call runtime.startm at runtime\proc.go:2532:8
hot-budget check allows inlining for call runtime.step at runtime\symtab.go:1091:15
hot-budget check allows inlining for call runtime.sweepone at runtime\mgcsweep.go:299:15
hot-budget check allows inlining for call runtime.trygetfull at runtime\mgcwork.go:216:21
hot-budget check allows inlining for call runtime.typedmemmove at runtime\map.go:680:14
hot-budget check allows inlining for call runtime.typehash at runtime\alg.go:130:23
hot-budget check allows inlining for call runtime.wakep at runtime\proc.go:3235:7
hot-budget check allows inlining for call runtime.wakep at runtime\proc.go:4242:9
hot-budget check allows inlining for call runtime.wbBufFlush at runtime\mgcmark.go:1174:15
hot-budget check allows inlining for call sort.Slice at gitee.com/u-language/u-language/ucom/cast2\utoc.go:97:12
hot-budget check allows inlining for call sort.insertionSort_func at sort\zsortfunc.go:73:22
hot-budget check allows inlining for call strings.Join at gitee.com/u-language/u-language/ucom/astdata\utils.go:12:21
hot-budget check allows inlining for call sync.(*Map).dirtyLocked at sync\map.go:239:17
hot-budget check allows inlining for call sync.(*Map).missLocked at sync\map.go:133:16
hot-budget check allows inlining for call sync.(*Pool).Get at gitee.com/u-language/u-language/ucom/ast2\expr3.go:66:19
hot-budget check allows inlining for call sync.(*Pool).Get at gitee.com/u-language/u-language/ucom/internal/utils\sync.go:26:19
hot-budget check allows inlining for call sync.(*Pool).Put at gitee.com/u-language/u-language/ucom/ast2\expr3.go:464:15
hot-budget check allows inlining for call sync.(*Pool).Put at gitee.com/u-language/u-language/ucom/internal/utils\pool.go:17:12
hot-budget check allows inlining for call sync.(*Pool).getSlow at sync\pool.go:140:17
hot-budget check allows inlining for call sync.(*Pool).pin at sync\pool.go:107:15
hot-budget check allows inlining for call sync.(*Pool).pin at sync\pool.go:131:17
hot-budget check allows inlining for call sync.(*poolChain).popHead at sync\pool.go:138:26
hot-budget check allows inlining for call sync.(*poolChain).popTail at sync\pool.go:163:30
hot-budget check allows inlining for call sync.(*poolChain).pushHead at sync\pool.go:111:20
hot-budget check allows inlining for call sync.(*poolDequeue).popHead at sync\poolqueue.go:261:26
hot-budget check allows inlining for call syscall.FullPath at os\types_windows.go:195:34
hot-budget check allows inlining for call syscall.GetConsoleMode at os\file_windows.go:46:28
hot-budget check allows inlining for call syscall.GetFileAttributesEx at os\stat_windows.go:39:35
hot-budget check allows inlining for call syscall.GetFileType at os\file_windows.go:49:35
hot-budget check allows inlining for call syscall.GetFullPathName at syscall\exec_windows.go:163:27
hot-budget check allows inlining for call syscall.UTF16FromString at syscall\syscall_windows.go:97:27
hot-budget check allows inlining for call syscall.UTF16PtrFromString at os\stat_windows.go:31:42
hot-budget check allows inlining for call syscall.UTF16PtrFromString at syscall\exec_windows.go:156:30
hot-budget check allows inlining for call unicode/utf8.appendRuneNonASCII at unicode/utf8\utf8.go:380:27