aboutsummaryrefslogtreecommitdiff
path: root/test/codegen
diff options
context:
space:
mode:
authorJorropo <jorropo.pgm@gmail.com>2025-10-27 13:05:41 +0100
committerJorropo <jorropo.pgm@gmail.com>2025-10-27 23:24:54 -0700
commit73d7635fae502f63a3774e1265f739bff8778113 (patch)
treeb2344011061d52a6ba5313ec4a2ae43f7ce2caa8 /test/codegen
parent1662d552474f9811589b9abfc02d923b3b94d787 (diff)
downloadgo-73d7635fae502f63a3774e1265f739bff8778113.tar.xz
cmd/compile: add generic rules to remove bool → int → bool roundtrips
Change-Id: I8b0a3b64c89fe167d304f901a5d38470f35400ab Reviewed-on: https://go-review.googlesource.com/c/go/+/715200 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Keith Randall <khr@google.com> Auto-Submit: Jorropo <jorropo.pgm@gmail.com> Reviewed-by: Michael Knyszek <mknyszek@google.com> Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'test/codegen')
-rw-r--r--test/codegen/condmove.go20
1 files changed, 20 insertions, 0 deletions
diff --git a/test/codegen/condmove.go b/test/codegen/condmove.go
index 97be0ced75..6d3a46b03c 100644
--- a/test/codegen/condmove.go
+++ b/test/codegen/condmove.go
@@ -507,3 +507,23 @@ func cmovmathhalveu(a uint, b bool) uint {
// wasm:"I64ShrU", -"Select"
return a
}
+
+func branchlessBoolToUint8(b bool) (r uint8) {
+ if b {
+ r = 1
+ }
+ return
+}
+
+func cmovFromMulFromFlags64(x uint64, b bool) uint64 {
+ // amd64:-"MOVB.ZX"
+ r := uint64(branchlessBoolToUint8(b))
+ // amd64:"CMOV",-"MOVB.ZX",-"MUL"
+ return x * r
+}
+func cmovFromMulFromFlags64sext(x int64, b bool) int64 {
+ // amd64:-"MOVB.ZX"
+ r := int64(int8(branchlessBoolToUint8(b)))
+ // amd64:"CMOV",-"MOVB.ZX",-"MUL"
+ return x * r
+}