aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJorropo <jorropo.pgm@gmail.com>2025-07-26 04:04:05 +0200
committerGopher Robot <gobot@golang.org>2025-07-28 11:06:11 -0700
commit4569255f8ce8ee744e34e44465444d6d58d349de (patch)
treef20544815164535b969c68a894ef63e6d6b9c8ee /src
parent94645d241320fe0617a4f158a4e1b64a643bb10f (diff)
downloadgo-4569255f8ce8ee744e34e44465444d6d58d349de.tar.xz
cmd/compile: cleanup SelectN rules by indexing into args
Change-Id: I7b8e8cd88c4d6d562aa25df91593d35d331ef63c Reviewed-on: https://go-review.googlesource.com/c/go/+/690595 Reviewed-by: Mark Freeman <mark@golang.org> Reviewed-by: Keith Randall <khr@google.com> Auto-Submit: Keith Randall <khr@golang.org> Reviewed-by: Keith Randall <khr@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'src')
-rw-r--r--src/cmd/compile/internal/ssa/_gen/generic.rules4
-rw-r--r--src/cmd/compile/internal/ssa/rewritegeneric.go31
2 files changed, 7 insertions, 28 deletions
diff --git a/src/cmd/compile/internal/ssa/_gen/generic.rules b/src/cmd/compile/internal/ssa/_gen/generic.rules
index 72d9677c5f..40966063d7 100644
--- a/src/cmd/compile/internal/ssa/_gen/generic.rules
+++ b/src/cmd/compile/internal/ssa/_gen/generic.rules
@@ -2057,9 +2057,7 @@
(Select1 (MakeTuple x y)) => y
// for rewriting results of some late-expanded rewrites (below)
-(SelectN [0] (MakeResult x ___)) => x
-(SelectN [1] (MakeResult x y ___)) => y
-(SelectN [2] (MakeResult x y z ___)) => z
+(SelectN [n] m:(MakeResult ___)) => m.Args[n]
// for late-expanded calls, recognize newobject and remove zeroing and nilchecks
(Zero (SelectN [0] call:(StaticLECall _ _)) mem:(SelectN [1] call))
diff --git a/src/cmd/compile/internal/ssa/rewritegeneric.go b/src/cmd/compile/internal/ssa/rewritegeneric.go
index bdde103a1f..f36e0b270f 100644
--- a/src/cmd/compile/internal/ssa/rewritegeneric.go
+++ b/src/cmd/compile/internal/ssa/rewritegeneric.go
@@ -29886,34 +29886,15 @@ func rewriteValuegeneric_OpSelectN(v *Value) bool {
b := v.Block
config := b.Func.Config
typ := &b.Func.Config.Types
- // match: (SelectN [0] (MakeResult x ___))
- // result: x
- for {
- if auxIntToInt64(v.AuxInt) != 0 || v_0.Op != OpMakeResult || len(v_0.Args) < 1 {
- break
- }
- x := v_0.Args[0]
- v.copyOf(x)
- return true
- }
- // match: (SelectN [1] (MakeResult x y ___))
- // result: y
+ // match: (SelectN [n] m:(MakeResult ___))
+ // result: m.Args[n]
for {
- if auxIntToInt64(v.AuxInt) != 1 || v_0.Op != OpMakeResult || len(v_0.Args) < 2 {
- break
- }
- y := v_0.Args[1]
- v.copyOf(y)
- return true
- }
- // match: (SelectN [2] (MakeResult x y z ___))
- // result: z
- for {
- if auxIntToInt64(v.AuxInt) != 2 || v_0.Op != OpMakeResult || len(v_0.Args) < 3 {
+ n := auxIntToInt64(v.AuxInt)
+ m := v_0
+ if m.Op != OpMakeResult {
break
}
- z := v_0.Args[2]
- v.copyOf(z)
+ v.copyOf(m.Args[n])
return true
}
// match: (SelectN [0] call:(StaticCall {sym} sptr (Const64 [c]) mem))