Skip to content

Commit

Permalink
cmd/compile: elide unnecessary Not in Phi block controls
Browse files Browse the repository at this point in the history
For a BlockIf, we can change the order of the successors if all OpPhi args are an OpNot and this allows us to elide said OpNots.

When compiling Go itself, there were no hits for (If (Phi (Not x) (Not y) (Not z)) or any other longer patterns.

compilecmp:

errors
errors.As changed

reflect
reflect.Value.FieldByIndex changed
reflect.Value.Method changed
reflect.cvtI2I changed
reflect.Value.FieldByIndexErr changed
reflect.deepValueEqual.func1 496 -> 502  (+1.21%)
reflect.deepValueEqual changed

internal/fmtsort
internal/fmtsort.nilCompare 652 -> 648  (-0.61%)

database/sql
database/sql.convertAssignRows changed

encoding/json
encoding/json.interfaceEncoder changed
encoding/json.(*decodeState).unmarshal 574 -> 571  (-0.52%)
encoding/json.mapEncoder.encode changed
encoding/json.ptrEncoder.encode changed
encoding/json.encodeByteSlice changed
encoding/json.addrMarshalerEncoder changed
encoding/json.addrTextMarshalerEncoder changed
encoding/json.(*decodeState).object changed
encoding/json.sliceEncoder.encode changed
encoding/json.indirect 1303 -> 1286  (-1.30%)

encoding/gob
encoding/gob.encOpFor.func3 changed
encoding/gob.encIndirect changed
encoding/gob.encOpFor.func5 changed
encoding/gob.(*Encoder).encodeInterface changed
encoding/gob.(*Decoder).decodeMap changed

encoding/xml
encoding/xml.(*printer).marshalStruct changed
encoding/xml.(*fieldInfo).value changed
encoding/xml.(*printer).marshalAttr changed
encoding/xml.indirect changed
encoding/xml.(*printer).marshalValue changed

encoding/asn1
encoding/asn1.UnmarshalWithParams 837 -> 845  (+0.96%)

text/template
text/template.indirectInterface changed
text/template.indirect changed
text/template.safeCall changed

net/http/httptrace
net/http/httptrace.(*ClientTrace).compose changed

cmd/fix
main.typefix.func2 changed

cmd/compile/internal/ir
cmd/compile/internal/ir.dumpNode changed

cmd/gofmt
main.match changed
main.subst changed

cmd/compile/internal/ssa
cmd/compile/internal/ssa.rewriteBlockgeneric 626 -> 1030  (+64.54%)

Change-Id: I645b3b3e37302a63e06b79ce74674882fb603ef3
Reviewed-on: https://go-review.googlesource.com/c/go/+/449055
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Joedian Reid <joedian@golang.org>
Run-TryBot: Jakub Ciolek <jakub@ciolek.dev>
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
  • Loading branch information
jake-ciolek authored and randall77 committed Nov 16, 2022
1 parent 3285158 commit fd59c6c
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/cmd/compile/internal/ssa/_gen/generic.rules
Expand Up @@ -961,6 +961,7 @@
(NilCheck (GetG mem) mem) => mem

(If (Not cond) yes no) => (If cond no yes)
(If (Phi <t> nx:(Not x) ny:(Not y)) yes no) && nx.Uses == 1 && ny.Uses == 1 => (If (Phi <t> x y) no yes)
(If (ConstBool [c]) yes no) && c => (First yes no)
(If (ConstBool [c]) yes no) && !c => (First no yes)

Expand Down
29 changes: 29 additions & 0 deletions src/cmd/compile/internal/ssa/rewritegeneric.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit fd59c6c

Please sign in to comment.