aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/ssagen
diff options
context:
space:
mode:
authorLynn Boger <laboger@linux.vnet.ibm.com>2021-05-05 14:33:18 -0500
committerLynn Boger <laboger@linux.vnet.ibm.com>2021-05-06 18:08:01 +0000
commit402f177efc5d03c11ac6fd25ebd1f42b0b7ec30c (patch)
tree0cd0239e2fd79a64d3bc3239cbaa96e8dca63943 /src/cmd/compile/internal/ssagen
parent51ff3a6965b3fc40aceebe90eaf15a8a1a00a452 (diff)
downloadgo-402f177efc5d03c11ac6fd25ebd1f42b0b7ec30c.tar.gz
go-402f177efc5d03c11ac6fd25ebd1f42b0b7ec30c.zip
cmd/compile: fix intrinsic setting for mul64, add64 on ppc64le
I found a performance regression between the runtime.Hash benchmarks when comparing Go 1.16 to latest on ppc64le. This was due to the addition of Mul64 to runtime/internal/math with the comments that this should be treated as an intrinsic on platforms where available. However this is was not being intrinsified on ppc64le because the code in ssagen/ssa.go didn't correctly specify ppc64le. It had the argument for ArchPPC64 but should have also included ArchPPC64LE. Treating Mul64 as an intrinsic shows this improvement, and these results are better than Go 1.16: Hash5 27.0ns ± 0% 14.0ns ± 0% -48.1 Hash16 26.6ns ± 0% 14.0ns ± 0% -47.3 Hash64 50.7ns ± 0% 17.9ns ± 0% -64.6 Hash1024 500ns ± 0% 99ns ± 0% -80.1 Hash65536 30.6µs ± 0% 4.0µs ± 0% -86 Many of the Map related benchmarks in the runtime package also showed improvement once Mul64 is intrinsified. Change-Id: I3b5ce637b1620348d81a30cfc359c97ab63aae0f Reviewed-on: https://go-review.googlesource.com/c/go/+/317303 Run-TryBot: Lynn Boger <laboger@linux.vnet.ibm.com> Reviewed-by: Paul Murphy <murp@ibm.com> Reviewed-by: Keith Randall <khr@golang.org> Reviewed-by: Cherry Mui <cherryyz@google.com> TryBot-Result: Go Bot <gobot@golang.org>
Diffstat (limited to 'src/cmd/compile/internal/ssagen')
-rw-r--r--src/cmd/compile/internal/ssagen/ssa.go6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/cmd/compile/internal/ssagen/ssa.go b/src/cmd/compile/internal/ssagen/ssa.go
index 75973c46a6..2abd70169e 100644
--- a/src/cmd/compile/internal/ssagen/ssa.go
+++ b/src/cmd/compile/internal/ssagen/ssa.go
@@ -4536,14 +4536,14 @@ func InitTables() {
return s.newValue2(ssa.OpMul64uhilo, types.NewTuple(types.Types[types.TUINT64], types.Types[types.TUINT64]), args[0], args[1])
},
sys.AMD64, sys.ARM64, sys.PPC64, sys.S390X, sys.MIPS64)
- alias("math/bits", "Mul", "math/bits", "Mul64", sys.ArchAMD64, sys.ArchARM64, sys.ArchPPC64, sys.ArchS390X, sys.ArchMIPS64, sys.ArchMIPS64LE)
- alias("runtime/internal/math", "Mul64", "math/bits", "Mul64", sys.ArchAMD64, sys.ArchARM64, sys.ArchPPC64, sys.ArchS390X, sys.ArchMIPS64, sys.ArchMIPS64LE)
+ alias("math/bits", "Mul", "math/bits", "Mul64", sys.ArchAMD64, sys.ArchARM64, sys.ArchPPC64, sys.ArchPPC64LE, sys.ArchS390X, sys.ArchMIPS64, sys.ArchMIPS64LE)
+ alias("runtime/internal/math", "Mul64", "math/bits", "Mul64", sys.ArchAMD64, sys.ArchARM64, sys.ArchPPC64, sys.ArchPPC64LE, sys.ArchS390X, sys.ArchMIPS64, sys.ArchMIPS64LE)
addF("math/bits", "Add64",
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
return s.newValue3(ssa.OpAdd64carry, types.NewTuple(types.Types[types.TUINT64], types.Types[types.TUINT64]), args[0], args[1], args[2])
},
sys.AMD64, sys.ARM64, sys.PPC64, sys.S390X)
- alias("math/bits", "Add", "math/bits", "Add64", sys.ArchAMD64, sys.ArchARM64, sys.ArchPPC64, sys.ArchS390X)
+ alias("math/bits", "Add", "math/bits", "Add64", sys.ArchAMD64, sys.ArchARM64, sys.ArchPPC64, sys.ArchPPC64LE, sys.ArchS390X)
addF("math/bits", "Sub64",
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
return s.newValue3(ssa.OpSub64borrow, types.NewTuple(types.Types[types.TUINT64], types.Types[types.TUINT64]), args[0], args[1], args[2])