diff options
Diffstat (limited to 'test/phiopt.go')
| -rw-r--r-- | test/phiopt.go | 73 |
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() { |
