]> Cypherpunks.ru repositories - gostls13.git/commit
cmd/compile: optimize absorbing InvertFlags into Noov comparisons for arm64
authoreric fang <eric.fang@arm.com>
Tue, 12 Sep 2023 03:01:33 +0000 (03:01 +0000)
committerEric Fang <eric.fang@arm.com>
Thu, 21 Sep 2023 02:36:06 +0000 (02:36 +0000)
commitace1494d9235be94f1325ab6e45105a446b3224c
tree41d38ad49a29234e7afafa07fb7f439394253b72
parentdd881027c3c556647d5d9f36eda4e9316680647b
cmd/compile: optimize absorbing InvertFlags into Noov comparisons for arm64

Previously (LessThanNoov (InvertFlags x)) is lowered as:
CSET
CSET
BIC
With this CL it's lowered as:
CSET
CSEL
This saves one instruction.

Similarly (GreaterEqualNoov (InvertFlags x)) is now lowered as:
CSET
CSINC

$ benchstat old.bench new.bench
goos: linux
goarch: arm64
                       │  old.bench  │             new.bench              │
                       │   sec/op    │   sec/op     vs base               │
InvertLessThanNoov-160   2.249n ± 2%   2.190n ± 1%  -2.62% (p=0.003 n=10)

Change-Id: Idd8979b7f4fe466e74b1a201c4aba7f1b0cffb0b
Reviewed-on: https://go-review.googlesource.com/c/go/+/526237
Reviewed-by: Heschi Kreinick <heschi@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Eric Fang <eric.fang@arm.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
src/cmd/compile/internal/ssa/_gen/ARM64.rules
src/cmd/compile/internal/ssa/bench_test.go
src/cmd/compile/internal/ssa/rewriteARM64.go
test/codegen/comparisons.go