aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJorropo <jorropo.pgm@gmail.com>2026-03-29 07:10:47 +0200
committerGopher Robot <gobot@golang.org>2026-04-06 10:05:00 -0700
commit24596d3243ba0a9d855d1ede30245ba00d7f1962 (patch)
tree5b98664f120ee8d2838c5a20401dca2b5a1f2729
parent68ee544e8704b657e0adab5d3c2af38212f3d6c4 (diff)
downloadgo-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>
-rw-r--r--src/cmd/compile/internal/ssa/_gen/generic.rules7
-rw-r--r--src/cmd/compile/internal/ssa/rewritegeneric.go279
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 {