blob: d7400b2ae9c9ecd3e8f7eaffc21c4b18558d9703 [file] [log] [blame] [edit]
// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package ssa
import "cmd/compile/internal/logopt"
// checkbce prints all bounds checks that are present in the function.
// Useful to find regressions. checkbce is only activated when with
// corresponding debug options, so it's off by default.
// See test/checkbce.go
func checkbce(f *Func) {
if f.pass.debug <= 0 && !logopt.Enabled() {
return
}
for _, b := range f.Blocks {
if b.Kind == BlockInvalid {
continue
}
for _, v := range b.Values {
if v.Op == OpIsInBounds || v.Op == OpIsSliceInBounds {
if f.pass.debug > 0 {
f.Warnl(v.Pos, "Found %v", v.Op)
}
if logopt.Enabled() {
if v.Op == OpIsInBounds {
logopt.LogOpt(v.Pos, "isInBounds", "checkbce", f.Name)
}
if v.Op == OpIsSliceInBounds {
logopt.LogOpt(v.Pos, "isSliceInBounds", "checkbce", f.Name)
}
}
}
}
}
}