[llvm-branch-commits] [libc] [libc][wctype] Add perfect hash map for conversion functions (PR #187670)

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Fri Mar 20 03:15:40 PDT 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-libc

Author: Muhammad Bassiouni (bassiounix)

<details>
<summary>Changes</summary>

- Upstream PTRHash and PerfectHashTable
- Add monostate
- Add lowber_bound and distance
- Modify the generation Python script to interop with the C++ code directly

Depends on #<!-- -->184948

---

Patch is 171.51 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/187670.diff


14 Files Affected:

- (modified) libc/src/__support/CPP/CMakeLists.txt (+8) 
- (modified) libc/src/__support/CPP/algorithm.h (+20) 
- (modified) libc/src/__support/CPP/iterator.h (+36-1) 
- (added) libc/src/__support/CPP/monostate.h (+31) 
- (modified) libc/src/__support/wctype/CMakeLists.txt (+36) 
- (added) libc/src/__support/wctype/lower_to_upper.h (+568) 
- (removed) libc/src/__support/wctype/lower_to_upper.inc (-400) 
- (added) libc/src/__support/wctype/perfect_hash_map.h (+876) 
- (added) libc/src/__support/wctype/upper_to_lower.h (+553) 
- (removed) libc/src/__support/wctype/upper_to_lower.inc (-390) 
- (modified) libc/test/src/__support/wctype/CMakeLists.txt (+12-2) 
- (added) libc/test/src/__support/wctype/wctype_perfect_hash_test.cpp (+35) 
- (modified) libc/utils/wctype_utils/conversion/hex_writer.py (+71-1) 
- (modified) libc/utils/wctype_utils/gen.py (+10-3) 


``````````diff
diff --git a/libc/src/__support/CPP/CMakeLists.txt b/libc/src/__support/CPP/CMakeLists.txt
index bdfbc6151c773..678fb7f50e9cf 100644
--- a/libc/src/__support/CPP/CMakeLists.txt
+++ b/libc/src/__support/CPP/CMakeLists.txt
@@ -56,6 +56,14 @@ add_header_library(
     libc.src.__support.macros.properties.types
 )
 
+add_header_library(
+  monostate
+  HDRS
+    monostate.h
+  DEPENDS
+    libc.src.__support.common
+)
+
 add_header_library(
   mutex
   HDRS
diff --git a/libc/src/__support/CPP/algorithm.h b/libc/src/__support/CPP/algorithm.h
index de0c47369d945..3e2ac8b7b95ce 100644
--- a/libc/src/__support/CPP/algorithm.h
+++ b/libc/src/__support/CPP/algorithm.h
@@ -49,6 +49,26 @@ LIBC_INLINE constexpr bool all_of(InputIt first, InputIt last, UnaryPred p) {
   return find_if_not(first, last, p) == last;
 }
 
+template <typename It, typename T, typename Comp>
+LIBC_INLINE constexpr It lower_bound(It first, It last, const T &value,
+                                     Comp comp) {
+  auto count = last - first;
+
+  while (count > 0) {
+    It it = first;
+    auto step = count / 2;
+    it += step;
+
+    if (comp(*it, value)) {
+      first = ++it;
+      count -= step + 1;
+    } else {
+      count = step;
+    }
+  }
+  return first;
+}
+
 } // namespace cpp
 } // namespace LIBC_NAMESPACE_DECL
 
diff --git a/libc/src/__support/CPP/iterator.h b/libc/src/__support/CPP/iterator.h
index 168a269731822..cfefbbd3b9101 100644
--- a/libc/src/__support/CPP/iterator.h
+++ b/libc/src/__support/CPP/iterator.h
@@ -9,6 +9,7 @@
 #ifndef LLVM_LIBC_SRC___SUPPORT_CPP_ITERATOR_H
 #define LLVM_LIBC_SRC___SUPPORT_CPP_ITERATOR_H
 
+#include "hdr/types/size_t.h"
 #include "src/__support/CPP/type_traits/enable_if.h"
 #include "src/__support/CPP/type_traits/is_convertible.h"
 #include "src/__support/CPP/type_traits/is_same.h"
@@ -18,12 +19,22 @@
 namespace LIBC_NAMESPACE_DECL {
 namespace cpp {
 
-template <typename T> struct iterator_traits;
+struct input_iterator_tag {};
+struct random_access_iterator_tag : input_iterator_tag {};
+
+template <typename It> struct iterator_traits {
+  using iterator_category = typename It::iterator_category;
+};
 template <typename T> struct iterator_traits<T *> {
   using reference = T &;
+  using iterator_category = random_access_iterator_tag;
   using value_type = T;
 };
 
+template <typename T> struct iterator_traits<const T *> {
+  using iterator_category = random_access_iterator_tag;
+};
+
 template <typename Iter> class reverse_iterator {
   Iter current;
 
@@ -93,6 +104,30 @@ template <typename Iter> class reverse_iterator {
   }
 };
 
+namespace cpp_internal {
+
+template <typename It>
+LIBC_INLINE constexpr size_t distance(It first, It last,
+                                      random_access_iterator_tag) {
+  return last - first;
+}
+
+template <typename It>
+LIBC_INLINE constexpr auto distance(It first, It last, input_iterator_tag) {
+  size_t n = 0;
+  for (; first != last; ++first) {
+    ++n;
+  }
+  return n;
+}
+
+} // namespace cpp_internal
+
+template <typename It> auto distance(It first, It last) {
+  return cpp_internal::distance(
+      first, last, typename iterator_traits<It>::iterator_category{});
+}
+
 } // namespace cpp
 } // namespace LIBC_NAMESPACE_DECL
 
diff --git a/libc/src/__support/CPP/monostate.h b/libc/src/__support/CPP/monostate.h
new file mode 100644
index 0000000000000..231550cd4cc69
--- /dev/null
+++ b/libc/src/__support/CPP/monostate.h
@@ -0,0 +1,31 @@
+//===-- Definition of cpp::monostate ----------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC___SUPPORT_CPP_MONOSTATE_H
+#define LLVM_LIBC_SRC___SUPPORT_CPP_MONOSTATE_H
+
+#include "src/__support/common.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+namespace cpp {
+
+struct monostate {};
+
+LIBC_INLINE constexpr bool operator==(monostate, monostate) { return true; }
+LIBC_INLINE constexpr bool operator!=(monostate, monostate) { return false; }
+LIBC_INLINE constexpr bool operator<(monostate, monostate) { return false; }
+LIBC_INLINE constexpr bool operator>(monostate, monostate) { return false; }
+LIBC_INLINE constexpr bool operator<=(monostate, monostate) { return true; }
+LIBC_INLINE constexpr bool operator>=(monostate, monostate) { return true; }
+
+} // namespace cpp
+
+} // namespace LIBC_NAMESPACE_DECL
+
+#endif // LIBC_SRC___SUPPORT_CPP_MONOSTATE_H
diff --git a/libc/src/__support/wctype/CMakeLists.txt b/libc/src/__support/wctype/CMakeLists.txt
index fcd4b777b2203..43c45d04ec2b7 100644
--- a/libc/src/__support/wctype/CMakeLists.txt
+++ b/libc/src/__support/wctype/CMakeLists.txt
@@ -1,3 +1,39 @@
+add_header_library(
+  perfect_hash_map
+  HDRS
+    perfect_hash_map.h
+  DEPENDS
+    libc.hdr.types.size_t
+    libc.hdr.types.wint_t
+    libc.src.__support.CPP.array
+    libc.src.__support.CPP.expected
+    libc.src.__support.CPP.monostate
+    libc.src.__support.CPP.optional
+    libc.src.__support.CPP.span
+    libc.src.__support.CPP.string
+    libc.src.__support.CPP.tuple
+    libc.src.__support.CPP.type_traits
+    libc.src.__support.OSUtil.osutil
+    libc.src.__support.math.ceil
+    libc.src.__support.math.log
+)
+
+add_header_library(
+  lower_to_upper
+  HDRS
+    lower_to_upper.h
+  DEPENDS
+    .perfect_hash_map
+)
+
+add_header_library(
+  upper_to_lower
+  HDRS
+    upper_to_lower.h
+  DEPENDS
+    .perfect_hash_map
+)
+
 add_object_library(
   wctype_classification_utils
   HDRS
diff --git a/libc/src/__support/wctype/lower_to_upper.h b/libc/src/__support/wctype/lower_to_upper.h
new file mode 100644
index 0000000000000..489089c6ea628
--- /dev/null
+++ b/libc/src/__support/wctype/lower_to_upper.h
@@ -0,0 +1,568 @@
+//===-- Auto-generated lower to upper case mappings table -------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+// DO NOT EDIT MANUALLY.
+// This file is generated by libc/utils/wctype_utils scripts.
+// This file is meant to be included directly into LLVM libc code
+// Format: {from_codepoint, to_codepoint}
+// Info: 1458 entries
+
+#ifndef LLVM_LIBC_SRC___SUPPORT_WCTYPE_LOWER_TO_UPPER_H
+#define LLVM_LIBC_SRC___SUPPORT_WCTYPE_LOWER_TO_UPPER_H
+
+#include "perfect_hash_map.h"
+
+namespace LIBC_NAMESPACE_DECL {
+
+LIBC_INLINE_VAR constexpr cpp::array<cpp::array<wint_t, 2>, 1458>
+    LOWER_TO_UPPER_DATA = {
+        {{0x61, 0x41},       {0x62, 0x42},       {0x63, 0x43},
+         {0x64, 0x44},       {0x65, 0x45},       {0x66, 0x46},
+         {0x67, 0x47},       {0x68, 0x48},       {0x69, 0x49},
+         {0x6A, 0x4A},       {0x6B, 0x4B},       {0x6C, 0x4C},
+         {0x6D, 0x4D},       {0x6E, 0x4E},       {0x6F, 0x4F},
+         {0x70, 0x50},       {0x71, 0x51},       {0x72, 0x52},
+         {0x73, 0x53},       {0x74, 0x54},       {0x75, 0x55},
+         {0x76, 0x56},       {0x77, 0x57},       {0x78, 0x58},
+         {0x79, 0x59},       {0x7A, 0x5A},       {0xB5, 0x39C},
+         {0xE0, 0xC0},       {0xE1, 0xC1},       {0xE2, 0xC2},
+         {0xE3, 0xC3},       {0xE4, 0xC4},       {0xE5, 0xC5},
+         {0xE6, 0xC6},       {0xE7, 0xC7},       {0xE8, 0xC8},
+         {0xE9, 0xC9},       {0xEA, 0xCA},       {0xEB, 0xCB},
+         {0xEC, 0xCC},       {0xED, 0xCD},       {0xEE, 0xCE},
+         {0xEF, 0xCF},       {0xF0, 0xD0},       {0xF1, 0xD1},
+         {0xF2, 0xD2},       {0xF3, 0xD3},       {0xF4, 0xD4},
+         {0xF5, 0xD5},       {0xF6, 0xD6},       {0xF8, 0xD8},
+         {0xF9, 0xD9},       {0xFA, 0xDA},       {0xFB, 0xDB},
+         {0xFC, 0xDC},       {0xFD, 0xDD},       {0xFE, 0xDE},
+         {0xFF, 0x178},      {0x101, 0x100},     {0x103, 0x102},
+         {0x105, 0x104},     {0x107, 0x106},     {0x109, 0x108},
+         {0x10B, 0x10A},     {0x10D, 0x10C},     {0x10F, 0x10E},
+         {0x111, 0x110},     {0x113, 0x112},     {0x115, 0x114},
+         {0x117, 0x116},     {0x119, 0x118},     {0x11B, 0x11A},
+         {0x11D, 0x11C},     {0x11F, 0x11E},     {0x121, 0x120},
+         {0x123, 0x122},     {0x125, 0x124},     {0x127, 0x126},
+         {0x129, 0x128},     {0x12B, 0x12A},     {0x12D, 0x12C},
+         {0x12F, 0x12E},     {0x131, 0x49},      {0x133, 0x132},
+         {0x135, 0x134},     {0x137, 0x136},     {0x13A, 0x139},
+         {0x13C, 0x13B},     {0x13E, 0x13D},     {0x140, 0x13F},
+         {0x142, 0x141},     {0x144, 0x143},     {0x146, 0x145},
+         {0x148, 0x147},     {0x14B, 0x14A},     {0x14D, 0x14C},
+         {0x14F, 0x14E},     {0x151, 0x150},     {0x153, 0x152},
+         {0x155, 0x154},     {0x157, 0x156},     {0x159, 0x158},
+         {0x15B, 0x15A},     {0x15D, 0x15C},     {0x15F, 0x15E},
+         {0x161, 0x160},     {0x163, 0x162},     {0x165, 0x164},
+         {0x167, 0x166},     {0x169, 0x168},     {0x16B, 0x16A},
+         {0x16D, 0x16C},     {0x16F, 0x16E},     {0x171, 0x170},
+         {0x173, 0x172},     {0x175, 0x174},     {0x177, 0x176},
+         {0x17A, 0x179},     {0x17C, 0x17B},     {0x17E, 0x17D},
+         {0x17F, 0x53},      {0x180, 0x243},     {0x183, 0x182},
+         {0x185, 0x184},     {0x188, 0x187},     {0x18C, 0x18B},
+         {0x192, 0x191},     {0x195, 0x1F6},     {0x199, 0x198},
+         {0x19A, 0x23D},     {0x19B, 0xA7DC},    {0x19E, 0x220},
+         {0x1A1, 0x1A0},     {0x1A3, 0x1A2},     {0x1A5, 0x1A4},
+         {0x1A8, 0x1A7},     {0x1AD, 0x1AC},     {0x1B0, 0x1AF},
+         {0x1B4, 0x1B3},     {0x1B6, 0x1B5},     {0x1B9, 0x1B8},
+         {0x1BD, 0x1BC},     {0x1BF, 0x1F7},     {0x1C6, 0x1C4},
+         {0x1C9, 0x1C7},     {0x1CC, 0x1CA},     {0x1CE, 0x1CD},
+         {0x1D0, 0x1CF},     {0x1D2, 0x1D1},     {0x1D4, 0x1D3},
+         {0x1D6, 0x1D5},     {0x1D8, 0x1D7},     {0x1DA, 0x1D9},
+         {0x1DC, 0x1DB},     {0x1DD, 0x18E},     {0x1DF, 0x1DE},
+         {0x1E1, 0x1E0},     {0x1E3, 0x1E2},     {0x1E5, 0x1E4},
+         {0x1E7, 0x1E6},     {0x1E9, 0x1E8},     {0x1EB, 0x1EA},
+         {0x1ED, 0x1EC},     {0x1EF, 0x1EE},     {0x1F3, 0x1F1},
+         {0x1F5, 0x1F4},     {0x1F9, 0x1F8},     {0x1FB, 0x1FA},
+         {0x1FD, 0x1FC},     {0x1FF, 0x1FE},     {0x201, 0x200},
+         {0x203, 0x202},     {0x205, 0x204},     {0x207, 0x206},
+         {0x209, 0x208},     {0x20B, 0x20A},     {0x20D, 0x20C},
+         {0x20F, 0x20E},     {0x211, 0x210},     {0x213, 0x212},
+         {0x215, 0x214},     {0x217, 0x216},     {0x219, 0x218},
+         {0x21B, 0x21A},     {0x21D, 0x21C},     {0x21F, 0x21E},
+         {0x223, 0x222},     {0x225, 0x224},     {0x227, 0x226},
+         {0x229, 0x228},     {0x22B, 0x22A},     {0x22D, 0x22C},
+         {0x22F, 0x22E},     {0x231, 0x230},     {0x233, 0x232},
+         {0x23C, 0x23B},     {0x23F, 0x2C7E},    {0x240, 0x2C7F},
+         {0x242, 0x241},     {0x247, 0x246},     {0x249, 0x248},
+         {0x24B, 0x24A},     {0x24D, 0x24C},     {0x24F, 0x24E},
+         {0x250, 0x2C6F},    {0x251, 0x2C6D},    {0x252, 0x2C70},
+         {0x253, 0x181},     {0x254, 0x186},     {0x256, 0x189},
+         {0x257, 0x18A},     {0x259, 0x18F},     {0x25B, 0x190},
+         {0x25C, 0xA7AB},    {0x260, 0x193},     {0x261, 0xA7AC},
+         {0x263, 0x194},     {0x264, 0xA7CB},    {0x265, 0xA78D},
+         {0x266, 0xA7AA},    {0x268, 0x197},     {0x269, 0x196},
+         {0x26A, 0xA7AE},    {0x26B, 0x2C62},    {0x26C, 0xA7AD},
+         {0x26F, 0x19C},     {0x271, 0x2C6E},    {0x272, 0x19D},
+         {0x275, 0x19F},     {0x27D, 0x2C64},    {0x280, 0x1A6},
+         {0x282, 0xA7C5},    {0x283, 0x1A9},     {0x287, 0xA7B1},
+         {0x288, 0x1AE},     {0x289, 0x244},     {0x28A, 0x1B1},
+         {0x28B, 0x1B2},     {0x28C, 0x245},     {0x292, 0x1B7},
+         {0x29D, 0xA7B2},    {0x29E, 0xA7B0},    {0x371, 0x370},
+         {0x373, 0x372},     {0x377, 0x376},     {0x37B, 0x3FD},
+         {0x37C, 0x3FE},     {0x37D, 0x3FF},     {0x3AC, 0x386},
+         {0x3AD, 0x388},     {0x3AE, 0x389},     {0x3AF, 0x38A},
+         {0x3B1, 0x391},     {0x3B2, 0x392},     {0x3B3, 0x393},
+         {0x3B4, 0x394},     {0x3B5, 0x395},     {0x3B6, 0x396},
+         {0x3B7, 0x397},     {0x3B8, 0x398},     {0x3B9, 0x399},
+         {0x3BA, 0x39A},     {0x3BB, 0x39B},     {0x3BC, 0x39C},
+         {0x3BD, 0x39D},     {0x3BE, 0x39E},     {0x3BF, 0x39F},
+         {0x3C0, 0x3A0},     {0x3C1, 0x3A1},     {0x3C2, 0x3A3},
+         {0x3C3, 0x3A3},     {0x3C4, 0x3A4},     {0x3C5, 0x3A5},
+         {0x3C6, 0x3A6},     {0x3C7, 0x3A7},     {0x3C8, 0x3A8},
+         {0x3C9, 0x3A9},     {0x3CA, 0x3AA},     {0x3CB, 0x3AB},
+         {0x3CC, 0x38C},     {0x3CD, 0x38E},     {0x3CE, 0x38F},
+         {0x3D0, 0x392},     {0x3D1, 0x398},     {0x3D5, 0x3A6},
+         {0x3D6, 0x3A0},     {0x3D7, 0x3CF},     {0x3D9, 0x3D8},
+         {0x3DB, 0x3DA},     {0x3DD, 0x3DC},     {0x3DF, 0x3DE},
+         {0x3E1, 0x3E0},     {0x3E3, 0x3E2},     {0x3E5, 0x3E4},
+         {0x3E7, 0x3E6},     {0x3E9, 0x3E8},     {0x3EB, 0x3EA},
+         {0x3ED, 0x3EC},     {0x3EF, 0x3EE},     {0x3F0, 0x39A},
+         {0x3F1, 0x3A1},     {0x3F2, 0x3F9},     {0x3F3, 0x37F},
+         {0x3F5, 0x395},     {0x3F8, 0x3F7},     {0x3FB, 0x3FA},
+         {0x430, 0x410},     {0x431, 0x411},     {0x432, 0x412},
+         {0x433, 0x413},     {0x434, 0x414},     {0x435, 0x415},
+         {0x436, 0x416},     {0x437, 0x417},     {0x438, 0x418},
+         {0x439, 0x419},     {0x43A, 0x41A},     {0x43B, 0x41B},
+         {0x43C, 0x41C},     {0x43D, 0x41D},     {0x43E, 0x41E},
+         {0x43F, 0x41F},     {0x440, 0x420},     {0x441, 0x421},
+         {0x442, 0x422},     {0x443, 0x423},     {0x444, 0x424},
+         {0x445, 0x425},     {0x446, 0x426},     {0x447, 0x427},
+         {0x448, 0x428},     {0x449, 0x429},     {0x44A, 0x42A},
+         {0x44B, 0x42B},     {0x44C, 0x42C},     {0x44D, 0x42D},
+         {0x44E, 0x42E},     {0x44F, 0x42F},     {0x450, 0x400},
+         {0x451, 0x401},     {0x452, 0x402},     {0x453, 0x403},
+         {0x454, 0x404},     {0x455, 0x405},     {0x456, 0x406},
+         {0x457, 0x407},     {0x458, 0x408},     {0x459, 0x409},
+         {0x45A, 0x40A},     {0x45B, 0x40B},     {0x45C, 0x40C},
+         {0x45D, 0x40D},     {0x45E, 0x40E},     {0x45F, 0x40F},
+         {0x461, 0x460},     {0x463, 0x462},     {0x465, 0x464},
+         {0x467, 0x466},     {0x469, 0x468},     {0x46B, 0x46A},
+         {0x46D, 0x46C},     {0x46F, 0x46E},     {0x471, 0x470},
+         {0x473, 0x472},     {0x475, 0x474},     {0x477, 0x476},
+         {0x479, 0x478},     {0x47B, 0x47A},     {0x47D, 0x47C},
+         {0x47F, 0x47E},     {0x481, 0x480},     {0x48B, 0x48A},
+         {0x48D, 0x48C},     {0x48F, 0x48E},     {0x491, 0x490},
+         {0x493, 0x492},     {0x495, 0x494},     {0x497, 0x496},
+         {0x499, 0x498},     {0x49B, 0x49A},     {0x49D, 0x49C},
+         {0x49F, 0x49E},     {0x4A1, 0x4A0},     {0x4A3, 0x4A2},
+         {0x4A5, 0x4A4},     {0x4A7, 0x4A6},     {0x4A9, 0x4A8},
+         {0x4AB, 0x4AA},     {0x4AD, 0x4AC},     {0x4AF, 0x4AE},
+         {0x4B1, 0x4B0},     {0x4B3, 0x4B2},     {0x4B5, 0x4B4},
+         {0x4B7, 0x4B6},     {0x4B9, 0x4B8},     {0x4BB, 0x4BA},
+         {0x4BD, 0x4BC},     {0x4BF, 0x4BE},     {0x4C2, 0x4C1},
+         {0x4C4, 0x4C3},     {0x4C6, 0x4C5},     {0x4C8, 0x4C7},
+         {0x4CA, 0x4C9},     {0x4CC, 0x4CB},     {0x4CE, 0x4CD},
+         {0x4CF, 0x4C0},     {0x4D1, 0x4D0},     {0x4D3, 0x4D2},
+         {0x4D5, 0x4D4},     {0x4D7, 0x4D6},     {0x4D9, 0x4D8},
+         {0x4DB, 0x4DA},     {0x4DD, 0x4DC},     {0x4DF, 0x4DE},
+         {0x4E1, 0x4E0},     {0x4E3, 0x4E2},     {0x4E5, 0x4E4},
+         {0x4E7, 0x4E6},     {0x4E9, 0x4E8},     {0x4EB, 0x4EA},
+         {0x4ED, 0x4EC},     {0x4EF, 0x4EE},     {0x4F1, 0x4F0},
+         {0x4F3, 0x4F2},     {0x4F5, 0x4F4},     {0x4F7, 0x4F6},
+         {0x4F9, 0x4F8},     {0x4FB, 0x4FA},     {0x4FD, 0x4FC},
+         {0x4FF, 0x4FE},     {0x501, 0x500},     {0x503, 0x502},
+         {0x505, 0x504},     {0x507, 0x506},     {0x509, 0x508},
+         {0x50B, 0x50A},     {0x50D, 0x50C},     {0x50F, 0x50E},
+         {0x511, 0x510},     {0x513, 0x512},     {0x515, 0x514},
+         {0x517, 0x516},     {0x519, 0x518},     {0x51B, 0x51A},
+         {0x51D, 0x51C},     {0x51F, 0x51E},     {0x521, 0x520},
+         {0x523, 0x522},     {0x525, 0x524},     {0x527, 0x526},
+         {0x529, 0x528},     {0x52B, 0x52A},     {0x52D, 0x52C},
+         {0x52F, 0x52E},     {0x561, 0x531},     {0x562, 0x532},
+         {0x563, 0x533},     {0x564, 0x534},     {0x565, 0x535},
+         {0x566, 0x536},     {0x567, 0x537},     {0x568, 0x538},
+         {0x569, 0x539},     {0x56A, 0x53A},     {0x56B, 0x53B},
+         {0x56C, 0x53C},     {0x56D, 0x53D},     {0x56E, 0x53E},
+         {0x56F, 0x53F},     {0x570, 0x540},     {0x571, 0x541},
+         {0x572, 0x542},     {0x573, 0x543},     {0x574, 0x544},
+         {0x575, 0x545},     {0x576, 0x546},     {0x577, 0x547},
+         {0x578, 0x548},     {0x579, 0x549},     {0x57A, 0x54A},
+         {0x57B, 0x54B},     {0x57C, 0x54C},     {0x57D, 0x54D},
+         {0x57E, 0x54E},     {0x57F, 0x54F},     {0x580, 0x550},
+         {0x581, 0x551},     {0x582, 0x552},     {0x583, 0x553},
+         {0x584, 0x554},     {0x585, 0x555},     {0x586, 0x556},
+         {0x10D0, 0x1C90},   {0x10D1, 0x1C91},   {0x10D2, 0x1C92},
+         {0x10D3, 0x1C93},   {0x10D4, 0x1C94},   {0x10D5, 0x1C95},
+         {0x10D6, 0x1C96},   {0x10D7, 0x1C97},   {0x10D8, 0x1C98},
+         {0x10D9, 0x1C99},   {0x10DA, 0x1C9A},   {0x10DB, 0x1C9B},
+         {0x10DC, 0x1C9C},   {0x10DD, 0x1C9D},   {0x10DE, 0x1C9E},
+         {0x10DF, 0x1C9F},   {0x10E0, 0x1CA0},   {0x10E1, 0x1CA1},
+         {0x10E2, 0x1CA2},   {0x10E3, 0x1CA3},   {0x10E4, 0x1CA4},
+         {0x10E5, 0x1CA5},   {0x10E6, 0x1CA6},   {0x10E7, 0x1CA7},
+         {0x10E8, 0x1CA8},   {0x10E9, 0x1CA9},   {0x10EA, 0x1CAA},
+         {0x10EB, 0x1CAB},   {0x10EC, 0x1CAC},   {0x10ED, 0x1CAD},
+         {0x10EE, 0x1CAE},   {0x10EF, 0x1CAF},   {0x10F0, 0x1CB0},
+         {0x10F1, 0x1CB1},   {0x10F2, 0x1CB2},   {0x10F3, 0x1CB3},
+         {0x10F4, 0x1CB4},   {0x10F5, 0x1CB5},   {0x10F6, 0x1CB6},
+         {0x10F7, 0x1CB7},   {0x10F8, 0x1CB8},   {0x10F9, 0x1CB9},
+         {0x10FA, 0x1CBA},   {0x10FD, 0x1CBD},   {0x10FE, 0x1CBE},
+         {0x10FF, 0x1CBF},   {0x13F8, 0x13F0},   {0x13F9, 0x13F1},
+         {0x13FA, 0x13F2},   {0x13FB, 0x13F3},   {0x13FC, 0x13F4},
+         {0x13FD, 0x13F5},   {0x1C80, 0x412},    {0x1C81, 0x414},
+         {0x1C82, 0x41E},    {0x1C83, 0x421},    {0x1C84, 0x422},
+         {0x1C85, 0x422},    {0x1C86, 0x42A},    {0x1C87, 0x462},
+         {0x1C88, 0xA64A},   {0x1C8A, 0x1C89},   {0x1D79, 0xA77D},
+         {0x1D7D, 0x2C63},   {0x1D8E, 0xA7C6},   {0x1E01, 0x1E00},
+         {0x1E03, 0x1E02},   {0x1E05, 0x1E04},   {0x1E07, 0x1E06},
+         {0x1E09, 0x1E08},   {0x1E0B, 0x1E0A},   {0x1E0D, 0x1E0C},
+         {0x1E0F, 0x1E0E},   {0x1E11, 0x1E10},   {0x1E13, 0x1E12},
+         {0x1E15, 0x1E14},   {0x1E17, 0x1E16},   {0x1E19, 0x1E18},
+         {0x1E1B, 0x1E1A},   {0x1E1D, 0x1E1C},   {0x1E1F, 0x1E1E},
+         {0x1E21, 0x1E20},   {0x1E23, 0x1E22},   {0x1E25, 0x1E24},
+         {0x1E27, 0x1E26},   {0x1E29, 0x1E28},   {0x1E2B, 0x1E2A},
+         {0x1E2D, 0x1E2C},   {0x1E2F, 0x1E2E},   {0x1E31, 0x1E30},
+         {0x1E33, 0x1E32},   {0x1E35, 0x1E34},   {0x1E37, 0x1E36},
+         {0x1E39, 0x1E38},   {0x1E3B, 0x1E3A},   {0x1E3D, 0x1E3C},
+         {0x1E3F, 0x1E3E},   {0x1E41, 0x1E40},   {0x1E43, 0x1E42},
+         {0x1E45, 0x1E44},   {0x1E47, 0x1E46},   {0x1E49, 0x1E48},
+         {0x1E4B, 0x1E4A},   {0x1E4D, 0x1E4C},   {0x1E4F, 0x1E4E},
+         {0x1E51, 0x1E50},   {0x1E53, 0x1E52},   {0x1E55, 0x1E54},
+         {0x1E57, 0x1E56},   {0x1E59, 0x1E58},   {0x1E5B, 0x1E5A},
+         {0x1E5D, 0x1E5C},   {0x1E5F, 0x1E5E},   {0x1E61, 0x1E60},
+         {0x1E63, 0x1E62},   {0x1E65, 0x1E64},   {0x1E67, 0x1E66},
+         {0x1E69, 0x1E68},   {0x1E6B, 0x1E6A},   {0x1E6D, 0x1E6C},
+         {0x1E6F, 0x1E6E},   {0x1E71, 0x1E70},   {0x1E73, 0x1E72},
+         {0x1E75, 0x1E74},   {0x1E77, 0x1E76},   {0x1E79, 0x1E78},
+         {0x1E7B, 0...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/187670


More information about the llvm-branch-commits mailing list