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:
parent
eb5cd0fb40
commit
f5b5d77ee2
@ -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))
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user