...
Run Format

Source file test/phiopt.go

Documentation: test

  // +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() {
  }
  

View as plain text