profile
viewpoint

dr2chase/bent 18

Benchmark and test getter + runner

dr2chase/solve_inlines 4

Runs modified Go compiler with randomized set of inline sites and uses that to derive best inline sites

dr2chase/gc-lsp-tools 3

Demo/experimental tools for playing with LSP logging output from Go's compiler, gc.

dr2chase/gossahash 3

Searches for the function that the SSA phase of the Go compiler is doing wrong.

dr2chase/benchmarks 2

Collection of benchmarks that caused problematic regressions in Go development

dr2chase/bikelight 1

Software for power/light management from a bicycle hub to lights and an optional USB charger.

dr2chase/binary-blobs 0

I needed a place to put binary blobs for sharing, and gist was too hard to use for that.

dr2chase/check-intel-microcode-version 0

On Linux and Darwin, attempts to match cpu and microcode against list of those receiving the microcode-20191115 update

dr2chase/delve 0

Delve is a debugger for the Go programming language.

dr2chase/dwarf-goodness 0

Tool(s) for measuring the quality of the debugging information produced by the Go compiler

startedChimeraCoder/anaconda

started time in a day

issue commentgolang/go

cmd/compile: set prologue_end on every arch

I'm okay with go1.16. Part of the problem is knowing exactly what's right; because of better-user-experience issues, Delve wants it to be someplace that apparently doesn't match what gdb would expect. (My personal user experience with gdb is so terrible that I would never recommend it to a Go user.)

derekparker

comment created time in 2 days

issue commentgolang/go

cmd/compile/internal/ssa: test TestNexting failing

Delve says it doesn't support 386:

drchase@drchase1:~/work/go/src/cmd/compile/internal/ssa$ TERM=dumb dlv exec testdata/test-hist.dlv-dbg
unsupported architecture - only linux/amd64 and linux/arm64 are supported

and then it panics all over the place.

Still haven't gotten gdb to work consistently-properly on either Darwin or Linux; I have a fear that success depends not just on gdb version, but also on the version of Python that is compiled into it when gdb is built.

cagedmantis

comment created time in 3 days

issue commentgolang/go

cmd/compile/internal/ssa: test TestNexting failing

So, using an amd64 delve to debug a 386 Go binary leads to flakiness? When this fails with gdb, is gdb also built to be amd64 instead of 386?

cagedmantis

comment created time in 3 days

issue commentgolang/go

cmd/compile/internal/ssa: test TestNexting failing

I tried Delve 1.4.1.

I just rebooted after a Catalina security or dot upgrade, and one of my copies of gdb now hangs from the keyboard, the other (same binary, different signing) does not. All of them still hang running under the control of TestNexting.

cagedmantis

comment created time in 4 days

issue commentgolang/go

cmd/compile/internal/ssa: test TestNexting failing

I've been playing with gdb-on-Darwin, now that I figured out the truly secret handshake for code signing (use certificate name for email address; only Trust-Always for codesigning, leave the rest alone) and it works by hand, fails by program, no idea why. The new version of Delve continues to work just fine.

cagedmantis

comment created time in 4 days

issue commentgolang/go

x/build: automated testing of popular, open source Go projects

My daily run does not include tests, but it is capable of tests, and I ran them for a recent CL.

bent doesn't do a good job (yet) of quantifying test results -- yet another possible intern project, I suppose, though it is a small one (and bent is internally somewhat cruddy).

mdempsky

comment created time in a month

issue commentgolang/go

runtime: remove unnecessary allocations in convT2E

There's an endianness issue in that code, that's a minor problem, also the description of the pointer smash (0xffffffff) in upper 32 bits doesn't match what the code does (uintptr(val) | 1<<63).

But otherwise, interesting, though I am worried about assembly language.

On Sat, Apr 25, 2020 at 12:21 PM Josh Bleecher Snyder < notifications@github.com> wrote:

I’m on my phone, but you probably also need to adjust ifaceData in the compiler. And ifaceeq and efaceeq in the runtime. (Also, it’s be more impressive to get uint8/uint32 working—uint16s are not heavily used.)

Another option, which is less likely to cause rare breakage (e.g. in assembly) is to keep an atomic counter in the slow path of convT32 for smallish values and, when used enough, persistent alloc and populate a staticuint64s-like array with a larger range.

Or keep a per-P cache of recently allocated values so that we can re-use them. (I tried this for string interning, and it was pretty straightforward.)

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/golang/go/issues/8892#issuecomment-619404170, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAOW6JZM77AJJBGOQP7NRXLROMEXTANCNFSM4GCAPQ3Q .

dvyukov

comment created time in a month

issue commentgolang/go

cmd/compile: set prologue_end on every arch

Any time you want to +2 it.... It would make sense to maybe get ahead on some other architectures, might help gdb, also depends on where delve is going next.

derekparker

comment created time in a month

issue commentgolang/go

x/build: need to be able to rerun TryBots on other people's CLs (and my own)

I do have that trash can icon, not sure if I didn't notice it or if it appeared recently. I think I'd still argue usability, obviously I missed it.

dr2chase

comment created time in a month

issue openedgolang/go

x/build: need to be able to rerun TryBots on other people's CLs (and my own)

And, also, the UI is misleading, see below.

What did you do?

In Gerrit, I first run TryBots on a CL (mine or someone else)'s with "Reply" and then I click the "+1" button next to "Run-TryBot". This runs TryBots.

The TryBots run, but with errors that look probably unrelated to the CL. Since I ran TryBots by clicking "+1" in the reply pane, "obviously" the way to do this is to reset the value to zero (the "0" is not dimmed, therefore this is permitted, right?) and then clock "+1" again (worked once, why not again?).

What did you expect to see?

A second run of the TryBots.

What did you see instead?

NOT a second run of the TryBots.

I understand that what's actually missing is that (1) we've decided that people need special permission for this operation (2) I lack this permission (3) I should know this by noticing the absence of a button that I never knew existed.

I think we ought to fix the policy unless there's a really good reason not to let people do this, and if we can't fix the policy, we need to fix the UI to avoid people intuiting an unproductive way to spend their time not rerunning TryBots. What I actually want is "Rerun failed TryBots" and ideally someone is monitoring that to infer flakiness over time.

My workaround for this is to attempt to do the rerun by hand using a gomote, which is its own fiasco of stale documentation and read-all-the-docs-maybe-you'll-find-a-hint (oops, the hint has gone stale also).

/cc @golang/osp-team

created time in a month

issue openedgolang/go

"Infinite" loop observed compiling capnproto2 with dev tip

<!-- Please answer these questions before submitting your issue. Thanks! For questions please use one of our forums: https://github.com/golang/go/wiki/Questions -->

What version of Go are you using (go version)?

<pre> $ go version go version devel +066c47ca5f Tue Apr 21 00:38:53 2020 +0000 linux/amd64 </pre>

Does this issue reproduce with the latest release?

I could not reproduce this on my first try, perhaps I was the victim of a cosmic ray, but I wanted to record this and keep an eye open.

What operating system and processor architecture are you using (go env)?

<details><summary><code>go env</code> Output</summary><br><pre> $ go env GO111MODULE="" GOARCH="amd64" GOBIN="" GOCACHE="/usr/local/google/home/drchase/.cache/go-build" GOENV="/usr/local/google/home/drchase/.config/go/env" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOINSECURE="" GOMODCACHE="/usr/local/google/home/drchase/work/gocode/pkg/mod" GONOPROXY="" GONOSUMDB="" GOOS="linux" GOPATH="/usr/local/google/home/drchase/work/gocode" GOPRIVATE="" GOPROXY="https://proxy.golang.org,direct" GOROOT="/usr/local/google/home/drchase/work/bent-cron/go-tip" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/usr/local/google/home/drchase/work/bent-cron/go-tip/pkg/tool/linux_amd64" GCCGO="gccgo" AR="ar" CC="gcc" CXX="g++" CGO_ENABLED="1" GOMOD="" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build067911220=/tmp/go-build -gno-record-gcc-switches" </pre></details>

What did you do?

Running nightly benchmarks, observed that they did not finish at the expected time.

What did you expect to see?

A tweet about completion.

What did you see instead?

Logged into box, checked "top", saw hundreds of minutes of cpu time for "compile", killed it with a QUIT to capture the log:

chmod -R u+w /usr/local/google/home/drchase/work/bent-cron/gopath/pkg
rm -rf /usr/local/google/home/drchase/work/bent-cron/gopath/pkg /usr/local/google/home/drchase/work/bent-cron/gopath/bin
(cd /usr/local/google/home/drchase/work/bent-cron/gopath; GOPATH=/usr/local/google/home/drchase/work/bent-cron/gopath GOOS=linux GOARCH=amd64 GO111MODULE=auto GOROOT=/usr/local/google/home/drchase/work/bent-cron/goroots/Tip/ /usr/local/google/home/drchase/work/bent-cron/goroots/Tip/bin/go clean -cache )
(cd /usr/local/google/home/drchase/work/bent-cron/gopath/src/zombiezen.com/go/capnproto2; GOPATH=/usr/local/google/home/drchase/work/bent-cron/gopath GOOS=linux GOARCH=amd64 GO111MODULE=auto GOROOT=/usr/local/google/home/drchase/work/bent-cron/goroots/Tip/ /usr/bin/time -p /usr/local/google/home/drchase/work/bent-cron/goroots/Tip/bin/go test -vet=off -c . )
There was an error running 'go test', output = # zombiezen.com/go/capnproto2 [zombiezen.com/go/capnproto2.test]
SIGQUIT: quit
PC=0x467921 m=0 sigcode=0

goroutine 0 [idle]:
runtime.futex(0x122d6e8, 0x80, 0x0, 0x0, 0x0, 0xc000028748, 0xc000028758, 0x7ffe010ef8c8, 0x7ffe010ef8e8, 0x40b5ef, ...)
	/usr/local/google/home/drchase/work/bent-cron/go-tip/src/runtime/sys_linux_amd64.s:567 +0x21
runtime.futexsleep(0x122d6e8, 0x7ffe00000000, 0xffffffffffffffff)
	/usr/local/google/home/drchase/work/bent-cron/go-tip/src/runtime/os_linux.go:45 +0x46
runtime.notesleep(0x122d6e8)
	/usr/local/google/home/drchase/work/bent-cron/go-tip/src/runtime/lock_futex.go:159 +0x9f
runtime.stopm()
	/usr/local/google/home/drchase/work/bent-cron/go-tip/src/runtime/proc.go:1881 +0xc4
runtime.findrunnable(0xc000027000, 0x0)
	/usr/local/google/home/drchase/work/bent-cron/go-tip/src/runtime/proc.go:2413 +0xa0b
runtime.schedule()
	/usr/local/google/home/drchase/work/bent-cron/go-tip/src/runtime/proc.go:2613 +0x324
runtime.park_m(0xc000582600)
	/usr/local/google/home/drchase/work/bent-cron/go-tip/src/runtime/proc.go:2783 +0x9d
runtime.mcall(0x0)
	/usr/local/google/home/drchase/work/bent-cron/go-tip/src/runtime/asm_amd64.s:318 +0x5b

goroutine 1 [semacquire, 660 minutes]:
sync.runtime_Semacquire(0xc000619048)
	/usr/local/google/home/drchase/work/bent-cron/go-tip/src/runtime/sema.go:56 +0x42
sync.(*WaitGroup).Wait(0xc000619040)
	/usr/local/google/home/drchase/work/bent-cron/go-tip/src/sync/waitgroup.go:130 +0x64
cmd/compile/internal/gc.compileFunctions()
	/usr/local/google/home/drchase/work/bent-cron/go-tip/src/cmd/compile/internal/gc/pgen.go:371 +0x1ce
cmd/compile/internal/gc.Main(0xc25bd0)
	/usr/local/google/home/drchase/work/bent-cron/go-tip/src/cmd/compile/internal/gc/main.go:756 +0x34d5
main.main()
	/usr/local/google/home/drchase/work/bent-cron/go-tip/src/cmd/compile/main.go:52 +0xac

goroutine 32 [runnable]:
cmd/compile/internal/ssa.rewriteValuegeneric(0xc020909110, 0x0)
	/usr/local/google/home/drchase/work/bent-cron/go-tip/src/cmd/compile/internal/ssa/rewritegeneric.go:9 +0x2015
cmd/compile/internal/ssa.applyRewrite(0xc001a766e0, 0xc26350, 0xc263d0)
	/usr/local/google/home/drchase/work/bent-cron/go-tip/src/cmd/compile/internal/ssa/rewrite.go:109 +0x3f0
cmd/compile/internal/ssa.opt(0xc001a766e0)
	/usr/local/google/home/drchase/work/bent-cron/go-tip/src/cmd/compile/internal/ssa/opt.go:9 +0x43
cmd/compile/internal/ssa.Compile(0xc001a766e0)
	/usr/local/google/home/drchase/work/bent-cron/go-tip/src/cmd/compile/internal/ssa/compile.go:93 +0x9bb
cmd/compile/internal/gc.buildssa(0xc00098e2c0, 0x1, 0x0)
	/usr/local/google/home/drchase/work/bent-cron/go-tip/src/cmd/compile/internal/gc/ssa.go:460 +0xcca
cmd/compile/internal/gc.compileSSA(0xc00098e2c0, 0x1)
	/usr/local/google/home/drchase/work/bent-cron/go-tip/src/cmd/compile/internal/gc/pgen.go:296 +0x5d
cmd/compile/internal/gc.compileFunctions.func2(0xc00164baa0, 0xc000619040, 0x1)
	/usr/local/google/home/drchase/work/bent-cron/go-tip/src/cmd/compile/internal/gc/pgen.go:361 +0x49
created by cmd/compile/internal/gc.compileFunctions
	/usr/local/google/home/drchase/work/bent-cron/go-tip/src/cmd/compile/internal/gc/pgen.go:359 +0x128

rax    0xca
rbx    0x122d5a0
rcx    0x467923
rdx    0x0
rdi    0x122d6e8
rsi    0x80
rbp    0x7ffe010ef8b0
rsp    0x7ffe010ef868
r8     0x0
r9     0x0
r10    0x0
r11    0x286
r12    0x3
r13    0x122d040
r14    0x80c021230000
r15    0x80c021237fff
rip    0x467921
rflags 0x286
cs     0x33
fs     0x0
gs     0x0
Command exited with non-zero status 2
real 39626.87
user 39815.97
sys 73.44
DISABLING benchmark capnproto2

created time in a month

push eventdr2chase/gc-phase-times

David Chase

commit sha b11bd07f0ecaf04d471a68ac1baf4d31ac1128ef

Update README.

view details

push time in a month

push eventdr2chase/bent

David Chase

commit sha b57db7664b4971cf1b8cac94c0f5bdae516ffc8c

Update README, changes defaults in two shell scripts

view details

push time in a month

push eventdr2chase/bent

David Chase

commit sha f0d910ac2001d03bd2fe8f0d75bfed42cceade5f

Added tweeting infrastructure, gc phase timing infrastructure. Also hardened against lack of perflock.

view details

push time in 2 months

create barnchdr2chase/binary-blobs

branch : master

created branch time in 2 months

created repositorydr2chase/binary-blobs

I needed a place to put binary blobs for sharing, and gist was too hard to use for that.

created time in 2 months

create barnchdr2chase/go-bench-tweet-bot

branch : master

created branch time in 2 months

created repositorydr2chase/go-bench-tweet-bot

A simple tweeter used to announce benchmark results. Nothing in it is really benchmark-specific.

created time in 2 months

push eventdr2chase/gc-lsp-tools

David Chase

commit sha 19fcb9bde71bbce5a51a372886403d13c0bb934e

Added LICENSE

view details

push time in 2 months

push eventdr2chase/check-intel-microcode-version

David Chase

commit sha 034bf4ec5f5567dfbfe498f55b7b8062d81cced7

Added code, updated license to fit Go/Google standards, updated README.md

view details

push time in 2 months

create barnchdr2chase/check-intel-microcode-version

branch : master

created branch time in 2 months

created repositorydr2chase/check-intel-microcode-version

On Linux and Darwin, attempts to match cpu and microcode against list of those receiving the microcode-20191115 update

created time in 2 months

push eventdr2chase/gc-lsp-tools

David Chase

commit sha 452bc9785cfc0bf542f1992f628c292707e9a7c2

Fix words in README.md, make test more robust against directory-name simplification

view details

push time in 2 months

create barnchdr2chase/gc-phase-times

branch : master

created branch time in 2 months

created repositorydr2chase/gc-phase-times

A hack for processing gc SSA phase times reported during a run of "bent", to check for real-world compile-time problems.

created time in 2 months

issue commentgolang/go

Performance regression from 98cb76799c "cmd/compile: insert complicated x86 addressing modes as a separate pass"

The regression looks like it may depend a whole darn lot on the chip -- not really seeing it on my laptop, but it also has that microcode patch which that makes it super sensitive to branch alignment.

dr2chase

comment created time in 2 months

issue commentgolang/go

Performance regression from 98cb76799c "cmd/compile: insert complicated x86 addressing modes as a separate pass"

PS I also checked to see if there was any sensitivity to branch alignment, and mostly not.

dr2chase

comment created time in 2 months

issue openedgolang/go

Performance regression from 98cb76799c "cmd/compile: insert complicated x86 addressing modes as a separate pass"

This popped up in nightly benchmarking, there was a 70% regression in one benchmark

name                      old time/op             new time/op             delta
FastTest2KB-12                        125ns ± 1%              142ns ± 1%  +13.42%  (p=0.008 n=5+5)
BaseTest2KB-12                        610ns ± 1%             1060ns ± 0%  +73.77%  (p=0.008 n=5+5)
Encoding4KBVerySparse-12             18.1µs ± 0%             18.1µs ± 1%     ~     (p=0.841 n=5+5)

I bisected to this CL: https://go-review.googlesource.com/c/go/+/217097 Looking at the generated code in ssa.html there is a clear difference:

good:

	00000 (181) TEXT "".safeTestBytes(SB), ABIInternal
	00001 (181) PCDATA $0, $-2
	00002 (181) PCDATA $1, $-2
	00003 (181) FUNCDATA $0, gclocals·1a65e721a2ccc325b382662e7ffee780(SB)
	00004 (181) FUNCDATA $1, gclocals·69c1753bd5f81501d95132d08af04464(SB)
	00005 (181) FUNCDATA $2, gclocals·568470801006e5c0dc3947ea998fe279(SB)
v15	00006 (182) PCDATA $0, $0
v15	00007 (182) PCDATA $1, $0
v15	00008 (+182) MOVQ "".p+8(SP), AX
v24	00009 (182) PCDATA $0, $1
v24	00010 (182) PCDATA $1, $1
v24	00011 (182) MOVQ "".p(SP), CX
v20	00012 (182) XORL DX, DX
b1	00013 (182) JMP 15
v31	00014 (+182) INCQ DX
v16	00015 (+182) CMPQ DX, AX
b2	00016 (182) JGE 23
v22	00017 (+183) MOVBLZX (CX)(DX*1), BX
v26	00018 (183) TESTB BX, BX
b8	00019 (183) JEQ 14
v28	00020 (+184) PCDATA $0, $0
v28	00021 (+184) MOVB $1, "".~r1+24(SP)
b7	00022 (184) RET
v34	00023 (+187) MOVB $0, "".~r1+24(SP)
b5	00024 (187) RET
	00025 (?) END

bad:

	00000 (181) TEXT "".safeTestBytes(SB), ABIInternal
	00001 (181) PCDATA $0, $-2
	00002 (181) PCDATA $1, $-2
	00003 (181) FUNCDATA $0, gclocals·1a65e721a2ccc325b382662e7ffee780(SB)
	00004 (181) FUNCDATA $1, gclocals·69c1753bd5f81501d95132d08af04464(SB)
	00005 (181) FUNCDATA $2, gclocals·7235335ad9f69aa19497c8c3511e8b84(SB)
v15	00006 (182) PCDATA $0, $0
v15	00007 (182) PCDATA $1, $0
v15	00008 (+182) MOVQ "".p+8(SP), AX
v24	00009 (182) PCDATA $0, $1
v24	00010 (182) PCDATA $1, $1
v24	00011 (182) MOVQ "".p(SP), CX
v18	00012 (182) XORL DX, DX
b1	00013 (182) JMP 15
v31	00014 (+182) INCQ DX
v16	00015 (+182) CMPQ DX, AX
b2	00016 (182) JGE 25
v20	00017 (+183) PCDATA $0, $2
v20	00018 (+183) LEAQ (CX)(DX*1), BX
v6	00019 (183) PCDATA $0, $1
v6	00020 (183) CMPB (BX), $0
b8	00021 (183) JEQ 14
v28	00022 (+184) PCDATA $0, $0
v28	00023 (+184) MOVB $1, "".~r1+24(SP)
b7	00024 (184) RET
v34	00025 (+187) MOVB $0, "".~r1+24(SP)
b5	00026 (187) RET
	00027 (?) END

To reproduce (I made a new shell since I stomp all over Go-related environment variables):

export GOPATH=$HOME/work/gopath
export GOROOT=$HOME/work/go
export GO111MODULE=off

export GOOS=linux
export GOARCH=amd64
go get -d -t -v github.com/ethereum/go-ethereum/common/bitutil

cd $GOPATH/src/github.com/ethereum/go-ethereum/common/bitutil
GOSSAFUNC=safeTestBytes $GOROOT/bin/go test -vet=off -c -a .
mv ssa.html new.html
./bitutil.test  '-test.bench=Benchmark(BaseTest2KB|FastTest2KB|Encoding4KBVerySparse)'

cd $GOROOT/src
git checkout d49fecc474
./make.bash

cd $GOPATH/src/github.com/ethereum/go-ethereum/common/bitutil
GOSSAFUNC=safeTestBytes $GOROOT/bin/go test -vet=off -c -a .
mv ssa.html old.html
./bitutil.test  '-test.bench=Benchmark(BaseTest2KB|FastTest2KB|Encoding4KBVerySparse)'

I think there is either a pattern order problem or just a missing rule, rewriting

v20 (+183) = ADDQ <*byte> v17 v11
v6 (183) = CMPBconstload <flags> [val=0,off=0] v20 v1

into

v22 (+183) = MOVBloadidx1 <byte> v17 v11 v1
v26 (183) = TESTB <flags> v22 v22

perhaps with the constraint that v20 has only one use, should do the trick.

created time in 2 months

push eventdr2chase/gc-lsp-tools

David Chase

commit sha c8c3b1ed8ec5217b159ea2252656ccdcf689353b

Also update README.md

view details

push time in 2 months

push eventdr2chase/gc-lsp-tools

David Chase

commit sha beedfce14f2f188f9c67991aefac1a76376b1d27

Fix the map-of-slices so it works.

view details

David Chase

commit sha ecdc41597e8146f274715104427b286ffae6fbaf

Change format to group all diagnostics for a single line. Also tweak to make easier to interpret output.

view details

push time in 2 months

push eventdr2chase/gc-lsp-tools

David Chase

commit sha 859b517c5eaa3b15d605fea9be550a78d5e2fb30

Comboine profile entries with equal file(s) and lines(s)

view details

push time in 3 months

push eventdr2chase/gc-lsp-tools

David Chase

commit sha 1e04e277afbef4b153b65b0ba55cb7a0f5094d2d

Added -packages flag to get better-looking default output from -bench

view details

push time in 3 months

push eventdr2chase/gc-lsp-tools

David Chase

commit sha 8f8162f2b678978d762cd48e49698c9bf1568710

Added explanation-printing (-e) Also minor cleanups to code and comments.

view details

push time in 3 months

push eventdr2chase/gc-lsp-tools

David Chase

commit sha 7c7df2dce61a4a889d399ed770e47a72073a1f02

Minor tweaks to README.

view details

push time in 3 months

push eventdr2chase/gc-lsp-tools

David Chase

commit sha 009fb099affc043336fea108d1cb8478fc4f4fd7

Added auto test running, tweaked+corrected nearby line detection+printing.

view details

push time in 3 months

push eventdr2chase/gc-lsp-tools

David Chase

commit sha c02582e16d75ece579922d60a95cdb2602443b02

Improved output, adjusted test, clarified README.

view details

push time in 3 months

issue commentgolang/go

cmd/compile: delete insertLoopReschedChecks?

Maybe we wait a release? I'm not sure, we've had a ton of fun with the long bug tail on signal-based preemption. I've been trying to think if we would ever want to do it the other way, for specially chosen functions or something like that (i.e., if you don't mind the performance hit, it is "safer"). Might be useful in a bare-metal world, not sure.

josharian

comment created time in 3 months

push eventdr2chase/gc-lsp-tools

David Chase

commit sha d80c2a631d6f89858d6380143a62e1e083a853b5

Revised README

view details

push time in 3 months

push eventdr2chase/gc-lsp-tools

David Chase

commit sha 2130635ea9d5fdffe881fa1765c0f16d44321116

cleanup; add comments, remove dead code, reorg to put test first

view details

push time in 3 months

push eventdr2chase/gc-lsp-tools

David Chase

commit sha a94d761745cc2aed1068d626ce9bf66e2ca7671a

A wafer-thin refactoring, ha! Added code to read protobuf output from go tool pprof. Added test. Added copyrights. Reorganized the stuff-reading parts to be more accessible to reuse by others.

view details

push time in 3 months

push eventdr2chase/gc-lsp-tools

David Chase

commit sha 4420723ce86a7c9aec0b563aebc401c1c927256e

Fixed failure to use "threshold" appropriately.

view details

push time in 3 months

push eventdr2chase/gc-lsp-tools

David Chase

commit sha 4c9fd03b151c7a57945bdeb2073e256147c54007

Fixed the prologue-skipping code to be more robust. Scan for "flat"... instead of just skipping 6.

view details

push time in 3 months

push eventdr2chase/bent

David Chase

commit sha fb4ab6e8f4227c8107a08542e274d1cd7d73aad3

Tweaks and repairs Expand environment variables in more places. Clean up (not) cross-compile GOARCH tag. Add EV BENT_DIR to wrappers.

view details

push time in 3 months

push eventdr2chase/gc-lsp-tools

David Chase

commit sha e2318ad97a5b9c0b23b49abfb7bb41475da6c9d0

Added "useful" flags, fixed error message, can collect its own cpuprofile

view details

push time in 3 months

push eventdr2chase/gc-lsp-tools

David Chase

commit sha a70cc4aee4802f4919c2eac68584d674e9a449d7

Made README somewhat more informative.

view details

push time in 3 months

create barnchdr2chase/gc-lsp-tools

branch : master

created branch time in 3 months

created repositorydr2chase/gc-lsp-tools

Demo/experimental tools for playing with LSP logging output from Go's compiler, gc.

created time in 3 months

issue commentgolang/go

cmd/compile: loads/constants not lifted out of loop

If constants would help, we can do that. One problem is that they are marked as rematerializable to the register allocator, which tends to put them back into the loop closer to their uses. I had to deal with this very problem testing whether an idiom for absolute value could be improved on Intel (do it all in the FP registers, use PAND 0x7fffetc to clear the sign bit). Not sure if we need to change the register allocator's heuristics a bit, or just be more careful about which constants are rematerializable.

randall77

comment created time in 3 months

issue commentgolang/go

cmd/compile: branch elimination opportunites when comparing constants

Sorry not to reply earlier. I don't know of a name for this offhand, but there could be one. I might want to do a critical-edges transformation to make it easier to reason about, that way "dominated by an edge" is also "dominated by a node", and we know that s1 does not dominate s2 and vice-versa -- which gives us that each use is either

  1. dominated by s1; move xb := phi(x1,x2) to s1.
  2. dominated by s2; s/xb/x2
  3. dominated by neither, in code that is properly dominated by b
  4. dominated by neither, input to a phi that is not properly dominated by b (might be b).

I think case 3 is potentially a mess, it might require a lot of phi insertion depending on the shape of the graph.

Case 4 depends on the source of the input flow edge; it is some block, either falling into case 1, 2, or 3. 1 and 2 are easy, 3 is a mess.

Slightly off-topic, I recall recently seeing a formulation for SSA where blocks with phis are like "functions" and their predecessors "call" them, passing parameters appropriately. This simplifies the description of case 4 above because it is converted to 1, 2, or 3, as appropriate.

laboger

comment created time in 3 months

more