aboutsummaryrefslogtreecommitdiff
path: root/test/phiopt.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/phiopt.go')
-rw-r--r--test/phiopt.go73
1 files changed, 69 insertions, 4 deletions
diff --git a/test/phiopt.go b/test/phiopt.go
index 9b9b701124..21dd13155c 100644
--- a/test/phiopt.go
+++ b/test/phiopt.go
@@ -1,8 +1,13 @@
// +build amd64
// errorcheck -0 -d=ssa/phiopt/debug=3
+// Copyright 2016 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 main
+//go:noinline
func f0(a bool) bool {
x := false
if a {
@@ -10,9 +15,10 @@ func f0(a bool) bool {
} else {
x = false
}
- return x // ERROR "converted OpPhi to OpCopy$"
+ return x // ERROR "converted OpPhi to Copy$"
}
+//go:noinline
func f1(a bool) bool {
x := false
if a {
@@ -20,23 +26,82 @@ func f1(a bool) bool {
} else {
x = true
}
- return x // ERROR "converted OpPhi to OpNot$"
+ return x // ERROR "converted OpPhi to Not$"
}
+//go:noinline
func f2(a, b int) bool {
x := true
if a == b {
x = false
}
- return x // ERROR "converted OpPhi to OpNot$"
+ return x // ERROR "converted OpPhi to Not$"
}
+//go:noinline
func f3(a, b int) bool {
x := false
if a == b {
x = true
}
- return x // ERROR "converted OpPhi to OpCopy$"
+ return x // ERROR "converted OpPhi to Copy$"
+}
+
+//go:noinline
+func f4(a, b bool) bool {
+ return a || b // ERROR "converted OpPhi to OrB$"
+}
+
+//go:noinline
+func f5or(a int, b bool) bool {
+ var x bool
+ if a == 0 {
+ x = true
+ } else {
+ x = b
+ }
+ return x // ERROR "converted OpPhi to OrB$"
+}
+
+//go:noinline
+func f5and(a int, b bool) bool {
+ var x bool
+ if a == 0 {
+ x = b
+ } else {
+ x = false
+ }
+ return x // ERROR "converted OpPhi to AndB$"
+}
+
+//go:noinline
+func f6or(a int, b bool) bool {
+ x := b
+ if a == 0 {
+ // f6or has side effects so the OpPhi should not be converted.
+ x = f6or(a, b)
+ }
+ return x
+}
+
+//go:noinline
+func f6and(a int, b bool) bool {
+ x := b
+ if a == 0 {
+ // f6and has side effects so the OpPhi should not be converted.
+ x = f6and(a, b)
+ }
+ return x
+}
+
+//go:noinline
+func f7or(a bool, b bool) bool {
+ return a || b // ERROR "converted OpPhi to OrB$"
+}
+
+//go:noinline
+func f7and(a bool, b bool) bool {
+ return a && b // ERROR "converted OpPhi to AndB$"
}
func main() {