It is mildly wasteful to always create values
that must sometimes then be dead code eliminated.
Given that it is very easy to avoid, do so.
Noticed when examining a package with thousands
of generated wrappers, each of which uses
only a handful of Values to compile.
Change-Id: If02eb4aa786dfa20f7aa43e8d729dad8b3db2786
Reviewed-on: https://go-review.googlesource.com/41502
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
// x = phi(a, ...)
//
// We can replace the "a" in the phi with the constant true.
- ct := f.ConstBool(f.Entry.Pos, f.Config.Types.Bool, true)
- cf := f.ConstBool(f.Entry.Pos, f.Config.Types.Bool, false)
+ var ct, cf *Value
for _, b := range f.Blocks {
for _, v := range b.Values {
if v.Op != OpPhi {
continue
}
if e.i == 0 {
+ if ct == nil {
+ ct = f.ConstBool(f.Entry.Pos, f.Config.Types.Bool, true)
+ }
v.SetArg(i, ct)
} else {
+ if cf == nil {
+ cf = f.ConstBool(f.Entry.Pos, f.Config.Types.Bool, false)
+ }
v.SetArg(i, cf)
}
}