1// compile
2
3// Copyright 2020 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
7// Make sure floating point operations that generate flags
8// are scheduled correctly on s390x.
9
10package p
11
12func f1(x, y float64, z int) float64 {
13	a := x + y  // generate flags
14	if z == 0 { // create basic block that does not clobber flags
15		return a
16	}
17	if a > 0 { // use flags in different basic block
18		return y
19	}
20	return x
21}
22
23func f2(x, y float64, z int) float64 {
24	a := x - y  // generate flags
25	if z == 0 { // create basic block that does not clobber flags
26		return a
27	}
28	if a > 0 { // use flags in different basic block
29		return y
30	}
31	return x
32}
33
34func f3(x, y float32, z int) float32 {
35	a := x + y  // generate flags
36	if z == 0 { // create basic block that does not clobber flags
37		return a
38	}
39	if a > 0 { // use flags in different basic block
40		return y
41	}
42	return x
43}
44
45func f4(x, y float32, z int) float32 {
46	a := x - y  // generate flags
47	if z == 0 { // create basic block that does not clobber flags
48		return a
49	}
50	if a > 0 { // use flags in different basic block
51		return y
52	}
53	return x
54}
55