You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
package main
func f(x int) int {
if x >= 1000 {
return max(x, 2000)
}
switch x {
case 0:
return 0
case 1:
return 1
case 2:
return 2
... 996 more cases ...
case 999:
return 999
}
return 0
}
This program causes the compiler to crash on tip. The problem stems from an incompatibility between how max is implemented and the phi placement algorithm we use for large functions (hence the need for all the switch cases to reproduce it).
The text was updated successfully, but these errors were encountered:
Our large-function phi placement algorithm is incompatible with phi
opcodes already existing in the SSA representation. Instead, use simple
variable assignments and have the phi placement algorithm place the phis
we need for min/max.
Turns out the small-function phi placement algorithm doesn't have this
sensitivity, so this bug only occurs in large functions (>500 basic blocks).
Maybe we should document/check that no phis are present when we start
phi placement (regardless of size). Leaving for a potential separate CL.
We should probably also fix the placement algorithm to handle existing
phis correctly. But this CL is probably a lot smaller/safer than
messing with phi placement.
Fixesgolang#60982
Change-Id: I59ba7f506c72b22bc1485099a335d96315ebef67
Reviewed-on: https://go-review.googlesource.com/c/go/+/505756
Reviewed-by: Keith Randall <khr@google.com>
Run-TryBot: Keith Randall <khr@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
This program causes the compiler to crash on tip. The problem stems from an incompatibility between how
max
is implemented and the phi placement algorithm we use for large functions (hence the need for all the switch cases to reproduce it).The text was updated successfully, but these errors were encountered: