1
0
mirror of https://github.com/golang/go synced 2024-09-29 19:34:38 -06:00

cmd/compile: use immediates for MOVO of readonly sym

file      before    after     Δ       %       
addr2line 4307760   4303616   -4144   -0.096% 
api       5968600   5968568   -32     -0.001% 
asm       5109928   5122120   +12192  +0.239% 
buildid   2843752   2839608   -4144   -0.146% 
cgo       4823768   4819624   -4144   -0.086% 
compile   20687848  20691800  +3952   +0.019% 
cover     5259896   5255752   -4144   -0.079% 
dist      3665176   3661032   -4144   -0.113% 
doc       4668648   4668600   -48     -0.001% 
fix       3368792   3368744   -48     -0.001% 
link      6613328   6609200   -4128   -0.062% 
nm        4253312   4253280   -32     -0.001% 
objdump   4655360   4655312   -48     -0.001% 
pack      2294312   2294280   -32     -0.001% 
pprof     14747332  14747284  -48     -0.000% 
test2json 2819416   2815272   -4144   -0.147% 
trace     11669436  11665292  -4144   -0.036% 
vet       8274184   8270040   -4144   -0.050% 
total     116030848 116009424 -21424  -0.018% 

Change-Id: Ice37222c4d76540b3591459f605321cbf142872d
Reviewed-on: https://go-review.googlesource.com/c/go/+/220690
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
This commit is contained in:
Josh Bleecher Snyder 2020-02-22 22:05:05 -08:00
parent eb5cd0fb40
commit f5b5d77ee2
2 changed files with 45 additions and 0 deletions

View File

@ -2428,3 +2428,6 @@
(MOVWload [off] {sym} (SB) _) && symIsRO(sym) -> (MOVLconst [int64(read16(sym, off, config.ctxt.Arch.ByteOrder))])
(MOVLload [off] {sym} (SB) _) && symIsRO(sym) -> (MOVQconst [int64(read32(sym, off, config.ctxt.Arch.ByteOrder))])
(MOVQload [off] {sym} (SB) _) && symIsRO(sym) -> (MOVQconst [int64(read64(sym, off, config.ctxt.Arch.ByteOrder))])
(MOVOstore [dstOff] {dstSym} ptr (MOVOload [srcOff] {srcSym} (SB) _) mem) && symIsRO(srcSym) ->
(MOVQstore [dstOff+8] {dstSym} ptr (MOVQconst [int64(read64(srcSym, srcOff+8, config.ctxt.Arch.ByteOrder))])
(MOVQstore [dstOff] {dstSym} ptr (MOVQconst [int64(read64(srcSym, srcOff, config.ctxt.Arch.ByteOrder))]) mem))

View File

@ -15550,6 +15550,9 @@ func rewriteValueAMD64_OpAMD64MOVOstore(v *Value) bool {
v_2 := v.Args[2]
v_1 := v.Args[1]
v_0 := v.Args[0]
b := v.Block
config := b.Func.Config
typ := &b.Func.Config.Types
// match: (MOVOstore [off1] {sym} (ADDQconst [off2] ptr) val mem)
// cond: is32Bit(off1+off2)
// result: (MOVOstore [off1+off2] {sym} ptr val mem)
@ -15599,6 +15602,45 @@ func rewriteValueAMD64_OpAMD64MOVOstore(v *Value) bool {
v.AddArg(mem)
return true
}
// match: (MOVOstore [dstOff] {dstSym} ptr (MOVOload [srcOff] {srcSym} (SB) _) mem)
// cond: symIsRO(srcSym)
// result: (MOVQstore [dstOff+8] {dstSym} ptr (MOVQconst [int64(read64(srcSym, srcOff+8, config.ctxt.Arch.ByteOrder))]) (MOVQstore [dstOff] {dstSym} ptr (MOVQconst [int64(read64(srcSym, srcOff, config.ctxt.Arch.ByteOrder))]) mem))
for {
dstOff := v.AuxInt
dstSym := v.Aux
ptr := v_0
if v_1.Op != OpAMD64MOVOload {
break
}
srcOff := v_1.AuxInt
srcSym := v_1.Aux
_ = v_1.Args[1]
v_1_0 := v_1.Args[0]
if v_1_0.Op != OpSB {
break
}
mem := v_2
if !(symIsRO(srcSym)) {
break
}
v.reset(OpAMD64MOVQstore)
v.AuxInt = dstOff + 8
v.Aux = dstSym
v.AddArg(ptr)
v0 := b.NewValue0(v_1.Pos, OpAMD64MOVQconst, typ.UInt64)
v0.AuxInt = int64(read64(srcSym, srcOff+8, config.ctxt.Arch.ByteOrder))
v.AddArg(v0)
v1 := b.NewValue0(v_1.Pos, OpAMD64MOVQstore, types.TypeMem)
v1.AuxInt = dstOff
v1.Aux = dstSym
v1.AddArg(ptr)
v2 := b.NewValue0(v_1.Pos, OpAMD64MOVQconst, typ.UInt64)
v2.AuxInt = int64(read64(srcSym, srcOff, config.ctxt.Arch.ByteOrder))
v1.AddArg(v2)
v1.AddArg(mem)
v.AddArg(v1)
return true
}
return false
}
func rewriteValueAMD64_OpAMD64MOVQatomicload(v *Value) bool {