[clang] 0691bcb - [clang][Interp][NFC] Add tests for __fp16
Timm Bäder via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 23 02:09:02 PDT 2023
Author: Timm Bäder
Date: 2023-03-23T10:08:34+01:00
New Revision: 0691bcb18024a28e82e8dd9a08ab0820b40c9a37
URL: https://github.com/llvm/llvm-project/commit/0691bcb18024a28e82e8dd9a08ab0820b40c9a37
DIFF: https://github.com/llvm/llvm-project/commit/0691bcb18024a28e82e8dd9a08ab0820b40c9a37.diff
LOG: [clang][Interp][NFC] Add tests for __fp16
Differential Revision: https://reviews.llvm.org/D146436
Added:
Modified:
clang/test/AST/Interp/floats.cpp
Removed:
################################################################################
diff --git a/clang/test/AST/Interp/floats.cpp b/clang/test/AST/Interp/floats.cpp
index 7b9328c4d1182..b3c4dd4c19a84 100644
--- a/clang/test/AST/Interp/floats.cpp
+++ b/clang/test/AST/Interp/floats.cpp
@@ -78,3 +78,94 @@ namespace compound {
}
static_assert(f2() == __FLT_MAX__, "");
}
+
+
+namespace FP16 {
+ constexpr int i = 2;
+ constexpr __fp16 f = 1.0f;
+ static_assert(f == 1.0f, "");
+
+ constexpr __fp16 f2 = 1u * f;
+ static_assert(f2 == 1.0f, "");
+
+ constexpr __fp16 f3 = 1.5;
+ constexpr int i3 = f3;
+ static_assert(i3 == 1, "");
+
+ constexpr bool b3 = f3;
+ static_assert(b3, "");
+
+
+ static_assert(1.0f16 + 3u == 4, "");
+ static_assert(4.0f16 / 1.0f16 == 4, "");
+ static_assert(10.0f16 * false == 0, "");
+
+ constexpr __fp16 __fp16s[] = {1.0f16, 2.0f16, 3.0f16, 4.0f16};
+
+ constexpr __fp16 m = 5.0f16 / 0.0f16; // ref-error {{must be initialized by a constant expression}} \
+ // ref-note {{division by zero}} \
+ // expected-error {{must be initialized by a constant expression}} \
+ // expected-note {{division by zero}}
+
+ static_assert(~2.0f16 == 3, ""); // ref-error {{invalid argument type '_Float16' to unary expression}} \
+ // expected-error {{invalid argument type '_Float16' to unary expression}}
+
+ /// Initialized by a double.
+ constexpr __fp16 df = 0.0;
+ /// The other way around.
+ constexpr double fd = 0.0f16;
+
+ static_assert(0.0f == -0.0f, "");
+
+ const int k = 3 * (1.0f16 / 3.0f16);
+ static_assert(k == 1, "");
+
+ constexpr bool b = 1.0f16;
+ static_assert(b, "");
+
+ constexpr double db = true;
+ static_assert(db == 1.0f16, "");
+
+ constexpr __fp16 fa[] = {1.0f, 2.0, 1, false};
+ constexpr double da[] = {1.0f, 2.0, 1, false};
+
+ constexpr __fp16 fm = __FLT16_MAX__;
+ constexpr int someInt = fm;
+
+ constexpr float SomeFloat = __FLT_MAX__;
+ constexpr __fp16 halfFloat = SomeFloat;
+
+ constexpr float fp16ptr() {
+ __fp16 f1 = 1.0f16;
+ __fp16 *f2 = &f1;
+
+ *f2 = 3.0;
+ return f1;
+ }
+ static_assert(fp16ptr() == 3.0, "");
+
+ namespace compound {
+ constexpr float f1() {
+ __fp16 f = 0;
+ f += 3.0;
+ f -= 3.0f;
+
+ f += 1;
+ f /= 1;
+ f /= 1.0;
+ f *= f;
+
+ f *= 2.0;
+ return f;
+ }
+ static_assert(f1() == 2, "");
+
+ constexpr float f2() {
+ __fp16 f = __FLT16_MAX__;
+ f += 1.0;
+ return f;
+ }
+ static_assert(f2() == __FLT16_MAX__, "");
+ }
+
+}
More information about the cfe-commits
mailing list