Skip to content

Commit f1b6427

Browse files
authored
[Clang][test] Add bytecode interpreter tests for floating comparison functions (#104703)
See also: #94118, 7180170
1 parent ba7dadf commit f1b6427

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

clang/test/AST/ByteCode/builtin-functions.cpp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,51 @@ namespace isfpclass {
193193
char isfpclass_snan_3 [!__builtin_isfpclass(__builtin_nans(""), 0x01F8) ? 1 : -1]; // fcFinite
194194
}
195195

196+
namespace signbit {
197+
static_assert(
198+
!__builtin_signbit(1.0) && __builtin_signbit(-1.0) && !__builtin_signbit(0.0) && __builtin_signbit(-0.0) &&
199+
!__builtin_signbitf(1.0f) && __builtin_signbitf(-1.0f) && !__builtin_signbitf(0.0f) && __builtin_signbitf(-0.0f) &&
200+
!__builtin_signbitl(1.0L) && __builtin_signbitf(-1.0L) && !__builtin_signbitf(0.0L) && __builtin_signbitf(-0.0L) &&
201+
!__builtin_signbit(1.0f) && __builtin_signbit(-1.0f) && !__builtin_signbit(0.0f) && __builtin_signbit(-0.0f) &&
202+
!__builtin_signbit(1.0L) && __builtin_signbit(-1.0L) && !__builtin_signbit(0.0L) && __builtin_signbit(-0.0L) &&
203+
true, ""
204+
);
205+
}
206+
207+
namespace floating_comparison {
208+
#define LESS(X, Y) \
209+
!__builtin_isgreater(X, Y) && __builtin_isgreater(Y, X) && \
210+
!__builtin_isgreaterequal(X, Y) && __builtin_isgreaterequal(Y, X) && \
211+
__builtin_isless(X, Y) && !__builtin_isless(Y, X) && \
212+
__builtin_islessequal(X, Y) && !__builtin_islessequal(Y, X) && \
213+
__builtin_islessgreater(X, Y) && __builtin_islessgreater(Y, X) && \
214+
!__builtin_isunordered(X, Y) && !__builtin_isunordered(Y, X)
215+
#define EQUAL(X, Y) \
216+
!__builtin_isgreater(X, Y) && !__builtin_isgreater(Y, X) && \
217+
__builtin_isgreaterequal(X, Y) && __builtin_isgreaterequal(Y, X) && \
218+
!__builtin_isless(X, Y) && !__builtin_isless(Y, X) && \
219+
__builtin_islessequal(X, Y) && __builtin_islessequal(Y, X) && \
220+
!__builtin_islessgreater(X, Y) && !__builtin_islessgreater(Y, X) && \
221+
!__builtin_isunordered(X, Y) && !__builtin_isunordered(Y, X)
222+
#define UNORDERED(X, Y) \
223+
!__builtin_isgreater(X, Y) && !__builtin_isgreater(Y, X) && \
224+
!__builtin_isgreaterequal(X, Y) && !__builtin_isgreaterequal(Y, X) && \
225+
!__builtin_isless(X, Y) && !__builtin_isless(Y, X) && \
226+
!__builtin_islessequal(X, Y) && !__builtin_islessequal(Y, X) && \
227+
!__builtin_islessgreater(X, Y) && !__builtin_islessgreater(Y, X) && \
228+
__builtin_isunordered(X, Y) && __builtin_isunordered(Y, X)
229+
230+
static_assert(
231+
LESS(0.0, 1.0) && EQUAL(1.0, 1.0) && EQUAL(0.0, -0.0) &&
232+
UNORDERED(__builtin_nan(""), 1.0) && UNORDERED(__builtin_nan(""), __builtin_inf()) && LESS(0.0, __builtin_inf()) &&
233+
LESS(0.0f, 1.0f) && EQUAL(1.0f, 1.0f) && EQUAL(0.0f, -0.0f) &&
234+
UNORDERED(__builtin_nanf(""), 1.0f) && UNORDERED(__builtin_nanf(""), __builtin_inff()) && LESS(0.0f, __builtin_inff()) &&
235+
LESS(0.0L, 1.0L) && EQUAL(1.0L, 1.0L) && EQUAL(0.0L, -0.0L) &&
236+
UNORDERED(__builtin_nanl(""), 1.0L) && UNORDERED(__builtin_nanl(""), __builtin_infl()) && LESS(0.0L, __builtin_infl()) &&
237+
true, ""
238+
);
239+
}
240+
196241
namespace fpclassify {
197242
char classify_nan [__builtin_fpclassify(+1, -1, -1, -1, -1, __builtin_nan(""))];
198243
char classify_snan [__builtin_fpclassify(+1, -1, -1, -1, -1, __builtin_nans(""))];

0 commit comments

Comments
 (0)