Skip to content

Commit

Permalink
cmd/compile: finish GOEXPERIMENT=preemptibleloops repair
Browse files Browse the repository at this point in the history
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: Austin Clements <austin@google.com>
  • Loading branch information
dr2chase committed Mar 26, 2018
1 parent 8afa8a3 commit f740497
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/cmd/compile/internal/gc/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 3 additions & 1 deletion src/cmd/compile/internal/ssa/loopreschedchecks.go
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down

0 comments on commit f740497

Please sign in to comment.