mirror of
https://github.com/golang/go
synced 2024-11-26 15:46:54 -07:00
cmd/compile: run deadcode before nilcheck for better statement relocation
Nilcheck would move statements from NilCheck values to others that turned out were already dead, which leads to lost statements. Better to eliminate the dead code first. One "error" is removed from test/prove.go because the code is actually dead, and the additional deadcode pass removes it before prove can run. Change-Id: If75926ca1acbb59c7ab9c8ef14d60a02a0a94f8b Reviewed-on: https://go-review.googlesource.com/c/go/+/198479 Run-TryBot: David Chase <drchase@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Jeremy Faller <jeremy@golang.org>
This commit is contained in:
parent
08a87938bb
commit
adc4d2cc2d
@ -409,6 +409,7 @@ var passes = [...]pass{
|
|||||||
{name: "opt deadcode", fn: deadcode, required: true}, // remove any blocks orphaned during opt
|
{name: "opt deadcode", fn: deadcode, required: true}, // remove any blocks orphaned during opt
|
||||||
{name: "generic cse", fn: cse},
|
{name: "generic cse", fn: cse},
|
||||||
{name: "phiopt", fn: phiopt},
|
{name: "phiopt", fn: phiopt},
|
||||||
|
{name: "gcse deadcode", fn: deadcode, required: true}, // clean out after cse and phiopt
|
||||||
{name: "nilcheckelim", fn: nilcheckelim},
|
{name: "nilcheckelim", fn: nilcheckelim},
|
||||||
{name: "prove", fn: prove},
|
{name: "prove", fn: prove},
|
||||||
{name: "fuse plain", fn: fusePlain},
|
{name: "fuse plain", fn: fusePlain},
|
||||||
|
@ -507,7 +507,7 @@ func sm1(b []int, x int) {
|
|||||||
useSlice(b[2:8]) // ERROR "Proved slicemask not needed$"
|
useSlice(b[2:8]) // ERROR "Proved slicemask not needed$"
|
||||||
// Test non-constant argument with known limits.
|
// Test non-constant argument with known limits.
|
||||||
if cap(b) > 10 {
|
if cap(b) > 10 {
|
||||||
useSlice(b[2:]) // ERROR "Proved slicemask not needed$"
|
useSlice(b[2:])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user