diff options
author | Josh Bleecher Snyder <josharian@gmail.com> | 2020-02-26 11:29:34 -0800 |
---|---|---|
committer | Josh Bleecher Snyder <josharian@gmail.com> | 2020-03-01 15:27:58 +0000 |
commit | 7913f7dfcf2c281b99c6ddd278aa851de47ada9d (patch) | |
tree | 8a34c42a6e16c5c7864d49030ed474dddff2ff82 /src/cmd/compile/internal/ssa/rewritedec.go | |
parent | a908e09a34fff3c47efab69857d27bf6965b948a (diff) | |
download | go-7913f7dfcf2c281b99c6ddd278aa851de47ada9d.tar.gz go-7913f7dfcf2c281b99c6ddd278aa851de47ada9d.zip |
cmd/compile: add specialized AddArgN functions for rewrite rules
This shrinks the compiler without impacting performance.
(The performance-sensitive part of rewrite rules is the non-match case.)
Passes toolstash-check -all.
Executable size:
file before after Δ %
compile 20356168 20163960 -192208 -0.944%
total 115599376 115407168 -192208 -0.166%
Text size:
file before after Δ %
cmd/compile/internal/ssa.s 3928309 3778774 -149535 -3.807%
total 18862943 18713408 -149535 -0.793%
Memory allocated compiling package SSA:
SSA 12.7M ± 0% 12.5M ± 0% -1.74% (p=0.008 n=5+5)
Compiler speed impact:
name old time/op new time/op delta
Template 211ms ± 1% 211ms ± 2% ~ (p=0.832 n=49+49)
Unicode 82.8ms ± 2% 83.2ms ± 2% +0.44% (p=0.022 n=46+49)
GoTypes 726ms ± 1% 728ms ± 2% ~ (p=0.076 n=46+48)
Compiler 3.39s ± 2% 3.40s ± 2% ~ (p=0.633 n=48+49)
SSA 7.71s ± 1% 7.65s ± 1% -0.78% (p=0.000 n=45+44)
Flate 134ms ± 1% 134ms ± 1% ~ (p=0.195 n=50+49)
GoParser 167ms ± 1% 167ms ± 1% ~ (p=0.390 n=47+47)
Reflect 453ms ± 3% 452ms ± 2% ~ (p=0.492 n=48+49)
Tar 184ms ± 3% 184ms ± 2% ~ (p=0.862 n=50+48)
XML 248ms ± 2% 248ms ± 2% ~ (p=0.096 n=49+47)
[Geo mean] 415ms 415ms -0.03%
name old user-time/op new user-time/op delta
Template 273ms ± 1% 273ms ± 2% ~ (p=0.711 n=48+48)
Unicode 117ms ± 6% 117ms ± 5% ~ (p=0.633 n=50+50)
GoTypes 972ms ± 2% 974ms ± 1% +0.29% (p=0.016 n=47+49)
Compiler 4.46s ± 6% 4.51s ± 6% ~ (p=0.093 n=50+50)
SSA 10.4s ± 1% 10.3s ± 2% -0.94% (p=0.000 n=45+50)
Flate 166ms ± 2% 167ms ± 2% ~ (p=0.148 n=49+48)
GoParser 202ms ± 1% 202ms ± 2% -0.28% (p=0.014 n=47+49)
Reflect 594ms ± 2% 594ms ± 2% ~ (p=0.717 n=48+49)
Tar 224ms ± 2% 224ms ± 2% ~ (p=0.805 n=50+49)
XML 311ms ± 1% 310ms ± 1% ~ (p=0.177 n=49+48)
[Geo mean] 537ms 537ms +0.01%
Change-Id: I562b9f349b34ddcff01771769e6dbbc80604da7a
Reviewed-on: https://go-review.googlesource.com/c/go/+/221237
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/cmd/compile/internal/ssa/rewritedec.go')
-rw-r--r-- | src/cmd/compile/internal/ssa/rewritedec.go | 93 |
1 files changed, 27 insertions, 66 deletions
diff --git a/src/cmd/compile/internal/ssa/rewritedec.go b/src/cmd/compile/internal/ssa/rewritedec.go index 9393cade62..a031fca4ad 100644 --- a/src/cmd/compile/internal/ssa/rewritedec.go +++ b/src/cmd/compile/internal/ssa/rewritedec.go @@ -116,16 +116,13 @@ func rewriteValuedec_OpLoad(v *Value) bool { } v.reset(OpComplexMake) v0 := b.NewValue0(v.Pos, OpLoad, typ.Float32) - v0.AddArg(ptr) - v0.AddArg(mem) - v.AddArg(v0) + v0.AddArg2(ptr, mem) v1 := b.NewValue0(v.Pos, OpLoad, typ.Float32) v2 := b.NewValue0(v.Pos, OpOffPtr, typ.Float32Ptr) v2.AuxInt = 4 v2.AddArg(ptr) - v1.AddArg(v2) - v1.AddArg(mem) - v.AddArg(v1) + v1.AddArg2(v2, mem) + v.AddArg2(v0, v1) return true } // match: (Load <t> ptr mem) @@ -140,16 +137,13 @@ func rewriteValuedec_OpLoad(v *Value) bool { } v.reset(OpComplexMake) v0 := b.NewValue0(v.Pos, OpLoad, typ.Float64) - v0.AddArg(ptr) - v0.AddArg(mem) - v.AddArg(v0) + v0.AddArg2(ptr, mem) v1 := b.NewValue0(v.Pos, OpLoad, typ.Float64) v2 := b.NewValue0(v.Pos, OpOffPtr, typ.Float64Ptr) v2.AuxInt = 8 v2.AddArg(ptr) - v1.AddArg(v2) - v1.AddArg(mem) - v.AddArg(v1) + v1.AddArg2(v2, mem) + v.AddArg2(v0, v1) return true } // match: (Load <t> ptr mem) @@ -164,16 +158,13 @@ func rewriteValuedec_OpLoad(v *Value) bool { } v.reset(OpStringMake) v0 := b.NewValue0(v.Pos, OpLoad, typ.BytePtr) - v0.AddArg(ptr) - v0.AddArg(mem) - v.AddArg(v0) + v0.AddArg2(ptr, mem) v1 := b.NewValue0(v.Pos, OpLoad, typ.Int) v2 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr) v2.AuxInt = config.PtrSize v2.AddArg(ptr) - v1.AddArg(v2) - v1.AddArg(mem) - v.AddArg(v1) + v1.AddArg2(v2, mem) + v.AddArg2(v0, v1) return true } // match: (Load <t> ptr mem) @@ -188,23 +179,18 @@ func rewriteValuedec_OpLoad(v *Value) bool { } v.reset(OpSliceMake) v0 := b.NewValue0(v.Pos, OpLoad, t.Elem().PtrTo()) - v0.AddArg(ptr) - v0.AddArg(mem) - v.AddArg(v0) + v0.AddArg2(ptr, mem) v1 := b.NewValue0(v.Pos, OpLoad, typ.Int) v2 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr) v2.AuxInt = config.PtrSize v2.AddArg(ptr) - v1.AddArg(v2) - v1.AddArg(mem) - v.AddArg(v1) + v1.AddArg2(v2, mem) v3 := b.NewValue0(v.Pos, OpLoad, typ.Int) v4 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr) v4.AuxInt = 2 * config.PtrSize v4.AddArg(ptr) - v3.AddArg(v4) - v3.AddArg(mem) - v.AddArg(v3) + v3.AddArg2(v4, mem) + v.AddArg3(v0, v1, v3) return true } // match: (Load <t> ptr mem) @@ -219,16 +205,13 @@ func rewriteValuedec_OpLoad(v *Value) bool { } v.reset(OpIMake) v0 := b.NewValue0(v.Pos, OpLoad, typ.Uintptr) - v0.AddArg(ptr) - v0.AddArg(mem) - v.AddArg(v0) + v0.AddArg2(ptr, mem) v1 := b.NewValue0(v.Pos, OpLoad, typ.BytePtr) v2 := b.NewValue0(v.Pos, OpOffPtr, typ.BytePtrPtr) v2.AuxInt = config.PtrSize v2.AddArg(ptr) - v1.AddArg(v2) - v1.AddArg(mem) - v.AddArg(v1) + v1.AddArg2(v2, mem) + v.AddArg2(v0, v1) return true } return false @@ -310,14 +293,10 @@ func rewriteValuedec_OpStore(v *Value) bool { v0 := b.NewValue0(v.Pos, OpOffPtr, typ.Float32Ptr) v0.AuxInt = 4 v0.AddArg(dst) - v.AddArg(v0) - v.AddArg(imag) v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem) v1.Aux = typ.Float32 - v1.AddArg(dst) - v1.AddArg(real) - v1.AddArg(mem) - v.AddArg(v1) + v1.AddArg3(dst, real, mem) + v.AddArg3(v0, imag, v1) return true } // match: (Store {t} dst (ComplexMake real imag) mem) @@ -340,14 +319,10 @@ func rewriteValuedec_OpStore(v *Value) bool { v0 := b.NewValue0(v.Pos, OpOffPtr, typ.Float64Ptr) v0.AuxInt = 8 v0.AddArg(dst) - v.AddArg(v0) - v.AddArg(imag) v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem) v1.Aux = typ.Float64 - v1.AddArg(dst) - v1.AddArg(real) - v1.AddArg(mem) - v.AddArg(v1) + v1.AddArg3(dst, real, mem) + v.AddArg3(v0, imag, v1) return true } // match: (Store dst (StringMake ptr len) mem) @@ -365,14 +340,10 @@ func rewriteValuedec_OpStore(v *Value) bool { v0 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr) v0.AuxInt = config.PtrSize v0.AddArg(dst) - v.AddArg(v0) - v.AddArg(len) v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem) v1.Aux = typ.BytePtr - v1.AddArg(dst) - v1.AddArg(ptr) - v1.AddArg(mem) - v.AddArg(v1) + v1.AddArg3(dst, ptr, mem) + v.AddArg3(v0, len, v1) return true } // match: (Store dst (SliceMake ptr len cap) mem) @@ -391,22 +362,16 @@ func rewriteValuedec_OpStore(v *Value) bool { v0 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr) v0.AuxInt = 2 * config.PtrSize v0.AddArg(dst) - v.AddArg(v0) - v.AddArg(cap) v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem) v1.Aux = typ.Int v2 := b.NewValue0(v.Pos, OpOffPtr, typ.IntPtr) v2.AuxInt = config.PtrSize v2.AddArg(dst) - v1.AddArg(v2) - v1.AddArg(len) v3 := b.NewValue0(v.Pos, OpStore, types.TypeMem) v3.Aux = typ.BytePtr - v3.AddArg(dst) - v3.AddArg(ptr) - v3.AddArg(mem) - v1.AddArg(v3) - v.AddArg(v1) + v3.AddArg3(dst, ptr, mem) + v1.AddArg3(v2, len, v3) + v.AddArg3(v0, cap, v1) return true } // match: (Store dst (IMake itab data) mem) @@ -424,14 +389,10 @@ func rewriteValuedec_OpStore(v *Value) bool { v0 := b.NewValue0(v.Pos, OpOffPtr, typ.BytePtrPtr) v0.AuxInt = config.PtrSize v0.AddArg(dst) - v.AddArg(v0) - v.AddArg(data) v1 := b.NewValue0(v.Pos, OpStore, types.TypeMem) v1.Aux = typ.Uintptr - v1.AddArg(dst) - v1.AddArg(itab) - v1.AddArg(mem) - v.AddArg(v1) + v1.AddArg3(dst, itab, mem) + v.AddArg3(v0, data, v1) return true } return false |