Skip to content

Commit 402f177

Browse files
committed
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 <[email protected]> Reviewed-by: Paul Murphy <[email protected]> Reviewed-by: Keith Randall <[email protected]> Reviewed-by: Cherry Mui <[email protected]> TryBot-Result: Go Bot <[email protected]>
1 parent 51ff3a6 commit 402f177

File tree

1 file changed

+3
-3
lines changed
  • src/cmd/compile/internal/ssagen

1 file changed

+3
-3
lines changed

src/cmd/compile/internal/ssagen/ssa.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4536,14 +4536,14 @@ func InitTables() {
45364536
return s.newValue2(ssa.OpMul64uhilo, types.NewTuple(types.Types[types.TUINT64], types.Types[types.TUINT64]), args[0], args[1])
45374537
},
45384538
sys.AMD64, sys.ARM64, sys.PPC64, sys.S390X, sys.MIPS64)
4539-
alias("math/bits", "Mul", "math/bits", "Mul64", sys.ArchAMD64, sys.ArchARM64, sys.ArchPPC64, sys.ArchS390X, sys.ArchMIPS64, sys.ArchMIPS64LE)
4540-
alias("runtime/internal/math", "Mul64", "math/bits", "Mul64", sys.ArchAMD64, sys.ArchARM64, sys.ArchPPC64, sys.ArchS390X, sys.ArchMIPS64, sys.ArchMIPS64LE)
4539+
alias("math/bits", "Mul", "math/bits", "Mul64", sys.ArchAMD64, sys.ArchARM64, sys.ArchPPC64, sys.ArchPPC64LE, sys.ArchS390X, sys.ArchMIPS64, sys.ArchMIPS64LE)
4540+
alias("runtime/internal/math", "Mul64", "math/bits", "Mul64", sys.ArchAMD64, sys.ArchARM64, sys.ArchPPC64, sys.ArchPPC64LE, sys.ArchS390X, sys.ArchMIPS64, sys.ArchMIPS64LE)
45414541
addF("math/bits", "Add64",
45424542
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
45434543
return s.newValue3(ssa.OpAdd64carry, types.NewTuple(types.Types[types.TUINT64], types.Types[types.TUINT64]), args[0], args[1], args[2])
45444544
},
45454545
sys.AMD64, sys.ARM64, sys.PPC64, sys.S390X)
4546-
alias("math/bits", "Add", "math/bits", "Add64", sys.ArchAMD64, sys.ArchARM64, sys.ArchPPC64, sys.ArchS390X)
4546+
alias("math/bits", "Add", "math/bits", "Add64", sys.ArchAMD64, sys.ArchARM64, sys.ArchPPC64, sys.ArchPPC64LE, sys.ArchS390X)
45474547
addF("math/bits", "Sub64",
45484548
func(s *state, n *ir.CallExpr, args []*ssa.Value) *ssa.Value {
45494549
return s.newValue3(ssa.OpSub64borrow, types.NewTuple(types.Types[types.TUINT64], types.Types[types.TUINT64]), args[0], args[1], args[2])

0 commit comments

Comments
 (0)