[PATCH] D146436: [clang][Interp][NFC] Add tests for __fp16

Timm Bäder via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Mar 20 13:43:09 PDT 2023


tbaeder updated this revision to Diff 506701.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D146436/new/

https://reviews.llvm.org/D146436

Files:
  clang/test/AST/Interp/floats.cpp


Index: clang/test/AST/Interp/floats.cpp
===================================================================
--- clang/test/AST/Interp/floats.cpp
+++ clang/test/AST/Interp/floats.cpp
@@ -78,3 +78,94 @@
   }
   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__, "");
+  }
+
+}


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D146436.506701.patch
Type: text/x-patch
Size: 2550 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230320/f016d9df/attachment.bin>


More information about the cfe-commits mailing list