aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ssa/opGen.go
diff options
context:
space:
mode:
authorKeith Randall <khr@golang.org>2021-05-07 14:14:39 -0700
committerBen Shi <powerman1st@163.com>2021-05-08 03:27:59 +0000
commitb211fe005860db3ceff5fd56af9951d6d1f44325 (patch)
tree2d4db9f01381ed1cab1ac47f620d08865e6a78ef /src/cmd/compile/internal/ssa/opGen.go
parentf24eac47710b0170fd45611ab1867e87701e0a95 (diff)
downloadgo-b211fe005860db3ceff5fd56af9951d6d1f44325.tar.gz
go-b211fe005860db3ceff5fd56af9951d6d1f44325.zip
cmd/compile: remove bit operations that modify memory directly
These operations (BT{S,R,C}{Q,L}modify) are quite a bit slower than other ways of doing the same thing. Without the BTxmodify operations, there are two fallback ways the compiler performs these operations: AND/OR/XOR operations directly on memory, or load-BTx-write sequences. The compiler kinda chooses one arbitrarily depending on rewrite rule application order. Currently, it uses load-BTx-write for the Const benchmarks and AND/OR/XOR directly to memory for the non-Const benchmarks. TBD, someone might investigate which of the two fallback strategies is really better. For now, they are both better than BTx ops. name old time/op new time/op delta BitSet-8 1.09µs ± 2% 0.64µs ± 5% -41.60% (p=0.000 n=9+10) BitClear-8 1.15µs ± 3% 0.68µs ± 6% -41.00% (p=0.000 n=10+10) BitToggle-8 1.18µs ± 4% 0.73µs ± 2% -38.36% (p=0.000 n=10+8) BitSetConst-8 37.0ns ± 7% 25.8ns ± 2% -30.24% (p=0.000 n=10+10) BitClearConst-8 30.7ns ± 2% 25.0ns ±12% -18.46% (p=0.000 n=10+10) BitToggleConst-8 36.9ns ± 1% 23.8ns ± 3% -35.46% (p=0.000 n=9+10) Fixes #45790 Update #45242 Change-Id: Ie33a72dc139f261af82db15d446cd0855afb4e59 Reviewed-on: https://go-review.googlesource.com/c/go/+/318149 Trust: Keith Randall <khr@golang.org> Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Ben Shi <powerman1st@163.com>
Diffstat (limited to 'src/cmd/compile/internal/ssa/opGen.go')
-rw-r--r--src/cmd/compile/internal/ssa/opGen.go186
1 files changed, 0 insertions, 186 deletions
diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go
index 51cb0881b8..1c37fbe0db 100644
--- a/src/cmd/compile/internal/ssa/opGen.go
+++ b/src/cmd/compile/internal/ssa/opGen.go
@@ -692,18 +692,6 @@ const (
OpAMD64BTRQconst
OpAMD64BTSLconst
OpAMD64BTSQconst
- OpAMD64BTCQmodify
- OpAMD64BTCLmodify
- OpAMD64BTSQmodify
- OpAMD64BTSLmodify
- OpAMD64BTRQmodify
- OpAMD64BTRLmodify
- OpAMD64BTCQconstmodify
- OpAMD64BTCLconstmodify
- OpAMD64BTSQconstmodify
- OpAMD64BTSLconstmodify
- OpAMD64BTRQconstmodify
- OpAMD64BTRLconstmodify
OpAMD64TESTQ
OpAMD64TESTL
OpAMD64TESTW
@@ -8522,180 +8510,6 @@ var opcodeTable = [...]opInfo{
},
},
{
- name: "BTCQmodify",
- auxType: auxSymOff,
- argLen: 3,
- clobberFlags: true,
- faultOnNilArg0: true,
- symEffect: SymRead | SymWrite,
- asm: x86.ABTCQ,
- reg: regInfo{
- inputs: []inputInfo{
- {1, 49151}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R15
- {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 g R15 SB
- },
- },
- },
- {
- name: "BTCLmodify",
- auxType: auxSymOff,
- argLen: 3,
- clobberFlags: true,
- faultOnNilArg0: true,
- symEffect: SymRead | SymWrite,
- asm: x86.ABTCL,
- reg: regInfo{
- inputs: []inputInfo{
- {1, 49151}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R15
- {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 g R15 SB
- },
- },
- },
- {
- name: "BTSQmodify",
- auxType: auxSymOff,
- argLen: 3,
- clobberFlags: true,
- faultOnNilArg0: true,
- symEffect: SymRead | SymWrite,
- asm: x86.ABTSQ,
- reg: regInfo{
- inputs: []inputInfo{
- {1, 49151}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R15
- {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 g R15 SB
- },
- },
- },
- {
- name: "BTSLmodify",
- auxType: auxSymOff,
- argLen: 3,
- clobberFlags: true,
- faultOnNilArg0: true,
- symEffect: SymRead | SymWrite,
- asm: x86.ABTSL,
- reg: regInfo{
- inputs: []inputInfo{
- {1, 49151}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R15
- {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 g R15 SB
- },
- },
- },
- {
- name: "BTRQmodify",
- auxType: auxSymOff,
- argLen: 3,
- clobberFlags: true,
- faultOnNilArg0: true,
- symEffect: SymRead | SymWrite,
- asm: x86.ABTRQ,
- reg: regInfo{
- inputs: []inputInfo{
- {1, 49151}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R15
- {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 g R15 SB
- },
- },
- },
- {
- name: "BTRLmodify",
- auxType: auxSymOff,
- argLen: 3,
- clobberFlags: true,
- faultOnNilArg0: true,
- symEffect: SymRead | SymWrite,
- asm: x86.ABTRL,
- reg: regInfo{
- inputs: []inputInfo{
- {1, 49151}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 R15
- {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 g R15 SB
- },
- },
- },
- {
- name: "BTCQconstmodify",
- auxType: auxSymValAndOff,
- argLen: 2,
- clobberFlags: true,
- faultOnNilArg0: true,
- symEffect: SymRead | SymWrite,
- asm: x86.ABTCQ,
- reg: regInfo{
- inputs: []inputInfo{
- {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 g R15 SB
- },
- },
- },
- {
- name: "BTCLconstmodify",
- auxType: auxSymValAndOff,
- argLen: 2,
- clobberFlags: true,
- faultOnNilArg0: true,
- symEffect: SymRead | SymWrite,
- asm: x86.ABTCL,
- reg: regInfo{
- inputs: []inputInfo{
- {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 g R15 SB
- },
- },
- },
- {
- name: "BTSQconstmodify",
- auxType: auxSymValAndOff,
- argLen: 2,
- clobberFlags: true,
- faultOnNilArg0: true,
- symEffect: SymRead | SymWrite,
- asm: x86.ABTSQ,
- reg: regInfo{
- inputs: []inputInfo{
- {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 g R15 SB
- },
- },
- },
- {
- name: "BTSLconstmodify",
- auxType: auxSymValAndOff,
- argLen: 2,
- clobberFlags: true,
- faultOnNilArg0: true,
- symEffect: SymRead | SymWrite,
- asm: x86.ABTSL,
- reg: regInfo{
- inputs: []inputInfo{
- {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 g R15 SB
- },
- },
- },
- {
- name: "BTRQconstmodify",
- auxType: auxSymValAndOff,
- argLen: 2,
- clobberFlags: true,
- faultOnNilArg0: true,
- symEffect: SymRead | SymWrite,
- asm: x86.ABTRQ,
- reg: regInfo{
- inputs: []inputInfo{
- {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 g R15 SB
- },
- },
- },
- {
- name: "BTRLconstmodify",
- auxType: auxSymValAndOff,
- argLen: 2,
- clobberFlags: true,
- faultOnNilArg0: true,
- symEffect: SymRead | SymWrite,
- asm: x86.ABTRL,
- reg: regInfo{
- inputs: []inputInfo{
- {0, 4295032831}, // AX CX DX BX SP BP SI DI R8 R9 R10 R11 R12 R13 g R15 SB
- },
- },
- },
- {
name: "TESTQ",
argLen: 2,
commutative: true,