From 4b3a55ec0243a291f4794c7057e120e000538886 Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Thu, 9 Mar 2017 14:28:32 -0800 Subject: [PATCH] cmd/compile: add 32 bit (AddPtr (Const)) rule This triggers about 50k times during 32 bit make.bash. Change-Id: Ia0c2b1a8246b92173b4b0d94a4037626f76b6e73 Reviewed-on: https://go-review.googlesource.com/37998 Run-TryBot: Josh Bleecher Snyder TryBot-Result: Gobot Gobot Reviewed-by: Cherry Zhang --- src/cmd/compile/internal/ssa/gen/generic.rules | 1 + src/cmd/compile/internal/ssa/rewritegeneric.go | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/cmd/compile/internal/ssa/gen/generic.rules b/src/cmd/compile/internal/ssa/gen/generic.rules index e921a1110b..53f0490c4c 100644 --- a/src/cmd/compile/internal/ssa/gen/generic.rules +++ b/src/cmd/compile/internal/ssa/gen/generic.rules @@ -98,6 +98,7 @@ (Const32F [f2i(float64(i2f32(c) + i2f32(d)))]) // ensure we combine the operands with 32 bit precision (Add64F (Const64F [c]) (Const64F [d])) -> (Const64F [f2i(i2f(c) + i2f(d))]) (AddPtr x (Const64 [c])) -> (OffPtr x [c]) +(AddPtr x (Const32 [c])) -> (OffPtr x [c]) (Sub8 (Const8 [c]) (Const8 [d])) -> (Const8 [int64(int8(c-d))]) (Sub16 (Const16 [c]) (Const16 [d])) -> (Const16 [int64(int16(c-d))]) diff --git a/src/cmd/compile/internal/ssa/rewritegeneric.go b/src/cmd/compile/internal/ssa/rewritegeneric.go index c72d7c685d..10a4a4383c 100644 --- a/src/cmd/compile/internal/ssa/rewritegeneric.go +++ b/src/cmd/compile/internal/ssa/rewritegeneric.go @@ -1823,6 +1823,23 @@ func rewriteValuegeneric_OpAddPtr(v *Value, config *Config) bool { v.AddArg(x) return true } + // match: (AddPtr x (Const32 [c])) + // cond: + // result: (OffPtr x [c]) + for { + t := v.Type + x := v.Args[0] + v_1 := v.Args[1] + if v_1.Op != OpConst32 { + break + } + c := v_1.AuxInt + v.reset(OpOffPtr) + v.Type = t + v.AuxInt = c + v.AddArg(x) + return true + } return false } func rewriteValuegeneric_OpAnd16(v *Value, config *Config) bool { -- 2.48.1