mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: don't addLocalInductiveFacts if there is no direct edge from if block to phi block
Currently in addLocalInductiveFacts, we only check whether direct edge from if block to phi block exists. If not, the following logic will treat the phi block as the first successor, which is wrong. This patch makes prove pass more conservative, so we disable some cases in test/prove.go. We will do some optimization in the following CL and enable these cases then. Fixes #40367. Change-Id: I27cf0248f3a82312a6f7dabe11c79a1a34cf5412 Reviewed-on: https://go-review.googlesource.com/c/go/+/244579 Reviewed-by: Zach Jones <zachj1@gmail.com> Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
54e75e8f9d
commit
7f86080476
3 changed files with 53 additions and 2 deletions
|
|
@ -1051,6 +1051,11 @@ func addLocalInductiveFacts(ft *factsTable, b *Block) {
|
|||
//
|
||||
// If all of these conditions are true, then i1 < max and i1 >= min.
|
||||
|
||||
// To ensure this is a loop header node.
|
||||
if len(b.Preds) != 2 {
|
||||
return
|
||||
}
|
||||
|
||||
for _, i1 := range b.Values {
|
||||
if i1.Op != OpPhi {
|
||||
continue
|
||||
|
|
@ -1093,6 +1098,9 @@ func addLocalInductiveFacts(ft *factsTable, b *Block) {
|
|||
}
|
||||
br = negative
|
||||
}
|
||||
if br == unknown {
|
||||
continue
|
||||
}
|
||||
|
||||
tr, has := domainRelationTable[control.Op]
|
||||
if !has {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue