Commit f7404974 authored by David Chase's avatar David Chase

cmd/compile: finish GOEXPERIMENT=preemptibleloops repair

A newish check for branch-likely on single-successor blocks
caught a case where the preemption-check inserter was
setting "likely" on an unconditional branch.

Fixed by checking for that case before setting likely.

Also removed an overconservative restriction on parallel
compilation for GOEXPERIMENT=preemptibleloops; it works
fine, it is just another control-flow transformation.

Change-Id: I8e786e6281e0631cac8d80cff67bfb6402b4d225
Reviewed-on: https://go-review.googlesource.com/102317
Run-TryBot: David Chase <drchase@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: 's avatarAustin Clements <austin@google.com>
parent 8afa8a33
......@@ -1223,7 +1223,7 @@ func concurrentBackendAllowed() bool {
return false
}
// TODO: Test and delete these conditions.
if objabi.Fieldtrack_enabled != 0 || objabi.Preemptibleloops_enabled != 0 || objabi.Clobberdead_enabled != 0 {
if objabi.Fieldtrack_enabled != 0 || objabi.Clobberdead_enabled != 0 {
return false
}
// TODO: fix races and enable the following flags
......
......@@ -179,7 +179,9 @@ func insertLoopReschedChecks(f *Func) {
if p.i != 0 {
likely = BranchUnlikely
}
bb.Likely = likely
if bb.Kind != BlockPlain { // backedges can be unconditional. e.g., if x { something; continue }
bb.Likely = likely
}
// rewrite edge to include reschedule check
// existing edges:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment