|  | // +build amd64 s390x | 
|  | // 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 { | 
|  | x = true | 
|  | } else { | 
|  | x = false | 
|  | } | 
|  | return x // ERROR "converted OpPhi to Copy$" | 
|  | } | 
|  |  | 
|  | //go:noinline | 
|  | func f1(a bool) bool { | 
|  | x := false | 
|  | if a { | 
|  | x = false | 
|  | } else { | 
|  | x = true | 
|  | } | 
|  | 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 Not$" | 
|  | } | 
|  |  | 
|  | //go:noinline | 
|  | func f3(a, b int) bool { | 
|  | x := false | 
|  | if a == b { | 
|  | x = true | 
|  | } | 
|  | 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() { | 
|  | } |