aboutsummaryrefslogtreecommitdiff
path: root/test/codegen
diff options
context:
space:
mode:
Diffstat (limited to 'test/codegen')
-rw-r--r--test/codegen/append.go190
-rw-r--r--test/codegen/arithmetic.go21
-rw-r--r--test/codegen/bool.go15
-rw-r--r--test/codegen/fuse.go120
-rw-r--r--test/codegen/strings.go2
5 files changed, 344 insertions, 4 deletions
diff --git a/test/codegen/append.go b/test/codegen/append.go
new file mode 100644
index 0000000000..0e58a48c45
--- /dev/null
+++ b/test/codegen/append.go
@@ -0,0 +1,190 @@
+// asmcheck
+
+// Copyright 2025 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package codegen
+
+func Append1(n int) []int {
+ var r []int
+ for i := range n {
+ // amd64:`.*growslice`
+ r = append(r, i)
+ }
+ // amd64:`.*moveSliceNoCapNoScan`
+ return r
+}
+
+func Append2(n int) (r []int) {
+ for i := range n {
+ // amd64:`.*growslice`
+ r = append(r, i)
+ }
+ // amd64:`.*moveSliceNoCapNoScan`
+ return
+}
+
+func Append3(n int) (r []int) {
+ for i := range n {
+ // amd64:`.*growslice`
+ r = append(r, i)
+ }
+ // amd64:`.*moveSliceNoCapNoScan`
+ return r
+}
+
+func Append4(n int) []int {
+ var r []int
+ for i := range n {
+ // amd64:`.*growsliceBuf`
+ r = append(r, i)
+ }
+ println(cap(r))
+ // amd64:`.*moveSliceNoScan`
+ return r
+}
+
+func Append5(n int) []int {
+ var r []int
+ for i := range n {
+ // amd64:`.*growsliceBuf`
+ r = append(r, i)
+ }
+ useSlice(r)
+ // amd64:`.*moveSliceNoScan`
+ return r
+}
+
+func Append6(n int) []*int {
+ var r []*int
+ for i := range n {
+ // amd64:`.*growslice`
+ r = append(r, new(i))
+ }
+ // amd64:`.*moveSliceNoCap`
+ return r
+}
+
+func Append7(n int) []*int {
+ var r []*int
+ for i := range n {
+ // amd64:`.*growsliceBuf`
+ r = append(r, new(i))
+ }
+ println(cap(r))
+ // amd64:`.*moveSlice`
+ return r
+}
+
+func Append8(n int, p *[]int) {
+ var r []int
+ for i := range n {
+ // amd64:`.*growslice`
+ r = append(r, i)
+ }
+ // amd64:`.*moveSliceNoCapNoScan`
+ *p = r
+}
+
+func Append9(n int) []int {
+ var r []int
+ for i := range n {
+ // amd64:`.*growslice`
+ r = append(r, i)
+ }
+ println(len(r))
+ // amd64:`.*moveSliceNoCapNoScan`
+ return r
+}
+
+func Append10(n int) []int {
+ var r []int
+ for i := range n {
+ // amd64:`.*growslice`
+ r = append(r, i)
+ }
+ println(r[3])
+ // amd64:`.*moveSliceNoCapNoScan`
+ return r
+}
+
+func Append11(n int) []int {
+ var r []int
+ for i := range n {
+ // amd64:`.*growsliceBuf`
+ r = append(r, i)
+ }
+ r = r[3:5]
+ // amd64:`.*moveSliceNoScan`
+ return r
+}
+
+func Append12(n int) []int {
+ var r []int
+ r = nil
+ for i := range n {
+ // amd64:`.*growslice`
+ r = append(r, i)
+ }
+ // amd64:`.*moveSliceNoCapNoScan`
+ return r
+}
+
+func Append13(n int) []int {
+ var r []int
+ r, r = nil, nil
+ for i := range n {
+ // amd64:`.*growslice`
+ r = append(r, i)
+ }
+ // amd64:`.*moveSliceNoCapNoScan`
+ return r
+}
+
+func Append14(n int) []int {
+ var r []int
+ r = []int{3, 4, 5}
+ for i := range n {
+ // amd64:`.*growsliceBuf`
+ r = append(r, i)
+ }
+ // amd64:`.*moveSliceNoScan`
+ return r
+}
+
+func Append15(n int) []int {
+ r := []int{3, 4, 5}
+ for i := range n {
+ // amd64:`.*growsliceBuf`
+ r = append(r, i)
+ }
+ // amd64:`.*moveSliceNoScan`
+ return r
+}
+
+func Append16(r []int, n int) []int {
+ for i := range n {
+ // amd64:`.*growslice`
+ r = append(r, i)
+ }
+ // amd64:`.*moveSliceNoCapNoScan`
+ return r
+}
+
+func Append17(n int) []int {
+ var r []int
+ for i := range n {
+ // amd64:`.*growslice`
+ r = append(r, i)
+ }
+ for i, x := range r {
+ println(i, x)
+ }
+ // amd64:`.*moveSliceNoCapNoScan`
+ return r
+}
+
+//go:noinline
+func useSlice(s []int) {
+}
diff --git a/test/codegen/arithmetic.go b/test/codegen/arithmetic.go
index 42d5d2ef65..9443d812dc 100644
--- a/test/codegen/arithmetic.go
+++ b/test/codegen/arithmetic.go
@@ -318,13 +318,28 @@ func MergeMuls5(a, n int) int {
// Multiplications folded negation
func FoldNegMul(a int) int {
- // loong64:"SUBVU" "ALSLV [$]2" "ALSLV [$]1"
- return (-a) * 11
+ // amd64:"IMUL3Q [$]-11" -"NEGQ"
+ // arm64:"MOVD [$]-11" "MUL" -"NEG"
+ // loong64:"ALSLV [$]2" "SUBVU" "ALSLV [$]4"
+ // riscv64:"MOV [$]-11" "MUL" -"NEG"
+ return -a * 11
}
func Fold2NegMul(a, b int) int {
+ // amd64:"IMULQ" -"NEGQ"
+ // arm64:"MUL" -"NEG"
// loong64:"MULV" -"SUBVU R[0-9], R0,"
- return (-a) * (-b)
+ // riscv64:"MUL" -"NEG"
+ return -a * -b
+}
+
+func Mul32(a, b int32) int64 {
+ // arm64:"SMULL" -"MOVW"
+ return int64(a) * int64(b)
+}
+func Mul32U(a, b uint32) uint64 {
+ // arm64:"UMULL" -"MOVWU"
+ return uint64(a) * uint64(b)
}
// -------------- //
diff --git a/test/codegen/bool.go b/test/codegen/bool.go
index 37f85a45b7..8fe7a94687 100644
--- a/test/codegen/bool.go
+++ b/test/codegen/bool.go
@@ -313,3 +313,18 @@ func constantWrite(b bool, p *bool) {
*p = b
}
}
+
+func boolCompare1(p, q *bool) int {
+ // arm64:-"EOR [$]1"
+ if *p == *q {
+ return 5
+ }
+ return 7
+}
+func boolCompare2(p, q *bool) int {
+ // arm64:-"EOR [$]1"
+ if *p != *q {
+ return 5
+ }
+ return 7
+}
diff --git a/test/codegen/fuse.go b/test/codegen/fuse.go
index 4fbb03bef8..e5a28549dc 100644
--- a/test/codegen/fuse.go
+++ b/test/codegen/fuse.go
@@ -198,6 +198,126 @@ func ui4d(c <-chan uint8) {
}
}
+// ------------------------------------ //
+// single bit difference (conjunction) //
+// ------------------------------------ //
+
+func sisbc64(c <-chan int64) {
+ // amd64: "ORQ [$]2,"
+ // riscv64: "ORI [$]2,"
+ for x := <-c; x != 4 && x != 6; x = <-c {
+ }
+}
+
+func sisbc32(c <-chan int32) {
+ // amd64: "ORL [$]4,"
+ // riscv64: "ORI [$]4,"
+ for x := <-c; x != -1 && x != -5; x = <-c {
+ }
+}
+
+func sisbc16(c <-chan int16) {
+ // amd64: "ORL [$]32,"
+ // riscv64: "ORI [$]32,"
+ for x := <-c; x != 16 && x != 48; x = <-c {
+ }
+}
+
+func sisbc8(c <-chan int8) {
+ // amd64: "ORL [$]16,"
+ // riscv64: "ORI [$]16,"
+ for x := <-c; x != -15 && x != -31; x = <-c {
+ }
+}
+
+func uisbc64(c <-chan uint64) {
+ // amd64: "ORQ [$]4,"
+ // riscv64: "ORI [$]4,"
+ for x := <-c; x != 1 && x != 5; x = <-c {
+ }
+}
+
+func uisbc32(c <-chan uint32) {
+ // amd64: "ORL [$]4,"
+ // riscv64: "ORI [$]4,"
+ for x := <-c; x != 2 && x != 6; x = <-c {
+ }
+}
+
+func uisbc16(c <-chan uint16) {
+ // amd64: "ORL [$]32,"
+ // riscv64: "ORI [$]32,"
+ for x := <-c; x != 16 && x != 48; x = <-c {
+ }
+}
+
+func uisbc8(c <-chan uint8) {
+ // amd64: "ORL [$]64,"
+ // riscv64: "ORI [$]64,"
+ for x := <-c; x != 64 && x != 0; x = <-c {
+ }
+}
+
+// ------------------------------------ //
+// single bit difference (disjunction) //
+// ------------------------------------ //
+
+func sisbd64(c <-chan int64) {
+ // amd64: "ORQ [$]2,"
+ // riscv64: "ORI [$]2,"
+ for x := <-c; x == 4 || x == 6; x = <-c {
+ }
+}
+
+func sisbd32(c <-chan int32) {
+ // amd64: "ORL [$]4,"
+ // riscv64: "ORI [$]4,"
+ for x := <-c; x == -1 || x == -5; x = <-c {
+ }
+}
+
+func sisbd16(c <-chan int16) {
+ // amd64: "ORL [$]32,"
+ // riscv64: "ORI [$]32,"
+ for x := <-c; x == 16 || x == 48; x = <-c {
+ }
+}
+
+func sisbd8(c <-chan int8) {
+ // amd64: "ORL [$]16,"
+ // riscv64: "ORI [$]16,"
+ for x := <-c; x == -15 || x == -31; x = <-c {
+ }
+}
+
+func uisbd64(c <-chan uint64) {
+ // amd64: "ORQ [$]4,"
+ // riscv64: "ORI [$]4,"
+ for x := <-c; x == 1 || x == 5; x = <-c {
+ }
+}
+
+func uisbd32(c <-chan uint32) {
+ // amd64: "ORL [$]4,"
+ // riscv64: "ORI [$]4,"
+ for x := <-c; x == 2 || x == 6; x = <-c {
+ }
+}
+
+func uisbd16(c <-chan uint16) {
+ // amd64: "ORL [$]32,"
+ // riscv64: "ORI [$]32,"
+ for x := <-c; x == 16 || x == 48; x = <-c {
+ }
+}
+
+func uisbd8(c <-chan uint8) {
+ // amd64: "ORL [$]64,"
+ // riscv64: "ORI [$]64,"
+ for x := <-c; x == 64 || x == 0; x = <-c {
+ }
+}
+
// -------------------------------------//
// merge NaN checks //
// ------------------------------------ //
diff --git a/test/codegen/strings.go b/test/codegen/strings.go
index 9d85604395..0c5ee2f8f5 100644
--- a/test/codegen/strings.go
+++ b/test/codegen/strings.go
@@ -23,7 +23,7 @@ func CountBytes(s []byte) int {
func ToByteSlice() []byte { // Issue #24698
// amd64:`LEAQ type:\[3\]uint8`
- // amd64:`CALL runtime\.mallocTiny3`
+ // amd64:`CALL runtime\.(newobject|mallocTiny3)`
// amd64:-`.*runtime.stringtoslicebyte`
return []byte("foo")
}