1 // +build amd64,!gcflags_noopt arm64,!gcflags_noopt
2 // errorcheck -0 -d=ssa/late_fuse/debug=1
4 // Copyright 2021 The Go Authors. All rights reserved.
5 // Use of this source code is governed by a BSD-style
6 // license that can be found in the LICENSE file.
14 func fEqEq(a int, f float64) bool {
15 return a == 0 && f > Cf2 || a == 0 && f < -Cf2 // ERROR "Redirect Eq64 based on Eq64$"
18 func fEqNeq(a int32, f float64) bool {
19 return a == 0 && f > Cf2 || a != 0 && f < -Cf2 // ERROR "Redirect Neq32 based on Eq32$"
22 func fEqLess(a int8, f float64) bool {
23 return a == 0 && f > Cf2 || a < 0 && f < -Cf2
26 func fEqLeq(a float64, f float64) bool {
27 return a == 0 && f > Cf2 || a <= 0 && f < -Cf2
30 func fEqLessU(a uint, f float64) bool {
31 return a == 0 && f > Cf2 || a < 0 && f < -Cf2
34 func fEqLeqU(a uint64, f float64) bool {
35 return a == 0 && f > Cf2 || a <= 0 && f < -Cf2 // ERROR "Redirect Leq64U based on Eq64$"
38 func fNeqEq(a int, f float64) bool {
39 return a != 0 && f > Cf2 || a == 0 && f < -Cf2 // ERROR "Redirect Eq64 based on Neq64$"
42 func fNeqNeq(a int32, f float64) bool {
43 return a != 0 && f > Cf2 || a != 0 && f < -Cf2 // ERROR "Redirect Neq32 based on Neq32$"
46 func fNeqLess(a float32, f float64) bool {
47 // TODO: Add support for floating point numbers in prove
48 return a != 0 && f > Cf2 || a < 0 && f < -Cf2
51 func fNeqLeq(a int16, f float64) bool {
52 return a != 0 && f > Cf2 || a <= 0 && f < -Cf2 // ERROR "Redirect Leq16 based on Neq16$"
55 func fNeqLessU(a uint, f float64) bool {
56 return a != 0 && f > Cf2 || a < 0 && f < -Cf2
59 func fNeqLeqU(a uint32, f float64) bool {
60 return a != 0 && f > Cf2 || a <= 0 && f < -Cf2 // ERROR "Redirect Leq32U based on Neq32$"
63 func fLessEq(a int, f float64) bool {
64 return a < 0 && f > Cf2 || a == 0 && f < -Cf2
67 func fLessNeq(a int32, f float64) bool {
68 return a < 0 && f > Cf2 || a != 0 && f < -Cf2
71 func fLessLess(a float32, f float64) bool {
72 return a < 0 && f > Cf2 || a < 0 && f < -Cf2 // ERROR "Redirect Less32F based on Less32F$"
75 func fLessLeq(a float64, f float64) bool {
76 return a < 0 && f > Cf2 || a <= 0 && f < -Cf2
79 func fLeqEq(a float64, f float64) bool {
80 return a <= 0 && f > Cf2 || a == 0 && f < -Cf2
83 func fLeqNeq(a int16, f float64) bool {
84 return a <= 0 && f > Cf2 || a != 0 && f < -Cf2 // ERROR "Redirect Neq16 based on Leq16$"
87 func fLeqLess(a float32, f float64) bool {
88 return a <= 0 && f > Cf2 || a < 0 && f < -Cf2
91 func fLeqLeq(a int8, f float64) bool {
92 return a <= 0 && f > Cf2 || a <= 0 && f < -Cf2 // ERROR "Redirect Leq8 based on Leq8$"
95 func fLessUEq(a uint8, f float64) bool {
96 return a < 0 && f > Cf2 || a == 0 && f < -Cf2
99 func fLessUNeq(a uint16, f float64) bool {
100 return a < 0 && f > Cf2 || a != 0 && f < -Cf2
103 func fLessULessU(a uint32, f float64) bool {
104 return a < 0 && f > Cf2 || a < 0 && f < -Cf2
107 func fLessULeqU(a uint64, f float64) bool {
108 return a < 0 && f > Cf2 || a <= 0 && f < -Cf2
111 func fLeqUEq(a uint8, f float64) bool {
112 return a <= 0 && f > Cf2 || a == 0 && f < -Cf2 // ERROR "Redirect Eq8 based on Leq8U$"
115 func fLeqUNeq(a uint16, f float64) bool {
116 return a <= 0 && f > Cf2 || a != 0 && f < -Cf2 // ERROR "Redirect Neq16 based on Leq16U$"
119 func fLeqLessU(a uint32, f float64) bool {
120 return a <= 0 && f > Cf2 || a < 0 && f < -Cf2
123 func fLeqLeqU(a uint64, f float64) bool {
124 return a <= 0 && f > Cf2 || a <= 0 && f < -Cf2 // ERROR "Redirect Leq64U based on Leq64U$"
127 // Arg tests are disabled because the op name is different on amd64 and arm64.
129 func fEqPtrEqPtr(a, b *int, f float64) bool {
130 return a == b && f > Cf2 || a == b && f < -Cf2 // ERROR "Redirect EqPtr based on EqPtr$"
133 func fEqPtrNeqPtr(a, b *int, f float64) bool {
134 return a == b && f > Cf2 || a != b && f < -Cf2 // ERROR "Redirect NeqPtr based on EqPtr$"
137 func fNeqPtrEqPtr(a, b *int, f float64) bool {
138 return a != b && f > Cf2 || a == b && f < -Cf2 // ERROR "Redirect EqPtr based on NeqPtr$"
141 func fNeqPtrNeqPtr(a, b *int, f float64) bool {
142 return a != b && f > Cf2 || a != b && f < -Cf2 // ERROR "Redirect NeqPtr based on NeqPtr$"
145 func fEqInterEqInter(a interface{}, f float64) bool {
146 return a == nil && f > Cf2 || a == nil && f < -Cf2 // ERROR "Redirect IsNonNil based on IsNonNil$"
149 func fEqInterNeqInter(a interface{}, f float64) bool {
150 return a == nil && f > Cf2 || a != nil && f < -Cf2
153 func fNeqInterEqInter(a interface{}, f float64) bool {
154 return a != nil && f > Cf2 || a == nil && f < -Cf2
157 func fNeqInterNeqInter(a interface{}, f float64) bool {
158 return a != nil && f > Cf2 || a != nil && f < -Cf2 // ERROR "Redirect IsNonNil based on IsNonNil$"
161 func fEqSliceEqSlice(a []int, f float64) bool {
162 return a == nil && f > Cf2 || a == nil && f < -Cf2 // ERROR "Redirect IsNonNil based on IsNonNil$"
165 func fEqSliceNeqSlice(a []int, f float64) bool {
166 return a == nil && f > Cf2 || a != nil && f < -Cf2
169 func fNeqSliceEqSlice(a []int, f float64) bool {
170 return a != nil && f > Cf2 || a == nil && f < -Cf2
173 func fNeqSliceNeqSlice(a []int, f float64) bool {
174 return a != nil && f > Cf2 || a != nil && f < -Cf2 // ERROR "Redirect IsNonNil based on IsNonNil$"
177 func fPhi(a, b string) string {
178 aslash := strings.HasSuffix(a, "/") // ERROR "Redirect Phi based on Phi$"
179 bslash := strings.HasPrefix(b, "/")
181 case aslash && bslash:
183 case !aslash && !bslash: