From c2a9c55823b1ed14f84d8ce8880dbda3f5b01eb0 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Wed, 27 Jul 2022 09:56:38 -0700 Subject: cmd/compile: optimize unsafe.Slice generated code We don't need a multiply when the element type is size 0 or 1. The panic functions don't return, so we don't need any post-call code (register restores, etc.). Change-Id: I0dcea5df56d29d7be26554ddca966b3903c672e5 Reviewed-on: https://go-review.googlesource.com/c/go/+/419754 TryBot-Result: Gopher Robot Reviewed-by: Cuong Manh Le Run-TryBot: Keith Randall Reviewed-by: Keith Randall Reviewed-by: Than McIntosh Reviewed-by: Matthew Dempsky --- test/codegen/slices.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'test/codegen') diff --git a/test/codegen/slices.go b/test/codegen/slices.go index d20aa9eddf..99bdd50e52 100644 --- a/test/codegen/slices.go +++ b/test/codegen/slices.go @@ -6,6 +6,8 @@ package codegen +import "unsafe" + // This file contains code generation tests related to the handling of // slice types. @@ -368,3 +370,16 @@ func SliceWithSubtractBound(a []int, b int) []int { // ppc64:"SUBC",-"NEG" return a[(3 - b):] } + +// --------------------------------------- // +// Code generation for unsafe.Slice // +// --------------------------------------- // + +func Slice1(p *byte, i int) []byte { + // amd64:-"MULQ" + return unsafe.Slice(p, i) +} +func Slice0(p *struct{}, i int) []struct{} { + // amd64:-"MULQ" + return unsafe.Slice(p, i) +} -- cgit v1.3-5-g9baa