diff options
| author | Jorropo <jorropo.pgm@gmail.com> | 2026-03-29 07:10:47 +0200 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2026-04-06 10:05:00 -0700 |
| commit | 24596d3243ba0a9d855d1ede30245ba00d7f1962 (patch) | |
| tree | 5b98664f120ee8d2838c5a20401dca2b5a1f2729 /src | |
| parent | 68ee544e8704b657e0adab5d3c2af38212f3d6c4 (diff) | |
| download | go-24596d3243ba0a9d855d1ede30245ba00d7f1962.tar.xz | |
cmd/compile: cleanup rules by canonicalizing sext(int(bool)) → zext(int(bool))
Change-Id: Ic97f661c68180ff7adb9976fcc61279e1e1f04a4
Reviewed-on: https://go-review.googlesource.com/c/go/+/760842
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
Auto-Submit: Jorropo <jorropo.pgm@gmail.com>
Reviewed-by: Junyang Shao <shaojunyang@google.com>
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.rules | 7 | ||||
| -rw-r--r-- | src/cmd/compile/internal/ssa/rewritegeneric.go | 279 |
2 files changed, 36 insertions, 250 deletions
diff --git a/src/cmd/compile/internal/ssa/_gen/generic.rules b/src/cmd/compile/internal/ssa/_gen/generic.rules index 5ceadd79a1..24c7975390 100644 --- a/src/cmd/compile/internal/ssa/_gen/generic.rules +++ b/src/cmd/compile/internal/ssa/_gen/generic.rules @@ -2358,7 +2358,6 @@ (Neq(64|32|16) (ZeroExt8to(64|32|16) (CvtBoolToUint8 x)) (Const(64|32|16) [1])) => (Not x) (Eq(64|32|16) (ZeroExt8to(64|32|16) (CvtBoolToUint8 x)) (Const(64|32|16) [1])) => x (Eq(64|32|16) (ZeroExt8to(64|32|16) (CvtBoolToUint8 x)) (Const(64|32|16) [0])) => (Not x) -(Neq(64|32|16) (SignExt8to(64|32|16) (CvtBoolToUint8 x)) (Const(64|32|16) [0])) => x -(Neq(64|32|16) (SignExt8to(64|32|16) (CvtBoolToUint8 x)) (Const(64|32|16) [1])) => (Not x) -(Eq(64|32|16) (SignExt8to(64|32|16) (CvtBoolToUint8 x)) (Const(64|32|16) [1])) => x -(Eq(64|32|16) (SignExt8to(64|32|16) (CvtBoolToUint8 x)) (Const(64|32|16) [0])) => (Not x) + +// Canonicalize sext(int(bool)) => zext(int(bool)) +(SignExt8to(64|32|16) cvt:(CvtBoolToUint8 bool)) => (ZeroExt8to(64|32|16) cvt) diff --git a/src/cmd/compile/internal/ssa/rewritegeneric.go b/src/cmd/compile/internal/ssa/rewritegeneric.go index 688dbcbe9f..6924000ded 100644 --- a/src/cmd/compile/internal/ssa/rewritegeneric.go +++ b/src/cmd/compile/internal/ssa/rewritegeneric.go @@ -8780,47 +8780,6 @@ func rewriteValuegeneric_OpEq16(v *Value) bool { } break } - // match: (Eq16 (SignExt8to16 (CvtBoolToUint8 x)) (Const16 [1])) - // result: x - for { - for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { - if v_0.Op != OpSignExt8to16 { - continue - } - v_0_0 := v_0.Args[0] - if v_0_0.Op != OpCvtBoolToUint8 { - continue - } - x := v_0_0.Args[0] - if v_1.Op != OpConst16 || auxIntToInt16(v_1.AuxInt) != 1 { - continue - } - v.copyOf(x) - return true - } - break - } - // match: (Eq16 (SignExt8to16 (CvtBoolToUint8 x)) (Const16 [0])) - // result: (Not x) - for { - for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { - if v_0.Op != OpSignExt8to16 { - continue - } - v_0_0 := v_0.Args[0] - if v_0_0.Op != OpCvtBoolToUint8 { - continue - } - x := v_0_0.Args[0] - if v_1.Op != OpConst16 || auxIntToInt16(v_1.AuxInt) != 0 { - continue - } - v.reset(OpNot) - v.AddArg(x) - return true - } - break - } return false } func rewriteValuegeneric_OpEq32(v *Value) bool { @@ -8981,47 +8940,6 @@ func rewriteValuegeneric_OpEq32(v *Value) bool { } break } - // match: (Eq32 (SignExt8to32 (CvtBoolToUint8 x)) (Const32 [1])) - // result: x - for { - for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { - if v_0.Op != OpSignExt8to32 { - continue - } - v_0_0 := v_0.Args[0] - if v_0_0.Op != OpCvtBoolToUint8 { - continue - } - x := v_0_0.Args[0] - if v_1.Op != OpConst32 || auxIntToInt32(v_1.AuxInt) != 1 { - continue - } - v.copyOf(x) - return true - } - break - } - // match: (Eq32 (SignExt8to32 (CvtBoolToUint8 x)) (Const32 [0])) - // result: (Not x) - for { - for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { - if v_0.Op != OpSignExt8to32 { - continue - } - v_0_0 := v_0.Args[0] - if v_0_0.Op != OpCvtBoolToUint8 { - continue - } - x := v_0_0.Args[0] - if v_1.Op != OpConst32 || auxIntToInt32(v_1.AuxInt) != 0 { - continue - } - v.reset(OpNot) - v.AddArg(x) - return true - } - break - } return false } func rewriteValuegeneric_OpEq32F(v *Value) bool { @@ -9205,47 +9123,6 @@ func rewriteValuegeneric_OpEq64(v *Value) bool { } break } - // match: (Eq64 (SignExt8to64 (CvtBoolToUint8 x)) (Const64 [1])) - // result: x - for { - for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { - if v_0.Op != OpSignExt8to64 { - continue - } - v_0_0 := v_0.Args[0] - if v_0_0.Op != OpCvtBoolToUint8 { - continue - } - x := v_0_0.Args[0] - if v_1.Op != OpConst64 || auxIntToInt64(v_1.AuxInt) != 1 { - continue - } - v.copyOf(x) - return true - } - break - } - // match: (Eq64 (SignExt8to64 (CvtBoolToUint8 x)) (Const64 [0])) - // result: (Not x) - for { - for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { - if v_0.Op != OpSignExt8to64 { - continue - } - v_0_0 := v_0.Args[0] - if v_0_0.Op != OpCvtBoolToUint8 { - continue - } - x := v_0_0.Args[0] - if v_1.Op != OpConst64 || auxIntToInt64(v_1.AuxInt) != 0 { - continue - } - v.reset(OpNot) - v.AddArg(x) - return true - } - break - } return false } func rewriteValuegeneric_OpEq64F(v *Value) bool { @@ -20086,47 +19963,6 @@ func rewriteValuegeneric_OpNeq16(v *Value) bool { } break } - // match: (Neq16 (SignExt8to16 (CvtBoolToUint8 x)) (Const16 [0])) - // result: x - for { - for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { - if v_0.Op != OpSignExt8to16 { - continue - } - v_0_0 := v_0.Args[0] - if v_0_0.Op != OpCvtBoolToUint8 { - continue - } - x := v_0_0.Args[0] - if v_1.Op != OpConst16 || auxIntToInt16(v_1.AuxInt) != 0 { - continue - } - v.copyOf(x) - return true - } - break - } - // match: (Neq16 (SignExt8to16 (CvtBoolToUint8 x)) (Const16 [1])) - // result: (Not x) - for { - for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { - if v_0.Op != OpSignExt8to16 { - continue - } - v_0_0 := v_0.Args[0] - if v_0_0.Op != OpCvtBoolToUint8 { - continue - } - x := v_0_0.Args[0] - if v_1.Op != OpConst16 || auxIntToInt16(v_1.AuxInt) != 1 { - continue - } - v.reset(OpNot) - v.AddArg(x) - return true - } - break - } return false } func rewriteValuegeneric_OpNeq32(v *Value) bool { @@ -20287,47 +20123,6 @@ func rewriteValuegeneric_OpNeq32(v *Value) bool { } break } - // match: (Neq32 (SignExt8to32 (CvtBoolToUint8 x)) (Const32 [0])) - // result: x - for { - for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { - if v_0.Op != OpSignExt8to32 { - continue - } - v_0_0 := v_0.Args[0] - if v_0_0.Op != OpCvtBoolToUint8 { - continue - } - x := v_0_0.Args[0] - if v_1.Op != OpConst32 || auxIntToInt32(v_1.AuxInt) != 0 { - continue - } - v.copyOf(x) - return true - } - break - } - // match: (Neq32 (SignExt8to32 (CvtBoolToUint8 x)) (Const32 [1])) - // result: (Not x) - for { - for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { - if v_0.Op != OpSignExt8to32 { - continue - } - v_0_0 := v_0.Args[0] - if v_0_0.Op != OpCvtBoolToUint8 { - continue - } - x := v_0_0.Args[0] - if v_1.Op != OpConst32 || auxIntToInt32(v_1.AuxInt) != 1 { - continue - } - v.reset(OpNot) - v.AddArg(x) - return true - } - break - } return false } func rewriteValuegeneric_OpNeq32F(v *Value) bool { @@ -20511,47 +20306,6 @@ func rewriteValuegeneric_OpNeq64(v *Value) bool { } break } - // match: (Neq64 (SignExt8to64 (CvtBoolToUint8 x)) (Const64 [0])) - // result: x - for { - for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { - if v_0.Op != OpSignExt8to64 { - continue - } - v_0_0 := v_0.Args[0] - if v_0_0.Op != OpCvtBoolToUint8 { - continue - } - x := v_0_0.Args[0] - if v_1.Op != OpConst64 || auxIntToInt64(v_1.AuxInt) != 0 { - continue - } - v.copyOf(x) - return true - } - break - } - // match: (Neq64 (SignExt8to64 (CvtBoolToUint8 x)) (Const64 [1])) - // result: (Not x) - for { - for _i0 := 0; _i0 <= 1; _i0, v_0, v_1 = _i0+1, v_1, v_0 { - if v_0.Op != OpSignExt8to64 { - continue - } - v_0_0 := v_0.Args[0] - if v_0_0.Op != OpCvtBoolToUint8 { - continue - } - x := v_0_0.Args[0] - if v_1.Op != OpConst64 || auxIntToInt64(v_1.AuxInt) != 1 { - continue - } - v.reset(OpNot) - v.AddArg(x) - return true - } - break - } return false } func rewriteValuegeneric_OpNeq64F(v *Value) bool { @@ -31626,6 +31380,17 @@ func rewriteValuegeneric_OpSignExt8to16(v *Value) bool { v.copyOf(x) return true } + // match: (SignExt8to16 cvt:(CvtBoolToUint8 bool)) + // result: (ZeroExt8to16 cvt) + for { + cvt := v_0 + if cvt.Op != OpCvtBoolToUint8 { + break + } + v.reset(OpZeroExt8to16) + v.AddArg(cvt) + return true + } return false } func rewriteValuegeneric_OpSignExt8to32(v *Value) bool { @@ -31664,6 +31429,17 @@ func rewriteValuegeneric_OpSignExt8to32(v *Value) bool { v.copyOf(x) return true } + // match: (SignExt8to32 cvt:(CvtBoolToUint8 bool)) + // result: (ZeroExt8to32 cvt) + for { + cvt := v_0 + if cvt.Op != OpCvtBoolToUint8 { + break + } + v.reset(OpZeroExt8to32) + v.AddArg(cvt) + return true + } return false } func rewriteValuegeneric_OpSignExt8to64(v *Value) bool { @@ -31702,6 +31478,17 @@ func rewriteValuegeneric_OpSignExt8to64(v *Value) bool { v.copyOf(x) return true } + // match: (SignExt8to64 cvt:(CvtBoolToUint8 bool)) + // result: (ZeroExt8to64 cvt) + for { + cvt := v_0 + if cvt.Op != OpCvtBoolToUint8 { + break + } + v.reset(OpZeroExt8to64) + v.AddArg(cvt) + return true + } return false } func rewriteValuegeneric_OpSliceCap(v *Value) bool { |
