From f7404974daaf8f58af4d9c1fd504e81e7f0db0a2 Mon Sep 17 00:00:00 2001 From: David Chase Date: Fri, 23 Mar 2018 11:30:58 -0400 Subject: [PATCH] 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 TryBot-Result: Gobot Gobot Reviewed-by: Austin Clements --- src/cmd/compile/internal/gc/main.go | 2 +- src/cmd/compile/internal/ssa/loopreschedchecks.go | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cmd/compile/internal/gc/main.go b/src/cmd/compile/internal/gc/main.go index e47b8a8a9c..33fbb90be4 100644 --- a/src/cmd/compile/internal/gc/main.go +++ b/src/cmd/compile/internal/gc/main.go @@ -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 diff --git a/src/cmd/compile/internal/ssa/loopreschedchecks.go b/src/cmd/compile/internal/ssa/loopreschedchecks.go index cc6cb52972..30ba1e9d66 100644 --- a/src/cmd/compile/internal/ssa/loopreschedchecks.go +++ b/src/cmd/compile/internal/ssa/loopreschedchecks.go @@ -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: -- 2.50.0