From e126129d7612349874828685c2bcd49de498a1a0 Mon Sep 17 00:00:00 2001 From: Joel Sing Date: Mon, 19 Aug 2024 23:54:17 +1000 Subject: cmd/compile/internal/ssa: combine shift and addition for riscv64 rva22u64 When GORISCV64 enables rva22u64, combined shift and addition using the SH1ADD, SH2ADD and SH3ADD instructions that are available via the Zba extension. This results in more than 2000 instructions being removed from the Go binary on riscv64. Change-Id: Ia62ae7dda3d8083cff315113421bee73f518eea8 Reviewed-on: https://go-review.googlesource.com/c/go/+/606636 LUCI-TryBot-Result: Go LUCI Reviewed-by: Mark Ryan Reviewed-by: Michael Pratt Reviewed-by: Cherry Mui Reviewed-by: Meng Zhuo --- test/codegen/shift.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'test/codegen') diff --git a/test/codegen/shift.go b/test/codegen/shift.go index 6a2a6c40cd..bc91c61baa 100644 --- a/test/codegen/shift.go +++ b/test/codegen/shift.go @@ -520,3 +520,20 @@ func checkShiftToMask(u []uint64, s []int64) { // amd64:-"SHR",-"SHL","ANDQ" u[1] = u[1] << 5 >> 5 } + +// +// Left shift with addition. +// + +func checkLeftShiftWithAddition(a int64, b int64) int64 { + // riscv64/rva20u64: "SLLI","ADD" + // riscv64/rva22u64: "SH1ADD" + a = a + b<<1 + // riscv64/rva20u64: "SLLI","ADD" + // riscv64/rva22u64: "SH2ADD" + a = a + b<<2 + // riscv64/rva20u64: "SLLI","ADD" + // riscv64/rva22u64: "SH3ADD" + a = a + b<<3 + return a +} -- cgit v1.3-6-g1900