From 505e50b1e34cdf6dff29615a076e26fb0780d10d Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Fri, 14 Jul 2023 09:45:31 -0700 Subject: [PATCH] cmd/compile: get rid of special case in scheduler for entry block It isn't needed. Fixes #61356 Change-Id: Ib466a3eac90c3ea57888cf40c294513033fc6118 Reviewed-on: https://go-review.googlesource.com/c/go/+/509856 TryBot-Result: Gopher Robot Reviewed-by: Bryan Mills Reviewed-by: David Chase Run-TryBot: Keith Randall --- src/cmd/compile/internal/ssa/schedule.go | 5 --- test/codegen/issue61356.go | 55 ++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 test/codegen/issue61356.go diff --git a/src/cmd/compile/internal/ssa/schedule.go b/src/cmd/compile/internal/ssa/schedule.go index 19b98cc4b83..13efb6ee707 100644 --- a/src/cmd/compile/internal/ssa/schedule.go +++ b/src/cmd/compile/internal/ssa/schedule.go @@ -7,7 +7,6 @@ package ssa import ( "cmd/compile/internal/base" "cmd/compile/internal/types" - "cmd/internal/src" "container/heap" "sort" ) @@ -65,10 +64,6 @@ func (h ValHeap) Less(i, j int) bool { } if x.Pos != y.Pos { // Favor in-order line stepping - if x.Block == x.Block.Func.Entry && x.Pos.IsStmt() != y.Pos.IsStmt() { - // In the entry block, put statement-marked instructions earlier. - return x.Pos.IsStmt() == src.PosIsStmt && y.Pos.IsStmt() != src.PosIsStmt - } return x.Pos.Before(y.Pos) } if x.Op != OpPhi { diff --git a/test/codegen/issue61356.go b/test/codegen/issue61356.go new file mode 100644 index 00000000000..65753d54075 --- /dev/null +++ b/test/codegen/issue61356.go @@ -0,0 +1,55 @@ +// asmcheck + +// Copyright 2023 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Make sure this code doesn't generate spill/restore. + +package codegen + +func pack20(in *[20]uint64) uint64 { + var out uint64 + out |= 4 + // amd64:-`.*SP.*` + out |= in[0] << 4 + // amd64:-`.*SP.*` + out |= in[1] << 7 + // amd64:-`.*SP.*` + out |= in[2] << 10 + // amd64:-`.*SP.*` + out |= in[3] << 13 + // amd64:-`.*SP.*` + out |= in[4] << 16 + // amd64:-`.*SP.*` + out |= in[5] << 19 + // amd64:-`.*SP.*` + out |= in[6] << 22 + // amd64:-`.*SP.*` + out |= in[7] << 25 + // amd64:-`.*SP.*` + out |= in[8] << 28 + // amd64:-`.*SP.*` + out |= in[9] << 31 + // amd64:-`.*SP.*` + out |= in[10] << 34 + // amd64:-`.*SP.*` + out |= in[11] << 37 + // amd64:-`.*SP.*` + out |= in[12] << 40 + // amd64:-`.*SP.*` + out |= in[13] << 43 + // amd64:-`.*SP.*` + out |= in[14] << 46 + // amd64:-`.*SP.*` + out |= in[15] << 49 + // amd64:-`.*SP.*` + out |= in[16] << 52 + // amd64:-`.*SP.*` + out |= in[17] << 55 + // amd64:-`.*SP.*` + out |= in[18] << 58 + // amd64:-`.*SP.*` + out |= in[19] << 61 + return out +}